图3-6 单片机控制、显示与报警电路
4 系统软件的设计
系统软件采用模块化设计,方便扩展移植。采用汇编语言编程,主要有主程序、T0 中断服务程序、外部中断0服务程序、超声波测距子程序、显示程序和报警程序[11]。
4.1 主程序设计
本系统有四路测距通道,采用分时工作,按后左→后左中→后右中→后右顺序循环测距。每一路发射超声波后的等待外部中断时间应大于超声波在最大有效探测距离内往返时间。所以按最大有效探测距离可以估算出最短的循环间隔时间。因为超声波在空气中传播能量会不断衰减,所以超声波测距存在最大有效探测距离。最大有效探测距离与多种因数有关:与超声波传感器性能的好坏、与驱动超声波传感器的脉冲电压幅值(功率) 的大小、障碍物大小和形状、障碍物吸波特性以及反射波与入射波之间的夹角、与超声波放大和整形电路的灵敏度等有关。设定最大有效探测距离为8 m(收发一体封闭型超声波传感器比较难达到,实际上也没有必要探测很远的障碍物,只是设计留有裕量。由于显示位数有限,也必须对最大探测距离做限制) ,
1
则循环工作的间隔时间Tm = 2 S/ C = 2 ×8/ 346 l 46 ms,加上避免接收超声波传感器
余振的延时和程序执行时间,留足裕量,设定Tm=56 ms。主程序流程图如图4-1所示。
首先是对系统初始化。端口P1.0 、P3.3 置0 ;设置堆栈,中断允许总控制位EA允许中断( EA = 1);允许外部中断0 中断( EX0 = 1),采用边沿触发方式( IT0 = 1); 设置定时器T0 允许中断( ET0 = 1),以16位工作方式定时约56 ms;设置定时器T1 以16 位工作方式定时/计数,计数初值0000H,然后启动T0 定时。设置显示数据初值为三位BCD 码999 (cm),对应字形段码显示“- - -”。四路探测处理完毕后,将四组数据中的最小值送入显示缓冲区,通过LED 数码管显示。同时该值与设定的100 cm 值比较,若四组数据中的最小值小于100 cm ,P3.7 端口置0,Q2三极管导通,有源蜂鸣器得电发出报警声。由于单片机采用12 MHz 的晶振,1 个机器周期为1μs,所以计数器每计一个数就是1μs,定时器T1 工作模式设置为16 位定时/计数器模式,则其最大定时65. 536 ms。由于定时器T0 每56 ms 产生中断,执行T0 中断服务程序时停止T1 计时,所以T1 计时不会产生溢出中断。一轮四路探测处理完毕所用时间大约是56 ms ×4 = 224 ms,用时很短,而倒车速度又比较慢,所以可以做到实时动态显示。
开 始 系统初始化,T0,T1定时器、启动T0定时56ms 设置显示数据缓冲区置显示数据初值 读取显示数据 动态显示 Y 最小值小于1 N 断开报警 接通报警
1
图4-1 主程序流程图
4.2 T0 中断服务程序设计
T0 中断服务程序流程图如图4-2所示。每隔56 ms分别按后左→后左中→后右中→后右顺序选通下一路超声波发射与回波接收电路,调用超声波发生子程序,送出16 个40 kHz 的超声波脉冲电压,定时器T1 开始计时,定时器T0 开始定时56 ms,使每路工作56 ms。为了避免接收到超声波传感器余振的直射波产生的中断申请,延时2. 8 ms 后,才允许外部中断0 中断,等待汽车接收返回的超声波信号。所以,最小探测距离(盲区)Smin = Ct/ 2 = 346 ×0. 002 8/ 2 l 0. 48 m。四路探测处理完毕,将四路中最小值送入显示缓冲区。若在四路探测中有些路在有效探测范围内发射的超声波未遇障碍物,无返回波,外部中断0 不产生中断申请信号,或者是进入探测盲区,外部中断0产生的中断申请不被受理,则定时器T1 计时到定时器T0 产生中断,在T0 中断服务程序中, 用三位BCD 码999 ( 三位十进制数最大值999 cm) 置够四组数据。若显示缓冲区的四组数据都是999 时,则对应字形段码显示“ - - - ”。倒车伊始,LED 数码显示器就显示“ - . - - ”,表明在安全距离内没有障碍物;若发出报警声后,又显示“ - . - - ”,表明进入了探测盲区[7]。
T0中断入口 选通发射道 停止T1计时,禁止外部中断0中断 N 四路选通完调超声波发生子程序 启动T1计时 Y 有四组数据Y 比较四路数据大小 延时2.8ms N 置够四组数据 允许T0中断,启动T0定时 最小值送显示缓冲器 允许外部中断0中断 返回
1
图4-2 T0 中断服务程序
4.3 外部中断0程序设计
外部中断0 服务程序流程图如图4-3所示:
外部中断0入口 停止T2计时禁止外部中断0中断 读时间值 计算距离 结果存在比较大小缓冲区 返 回
图4-3 外部中断0 服务程序流程图
单片机一旦接收到返回超声波信号(即INT0 引脚由高电平跳变为低电平),立即进入外部中断0 服务程序。首先停止定时器T1 计时,禁止外部中断0 中断。然后将定时器T1 中的数N ,也即将超声波往返所用的时间N (单位:μs),按式S = C T/ 2 = (346 ×N ×10 - 6 ) / 2 = 173 ×N ÷10000 计算,即得被测物的距离(单位: cm) ,将计算结果以百位、十位、个位BCD 码方式送入比较大小的缓冲区,以备比较大小使用。然后等待定时器T0 定时56 ms中断的产生,继续下一路的探测处理。
4.4 超声波测距子程序设计
超声波发生子程序通过P3.3端口发送16个周期是25μs (即频率40 kHz,1个周期内高电平持续13μs、低电平持续12 μs)的矩形脉冲电压。脉冲串个数在10~20个比较合适。脉冲个数太少,发射强度小,探测距离短;脉冲个数太多,发射持续时间长,在离障碍物距离近时,脉冲串尚未发射完毕,先发射出去的脉冲产生的回波就到达接收端,影响测距结果,造成测距盲区增大。测距电路系统中的反射式超声波传感器采用UCM40的压电陶瓷传感器,它的工作电源是40 kHz的脉冲信号,是由单片机定时器产生振荡频率为40 kHz的脉冲串,经脉冲变压器生压驱动超声波发送器,并
1
相关推荐: