一、引言
对于拥有海量电话、日常办公繁忙的工作人员来说,使用手机查找和存储电话号码虽然方便,但也存在着查询不方便,工作效率低的缺点,且在某些山区等边远地区,手机通话质量远远低于固定电话。针对这种情况,本文介绍了一种基于 DTMF技术的智能拨号器系统,使用该系统可以方便地利用计算机进行电话号码的查找,更新和拨号。该系统与固定电话并联在电话线上,对固定电话的正常使用没有任何影响。此外,系统还具有通话质量好,保密性高的特点。
二、系统的组成及原理
1. 系统电路如图1所示,包括:带USB接口的ARM处理器电路,振铃检测电路,模拟摘机电路和 DTMF收发电路;
系统通过 USB接口与计算机相连,计算机上有专门用户界面供用户实现拨号,查询等操作。用户使用计算机拨号时,计算机将被叫号码和呼叫信息通过 USB口传送到 ARM处理器,ARM处理器控制模拟摘机电路摘机,并启动双音多频收发电路进行拨号连接。当有电话呼入 时,振铃检测电路检测振铃有效后,计算机用户界面上会提示用户“有来电,请摘机”。
2. DTMF技术介绍 DTMF双音多频系统是有线电话通信中的拨号方式。它具有多功能、误码低、高可靠、速度快等优点。双音多频信号(DTMF)是由一组低音频信号和一组高音频信号以一定方式的组合构成,每组音频信号各有 4个音频信号,而每种组合有一个高音频信号和一个低音频信号,共 16种组合。
低音频信号的标准值分别为:697 Hz、770 Hz、852 Hz、941Hz; 高音频信号的标准值分别为:1209 Hz、1336 Hz、1477 Hz、1633 Hz。 上述标准频率的选定不是任选的,而是设计时考虑了拨号音、忙音及交流电源的杂音,这些杂音均不在上述 DTMF信号的范围内,同时为了避免标准频率之间的谐波干扰出现,故所列最高标准频率小于最低标准频率的三次谐波频率。 三、硬件电路的组成 智能拨号器的硬件电路由 ARM存储器、振铃检测电路、模拟摘机电路和双音多频收发电路组成。ARM处理器是硬件电路的核心,它完成对其它电路控制和通信的功能,系统选用的是 ATMEL推出的基于 ARM的 32位闪存微控制器 AT91SAM7S64,它成本低,功耗小,具有丰富的外设资源,包括一个 USB 2.0设备。模拟摘机电路用于实现系统拨号前的模拟摘机功能,以便交换机判别出系统终端已经摘机,从而向系统终端发送拨号音提示用户可以拨号;振铃检测电路完成检测振铃是否有效的功能,如果振铃有效,振铃检测电路会发送方波信号通知 ARM处理器;双音多频收发电路是实现拨号功能的主要电路。下面对各个电路的硬件组成进行了详细的说明。
1. 振铃检测电路
由图 2知,振铃检测电路完成检测振铃是否有效的功能。当用户被呼叫时,电话交换机发来铃流信号。振铃信号为 25±3Hz的正弦波,电压有效值90±15V。振铃以 5秒为周期,即 1秒通,4秒断。振铃信号经圆桥整流后经光电隔离输出脉冲信号。该脉冲信号输入到74LS04中整形成方波信号,送入 ARM处理器 [1]。
2. 模拟摘机电路
图 3表示模拟摘机电路完成拨号前摘机和来电后自动摘机的功能,由于电话线上传来的信号的极性没有确定,圆桥可以稳定信号的极性,从正极输出端输出的永远是正极性,负极输出端输出的永远是负极性。模拟摘机电路工作与否由 ARM处理器传送到光耦(TLP521-1)第二个管脚的高低电平决定,当 ARM处理器传送过来的是低电平时,光耦合器开始工作,稳压二极管被反向击穿而稳压在 5.1V,三极管(2N5401)因基极电平被拉低而导通,回路电流值突增,电话交换机检测到该电流,将线路电压变为十几伏的直流,模拟摘机得以实现。若用户没有拨号,光电耦合器的 2端一直处于高电平,不工作,三极管没有被导通,电路回路呈现高阻抗。音频变压器起到隔离高低电压的作用,它右侧电路的功能是使得输出的信号控制在+/-15V以内。
3.双音多频收发电路 考虑到硬件电路的可靠性,在参考了大量资料后,系统选用 MT8880芯片来完成双音多频收发功能,MT8880芯片专业可靠,应用广泛,便于开发。 双音多频收发电路连接图见图4。
放大器的输出端可获得峰值 1V左右的双音频信号。MT8880可以接收呼叫过程中的各种信号音,以及 16种双音频信号。接收信号音和 DTMF信号共用同一通道,并且 MT8880不能同时接收 DTMF信号和信号音,要分时复用。信号音与 DTMF信号经耦合线圈,再经电解电容 C1和电阻R1,将电话线上的信号输入到 MT8880的输入端IN-。MT8880接收与发送的 DTMF信号由模拟摘机电路耦合[2-5]。MT8880作为 DTMF接收器时,将电话线传送来的信号经 MT8880转换成数字信号,由ARM处理器读入 [6]。
利用双音多频(DTMF)技术可通过电话线实现远程数据传输任务,其不足之处是速度太慢(约 80波特)。本系统可实现远程数据传输的功能,只需要通过软件编程在系统(被呼叫用户)接收到振铃后控制模拟摘机电路工作,实现模拟摘机,并设置芯片 MT8880工作在接收数据模式下。而呼叫用户在呼叫后,MT8880立即进入发送模式下,等待用户发送数据。
四、软件编程
本系统通过软件编程实现与 MT8880的部分端口的通信。系统选用 IAR作为软件开发环境,IAR的 Embedded Workbench 系列是一种增强型一体化嵌入式集成开发环境,其中完全集成了开发嵌入式系统所需要的文件编辑、项目管理、编译、链接和调试工具。IAR公司独具特色的 C-SPY调试器,不仅可以在系统开发初期进行无目标硬件的纯软件仿真,也可以结合 IAR公司推出的 J-Link硬件仿真器,实现用户系统的实时在线仿真调试 [3]。
在软件编程时要注意 MT8880上电延时 100ms以上,初始化时要将寄存器清零后才能使用[2]。
1. DTMF接收和命令解释程序 这段程序是系统模拟摘机后的程序,ARM处理器发送被叫号码到 MT8880芯片,部分程序如下,为了方便升级开发,均有详细注释://设置MT8880 模式为双音频工作模式(发送数据) 即配置CRA=1101,CRB=0000
dBytesCRA[3] = 1;
dBytesCRA[2] = 1;
……
dBytesCRB[3] = 0;
……
MT8880_WriteCRACRB(dBytesCRA, dBytesCRB);//将1101,0000 分别写入到CRA 和CRB
dLength = strlength(pSendNum); //保存要写入到MT8880 的被叫号码的长度
for(dL = 0; dL < dLength; dL++) { //连续发送dLength 个DTMF 信号
switch(*pSendNum++) { //判断ARM 处理器传来的字符型的电话号码
case '1':{
dBytesSend[3] = 0; //D3D2D1D0=0001
dBytesSend[2] = 0;
……
break;}
case '2':{
dBytesSend[3] = 0; //D3D2D1D0=0010
……
break;}
……
default:
{
break;
}
}
MT8880_WriteDataReg(dBytesSend); //写发送数据寄存器
for(iTemp = 5000; iTemp; --iTemp) {
MT8880_ReadStateReg(dBytesSReg); //读取状态寄存器的值
if(dBytesSReg[1] == 1) //判断状态寄存器的第二位是否为1
break; //即发送数据寄存器满,准备发送数据
}
2.信号音处理程序
首先将芯片 MT8880设置为呼叫处理、中断模式,信号音处理程序分为四大部分:一是拨号前检测是否允许拨号 ,即检测信号音是拨号音还是忙号音;二是拨号后检测是否接通,即检测信号音是回铃音、忙号音还是占线音;三是拨号接通后检测是否应答,即检测回铃音是否消失;四是检测各种信号音:拨号音、忙号音、回铃音。
各种信号音的特点:拨号音在 5秒内是连续音;忙号音在 5秒内 0.35秒通,0.35秒断;回铃音在 5秒内是 1秒通,4秒断。
3.串行通信程序主要功能是接收上位机的命令,执行相应的操作。将另撰文详说。
五、小结
首先对智能拨号器的硬件组成进行了详细的研究和说明,并对部分软件代码进行了解释。该系统已经测试使用,它具有成本低、功耗小、便于携带、功能易于扩展等特点,在一定的应用背景下有很好的使用前景。