ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

纯数字电路超声波测距设计:NE555与CD4026的无单片机实现

2026/9/20 6:51:55 拓冰建站 浏览量
纯数字电路超声波测距设计:NE555与CD4026的无单片机实现 简介面向电子综合设计与超声波测距实验的一份技术报告旨在展示不使用单片机、仅靠纯数字电路实现超声波测距雷达的完整方案。报告以两级NE555振荡器产生驱动脉冲经发射探头发出超声波回波信号再经两级放大、检波后根据发射与接收的时间差和空气中声速换算距离最终由计数、锁存及译码电路在数码管上直接显示。内容覆盖项目计划、系统框图、单元模块设计原理与调试说明包括超声波产生、载波发生器、发射驱动、接收电路、时间测量、计数脉冲、锁存显示和电源等章节可帮助读者理解纯硬件测距链路。资源包共1个PDF文件大小974KB结构紧凑适合数字电路课程设计、电子竞赛备赛或想摆脱单片机限制、深入理解底层测距原理的学习者。该资源已有160人学习下载借助报告中的原理分析和模块拆解可掌握NE555振荡参数配置、微弱回波放大与检波处理以及计数器、锁存器和数码管协同工作的设计方法。1. 用纯数字电路做超声波测距比单片机方案更接近物理层超声波测距这件事很多开发者在车库倒车雷达、机器人避障、液位监测里都做过。常见做法是拿一块 51 或 STM32 单片机定时器产生 40kHz 脉冲串外部中断捕获回波再用软件把时间差换算成距离。这方案没有错但它把超声波测距最核心的东西——信号链、时序、盲区——全藏进了寄存器里。而标题里这个“不使用单片机的超声波测距”用 NE555、CD4017、LM393、CD4026 一类纯数字电路搭出完整测距链路上电即出数不烧一行代码。它解决的不只是“能不能测距”而是让你把发射、接收、计时、显示每一级都用示波器看明白。适合电子类学生做课程设计也适合搞硬件但没仔细抠过时序的工程师回头补课。单片机方案里那些定时器中断的底层逻辑其实就是这套数字电路的原型。2. 超声波测距的纯数字架构与量程预算2.1 测的是回波时间不是距离本身超声波测距的物理基础很直接发射 40kHz 的超声脉冲碰到障碍物反射回来接收头捕捉到回波记录从发射到接收的时间差 t。声波在空气中的传播速度 v 已知距离就是时间差的一半d v × t / 2注意是“一半”因为 t 是来回双程时间。比如 20℃ 干燥空气里 v ≈ 343m/s如果测到回波时间 2.9ms那么距离 d 343 × 0.0029 / 2 ≈ 0.5m。与单片机方案不同纯数字电路里这个“记录时间差”的动作不是靠定时器中断完成的而是靠计数器从发射时刻开始数时钟脉冲回波一到就停止计数。计数值 N 乘以时钟周期就是回波时间。声速不是常数温度每升高 1℃声速大约增加 0.6m/s。工程上常用经验公式v 331.4 0.6 × T其中 T 是摄氏温度。这个修正在后面标定的时候会用到。湿度、气压对声速的影响在通常室内环境下小于 1%做超声波测距课程设计时基本可以忽略但室外大风环境要考虑不过那是后话。2.2 四段信号链与器件划分不是所有模拟电路都要数字化纯数字电路做测距不等于电路里不能有模拟器件。超声波接收头输出的是几十毫伏级的高频信号必须经过放大和比较才能变成数字电平。这里“纯数字”指的是从时间测量到结果显示的整条主链路完全由逻辑门、计数器、译码器完成不包含微处理器没有软件参与。一段完整的超声波测距信号链可以切成四块功能块推荐器件作用发射振荡NE555产生 40kHz 方波驱动超声波发射头脉冲串门控CD4017每轮只放行几个脉冲控制盲区和功耗接收调理运放 LM393 / CX20106A把回波放大、检波、整形为数字电平计时与显示CD4026 × 4 或 CD4020 EPROM计数回波时间锁存并驱动数码管有人会质疑CX20106A 内部是模拟电路这算纯数字吗严格来说接收前端的模拟放大无法避免因为声波本身就是模拟量。纯数字电路的意义在于时间基准、计数、锁存、译码这些测距核心动作完全由数字时序控制。只要不出现 CPU、不写代码这个标题的定位就成立。实际制作时CD4026 的方案最省事它内部集成了十进制计数、锁存、七段译码和进位输出四片级联就能做出四位数的计时显示器省掉一大堆 74 系列芯片。2.3 时钟频率与量程预算先算好再焊板纯数字电路没法像单片机那样随便改定时器预分频值时钟频率在选器件的时候就决定了量程和分辨率。以四片 CD4026 构成的四位十进制计数器为例最大计数值 9999。若计时时钟为 f_clk那么最大可测回波时间t_max 9999 / f_clk对应最大单程距离d_max v × t_max / 2不同时钟频率下的参数对比如下声速按 343m/s 估算计时时钟最大计数值最大回波时间最大距离每个计数对应距离1MHz99999.999ms约 1.71m0.17mm500kHz999919.998ms约 3.43m0.34mm170kHz999958.8ms约 10.1m1mm100kHz999999.99ms约 17.1m1.7mm从表里能看出两个结论。第一单片机能轻松做到几十厘米量程内的毫米级精度纯数字电路只要把时钟频率选得合适也能做到但想同时兼顾大量程和高分辨率就得增加计数器位数。第二160kHz 左右的计时时钟可以直接让“每个计数等于 1mm”这样数码管显示值直接就是毫米数省去换算逻辑。这是后面第 4 章要展开的选频设计。实际选时钟时我一般先定量程再反推频率而不是先定频率再看能测多远。3. 40kHz 发射链路与回波接收NE555、放大和比较器的参数计算3.1 NE555 做 40kHz 振荡器RC 参数与微调方法NE555 接成无稳态多谐振荡器输出方波驱动超声波发射头。振荡频率由 R1、R2 和 C 决定f 1.44 / ((R1 2 × R2) × C)R1 是从放电端到电源的电阻R2 是从放电端到触发/阈值端的电阻C 是定时电容。占空比大约为 (R1 R2) / (R1 2 × R2)略高于 50%对驱动压电陶瓷片没有影响。超声波测距对频率精度要求不高40kHz ± 1kHz 都能正常工作但最好用示波器实测调整因为 NE555 内部比较器的阈值离散性会导致理论值和实测值有百分之几的偏差。下面这段 Python 脚本可以在选电阻电容前快速估算频率# ne555_freq.py - 计算NE555无稳态振荡频率 def ne555_freq(r1_ohm, r2_ohm, c_farad): # 公式来源NE555数据手册中的无稳态工作频率 return 1.44 / ((r1_ohm 2 * r2_ohm) * c_farad) # 一组常见参数R11k, R24.7k, C3.3nF f ne555_freq(1000, 4700, 3.3e-9) print(ff {f/1000:.1f} kHz) # 如果希望微调可以给R2串联一个2k电位器 f_low ne555_freq(1000, 3700, 3.3e-9) f_high ne555_freq(1000, 5700, 3.3e-9) print(f微调范围: {f_low/1000:.1f} ~ {f_high/1000:.1f} kHz)运行结果会显示R11kΩ、R24.7kΩ、C3.3nF 时频率约为 42.0kHz比目标 40kHz 稍高一点。给 R2 串联一个 2kΩ 电位器微调范围大概在 38.6kHz ~ 45.5kHz 之间足够覆盖 40kHz 点。实际焊接时R2 可以先用 3.9kΩ 固定电阻串 2kΩ 电位器上电后一边看示波器频率一边拧电位器这是最稳妥的做法。注意 NE555 的供电要加 0.1μF 去耦电容放在 VCC 与 GND 之间否则 40kHz 的高频分量会通过电源线干扰接收链路。3.2 用 CD4017 只发 8 个脉冲盲区与功耗的折中超声波发射头如果连续被驱动回波会被发射信号淹没。常见做法是让 NE555 振荡器只在短时间内工作输出一串固定数量的脉冲后停振等到回波接收完毕再重新触发。CD4017 是一个十进制计数器/分配器利用它的进位输出可以方便地实现脉冲串门控。让 CD4017 的 Q0 到 Q7 依次输出高电平当 Q8 变高时用它去关断 NE555 的复位端振荡器停止。这样每个测距周期只发射 8 个 40kHz 脉冲。为什么是 8 个而不是 40 个因为每个脉冲周期是 25μs8 个脉冲持续 200μs声音在这段时间里传播约 68mm即最近可测距离约 34mm。脉冲再多盲区会线性增大脉冲太少回波能量不足接收端难以检测。实际电路里压电陶瓷片在激励停止后还有余振通常持续约 0.5ms ~ 1ms对应单程距离 17cm ~ 34cm。所以即便用 8 个脉冲整机盲区也在 20cm 上下这是超声波测距的物理限制不是电路设计缺陷。用收发分离探头可以稍微压低盲区但直达波串扰仍然存在。做倒车雷达时一般要求最近可测 30cm 左右这个指标刚好卡在余振边界上因此接收电路必须能在余振衰减后尽快响应这就引出下一节的内容。3.3 回波调理从微伏级正弦波到数字脉冲接收头输出的回波信号幅度很小。1 米外的平面障碍物反射回波经接收头转换后大约只有几毫伏到几十毫伏需要先放大再整形。两级带通放大是常见做法中心频率选 40kHz每级增益 30dB 左右两级加起来 60dB足够把 10mV 信号放大到 10V 量程边缘。运放可以选 NE5532带宽远高于 40kHz噪声也低。每级用 RC 带通反馈网络品质因数 Q 控制在 2 ~ 5Q 太高会导致频率漂移时增益骤降Q 太低则选择性差环境噪声容易混进来。放大之后不要直接把 40kHz 正弦波送给计数器因为数字芯片会把每个过零沿都当成有效沿。正确做法是先做包络检波再用比较器整形。包络检波用一支 1N4148 二极管加 RC 并联电路R 取 10kΩC 取 10nF时间常数 100μs差不多是 4 个 40kHz 周期能把正弦包络平滑成一条缓慢下降的直流曲线。比较器用 LM393同相端接包络信号反相端接电位器分压得到的阈值电压。阈值调在几十毫伏太高会漏掉远距离弱回波太低会被噪声误触发。LM393 是开集电极输出必须接上拉电阻到 VCC再接一个 74HC14 施密特触发器整形把边沿变陡。到这里回波链路输出的就是一个干净的数字电平下降沿可以交给计数器环节了。调试时如果发现收不到回波先用示波器看运放输出端有没有 40kHz 正弦包络再看比较器输出有没有脉冲一级一级排查问题基本都出在放大级和阈值设置上。4. 用 CD4026 与选频把时间变成厘米计数器、锁存与查表显示4.1 CD4026 四位十进制计数器清零、计数、锁存一体的最小计时器CD4026 是一块很特别的芯片内部集成了十进制计数器、七段锁存/译码器和进位输出可以直接驱动共阴数码管。这意味着不需要额外的 74HC573 锁存器和 CD4511 译码器一片芯片完成计数到显示的全部工作。四片 CD4026 级联就能做成四位数码管的微秒计时器。电路接法如下第一片 CD4026 的 CLK 端接计时时钟比如 1MHz它的进位输出 CO 接第二片的 CLK第二片接第三片以此类推。所有片的 MR复位连在一起测距周期开始时给一个高电平脉冲清零。所有片的 LE锁存连在一起回波到来时拉高显示值立刻被锁存不再跟随时钟变化。工作时序用一条线串起来就是发射信号上升沿触发单稳电路产生 1μs 的复位脉冲清空四片 CD4026然后释放 LE1MHz 时钟开始计数。回波整形后的下降沿送到触发器把 LE 拉高计数停止。此时数码管上显示的数字 N就是回波时间对应的微秒数。CD4026 的计数频率上限约 2MHzVDD5V 时1MHz 有充足裕量但超过 2MHz 会导致漏计数这一点在选择计时时钟时要留意。4.2 锁存时机与显示稳定性回波一到就锁不能反复锁为什么必须锁存如果 LE 一直为低计数器会一直随着 1MHz 时钟跑数码管闪烁人眼根本读不出数。回波到来时锁存一次显示保持到下一次测距周期开始这样人眼看到的是稳定读数。关键在“锁存一次”。超声波回波往往不是只有一个脉冲障碍物表面可能产生多次反射比较器也可能因为噪声抖动输出几个沿。如果每个下降沿都去触发 LE显示值会被后到的回波覆盖测到的可能就是二次反射的距离。解决办法是用一片 D 触发器或 RS 触发器做成“只锁第一次”的逻辑发射开始时把触发器置位使能锁存第一个回波沿通过触发器后把锁存信号拉高同时把触发器复位使其不再响应后续的沿。这个单脉冲逻辑是纯数字电路测距成败的细节之一比起反复判断“哪个回波是真实的”不如在硬件上只认第一个沿。4.3 数码管读出微秒数怎么换算成毫米CD4026 直接显示的是回波时间。20℃ 时声速 343m/s1μs 对应单程距离约 0.171mm即每 5.85μs 对应 1mm。手里如果拿着手机计算器把读数乘 0.171 就是毫米数但作为一台独立的测距仪这显然不够好。最简单的落地方法是选频法把计时时钟设计成 171.5kHz 左右让每个计数恰好等于 1mm。171.5kHz 不是标准晶体频率常见做法是用 1.029MHz 有源晶振经过 6 分频得到 171.5kHz或者用 NE555 调到一个接近值再在标定时微调。这样数码管读出的 N 直接就是毫米四位显示最大 9999mm完全覆盖超声波的有效量程。表 2 里的 170kHz 行就是为这个方案预留的。如果不想凑时钟频率也可以用查表法计时时钟保持 1MHz把 CD4026 输出的 BCD 码当作地址用一片 EPROM 存储“微秒到毫米”的映射表。EPROM 的输出就是毫米值再接 CD4511 译码显示。温度变化导致声速改变时重新烧录一版 EPROM 就行不用动硬件。下面是生成映射表的 Python 脚本# gen_lut.py - 生成 1MHz 计时时钟的微秒-毫米查表 def speed_of_sound(temp_c): # 干燥空气近似公式温度单位摄氏度 return 331.4 0.6 * temp_c v speed_of_sound(20) # 20℃声速 # 往返每毫米需要的时间单位 us/mm us_per_mm 1000.0 / v * 2 print(f20℃时 {us_per_mm:.2f} us 1mm) for us in range(0, 2000, 100): mm us / us_per_mm print(f{us:5d}us - {mm:6.1f}mm)脚本输出结果可以用来核对查表数据。例如 200μs 对应约 34mm583μs 对应约 100mm2915μs 对应约 500mm。实际做 EPROM 表时把全部 0 ~ 9999μs 按每 μs 一条算出毫米值烧进 2764 之类 8KB EPROM 的低 13 位地址即可。查表法比选频法多几片芯片但胜在改温度、改时钟频率都只是重新算表适合做完之后还想继续扩展的人。5. 不用单片机时的调试技巧波形判读、两点标定与误触发抑制5.1 用逻辑分析仪同时抓 TRIG、ECHO、LE 三条线纯数字电路调试最大的优势是每个信号都能直接看。把逻辑分析仪的三个通道分别接到发射门控信号 TRIG、回波整形输出 ECHO、锁存信号 LE采样率设到 10MHz 以上触发沿设为 TRIG 上升沿一次采 10ms。逻辑分析仪导出的 CSV 可以用下面脚本快速算出回波时间# parse_logic_analyzer_csv.py - 从逻辑分析仪CSV计算回波时间 import csv, sys t_trig None t_echo None with open(sys.argv[1]) as f: for row in csv.DictReader(f): if row[TRIG] 1 and t_trig is None: t_trig float(row[time]) if t_trig is not None and row[ECHO] 1 and t_echo is None: t_echo float(row[time]) break if t_trig and t_echo: dt_us (t_echo - t_trig) * 1e6 mm dt_us / 5.85 # 20℃声速下5.85us/mm print(f回波时间 {dt_us:.1f}us, 距离约 {mm:.0f}mm) else: print(未捕获到完整回波检查ECHO通道)值得说明的是脚本里的 5.85μs/mm 只在 20℃ 干燥空气中成立。如果环境温度偏离应先用公式 v 331.4 0.6×T 重算。波形判读时正常的 ECHO 应该在 TRIG 高电平结束后几百微秒到几毫秒内出现如果不能稳定出现优先怀疑发射频率偏差用示波器看 NE555 输出是否在 40kHz 附近。5.2 两点标定用平面钢板在 0.5m 和 1.0m 处校准任何测距系统出厂前都要标定。纯数字电路没有软件参数可改标定就是微调硬件。取一块平整钢板或硬纸板垂直正对探头先放 0.5m 处记录显示值再放 1.0m 处记录一次。20℃ 时理论回波时间分别为 2915μs 和 5831μs。如果两个点显示值都成比例偏差说明计时时钟频率不准调 NE555 的电位器或者在有源晶振方案里更换分频电阻。如果 0.5m 点准、1.0m 点不准说明声速公式里的温度设置不对按当前室温修正 EPROM 表或选频法里的速度常数。标定记录可以写成这样一张表实际距离理论回波时间实测显示偏差处理方式0.500m2915μs2890μs-25μs微调计时频率1.000m5831μs5810μs-21μs微调计时频率两次偏差接近说明系统误差主要是时钟偏快微调后两点都会收敛。5.3 抑制误触发最小屏蔽时间与单脉冲锁存误触发是纯数字电路超声波测距最常见的问题。发射探头和接收探头即使分开放置发射瞬间的串扰也会在接收端产生一个强信号可能让比较器误翻转。解决方法是给计时电路加一个最小屏蔽时间发射开始后的 400μs ~ 800μs 内强制封锁计数和锁存信号让这段时间内的噪声直接失效。实现方式是在 TRIG 信号后接一个由 NE555 构成的单稳态电路输出高电平期间把 CD4026 的 LE 锁死。屏蔽时间的取值要结合盲区来定400μs 的屏蔽时间对应约 6.8cm 盲区800μs 对应约 13.6cm 盲区。如果实际应用要求探测 20cm 内的障碍屏蔽时间可以适当缩短到 300μs但如果发现近距离频繁误触发就把屏蔽时间逐步加大到 1ms直到稳定。这个参数没有统一最优值和应用场景的噪声环境强相关调的时候每次加 100μs记录最近稳定距离找到一个属于自己的平衡点。单脉冲锁存逻辑和前文所述的“只认首回波”触发器配合使用基本能过滤掉绝大多数二次反射误报。本文还有配套的精品资源点击获取