目录
一、竞赛板超声波测距相关资料解析
超声波测距在蓝桥杯竞赛中经常出现,竞赛现场没有提供底层程序,需要参赛者根据超声波测距的原理自行完成设计。下面从竞赛的视角,如何快速地写出应用程序。
-
超声波测距的硬件接口电路
(1)超声波发送电路
上图是从竞赛板原理图截取的超声波发送电路,信号(N_A1)经过74LS04非门的信号处理电路,最终控制发射头产生超声波发送出去。
(2)超声波接收电路
上图是从竞赛板原理图截取的超声波接收电路,超声波接收头将接收的信号送给CX20106A进行处理,当收到超声波信号时,CX20106A的输出引脚输出低电平,没有超声波信号输出高电平。输出信号标注:N_B1。
(3)超声波测距硬件接口
上图是从竞赛板截取超声波控制的接口电路,发送信号、接收信号都是通过J2插针转接到单片机芯片引脚,将J2的1、3引脚短接N_A1连接到P1.0,将J2的2、4引脚短接N_B1连接到P1.1,在设计程序时对进行定义。
2、单片机超声波测距的原理
超声波和声波在介质中传输的速度是相同的,声波在空气中的传播速度约340m/S。竞赛板上采用的是反射式测距,超声波发射头、接收头在一起,发射头发送一组超声波(4~5周期),超声波遇到障碍物反射回来,接收头收到超声波,测量出超声波发送到反射回来的时间就可以计算出前方障碍物的距离。
超声波信号可以用单片机的定时器产生,20KHz频率以上的声波就是超声波范畴,为避免接近声波产生噪音,一般用40KHz左右的信号来测量。40KHz信号周期是25µs,为便于设计我们用定时器产生周期为24µs的信号控制超声波发射头。
二、程序设计
本例用定时器T0来做超声波测距。系统频率设为12MHz,使系统的机器周期为1µs,便于测量和计算。
1、定时器T0初始化程序
用STC-ISP的“定时器计算器”功能设置产生12µs(周期是24µs,反复定时12µs切换引脚电平)定时的初始化程序(停止),程序如下:
void Timer0_Init(void) //12微秒@12.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xF4; //设置定时初始值
TH0 = 0xFF; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 0; //定时器0停止计时
}
2、超声波测距函数程序
定义单片机发送引脚、接收引脚,控制T0以12µs定时10次,在发送引脚输出5个方波,然后将T0的初值改为0(最大计数范围),计数系统机器周期,直到超声波接收头收到反射回来的信号,取出T0计数的机器周期数,计算出距离,程序如下:
sbit TX=P1^0; //发送引脚
sbit RX=P1^1; //接收引脚
unsigned char Wave_Read()//测距
{
unsigned char Dist,i;
TX=0; //发送初始电平
TL0 = 0xF4; //设置定时初始值12us
TH0 = 0xFF; //设置定时初始值
TR0=1; //启动定时器
for(i=0;i<10;i++) //发送5个40KHz方波
{
while(!TF0); //等待定时结束
TX=!TX; //发送电平高低切换
TF0=0; //清除中断标志
}
TR0=0; //停止定时器
TH0=0;TL0=0; //设置初值为0
TR0=1; //启动测距
while(RX && !TF0);//等待接收信号或溢出标志
TR0=0; //停止
if(TF0) //判断溢出标志
{
TF0=0; //清溢出标志
Dist=255; //赋值错误结果
}
else Dist=(TH0*256+TL0)*0.017;//计算距离
return Dist; //返回
}
3、距离测量及显示
在主程序的开头调用T0的程序化程序,在主循环中调用测距程序,在数码管程序的开头将距离拆分送显示,数码管显示修改程序如下:
Led1=10; //灭
Led2=10; //灭
Led3=10; //灭
Led4=10; //灭
Led5=10; //灭
Led6=Lenth/100; //距离送显示
Led7=Lenth%100/10;
Led8=Lenth%10;