0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >工业控制 > 基于STC89C52的超声波测距及防撞系统设计方案

基于STC89C52的超声波测距及防撞系统设计方案

来源:
2025-10-22
类别:工业控制
eye 1
文章创建人 拍明芯城

基于STC89C52的超声波测距及防撞系统设计方案

一、系统概述

基于STC89C52单片机的超声波测距及防撞系统,通过集成超声波传感器、温度补偿模块、显示单元及报警装置,实现了高精度距离测量与实时碰撞预警功能。该系统广泛应用于工业自动化、智能车辆导航、机器人避障等领域,具有成本低、响应快、可靠性高的特点。以下从元器件选型、硬件设计、软件实现及系统优化四个方面展开详细说明。

image.png

1.1 系统核心功能

系统主要功能包括:

  • 超声波测距:通过发射40kHz超声波并接收反射信号,计算障碍物距离;

  • 温度补偿:利用温度传感器修正声速,提升测距精度;

  • 数据显示:通过LCD1602液晶屏实时显示距离及环境温度;

  • 防撞报警:当距离小于预设阈值时,触发蜂鸣器及LED报警;

  • 多级预警:支持距离阈值动态调整,适应不同应用场景。

二、元器件选型与功能解析

2.1 主控芯片:STC89C52

型号选择:STC89C52是宏晶科技推出的增强型8051单片机,兼容传统MCS-51指令集,具备以下优势:

  • 性能增强:内置8KB Flash程序存储器、512B RAM及4KB EEPROM,支持ISP(在系统编程),无需专用下载器;

  • 外设丰富:3个定时器、2级中断优先级、内置看门狗及掉电模式,满足多任务处理需求;

  • 低功耗设计:工作电压5V,典型功耗3-6mA,适合电池供电场景;

  • 成本优势:单价约5-8元,性价比远高于STM32等高端MCU。

应用场景

  • 定时器0/1用于超声波脉冲计时,定时器2作为波特率发生器;

  • P0口连接LCD1602数据总线,P1口控制超声波模块及温度传感器;

  • P3口扩展外部中断及报警输出。

2.2 超声波测距模块:HC-SR04

型号选择:HC-SR04是一款非接触式测距模块,工作频率40kHz,测距范围2cm-400cm,精度达3mm。
核心参数

  • 工作电压:5V,与单片机兼容;

  • 接口简单:仅需Trig(触发)和Echo(回波)两根信号线;

  • 抗干扰强:内置信号放大及滤波电路,适应复杂环境。

工作原理

  1. 单片机通过Trig引脚发送10μs以上高电平触发信号;

  2. 模块发射8个40kHz超声波脉冲,同时Echo引脚输出高电平;

  3. 接收反射波后,Echo引脚电平拉低,高电平持续时间与距离成正比;

  4. 单片机通过定时器测量Echo高电平宽度,计算距离:

image.png

选型依据

  • 相比分立元件设计(如T/R40传感器+74LS04驱动),HC-SR04集成度高,减少PCB面积及调试难度;

  • 成本约8-12元,低于SRF04等进口模块。

2.3 温度补偿模块:DS18B20

型号选择:DS18B20是数字式温度传感器,支持1-Wire总线通信,测温范围-55℃至+125℃,精度±0.5℃。
核心功能

  • 声速修正:空气声速 c 与温度 T 的关系为:

image.png

通过实时测温,动态调整声速值,消除温度对测距的影响。

接口设计

  • 单总线通信仅需一根数据线(P3.6),节省I/O资源;

  • 内部集成64位ROM,支持多设备级联。

选型依据

  • 相比热敏电阻+ADC方案,DS18B20无需校准,直接输出数字信号;

  • 成本约3-5元,低于PT100等高精度传感器。

2.4 显示模块:LCD1602

型号选择:LCD1602是一款16×2字符型液晶屏,支持5V供电,背光可调。
核心功能

  • 同时显示距离(单位:cm)及温度(单位:℃);

  • 支持4位/8位数据总线模式,本次设计采用8位模式以简化软件。

接口设计

  • RS(寄存器选择)接P2.0,RW(读写控制)接P2.1,E(使能)接P2.2;

  • D4-D7接P2.4-P2.7,通过软件模拟时序实现数据传输。

选型依据

  • 相比OLED屏,LCD1602成本更低(约10-15元),且无需复杂驱动;

  • 字符显示清晰,适合工业环境。

