一、简介
本文介绍如何用51STC单片机驱动超声波传感器来实现测距等功能。
二、实验平台
单片机型号:STC12C5A60S2
外设模块型号:HC-SR04
编译软件:KEIL
硬件平台:达芬奇51开发版
三、版权声明
博主:文武大侠
声明:喝水不忘挖井人,转载请注明出处。
原文地址:
联系方式:644746740@qq.com
老蔡51单片机群:463850023
四、讲解
超声波传感器对于51单片机外设来讲是很常见的,它的工作原理也很简单,所以看到此篇博客的同学按照我的步骤往下看完,一定会学明白的,如果有不明白的就暂停一下,自己想一想或者百度一下,再或者在下面留言,我会及时回复的。
4.1 超声波传感器原理
由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。
超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2 。这就是所谓的时间差测距法。
超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。由此可见,超声波测距原理与雷达原理是一样的。
测距的公式表示为:L=C×T
式中L为测量的距离长度;C为超声波在空气中的传播速度;T为测量距离传播的时间差(T为发射到接收时间数值的一半)。
HC-SR04超声波模块可提供2cm~400cm的距离感测功能,测量精度可以达到3mm。模块包括超声波发射器,接收器与控制电路。
基本工作原理
- 采用Trig引脚触发,给至少10us的高电平脉冲信号
- 模块自动发送8个40kHz的方波,自动检测是否有信号返回
-
有信号返回,通过Echo引脚输出一个高电平脉冲,高电平脉冲持续的时间就是超声波从发射到反射返回的时间。距离=(高电平脉冲时间*340)/2
image.png
4.2 程序逻辑
4.2 用代码来实现它
//主程序
void main(void)
{
TMOD=0x01; //ÉèT1Ϊ·½Ê½2£¬T0Ϊ·½Ê½1 GATE=0
SCON=0x10;
UartInit();
TH0=0;
TL0=0;
TR0=1;
ET0=1;
TI=1;
EA=1;
while(1)
{
LED1 = ~LED1;
StartModule(); //发送大于10us的高电平
while(!RX); //等待返回信号
TR0=1; //打开定时器
while(RX); //监测到返回信号主程序停止,定时器计时
TR0=0; //信号
Conut(); //通过定时器的时间,算出距离
delayms(100); //100MS
}
}
StartModule()
void StartModule()
{
unsigned char i, j, k;
i = 68;
j = 61;
k = 50;
TX=1; //800MS启动一次模块
do
{
do
{
while (--k);
}
while (--j);
}
while (--i);
TX=0;
}
void Conut(void)
void Conut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.87)/100/2 - 0.7; //通过定时器时间计算距离公式
if(flag==1) //超出测量
{
flag=0;
printf("-----\n");
}
printf("S=%f\n",S);
}
休息一下 等会把代码上传到git上
网友评论