引言
自1999年网络电话试验网开通以来,随着软交换技术的发展,网络电话的通话质量有了明显改善[1]。由于网络电话采用数据压缩与分组交换方式传递语音信息,占用带宽仅有传统电话的1/5,因此有非常明显的价格优势,越来越多的用户在使用IP电话[24]。参考文献3对Voce Over Internen Protocol电话终端进行了研究与探讨,参考文献[4]~[7]对SIP协议的VoIP系统进行详细论述。但普遍存在的问题是这些系统硬件设计都比较复杂。本文所设计的VoIP终端电路结构简单、价格低廉、性能稳定可靠。下面主要从硬件和软件方面阐述该终端的设计及实现过程。
1 硬件设计
1.1 硬件系统总体结构
本系统由USB矩阵键盘、单片机、语音电路、D类功放音频接口电路4个部分组成。单片机完成矩阵键盘按键识别,并负责通过单片机自带的USB接口发送数字代码给PC机上的USB主机;语音电路完成按键语音播报功能;音频接口电路主要是用D类功放电路对音频线语音信号进行放大,完成挂机时语音外放功能,并对摘机和挂机两种状态的语音进行分流。系统框图如图1所示。
图1 无线通信单元系统框图
整个系统由USB接口提供5 V电源。
1.2 USB矩阵键盘电路设计
矩阵键盘采用非编码式行列键盘,电路原理图如图2所示。电路结构简单,在按键去抖动方面,未采用专用键盘芯片或门电路作硬件处理,也没有采用延时查询方式去抖动,而是采用实时操作系统的任务调度设计方法,用定时扫描和计数去抖的键盘处理方法。按键有数字0~9、回车键、开始拨号键、删除键。
经过软件处理好的按键代码通过USB接口发送给计算机USB主机。SONIX2202是一款带USB1.1内核的高性能廉价、低功耗单片机。USB高速方式的传输速率为12 Mbps,低速方式的传输速率为1.5 Mbps,完全可以满足发送键盘码的要求。
图2 矩阵键盘电路原理图
1.3 语音电路设计
系统核心芯片选用台湾Nyquest公司单晶片CMOS语音合成芯片NY3P010AS8,可通过专用工具将数字0~9、回车键、开始拨号键、删除键以及其他需要录制的中文语音依次烧写到该OPT芯片中,然后通过单片机编程,读取各个地址的声音文件。外围电路仅需一个电容和一个喇叭即可工作。电路原理图如图3所示。
图3 语音单元电路原理图
BUSY引脚在芯片工作时(播放声音),输出低电平,停止工作或者待机时保持高电平;DATA引脚是接收控制脉冲的脚位,收到几个脉冲,就播第几个地址的语音内容;RESET引脚在任何时候,只要收到一个脉冲,就可以使芯片的播放指针归零,同时停止芯片工作,进入待机状态。
1.4 D类功放音频接口电路设计
为了实现挂机时语音的外放功能,本设计采用D类功放芯片AX2012作为音频的放大芯片,并用一个叉簧开关转换摘机和各个挂机的语音分流。电路原理图如图4所示。AX2012是一款国产低功耗立体声无滤波器类D类音频放大器,有QFN20和SOP16两种封装形式。该芯片的工作仅需很少的外部元件,可以选择的增益为6、12、18、24dB,可利用G0和G1进行增益选择,同时该芯片具有较高的抑制噪声的性能。
2 软件设计
2.1 新型非编码式矩阵键盘软件设计
传统的非编码式键盘软件系统设计中,由于软件延迟去抖法存在两大缺点:程序浪费大量时间而不能执行其他任务,系统的实时性不好;在噪声影响下,很可能刚好两次检测都为抖动信号,造成键码误判。因此本设计采用新的算法[8],整个软件系统主要分为按键扫描子程序、去抖动子程序和计算键码值三个部分。
图4 D类功放音频接口电路原理图
按键扫描子程序负责将外部按键信息读入到内部缓冲器中。下面以0~9数字键为例,在RAM中创建一个按键信息缓冲区,将每个键的状态读入缓冲器中,如表1所列。
表1 键码缓冲区
去抖动子程序设计为逐行扫描,且每调用一次子程序只扫描一行,其流程图如图5所示。
图5 按键扫描子程序流程图
新的消抖程序设计思想是:当第一次检测到有按键按下时,程序首先设有键按下的标志位,并打开计时器开始计时,然后转去执行其他任务。之后,每运行到键盘操作,程序都会检测对应键的状态,当计时时间到时,键盘消抖处理程序已经执行了n次,进行了n次按键状态的检测。只有当n次检测键的状态都没有发生变化时,消抖处理结束,确认本次是一次有效的按键,只要有一次检测到对应的键的状态发生变化,就认为此键操作无效。
计算键码值程序部分是将键盘上对应位置按键代码转换为人为定义的数据或者符号。
2.2 语音软件设计
语音程序部分是通过语音的方式播报出所按下的按键数字或者符号。
该语音芯片的控制方式是采用模拟串行控制方式,如需要播放第几个地址的内容就发送几个脉冲。脉冲时间大于0.2 ms即可,一般可采用1 ms左右。部分源代码如下:
Void yuyin(x){ //播放地址x段的语音
RST=1;//发送给RST一个2 ms脉冲
Delay_ms(2);
RST=0;
Delay_ms(2);
While(x>0){
DATA=1;//发送一个1ms选择脉冲
Delay_ms(1);
DATA=0;
Delay_ms(1);
x--;//没有发送完,则继续发脉冲
}
}
结语
本文研究了一种利用廉价低功耗USB单片机设计网络电话机的方法,系统电路简单可靠,即插即用。使用方法与传统座机类似,操作非常简单,且具有语言拨号等功能。本装置硬件成本非常低廉,使用范围广泛,具有广阔的市场前景。