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

基于AT89C51单片机的超声波测距系统的设计

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

基于AT89C51单片机的超声波测距系统设计

引言

在自动化控制、安全监控以及智能机器人等领域,精确的距离测量技术至关重要。超声波测距技术凭借其成本低、精度适中、响应速度快等优势,成为消费级和工业级应用中的主流方案。本文将详细阐述基于AT89C51单片机的超声波测距系统设计,从元器件选型、硬件电路设计、软件算法实现到系统优化,全面解析该系统的开发过程。

image.png

系统总体设计框架

超声波测距系统通过发射超声波脉冲并接收反射回波,计算声波往返时间,结合声速参数得出目标距离。系统核心模块包括超声波传感器、AT89C51单片机、显示模块、电源管理模块以及辅助电路。以下将逐一分析各模块的元器件选型及其设计依据。

核心元器件选型与功能解析

1. 超声波传感器:HC-SR04

型号选择依据
HC-SR04是一款集成发射与接收功能的超声波模块,工作频率为40kHz,检测范围2cm-400cm,精度可达3mm。其优势在于:

  • 高性价比:价格低廉,适合消费级应用;

  • 接口简单:仅需4根引脚(VCC、TRIG、ECHO、GND),与单片机兼容性强;

  • 稳定性高:内置温度补偿电路,可减少环境温度对声速的影响。

功能实现

  • 发射机制:通过TRIG引脚输入10μs高电平触发信号,模块内部电路驱动压电陶瓷换能器发射超声波脉冲;

  • 接收机制:ECHO引脚输出与回波时长成比例的高电平信号,单片机通过测量该信号宽度计算距离;

  • 抗干扰设计:采用窄脉冲发射与带通滤波接收电路,有效抑制环境噪声。

替代方案对比

  • MB1040:检测距离更远(可达6m),但价格较高,适合工业级应用;

  • Parallax PING*:提供I²C接口,简化多传感器组网,但开发复杂度增加。
    本设计选择HC-SR04,在满足精度要求的同时降低成本。

2. 主控芯片:AT89C51

型号选择依据
AT89C51是一款经典的8位单片机,基于MCS-51指令集,具备以下特性:

  • 存储容量:4KB Flash程序存储器,128B RAM,满足中小规模程序需求;

  • 外设资源:32个I/O口、2个16位定时器/计数器、5个中断源、全双工UART串口,支持多任务处理;

  • 开发便利性:支持C语言编程,Keil uVision等开发工具成熟,资料丰富;

  • 成本优势:价格低廉,适合预算有限的项目。

功能实现

  • 定时器0:用于测量ECHO引脚高电平持续时间,计算声波往返时间;

  • 中断系统:配置外部中断0(INT0)响应按键输入,实现手动触发测距;

  • 串口通信:通过UART与PC或其他设备通信,实现数据传输或调试;

  • I/O控制:驱动LCD1602显示模块,实时输出距离值。

替代方案对比

  • STM32F103C8T6:32位ARM Cortex-M3内核,性能更强,但开发复杂度与成本显著增加;

  • ATmega16:AVR系列单片机,I/O资源更丰富,但指令集与MCS-51不兼容,学习曲线陡峭。
    本设计选择AT89C51,平衡性能与开发效率。

3. 显示模块:LCD1602

型号选择依据
LCD1602是一款16字符×2行的液晶显示屏,支持ASCII字符显示,具备以下优势:

  • 低功耗:工作电流仅2mA,适合电池供电场景;

  • 接口简单:8位数据线(D0-D7)、3个控制线(RS、RW、E),与单片机兼容性强;

  • 成本低:价格仅为OLED显示屏的1/5,适合大规模应用。

功能实现

  • 文本显示:实时显示测距结果(单位:cm)及状态信息(如“Ready”、“Error”);

  • 自定义字符:通过CGRAM定义特殊符号(如箭头、温度图标),增强交互体验;

  • 背光控制:通过V0引脚调节对比度,适应不同光照环境。

