基于超声波倒车雷达系统 联系客服

发布时间 : 星期四 文章基于超声波倒车雷达系统更新完毕开始阅读

第四章 系统软件设计

4.1 超声波测距原理

超声波脉冲法测距原理:

声波在其传播介质中被定义为纵波.当声波受到尺寸大于其波长的目标物体阻挡时就会发生反射;反射波称为回声.假如声波在介质中传播的速度是已知的,而且声波从声源到达目标然后返回声源的时间可以测量得到,那么就可以计算出从声波到目标的距离.这就是本系统的测量原理.这里声波传播的介质为空气,采用不可见的超声波. 銚銻縵哜鳗鸿锓謎諏涼。 假设室温下声波在空气中的传播速度是335.5m/s,测量得到的声波从声源到达目标然后返回声源的时间是t秒,距离d可以由下列公式计算: 挤貼綬电麥结鈺贖哓类。 d=33550(cm/s)×t(s)

因为声波经过的距离是声源与目标之间距离的两倍,声源与目标之间的距离应该是d/2.

软件控制脉冲发射、检测回波信号:

模组配套的Demo程序采用的是脉冲测量法,由SPCE061A控制模组发生40KHz的脉冲信号,每次测量发射的脉冲数至少要12个完整的40KHz脉冲.同时发射信号前要打开计数器,进行计时;等计时到达一定值后再开启检测回波信号,以避免余波信号的干扰. 赔荊紳谘侖驟辽輩袜錈。 采用外部中断对回波信号进行检测(回波信号送到单片机的为一序列方波脉冲).接收到回波信号后,马上读取计数器中的数值,此数据即为需要测量的时间差数据.为避免测量数据的误差,Demo程序中对测距数据的处理方法是:每进行一次测距,测量多次,即取得多组数据,经过处理后得到这一次测距值. 塤礙籟馐决穩賽釙冊庫。 4.2 软件架构

本方案的软件系统主要包含下列模块:

1.超声波测距程序:负责超声波测距的控制、结果计算等,另外有部分代码在中断服务程序当中,主要代码在ultrasonic.App.c以及IRQ.c文件. 裊樣祕廬廂颤谚鍘羋蔺。 2.语音播放程序:语音播放控制,主要代码在Speech.h,而语音中断服务程序在isr.asm文件中,但为了使语音播放程序在初始化时不影响用户的其它中断,在isr.asm当中还有一个中断初始化程序. 仓嫗盤紲嘱珑詁鍬齊驁。 3.中断程序:主要指IRQ.c文件,包括超声波测距的中断服务代码,以及用于显示刷新的IRQ4中断服务程序. 绽萬璉轆娛閬蛏鬮绾瀧。 4.系统程序:主要指system.c文件,包含系统端口初始化、测量结果处理、以及显示刷新程序.

5.主控程序:负责控制整个系统的工作流程.

13

4.3 各模块程序说明 4.3.1 超声波测距程序

1.单次测距控制程序:

超声波测距的功能函数流程图见4-1.用户需要先调用模组接口初始化函数void Initial_ult(void),再调用该函数unsigned int measure_ult(unsigned int type)即可进行一次测距操作,函数返回值为测量结果.在单次测距函数当中,进入该函数进行测距,都会利用TimerB生成近似40KHz的波形,通过IOB9口输出,而这样的波形输出仅会持续0.5毫秒左右(实际上保证发送出去的40KHz脉冲信号超过二十个以上,具体的时长或个数由测距模式定),然后将TimerB设置为计数器模式,用来计量超声波从发射到接收的时间间隔长度,并启动TimerB的计时;当TimerB计时达到一定值时(具体的时间值由测距模式定)打开EXT1外部中断,等待回波反射的接收.当EXT1外部中断检测到回波信号的脉冲时,会在中断服务程序当中读取TimerB的计数值,并通过全局变量通知单次测距函数已接收到回波信号,以及所读取的当次计数值. 骁顾燁鶚巯瀆蕪領鲡赙。 每次测量接收到回波信号后,都会对测量的结果进行处理、换算,用户可以根据不同的应用对数据处理部分的程序作适当的调整.其中等待一定时间才开启EXT1外部中断的原因:压电式的电声传感器存在余波干扰,而有部份声波会沿电路板直接传到接收头,经接收电路的放大后,系统就有可能把它误认为是反射回来的回波信号.

瑣钋濺暧惲锟缟馭篩凉。

14

②EXT1外部中断程序

图4-1 超声波测距子函数流程图

当回波触发控制器的外部中断后,程序会转到EXT1外部中断服务子程序中,读取测量结果,并作数据的初步处理.流程图见:图4.3.2鎦诗涇艳损楼紲鯗餳類。

4.3.3 语音播放程序

图4-2 EXT1外部中断流程图

全方案采用A2000的语音压缩算法,播放A2000格式的语音资源,作为语音提示的功能;为了让系统在语音播放期间,其它的中断能照常工作;因此在每一次语音播放前,进行中断的初始化操作,实际上是利用了SACM语音库当中使用到的一个中断设置变量:R_InterruptStatus.该变量在语音库支持文件:hardware.asm当中定义;每次进行语音播放的初始化操作时,语音库当中会从该变量读取之前用户设置的中断,并以此为基础设置语音库进行语音播放所需要打开的中断.所以,中断的初始化操作,也就是将当前中户的中断设置情况写入变量:R_InterruptStatus当中即可. 栉缏歐锄棗鈕种鵑瑶锬。 另外,为了防止语音播报过于频繁,本方案采用2Hz时基进行计数,每次播放语音提示前,先判断距离上一次语音提示的播放是否超过3秒(即2Hz中断当中计数6次以上)?如超过则可以进行这次的播放,如果不符合要求,则退出. 辔烨棟剛殓攬瑤丽阄应。 图4-3为语音播放程序的流程图:

15

图4-3 语音播放程序流程

IRQ5的2Hz中断服务程序当中,对一个用于计数(时)的变量进行累加,以配合语音播放程序当中对两次播放的时间间隔的判断.为了避免出现不断累加,而溢出清零,在中断服务程序当中加入了限制,即当计数的变量计数值大于6(即超过了3秒),则关闭IRQ5的2Hz中断;等待下次播放语音时再打开2Hz中断.2Hz中断服务程序的流程图如图4-4峴扬斕滾澗辐滠兴渙藺。

图4-4 IRQ5的2Hz中断服务程序

语音播放程序还需要在FIQ的TimerA中断当中,调用语音播放的中断服务程序;

16