基于CAN总线的矿用语音广播对讲系统设计
3 软件设计
3.1 终端软件设计
对于语音传输系统而言,实时性是一个重要的评价指标。在该语音终端的软件设计中,引入了事件池的思想。事件池在具体软件实现上是一个封装好的结构体数组,数组的大小为事件池中能同时容纳的事件的个数,即在同一时刻,系统中允许最多发生事件的个数。
本系统软件设计中,响应外中断和功能函数的方式有两种:
①依据外部中断的类型或者功能函数的返回值,在结构体数组中依据事件参数初始化一个结构体变量,即在事件池中产生了一个待处理的事件。
②在结构体数组(即事件池)中,依据事件参数遍历查询相应的结构体,即依据事件参数遍历查询相应事件是否发生,并调用相应的功能函数;依据事件参数对该结构体进行处理,即对发生的事件进行处理;一个事件(结构体)处理成功结束后,重新初始化结构体中的事件参数,即把处理完的事件在事件池中销毁,如果事件处理失败,则不改变事件参数,等待下一轮的处理。
这样,微处理器在循环不断地处理事件(结构体)时,其实就是对系统中实时发生的各种情况进行快速响应,把封装好的结构体作为系统中各类事件的数学模型。本文引用地址://m.amcfsurvey.com/article/154096.htm
图4为系统终端进行语音数据流收发和编解码的软件事件池示意图。在本系统终端的软件设计中,按键扫描模块、CAN总线收发模块、语音编解码芯片CMX7261与LPC1768进行SPI数据通信等各种外部触发都采用了中断方式,减少了处理器的等待时间。在具体的软件设计上,在CAN总线的收发控制中设定了两级缓存,每级缓存都有对应的PUSH和POP两个变量来实时地作为收发缓存填充的标志,语音数据流在收发过程中做到了非阻塞,提高了语音数据流的传输效率和语音编解码效率。
当发生某一种特定的条件后,终端处理器并不是立马去执行相应的操作程序,而是产生相应的事件,初始化事件参数,放入软件事件池中。语音终端的软件设计由事件池作为系统软件的协调者,简化了软件的开发流程,使得软件开发层次清晰,效率高。
3.2CAN总线应用层协议设计
CAN总线的底层硬件工作于OSI的数据链路层和物理层,CAN总线网络通信协议仅解决了数据发送、接收、错误处理等底层硬件数据传输问题,对于应用层数据并没有规定相应的解析协议,应用层协议需要开发人员自定义,主要应考虑以下三个方面:数据帧格式确定、总线资源的分配、发送接收数据帧的分配。
该系统中,CAN应用层协议需要由开发人员进行设之间进行安全稳定通信的关键。所以,CAN总线技术,特别是CAN总线应用层协议是该系统设计中的一个关键点和难点。现在国内外存在一些现有的CAN总线应用层协议标准(CANopen、CANbus),本系统以这些应用层协议标准作为参考,结合本系统的功能设计出适用于该系统的CAN总线应用层通信协议。
本系统在CAN应用层协议的设计中,对于单个终端节点而言,在收到CAN总线语音数据的条件下(有CAN总线中断)没有发送语音的权利,即接收的优先级比发送的优先级高,这样就很好地避免了一条总线上语音数据流的冲突问题。在同一时间,整条CAN总线上最多只能有一对节点在进行语音数据的传输。
地面调度上位机在整个系统中是处于优先级最高的地位,当井下终端节点在进行广播通话的过程中接收有调度上位机的语音数据后,发送终端应该及时作出判断,关闭发送功能,转为接收调度上位机的语音数据。
在CAN总线的各个终端之间在进行数据发送接收工作时,调度上位机的控制信息仍然可以在总线中进行传输,不影响终端的语音传输的功能。终端节点在接收到调度上位机的控制信息后,应在空闲时进行相应的操作和回应。
结语
本文给出了基于G.729A语音编解码技术的煤矿井下语音传输系统构架、终端的软硬件设计方案和CAN总线应用层协议设计方案,用事件池的软件没计思路实现了G.729A压缩编码的语音数据流在井下CAN总线的实时安全传输,实现了话音和高质量语音信号在窄带宽的CAN总线上实时传输的功能。本系统的方案新颖,成本低,实现简单,对于煤矿井下语音传输系统的设计和开发有很好的借鉴意义。
评论