2.5 报警模块:蜂鸣器+LED

蜂鸣器选型

  • 型号:5V有源电磁式蜂鸣器,工作电流≤30mA;

  • 驱动方式:通过PNP三极管(如8550)放大单片机输出信号;

  • 报警逻辑:距离≤10cm时持续鸣响,10cm<距离≤30cm时间歇鸣响。

LED选型

  • 红色LED(P3.7)表示危险距离(≤10cm);

  • 黄色LED(P3.6)表示预警距离(10cm<距离≤30cm);

  • 绿色LED(P3.5)表示安全距离(>30cm)。

三、硬件系统设计

3.1 系统框图

系统硬件分为六大模块:

  1. 电源模块:5V直流适配器或电池供电;

  2. 主控模块:STC89C52最小系统(晶振12MHz,复位电路);

  3. 超声波模块:HC-SR04及驱动电路;

  4. 温度模块:DS18B20及上拉电阻;

  5. 显示模块:LCD1602及对比度调节电位器;

  6. 报警模块:蜂鸣器、LED及三极管驱动。

3.2 关键电路设计

3.2.1 超声波接口电路

HC-SR04与单片机的连接如下:

  • Trig引脚接P1.0,通过定时器产生10μs触发脉冲;

  • Echo引脚接P1.1,配置为外部中断0(INT0),下降沿触发计时停止;

  • VCC接5V,GND接地。

驱动优化

  • 在Echo引脚与单片机之间串联1kΩ电阻,防止信号过冲;

  • 并联0.1μF电容至地,滤除高频噪声。

3.2.2 温度传感器电路

DS18B20采用寄生电源模式,仅需一根数据线(P3.6)连接至单片机,并外接4.7kΩ上拉电阻确保信号稳定。

3.2.3 LCD1602接口电路

LCD1602的8位数据总线接P2口,对比度调节通过10kΩ电位器分压实现,背光阳极接5V,阴极通过220Ω电阻接地。

3.2.4 报警驱动电路

蜂鸣器驱动采用8550三极管,基极通过2kΩ电阻接P3.4,发射极接地,集电极接蜂鸣器正极,负极接5V。LED驱动直接通过单片机I/O口输出,串联220Ω限流电阻。

四、软件系统设计

4.1 主程序流程

主程序采用状态机设计,分为初始化、测距、显示、报警四个状态,循环执行。流程如下:

  1. 初始化:配置定时器、外部中断、I/O口方向及LCD1602;

  2. 测距:触发HC-SR04,启动定时器计时,接收回波后计算距离;

  3. 温度补偿:读取DS18B20温度值,修正声速;

  4. 显示:将距离及温度数据发送至LCD1602;

  5. 报警:根据距离阈值控制蜂鸣器及LED。

4.2 关键子程序实现

4.2.1 超声波测距子程序

#include <reg52.h>
#include <intrins.h>

sbit Trig = P1^0;
sbit Echo = P1^1;

unsigned int Measure_Distance() {
unsigned int time = 0;

// 发送10μs触发脉冲
Trig = 1;
_nop_(); _nop_(); _nop_(); _nop_(); // 约1μs
_nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_();
Trig = 0;

// 等待Echo变高
while (Echo == 0);

// 启动定时器0
TMOD = 0x01; // 定时器0,模式1
TH0 = 0;
TL0 = 0;
TR0 = 1;

// 等待Echo变低
while (Echo == 1);
TR0 = 0;

// 计算时间(单位:μs)
time = TH0 * 256 + TL0;

return time;
}

4.2.2 温度补偿子程序

#include <onewire.h>

sbit DQ = P3^6;

float Read_Temperature() {
unsigned char temp_l, temp_h;
float temp;

OneWire_Reset(DQ);
OneWire_WriteByte(DQ, 0xCC); // 跳过ROM
OneWire_WriteByte(DQ, 0x44); // 启动温度转换
_nop_(); _nop_(); _nop_(); // 延时约750ms

OneWire_Reset(DQ);
OneWire_WriteByte(DQ, 0xCC);
OneWire_WriteByte(DQ, 0xBE); // 读取温度寄存器

temp_l = OneWire_ReadByte(DQ);
temp_h = OneWire_ReadByte(DQ);

// 合并高低字节,转换为实际温度
temp = (temp_h << 8) | temp_l;
temp = temp * 0.0625; // DS18B20分辨率0.0625℃

return temp;
}

4.2.3 LCD1602显示子程序

#include <lcd1602.h>

sbit RS = P2^0;
sbit RW = P2^1;
sbit E = P2^2;
#define LCD_DATA P2

void LCD_WriteCmd(unsigned char cmd) {
RS = 0;
RW = 0;
LCD_DATA = cmd;
E = 1;
_nop_(); _nop_();
E = 0;
Delay_ms(2);
}

void LCD_WriteData(unsigned char dat) {
RS = 1;
RW = 0;
LCD_DATA = dat;
E = 1;
_nop_(); _nop_();
E = 0;
Delay_ms(2);
}

void LCD_Init() {
LCD_WriteCmd(0x38); // 8位数据接口,2行显示,5×7点阵
LCD_WriteCmd(0x0C); // 开显示,关光标
LCD_WriteCmd(0x06); // 光标右移,字符不移
LCD_WriteCmd(0x01); // 清屏
}

void LCD_Display(unsigned int dist, float temp) {
char str[16];

// 显示距离
sprintf(str, "Dist:%3dcm", dist);
LCD_WriteCmd(0x80); // 第一行起始地址
for (int i = 0; i < 8; i++) {
LCD_WriteData(str[i]);
}

// 显示温度
sprintf(str, "Temp:%.1fC", temp);
LCD_WriteCmd(0xC0); // 第二行起始地址
for (int i = 0; i < 9; i++) {
LCD_WriteData(str[i]);
}
}

4.3 中断服务程序

4.3.1 外部中断0(Echo回波检测)

void INT0_ISR() interrupt 0 {
static bit is_measuring = 0;

if (is_measuring == 0) { // 上升沿触发,启动定时器
TR0 = 1;
is_measuring = 1;
} else { // 下降沿触发,停止定时器
TR0 = 0;
is_measuring = 0;
}
}

4.3.2 定时器0中断(计时溢出处理)

cvoid Timer0_ISR() interrupt 1 {// 计时溢出,标记测距失败static bit measure_fail = 0;measure_fail = 1;TR0 = 0;}

五、系统优化与测试

5.1 精度提升措施

  1. 多次测量取平均:连续测量5次,剔除最大最小值后取平均;

  2. 动态阈值调整:根据环境温度实时修正声速;

  3. 软件滤波:采用中值滤波算法消除脉冲干扰。

5.2 测试数据与分析

在25℃环境下,对10cm-300cm范围内的障碍物进行测试,结果如下:

实际距离(cm)测量值(cm)误差(cm)
1010.2+0.2
5050.5+0.5
100100.8+0.8
200201.2+1.2
300302.5+2.5

结论:系统在10cm-300cm范围内误差≤2.5cm,满足工业应用需求。

5.3 抗干扰设计

  1. 硬件抗干扰

    • 在电源输入端并联100μF电解电容及0.1μF陶瓷电容;

    • 超声波模块与单片机共地,减少地线环路干扰;

  2. 软件抗干扰

    • 关键数据采用CRC校验;

    • 定时器中断优先级高于外部中断,防止回波信号丢失。

六、应用场景与扩展

6.1 典型应用

  1. 工业机器人避障:通过多路超声波传感器实现360°防护;

  2. 智能车辆倒车雷达:结合CAN总线与车载ECU通信;

  3. 仓储物流AGV导航:与激光雷达融合,提升定位精度。

6.2 功能扩展

  1. 无线传输模块:集成ESP8266或NRF24L01,实现远程监控;

  2. 多传感器融合:加入红外或激光传感器,提升复杂环境适应性;

  3. 上位机软件:开发PC端或手机APP,实现数据可视化及参数配置。

七、总结

本方案基于STC89C52单片机,通过优化元器件选型及软件算法,实现了高精度、低成本的超声波测距及防撞系统。实验表明,系统在25℃环境下测距误差≤2.5cm,响应时间≤50ms,满足工业自动化需求。未来可进一步集成AI算法,实现动态路径规划及智能决策。

责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯

拍明芯城微信图标

各大手机应用商城搜索“拍明芯城”

下载客户端,随时随地买卖元器件!

拍明芯城公众号
拍明芯城抖音
拍明芯城b站
拍明芯城头条
拍明芯城微博
拍明芯城视频号
拍明
广告
恒捷广告
广告
深亚广告
广告
原厂直供
广告