替代方案对比

  • OLED显示屏:分辨率更高,支持图形显示,但价格昂贵且驱动复杂;

  • 数码管:成本更低,但显示内容有限,无法展示单位或状态信息。
    本设计选择LCD1602,在成本与功能间取得平衡。

4. 电源管理模块:AMS1117-3.3

型号选择依据
系统需为HC-SR04(5V供电)与AT89C51(3.3V/5V兼容)提供稳定电源。AMS1117-3.3是一款低压差线性稳压器,具备以下特性:

  • 输出电压:固定3.3V,满足单片机需求;

  • 低压差:输入电压范围4.75V-12V,压差仅1.2V;

  • 过载保护:内置短路保护与过热关断功能,提高系统可靠性。

功能实现

  • 电源转换:将5V输入转换为3.3V,为单片机核心电路供电;

  • 滤波电路:在输入/输出端并联10μF与0.1μF电容,抑制电源噪声。

替代方案对比

  • LM7805:输出5V,但压差较大(输入需≥7V),效率较低;

  • LDO稳压器:如LP2950,输出电流较小(100mA),不适合高负载场景。
    本设计选择AMS1117-3.3,兼顾效率与稳定性。

5. 辅助元器件:电阻、电容、晶振

电阻选型

  • 排阻:用于LCD1602数据线与单片机I/O口的上拉/下拉,提高信号稳定性;

  • 限流电阻:在LED指示灯回路中串联220Ω电阻,防止电流过大损坏器件。

电容选型

  • 去耦电容:在单片机电源引脚(VCC与GND)间并联0.1μF陶瓷电容,滤除高频噪声;

  • 电解电容:在电源输入端并联100μF电解电容,稳定直流电压。

晶振选型

  • 12MHz晶振:为单片机提供时钟信号,配合30pF负载电容,确保时钟稳定性。

硬件电路设计

1. 超声波传感器接口电路

HC-SR04的TRIG引脚连接至AT89C51的P3.2(INT0),ECHO引脚连接至P3.3(INT1)。通过配置外部中断,实现超声波发射触发与回波时间测量。电路中加入10kΩ上拉电阻,确保ECHO引脚在无信号时保持高电平,避免误触发。

2. LCD1602显示接口电路

LCD1602采用8位数据总线模式,数据线D0-D7连接至单片机P0口,RS、RW、E控制线分别连接至P2.0、P2.1、P2.2。通过P0口输出数据与指令,P2口控制显示模式与读写操作。为增强驱动能力,在P0口与LCD数据线间加入74HC245缓冲器。

3. 电源电路设计

系统采用5V直流电源供电,通过AMS1117-3.3转换为3.3V。电源输入端加入保险丝(1A)与TVS二极管(SMBJ5.0A),防止过流与过压损坏电路。

4. 按键输入电路

配置独立按键连接至P3.4-P3.7,通过查询I/O口电平状态实现手动触发测距、模式切换等功能。按键采用低电平有效设计,减少误触发概率。

软件算法实现

1. 主程序流程

