基于CMX618与CMX7041的数字对讲机基带系统的设计
2009-07-08
作者:崔 振,谢晓明
摘 要:CMX618与CMX7041是CML开云棋牌官网在线客服公司推出的用于数字专网移动通信的专用芯片,本文介绍了基于CMX618[1]与CMX7041[2]的数字对讲机基带系统的设计,叙述了系统的硬件设计与软件设计,并阐述了芯片使用中的问题与经验。
关键词:CMX618;CMX7041;数字对讲机;基带;数字专网移动通信
数字对讲机拥有全新的技术,是一个新时代的产物,是模拟对讲机的更新换代产品。所谓数字对讲机,就是在其内部将语音信号进行数字化处理,并可以扩展其他数据应用功能的对讲机。它在以下三个方面有着模拟对讲机无法比拟的优势:(1)窄带通信,一路语音信号占用一个信道,信道带宽是12.5 kHz或者6.25 kHz,从而能很好地应对当今社会频谱资源日益缺乏的难题。(2)由于对语音信号的数字化处理使得在接收端对接收信号进行判决时消除了一定的噪声积累影响,而且在发送端对语音数字信号还可以进行信道编码的处理,这就使得数字对讲机的话音质量得到了进一步的改善。(3)由于内部设有数字信号处理机制,因此可以增加若干有关数据应用的扩展功能,例如短信息、视频信息等。欧美市场调查的数据显示:2003年数字对讲机与模拟对讲机的比例是2:8,在2004年上升为5:5,且预计2007年将达到8:2。我国目前市场上并没有自主知识产权的数字对讲机产品出售,国外公司例如摩托罗拉、艾可慕等,其研制的数字对讲机产品价格昂贵,使得一般的中小型企业无法接受。今年汶川地震时GSM网络的瘫痪,使得通信、救援等工作都受到影响,也使得对数字对讲机的需求变得异常强烈,还有我国公安、消防、建筑等行业部门对数字对讲机的强烈需求,所以拥有我国自主知识产权的数字对讲机亟待研发并被投入市场。
1 所选芯片介绍
笔者所设计的数字对讲机基带系统基于英国CML开云棋牌官网在线客服公司的语音编解码芯片CMX618和4FSK调制解调芯片CMX7041。参照的通信协议是ETSI(欧洲电信标准协会)发布的公用数字对讲机标准DPMR[3]。
CML公司研制的这两款芯片目的是应用于窄带的数字专网移动通信。CMX618是语音编解码芯片,内部集成A/D、D/A,采用RALCWI(鲁棒的先进的低复杂性波形插入)技术,可以将模拟语音信号转换成数字语音信号后,再压缩编码为位速率是3.6 kb/s的码流,其中的2.4 kb/s是纯语音数据,另外的1.2 kb/s是信道编码数据,压缩率很高,并且声音效果也不错。CMX618解码时可以将语音外带信道编码的数据先解码,再经D/A转换,送入耳机或扩音器。芯片内部结构框图如图1所示。CMX7041是4FSK方式的调制解调芯片。调制时,它可以将输入的数字信号进行4FSK调制,并且输出数字码流的速率可以是4.8 kb/s或者9.6 kb/s,可以应对信道带宽是6.25 kHz和12.5 kHz两种情况。在解调端,它可以将4FSK已调信号解调,得到原调制信号。其内部结构框图如图2所示。
基带系统的CPU选择的是ARM7TDMI-S内核的NXP的LPC2138[4],笔者使用外接12 MHz晶振,处理器时钟设置为48 MHz,这样高的时钟频率足以应对对讲机的工作,LPC2138的内部Flash为512 KB,其中大约256 KB的Flash用来存储字库,用于短信息的功能。总体来说这款ARM芯片是很合适的。
2 系统总体介绍
系统的总体框图如3所示。本设计中CMX618语音编码后的码流速率是3.6 kb/s,CMX7041将信号调制后码流速率是9.6 kb/s,所以一路话音占用的信道带宽是12.5 kHz。
在发送路径上,麦克将人的模拟语音转换为差分的电信号。将差分的电信号送入CMX618,在其内部将电信号进行A/D转换,之后将数字信号进行压缩编码,输出3.6 kb/s的数字码流,其中含有1.2 kb/s的信道编码数据。LPC2138通过SPI总线将CMX618输出的已编码数据读入到MCU内部开辟的数据缓存区中,之后将这些读入的数据与按照DPMR协议填充的协议数据一起再通过SPI总线送给CMX7041,CMX7041将得到的数据进行4fsk调制并发送至射频模块,再经天线发射出去。接收路径上,CMX7041将接收到的4fsk已调信号进行解调,将解调得到的信号经过SPI总线存储到MCU的缓冲区中,MCU再将缓冲区中的语音数据通过SPI总线送入CMX618待其解码,解码之后的差分语音信号送入扬声器即可还原出语音。
3 硬件电路设计
电路原理简图如图4所示,仅列出了与接口相关的引脚。
画PCB图时需注意以下几点:
(1)麦克输出的信号是差分的电信号,所以麦克的输出与CMX618的输入之间的导线应布成等长、等距离且距离尽可能近的差分线。从CMX618输出的信号到扩音器之间的导线同样应是差分线。
(2)为了获得可调节大小且分贝较高的声音,可以在CMX618与扩音器之间加一个音频功放芯片。芯片在较大功率时的声音完全可以满足对讲机的要求。大功率时,电流相应也较大,可以达到1.5 A左右,所以导线的宽度最好在1~1.27 mm之间。
(3)板子最好做成4层板。除了内层有电源层和地层以外,最好在顶层和底层也都铺铜,铺成地网络。为了使地平面充分相通,可以在顶层与地层、底层与地层之间多打一些过孔,这样也可提高散热性能。
4 软件设计
先介绍数字对讲机工作时参照的协议标准。笔者所使用的标准是ETSI(欧洲电信标准协会)发布的公用数字对讲机标准——DPMR,考虑到所使用芯片CMX7041的特性,在帧的结构上有所修改,如图5所示。为了保证语音数据的连续性,在MCU的RAM中开辟了两个缓冲区,每个缓冲区的大小都是1 896 bit,即237 B。对讲机工作时,轮流对这两个缓冲区进行读写数据的操作。
数字对讲机工作时发送端CMX618的工作流程图见图6,CMX7041工作流程图见图7。
数字对讲机最初处于检测PTT键是否被按下的状态。当PTT键被按下时,就启动CMX618开始编码。CMX618处于编码状态时,每80 ms会产生36 B即288 bit的已编码话音数据,并以中断方式通知MCU,MCU收到中断信号后就会启动其SPI外设从CMX618的内部寄存器中将这36 B的语音数据读到MCU的RAM缓冲区中。与此同时要根据DPMR协议填充相应的协议数据,这些协议数据用于得知呼叫与被呼叫者的ID,用于判断呼叫类型是单呼、组呼、短信息通信、还是图像通信等通信类型,因此关于协议的处理也是很重要的。每当产生4次中断,即320 ms时,就启动CMX7041,使其由IDLE状态转换为发送状态,将缓冲区中数据即语音数据与协议数据一起经调制后发送出去。
CMX7041的发送机制如下。会涉及到5个发送数据寄存器,1个数百字节的缓冲器,1个调制解调模块;5个发送数据寄存器,宽度都是16 bit,其中的四个半寄存器用于装载待发送数据,剩余的8 bit用于装载控制字节。CMX7041通过SPI总线将MCU缓冲区中的数据读入到这5个发送数据寄存器中,之后自动将这5个寄存器中的数据送入芯片内缓冲器中,每当一次送入缓冲器的操作完成,CMX7041就会产生一个DataReady中断,此时,MCU就将缓冲区中后面的数据再放到5个发送数据寄存器中。一直这样持续下去,直到MCU中前一半或者后一半缓冲区中的数据都被送入CMX7041中。之后MCU所做的就是等待Txdone中断的发生。Txdone中断的发生就意味着MCU中缓冲区中的数据都被CMX7041调制完成并发送完毕。值得注意的是CMX7041内的缓冲器。它既时刻接收由5个发送数据寄存器送过来的数据,同时也在按照9.6 kb/s或者4.8 kb/s的速率向调制解调模块发送数据,以供调制解调模块将数据进行4fsk的调制。也就是说缓冲器在接收数据的同时,也在送出数据,是一个动态的平衡过程。有一点很重要,就是一定不能让这个缓冲器里面为空,这样就会发生并不希望的Txdone中断。在不希望的Txdone中断之后,如果CMX7041再没有得到来自MCU的使其从IDLE状态转换成发送状态的命令,则其不会再调制任何数据和发送任何数据。这样必然导致接收端无法正确解调数据,最终导致双方通信的失败。所以,必须在CMX7041发生DataReady中断的时刻立即向5个发送数据寄存器写数据,既不可以在中断发生之前写(写数据过快,CMX7041来不及处理,缓冲器会溢出),同样也不能在中断过后很久再写(芯片内的缓冲器会空,随之产生Txdone中断)。还有一个非常容易出问题的地方,就是DataReady中断发生的时间间隔问题。CMX7041这款芯片在这个问题上很智能,它会针对内部缓冲器的填满程度而自动改变DataReady中断发生的时间间隔。例如:笔者设计的这个基带系统,CMX7041工作于9.6 kb/s的模式,即每秒发送9600 bit位,每产生一次DataReady中断,相当于发送了72 bit,则可推算出DataReady中断间隔应该是7.5 ms,然而事实上并不是这样。调试程序时发现,中断产生的间隔不到1 ms。之所以这样,是因为在MCU中开辟的缓冲区是237 B,即每次CMX7041会调制并发送237 B的数据,数据的数量相对于CMX7041内部数百字节的缓冲器来说并不多,缓冲器不会填得太满,所以就出现了这种中断产生速度要快于之前计算时间的情况。笔者又用一个例子来验证,使CMX7041以死循环的发送方式发送数据,此时,要发送数据的数量远远大于芯片内部缓冲器的大小,再观察产生中断的时间间隔,确实变成了7.5 ms,验证了推测。
CMX618产生的已编码数据的速率是3.6 kb/s,CMX618产生4次中断即320 ms会产生144 B数据,再加上协议数据共有237 B,此时启动CMX7041进入发送状态,CMX7041以9.6 kb/s的速率调制并发送这些数据需要197.5 ms。CMX7041发送数据时有个特性,会自动在要发送的数据前面添加72 bit的前导码与48 bit的帧同步码,这又会消耗12.5 ms,因此CMX7041仅需要210 ms就可以将CMX618在320 ms内产生的数据发送完毕。发送完毕之后,CMX7041要进入IDLE状态等待,在下一个320 ms到来的时刻再启动新一轮的调制与发送。
数字对讲机工作时接收端CMX7041的工作流程见图8,CMX618工作流程图见图9。
最初使CMX7041进入接收状态,芯片会自动检测帧同步,若检测到,会产生中断来告知MCU,之后MCU等待DataReady中断,DataReady中断发生就意味着调制解调模块已经解调好9 B的数据。此时,MCU将这9 B数据通过SPI总线从5个接收数据寄存器中读出放入MCU开辟的缓冲区中。当CMX7041接收并解调完一整帧数据,即243 B时,CMX7041进入IDLE状态,并置位使能CMX618解码的标志位,在经过一个时间长于1 ms的延时之后CMX7041进入接收状态,以便检测下一帧数据的到来。值得注意的是,此处必须加延时,否则,CMX7041会工作不正常。
在CMX7041接收到最后一帧数据之后,要将CMX618停止解码的标志位置位,MCU在检测到此标志位后使CMX618由解码状态进入IDLE状态。MCU根据缓冲区中的协议信息得知这一帧是否为最后一帧,有关协议信息的处理,此处不再赘述。
当使能CMX618解码的标志位置位之后,立即启动其进入解码状态。CMX618每隔80 ms产生一次中断,来表明其需要接收新的数据以供其内部的解码器进行解码,所以在CMX618产生中断之时,MCU通过SPI总线将缓冲区中存储的语音数据送入CMX618对应的寄存器。CMX618解码时,MCU每隔一定时间要检测停止解码的标志位,如果检测到标志位已经置位,则CMX618必须由解码状态转换为IDLE状态。以上的通信流程在理想的通话环境可以很好地工作。
为了使系统可以很好地应用在随机的、恶劣的无线信道的环境中,需要以下措施:
(1)在无线信道中丢帧是很正常的,可以设置一个计数器,CMX7041收到帧时递增,CMX618每解码一帧数据将计数器递减。实际应用中,如果丢帧太多,计数器会递减到0,也就表明收到的语音数据都被解码,没有新的数据可供解码,此时使CMX618由解码状态进入IDLE状态。当CMX7041又接收到新的数据后,再启动CMX618解码。在信道条件不好时,CMX618就会频繁地切换状态,这是很正常的。
(2)考虑到无线信道丢帧的频繁性,将帧的长度设计得比较短,本设计中的长度是243 B。每丢一次帧带来的影响是丢掉320 ms的语音数据。如果帧长度较长,丢失的语音数据也会较多。
本文设计的基带系统已经应用在数字对讲机的样机研发当中,测试效果不错,有很好的应用前景。
参考文献
[1] CML Microcircuits Inc.CMX608/CMX618/CMX638 RALCWI vocoders datasheet.http://www.cm1micro.com,2008,3.
[2] CML Microcircuits Inc.CMX7031/CMX7041 the two-way radio processor 4FSK data modem datasheet.http://www.cm1micro.com,2007,4.
[3] ETSI.ETSI TS 102 490.http://www.etsi.org,2005,12.
[4] NXP Inc.LPC2131/2132/2134/2136/2138 datasheet.http://www.nxp.com,2005,4.