LCD1AMPIRE128X64C230pFY1CRYSTALC3C11nF30pFU119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161718XTAL29RSTR110k293031PSENALEEAR18U1:AR1710k21375610kR2010k12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51U2:B44R1910kR5110k8LM3588LM358RV11kRV21kRV31kR2710kU7:B44U7:AC9131nF2U8:B44R2810k675R2510kC571nF65R2310kC811nF88LM3588LM358LM3588D1LM385-2V5R610kR810kR10C61nF10kC71nF21181716151413121110987654321-VoutRSTDB7DB6DB5DB4DB3DB2DB1DB0ER/WRSV0VCCGNDCS2CS1RV51kRV41kU8:A23R2110kLM358R2210kC91nF 图4.5 Proteus 仿真系统图
五.系统软件的设计
软件分为两部分:主程序和中断服务程序,主程序完成初始化工作、各路超声波发射和接受顺序的控制。
5.1 超声波测距仪的算法设计
超声波测距的原理为超声波发生器T在某一时刻发出一个超声波信号,当这个超声波遇到被测物体后反射回来,就被超声波接收器R所接收到。这样只要计算出从发出超声波信号到接收到返回信号所用的时间,就可算出超声波发生器与反射物体的距离。距离的计算公式为: d=s/2=(c×t)/2,其中,d为被测物与测距仪的距离,s为声波的来回的路程,c为声速,t为声波来回所用的时间。 在启动发射电路的同时启动单片机内部的定时器T0,利用定时器的计数功能记录超声波发射的时间和收到反射波的时间。当收到超声波反射波时,接收电路输出端产生一个负跳变,在INT0或INT1端产生一个中断请求信号,单片机响应外部中断请求,执行外部中断服务子程序,读取时间差,计算距离。
5.2 程序流程
超声波测距仪的软件设计主要由主程序、超声波发生子程序、超声波接收中断程序及显示子程序组成。工作时,先把P1.0口置0,启动超声波传感器发射超声波,
16
同时启动内部定时器T0开始计时。当超声波碰到障碍物时信号立即返回,微处理器不停地扫描INT0引脚,如果INT0接受的信号由高电平变为低电平,此时表明信号已经返回,微处理器进入中断关闭定时器。再把定时器中的数据经过换算就可以得出超声波传感器与障碍物之间的距离。程序流程图如图5.1所示:
开始初始化LCD初始化定时器初始化开中断发送信号是否接收到否信号是计算传输时间显示结束 主程序流程图
定时器中断0服务子程序定时器初始化P1.0取反方波产生返回定时器0中断
17 定时器1中断服务子程序外部中断0服务子程序接收标志清零定时器初始化超时标志Overflag=1计算传输时间返回返回 定时器1中断
外部中断0
5.3 主程序设计
软件分为两部分,主程序和中断服务程序,主程序完成初始化工作、各路超声波发射和接收顺序的控制。当收到超声波反射波时,接收电路输出端产生一个负跳变,在INT0或INT1端产生一个中断请求信号,单片机响应外部中断请求,执行外部中断服务子程序,读取时间差,计算距离。
5.4定时中断服务子程序设计
定时中断服务子程序完成超声波的发射,时间值的读取、距离计算、结果的输
出等工作。主程序首先是对系统环境初始化,设置定时器T0工作模式为16位定时计数器模式。置位总中断允许位EA并给显示端口P0和P1清0。然后调用超声波发生子程序送出一个超声波脉冲,为了避免超声波从发射器直接传送到接收器引起的直射波触发,需要延时约0.1 ms(这也就是超声波测距仪会有一个最小可测距离的原因)后,才打开外中断0接收返回的超声波信号。由于采用的是12 MHz的晶 振,计数器每计一个数就是1μs,当主程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)按式(2)计算,即可得被测物体与测距仪之间的距离,设计时取20℃时的声速为344 m/s则有:
d=(c×t)/2=172T0/10000cm,其中,T0为计数器T0的计算值。
18
5.5超声波发生子程序和超声波接收中断程序设计
超声波发生子程序的作用是通过P1.0端口发送2个左右超声波脉冲信号(频率约40kHz的方波),脉冲宽度为12μs左右,同时把计数器T0打开进行计时。超声波发生子程序较简单,但要求程序运行准确,所以采用汇编语言编程。 超声波测距仪主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(即INT0引脚出现低电平),立即进入中断程序。进入中断后就立即关闭计时器T0停止计时,并将测距成功标志字赋值1。如果当计时器溢出时还未检测到超声波返回信号,则定时器T0溢出中断将外中断0关闭,并将测距成功标志字赋值2以表示此次测距不成功。 前方测距电路的输出端接单片机INT0端口,中断优先级最高,中断优先级为先右后左。
19
六.调试结果
超声波测距仪的制作和调试,中心频率为40kHz,若能将超声波接收电路用金属壳屏蔽起来,则可提高抗干扰能力。根据测量范围要求不同,可适当调整与接收换能器并接的滤波电容C4的大小,以获得合适的接收灵敏度和抗干扰能力。
硬件电路制作完成并调试好后,便可将程序编译好下载到单片机试运行。根据实际情况可以修改超声波发生子程序每次发送的脉冲宽度和两次测量的间隔时间,以适应不同距离的测量需要。根据所设计的电路参数和程序,测距仪能测的范围为0.07~5.5m,测距仪最大误差不超过1cm。系统调试完后应对测量误差和重复一致性进行多次实验分析,不断优化系统使其达到实际使用的测量要求。
P1.0输入到超声波模块的方波波形如下图6.1所示:
图6.1 输入波形
20