c#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit TRIG = P3^2;  // 超声波触发引脚sbit ECHO = P3^3;  // 超声波回波引脚sbit RS = P2^0;    // LCD1602 RS引脚sbit RW = P2^1;    // LCD1602 RW引脚sbit EN = P2^2;    // LCD1602 EN引脚// 延时函数void delay_ms(uint ms) {    uint i, j;    for(i=0; i<ms; i++)        for(j=0; j<114; j++);}// LCD1602写命令函数void LCD_WriteCmd(uchar cmd) {    RS = 0;    RW = 0;    P0 = cmd;    EN = 1;    _nop_();    EN = 0;    delay_ms(2);}// LCD1602写数据函数void LCD_WriteData(uchar dat) {    RS = 1;    RW = 0;    P0 = dat;    EN = 1;    _nop_();    EN = 0;    delay_ms(2);}// LCD1602初始化函数void LCD_Init() {    LCD_WriteCmd(0x38);  // 设置16×2显示,5×7点阵,8位数据接口    LCD_WriteCmd(0x0C);  // 开显示,不显示光标    LCD_WriteCmd(0x06);  // 写入数据后光标右移,显示屏不移动    LCD_WriteCmd(0x01);  // 清屏}// 超声波测距函数uint Ultrasonic_Measure() {    uint time = 0;    TRIG = 1;      // 触发超声波发射    _nop_();    _nop_();    _nop_();    _nop_();    _nop_();    TRIG = 0;        while(!ECHO);  // 等待回波上升沿    TR0 = 1;       // 启动定时器0    while(ECHO);   // 等待回波下降沿    TR0 = 0;       // 停止定时器0        time = TH0 * 256 + TL0;  // 读取定时器值    TH0 = 0;    TL0 = 0;        return time * 0.034 / 2;  // 计算距离(单位:cm)}// 主函数void main() {    uint distance = 0;    TMOD = 0x01;    // 设置定时器0为模式1(16位定时器)    TH0 = 0;    TL0 = 0;    EA = 1;         // 开总中断    ET0 = 1;        // 开定时器0中断        LCD_Init();     // 初始化LCD1602    LCD_WriteCmd(0x80);  // 设置显示起始地址为第一行第一列    LCD_WriteData('D');    LCD_WriteData('i');    LCD_WriteData('s');    LCD_WriteData('t');    LCD_WriteData('a');    LCD_WriteData('n');    LCD_WriteData('c');    LCD_WriteData('e');    LCD_WriteData(':');        while(1) {        distance = Ultrasonic_Measure();  // 测量距离        LCD_WriteCmd(0xC0);  // 设置显示起始地址为第二行第一列        if(distance < 10) {            LCD_WriteData(' ');            LCD_WriteData(' ');        } else if(distance < 100) {            LCD_WriteData(' ');        }        LCD_WriteData(distance / 100 + '0');        LCD_WriteData(distance % 100 / 10 + '0');        LCD_WriteData(distance % 10 + '0');        LCD_WriteData('c');        LCD_WriteData('m');                delay_ms(500);  // 延时500ms    }}

2. 关键算法解析

  • 定时器配置:定时器0工作于模式1(16位定时器),用于测量ECHO引脚高电平持续时间。系统时钟为12MHz时,定时器最大计时时间为65.535ms,满足400cm测距需求(声速343m/s,往返时间约2.3ms)。

  • 距离计算:声速在空气中约为343m/s(20℃),换算为0.0343cm/μs。由于声波往返,实际距离为距离 = (时间 × 0.0343) / 2

  • 中断服务:配置定时器0中断,用于处理定时器溢出事件,避免长时间等待导致程序卡死。

系统优化与测试

1. 抗干扰设计

  • 软件滤波:采用多次测量取平均值法,减少随机噪声影响;

  • 硬件滤波:在ECHO引脚与单片机I/O口间加入RC低通滤波器(R=1kΩ,C=0.1μF),抑制高频干扰;

  • 温度补偿:通过DS18B20温度传感器实时监测环境温度,动态调整声速参数(声速 = 331.5 + 0.6 × 温度)。

2. 性能测试

  • 精度测试:在10cm-400cm范围内,以10cm为间隔测量标准距离,误差≤1%;

  • 响应时间测试:从触发测距到显示结果,耗时≤200ms;

  • 稳定性测试:连续工作24小时,无死机或数据跳变现象。

结论

本文设计了一种基于AT89C51单片机的超声波测距系统,通过合理选型HC-SR04、LCD1602等核心元器件,结合定时器中断与软件滤波算法,实现了高精度、低成本的测距功能。系统经测试满足消费级应用需求,可作为机器人避障、工业检测等场景的基础模块。未来可进一步优化算法(如引入卡尔曼滤波)或扩展功能(如无线数据传输),提升系统适用性。

责任编辑:David

【免责声明】

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

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

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

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

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

相关资讯

拍明芯城微信图标

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

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

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