仝林林,陈 璇
(山西银河电子设备厂,山西 太原 030000)
在进口元器件形式日益严重的今天,全国产化产品的重要性越来越凸显,尤其在保密要求比较高的应用中,自主可控成为更多产品的一项重要指标[1]。同时,在很多产品中,人们都可以看到话音系统的身影[2]。基于此,本论文设计了一款全国产化话音系统。
该系统由发射系统、接收系统和MCU控制系统组成。发射功能主要由北京中科汉天下的FM发射芯片HS6760完成。该芯片是一款高性能立体声调频发射芯片,同时支line-in输入和直接MIC输入。由于本文的话音系统的输入为手柄,所以本文设计单声道输入。接收功能由北京昆腾公司的芯片KT0863R实现,该芯片支持的频率范围为32 MHz~110 MHz,具有很高的信噪比和接收灵敏度。由于专有的调谐技术,即使使用很短的天线,接收机也能保持良好的信号接收,而且该芯片的集成度很高。这减少了外围器件的数量,为产品的小型化提供了很大便利,同时提供了真正的单芯片、全波段调频和多功能无线电解决方案。由于该芯片含有数字低中频架构和内部集成LNA自动增益控制,所以无需外部滤波器和频率调谐设备。此外,该芯片高性能的模数转换器高质量的模拟和数字滤波器以及片内高保真的AB类驱动器和低噪声自调谐VCO,进一步消除了外部音频放大器的需求,可以直接驱动立体声耳机,大大简化了系统的硬件设计。
芯片HS6760和KT0863R控制接口均为IIC接口,本系统通过GD32F107实现对收发芯片的配置功能[3]。IIC接口是由START信号、命令字节、数据字节,及每个字节后的ACK或NACK比特,和STOP组成,命令字节包括一个7比特的chip 地址(0011000b)和一个读写r/w 命令比特。
MCU通过发送不同的器件地址和读写位组成的命令字节,分别实现对芯片HS6760和芯片KT0863R的配置,同时,通过判断接收信息的地址,来判断读取的状态信息为发射芯片还是接收芯片。
HS6760的器件地址为0011000B,加上读写标志位,即为0x30(写操作)和0x31(读操作)。KT0863R的器件地址为01101010,加上读写标志,即为0x6A(写操作)和0x6B(写操作)。读写方式采用标准IIC接口协议。
本文的MCU选择兆易创新生产的GD32F107芯片,该芯片完全兼容STM32F107,具有丰富的外设和GPIO资源,包含本设计中需要的IIC接口。HS6760和KT0863R均支持多种晶体振荡器。本方案中,HS6760选择北京晨晶的12 MHz晶体振荡器,KT0863R选择32.768 KHz产品,并在软件中做相应配置,供电选用上海贝岭的电源芯片BL8034和BL1117,从而实现了话音系统的全国产化设计。
在其他外围电路中,选用了发光二极管作为信号指示灯,蜂鸣器产生振铃信号,按键产生呼叫信号和接通语音。
为了收发电平匹配,本方案分别在发送端和接收端均设计了T型和pi型衰减网络,在实际测试过程中,可以根据测试结果对电阻阻值进行调整,具体原理图设计和实物局部如图1和图2所示。
图1 HS6760原理
图2 KT0863R原理
软件利用C语言进行实现,分为系统配置、外设配置、收发芯片配置、振铃处理、通信状态指示等几部分功能。
其中,收发芯片配置分别为对芯片HS6760和KT0863R的配置,对收发芯片的配置接口为IIC接口,由于收发芯片具有不同的芯片地址,所以主程序利用一个IIC接口,通过CHIP ID实现对不同芯片的控制。进行对芯片KT0863R的具体配置过程如下。
(1)配置ratio_n。
(2)配置外部时钟。
(3)配置ratio_p。
(4)配置其他一些参数。
HS6760的具体配置过程如下:
(1)设置芯片工作模式为Normal mode,通过写寄存器0x01为0x06来实现。
(2)打开音频通路,通过写寄存器0x11为0x01来实现。
(3)手动调大频偏,通过写寄存器0x1d为0x70来实现。
(4)复位操作,通过将寄存器0x07 的最高位(bit7)先置0,延时10 ms,再置1来实现。
(5)设置频点,HS6760 覆盖的波段范围为27 MHz~125 MHz ,最小频率步进为50 KHz 。HS6760芯片频点的设置可以通过配置寄存器0x00和0x01来实现。频点设置完后,还应写寄存器0x02的最低位(bit0)为0,延时10 ms,然后再写0x02 的最低位(bit0)为1,来使设置的频点生效。
在传统的话音系统中,振铃信号都是在硬件设计的基础上,搭建软件实现的。在本设计中,振铃功能是纯软件实现。设计思路为,线路空闲时,有一个默认频点,系统检测呼叫按键是否被按下。若按下,发送端将从空闲状态下的代码切换到通信时的预设频点,然后接收端间隔固定时间检测目标频点信号电平,即利用KT0863R的SNR和RSSI寄存器进行设计。当目标频点信号电平超过预设值时,认为振铃信号到达,本地蜂鸣器进行通信提醒,程序等待接通按键响应,从而达到收发通信的建立。在硬件GPIO资源比较缺乏的时候,该设计可以节约控制芯片的2个管脚。
在呼叫机制中,设计了相互独立的各种工作状态,用于判断本端和对端的呼叫与被呼叫状态。利用两台设备实际对通信过程中的工作状态对此进行说明,分为本端设备和对端设备。这些状态分别如下。
(1)本端按键呼叫状态。此时MCU外部线中断接收按键信号,然后控制占用灯闪烁,并切换到对应的工作频段,使得通信链路频点一致,链路信噪比提升,这也是对端判断是否被呼叫的依据。此时,本端处于正在呼叫对端,等待对端接通的状态之中,同时呼叫超时计时器开始计时。
(2)本端呼叫,对端未接听,超时自动挂断。当本端呼叫后,若对端一直未接听,那么当本端的超时计时器计数到达设定值后,本端自动挂断,即控制占用灯不再闪烁,同时切换频点到空闲频点上,以切断通信链路,降低信噪比,这也是对端判断没有被呼叫信号的依据。
(3)本端呼叫,对端未接听,本端按键挂断。这描述的是当本端呼叫后,若对端一直未接听,那么在本端的超时计时器未到达时间之前,由本端人员主动按下挂断按键。此时,MCU接收按键挂断信号后,软件应与状态2响应一致,即控制占用灯不再闪烁,同时切换频点到空闲频点上,以切断通信链路。
(4)本端呼叫,对端接听。此时,通信链路处于信噪比较高的状态,可以直接使用手柄进行语音通话。
(5)接通时,本端挂断。这是描述当语音通话结束后,由本端主动挂断的一种状态,此时本端应控制空闲灯打开,占用灯熄灭,并且应切换频点到空闲频点上,切断通信链路。
(6)本端收到呼叫信号。这是描述当本端空闲时,根据信道的信噪比值,判断是否有对端的呼叫信号,然后使蜂鸣器发出振铃信号,提醒工作人员收到呼叫。
(7)本端收到呼叫,按下接通按键。当本端按下按键接通后,应切换对应的空闲频点到工作频点,打开通信链路,使信噪比达到通语音的条件。
(8)接通时,对端挂断。当接通时,检测到通信链路中的信噪比急剧降低时,判断此时应为对端挂断,应切换本端的状态灯显示状态,同时切换工作频点到空闲频点上。
(9)空闲状态。这是指当本端不做任何操作,也未收到对端呼叫时的一种初始状态。在空闲状态时,降低发射芯片的发射功率,降低功耗,同时使频率保持在空闲频率,另外还要轮询信号值的大小,及时检测是否有对端呼叫。
以上9种状态是设计呼叫机制的关键状态,分清楚9种状态中软件应如何控制硬件响应,这样才能够独立地设计9种状态对应的控制代码,使呼叫中的这几种状态相对独立,条理清晰。其中,软件中使用的响应机制分别为:按键使用了外部线中断进行响应;超时计时器使用了MCU的普通定时器进行设计;状态灯使用了普通IO口进行驱动;蜂鸣器使用了普通IO口进行驱动,并使用定时器调节占空比,控制输出信号频率。合理地使用各种中断响应机制,能够充分发挥MCU的性能,提高嵌入式系统的实时性。
使用了9种不同的呼叫状态,根据外部信号的触发来响应不同的状态,各个状态之间相互独立,逻辑清晰,有益于代码的功能实现和后期维护。
在软件整体设计上,采用了主程序和中断结合的方式。在对各个硬件完成初始化配置之后,系统便开始不间断地轮询工作频点上的信号值的大小,以及时响应对端的信号呼叫,同时在不同的接收中断中响应各个外部触发信号,这样提高了软件工作效率,提高了MCU硬件资源的利用率。
本系统的软件设计主要包括系统时钟初始化,IIC接口初始化,HS6760和KT0863R芯片配置及初始化,等待呼叫按键响应,检测接收信号大小,改变LED指示灯状态,改变蜂鸣器状态,等待挂断信号等几部分。算法结构如图3所示。
图3 算法结构
本文利用GD32F107作为控制芯片,HS6760作为发射芯片,KT0863R作为接收芯片,搭配软件,实现了一种全国产化话音收发系统,并利用KT0863R的指定频点信号功率检测功能,实现了收发信统的振铃功能,节约了硬件GPIO资源,简化了软件设计,达到了预期功能的实现,对类似设计具有一定的指导意义,同时为全国产化话音系统提供了一种解决方案。