一.超声波测距原理
超声波测距最基本的原理就是用到我们小学二年级学过知识:路程=速度✖时间
其中,路程是我们要得到的最终量。然后小学二年级我们也学过,声波的速度是340m/s,那么我们只要测出了声波往返的时间,是不是就可以很简单的求出我们的距离了!!
二.时间测量
ok,到这部分唯一的难点了--这时间怎么测量?单片机里面啥跟时间有关啊?
没错!就是我们的定时器!
只要在声波发射时候,打开定时器计时,然后在声波接收时,关闭定时器,是不是就可以得到计数的时间啦!
那又有问题:什么时候声波发射,什么时候声波接收?
这张图,想必各位都看过了吧
最重要的两个信号--触发信号 回响信号
触发信号:给模块trig(英语控制的意思)10us的高电平,就相当于打开开关,模块开始发射声波啦,同时把Echo引脚电平拉高。
回响信号:模块Echo(英语回声的意思)引脚,接收回来的声波时,由高电平又变成低电平了。
有很多人看不懂,中间的内部信号是什么?其实就是trig引脚给Echo引脚传递信号的时间,很短,一般不用考虑。
三.编程
原理都懂了,那编程不就是把中文翻译成c语言了
注意:trig和echo引脚单片机引脚由你自己定义
void Trig_Start()//开启触发
{
trig=0;
trig=1;
delay_10us();
trig=0;
}
int Distance()
{
double time;
double distance_length;
Trig_Start(); //开启触发
while(Echo==0); //等待
TR0=1; //打开定时器
while(Echo==1); //等待
TR0=0; //打开定时器
time=(TH0 * 256 + TL0) * 1.085; //us
distance_length = time * 0.034 / 2; //除2
Timer0_Init();
return distance_length;
}
void Timer0_Init(void) //@11.0592MHz
{
TMOD &= 0xF0; //设置定时器模式
TL0 = 0; //设置定时初始值
TH0 = 0; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}