公共电话网和全球移动通信网(GSM)的语音和数据量的传输主要通过DTMF技术实现。本文介绍了一种基于DTMF收发技术和无线射频技术相结合实现远程控制的方法。例如在办公室打电话回家远程查询、开启或关闭家里的各种电器设备,使生活变得更加舒适安全便捷;也可以应用于对人有毒害的工作场合,工人可以通过远程操作相关的设备完成特定的工作内容。
1.1 DTMF电话原理介绍
双音多频DTMF(Double Tone MultiFrequency)作为实现电话号码快速可靠传输的一种技术,具有很强的抗干扰能力和较高的传输速度,可用作电话的音频拨号,也可以在数据通信系统中用来实现各种数据流和语音等信息的远程传输。
DTMF是用两个特定的单音频组合信号来代表数字信号以实现其功能的一种编码技术。国际上采用的频率有:697 Hz、770 Hz、852 Hz、941 Hz、1 209 Hz、1 336 Hz、1 477 Hz 和1 633 Hz 等8种。用这8种频率可形成16种不同的组合,从而代表16种不同的数字或功能键,具体组合如表1所示。
DTMF信号的产生原理:双音频信号是两个正弦波信号的叠加,选定两个频率f1和f2后很容易地得到这种信号的数学表达式:Asin(2×π×f1×t)+Asin(2×π×f2×t)。
1.2 电话通信的实现
1.2.1 振铃音的检测
当用户被呼叫时,电话交换机发来铃流信号,振铃为(25±3) Hz的正弦波,谐铃失真不大于10%,电压有效值为(90±15) V。振铃以5 s为周期,即1 s送、4 s断。根据振铃信号电压比较高的特点,可以先使用高压稳压二极管进行降压,然后输入至光电耦合器。经过光耦的隔离转换,从光电耦合器输出的波形是时通时断的正弦波,经过RC回路进行滤波输出标准的方波。方波信号就可以直接输出至单片机的中断计数器输入口,完成整个振铃音检测和计数的过程,如图1所示。
1.2.2 自动摘挂机
程控电话交换机对电话摘机的响应是电话线回路电流突然变大至约30 mA,即当程控交换机检测到电话线回路中的电流变大时,则认为电话机已经摘机。
自动摘挂机电路可以通过单片机控制一个继电器的开关,继电器的控制端将一个约300 Ω的电阻接入电话线两端,从而完成模拟摘挂机,如图1所示。
1.2.3 双音频解码
本文使用电话专用的双音频编解码芯片MT8880进行输入双音频信号的解码。经过专用集成电路的解码,信号转换成为不同的码制信号,可以直接被单片机读取。
1.3 DTMF信号收、发芯片MT8880简介[2]
MT8880是加拿大MITEL公司生产的DTMF收发一体的集成电路,该芯片集成度高,内部含有一个带增益可调放大器的DTMF接收器和一个DTMF发送器。接收器采用集频带分离滤波器和数字解码为一体的结构形式。其中滤波电路采取高频群和低频群两个六阶开关电容滤波器,解码采用数字计数器技术来确定输入DTMF信号的频率,并译成4位二进制码。发送器采用开关电容D/A变换器,可发出16种双音多频DTMF信号。接收部分用于完成DTMF信号的接收、分离和译码,并以4位并行二进制码的方式输出。
1.4 MT8880与单片机控制接口
MT8880使用标准的单片机控制接口,单片机可以精确地完成接收和发送功能,允许单片机访问其内部一个状态寄存器、2个控制寄存器和2个数据寄存器。
MT8880内部有2个数据寄存器,一个是只执行读操作的接收数据寄存器RDR;另一个是只执行写操作的发送数据寄存器TDR。另外,MT8880中还有2个4位的收、发控制寄存器CRA和CRB(这2个寄存器位于同一地址空间)。对CRB的操作通过CRA中的一个特定位b3来实现,在写CRA后,接着对同样地址进行特定操作以 把数据写入CRB,再次写时又指向CRA。在上电时,内部设置电路先要清除控制寄存器,因此作为防范措施,软件应设置清除寄存器的初始化程序;而MT8880中的4位状态寄存器SR则用来反映收、发信号的工作状态。寄存器的选择与操作由RS0和R/W口线来控制,当需要接收DTMF信号时,首先往控制寄存器CRA和CRB写入相应的控制字,把MT8880芯片设置为DTMF模式,通过读取状态寄存器中的D2位,可以判断是否收到一个有效的DTMF信号并已译码。若已收到则读取内部“接收数据寄存器”的内容(从MT8880芯片的D0~D3脚读出)。当需要发送DTMF信号时,同样应先往控制寄存器CRA和CRB写入相应的控制字,把MT8880芯片设置为DTMF模式,通过读取状态寄存器中的D1位,可以判断是否发送完一个 DTMF信号。若已发送完,则把下一个要发送的数字由D1~D3脚写入到内部“发送数据寄存器”。如果MT8880芯片同时又被设置为中断模式,则通过检测IRQ端状态,也能判断一个DTMF信号收到或发送完毕与否。其应用电路见图1。
1.5 手机模块与单片机控制接口
绝大多数的手机也与固定电话一样有振铃信号,也可以收发DTMF信号,只要对普通手机稍做改动即可,即把手机的铃流信号接出来,同时把手机的耳机口分成两路(一路为DTMF输出即耳麦线,另一路为DTMF输入即话筒线),手机模块与单片机的接口电路如图2所示。
2 射频技术及其硬件电路设计
微功率无线射频技术主要用于特定环境下的数据传输,常用于现代家庭多路电源的集中控制、智能小区物业管理、防盗报警、无线水塔控制、无线抄表、航空、航模和遥控遥测等场合。
本文采用的无线编解码芯片是PT2262/2272,是***普城公司生产的一种CMOS工艺制造的低功耗低价位通用编解码电路,PT2262/2272最多可有12位(A0~A11)三态地址端管脚(悬空、接高/接低电平),任意组合可提供531 441个地址码,PT2262最多可有6位(D0~D5)数据端管脚,设定的地址码和数据码从17脚串行输出,可用于无线遥控发射电路。
本文使用的无线发射头与无线接收头是现成的模块。单片机与无线发射头的接口电路框图如图3所示。无线接收头经解码输出后驱动电路框图如图4所示。
3 远程控制应用实现
为了实现对多点设备的控制,无线编码芯片PT2262的地址线选用A0~A7地址脚和D0~D3数据脚,这12个口线均通过单片机AT89S52来控制。由于单片机很容易实现“0”和“1”控制,所以单片机对A0~A7这8个地址线的控制可实现256种状态,即最多可以控制256种设备(每一个PT2272解码芯片输出对应于一种受控设备);同样地,单片机对D0~D3这4条数据线的控制可实现16种状态,即对同一设备可实现最多16种方式的操作。本文实现的是异地远程呼叫处理工厂各个无人操作车间的测试仪器,并能遥控操作进行相关的测试任务。系统框图如图5所示。
系统的工作流程如下:单片机主板可以接入固定电话线也可以接入一个手机模块(专为没有预装固定电话的区域使用),操作员在异地拔打本地电话号码(或手机号码),单片机主板会自动检测振铃信号,然后自动摘机,并提示操作员输入密码。当单片机主板验证通过后,操作员就可输入地址码(对应于一台测试仪器,如001号)和操作码(当前测试机的测试任务,如A字符,代表打开测试机电源),单片机主板识别后,通过编码芯片送给无线发射头,无线发射头按特定的规则送出地址码和操作码,每一台测试机上的无线接收头都能接收到该无线信号,但只有与编码芯片的地址匹配的那台测试机才会响应并执行操作码。
4 软件实现
软件部分主要分为三部分:(1)正确检测到固定电话的振铃音并自动摘机或手机模块自动接通接听中的铃流信号;(2)对DTMF信号的接收和发送处理,实现身份认证、向用户发送提示音、接收用户输入的控制指令等。(3)控制编码芯片地址线和数据线,从而把控制指令无线传输出去。
4.1 固话振铃音的检测及处理
针对固定电话、结合图1,单片机AT89S52的TEST脚检测到固定电话振铃检测信号波形,AT89S52只要判断TEST脚的电平变化即可以正确检测外线是否有电话拨入,然后控制TRI脚吸合继电器实现模拟摘机。
针对手机模块、结合图2,本文选用的是一款诺基亚手机(手机设为自动接听模式),经局部改造提到铃流信号线送入单片机AT89S52的GSM-RING的IO脚上,常态下为高电平,当有电话打过来时,GSM-RING的IO脚上得到的波形如图6所示。所以单片机只要AT89S52判断GSM-RING的IO脚的电平变化情况就可以了。
4.2 DTMF信号的收发处理
当固定电话或手机模块自动摘机后,则启用DTMF收发处理程序(主要是对MT8880芯片的处理),关键的程序代码如下[3]:
“读MT8880状态或数据寄存器”函数:
//功能说明:读取MT8880状态寄存器
//输出参数:返回MT8880的状态寄存器值
//DTMF_REG为与MCU的接口寄存器,在“DTMF.H”有定义
uchar DTMF_CPR(void)
{
uchar uc_data;
DTMF_Q2=1; //Q2=1产生Q2的上升沿
_nop_(); //Q2的高电平持续
_nop_();
uc_data=DTMF_REG; //读MT8880状态寄存器
uc_data=uc_data&0x0f; //屏蔽高四位,只取低4位
DTMF_Q2=0; //Q2=0完成一个Q2时钟
return(uc_data);
}
“写MT8880控制或数据寄存器时序”函数:
//功能说明:MT8880的Q2时序控制
void DTMF_CPW(void)
{
DTMF_Q2=1; //Q2=1产生Q2的上升沿
_nop_();//Q2的高电平持续
_nop_();
DTMF_Q2=0; //Q2=0完成一个Q2时钟
}
“MT8880发送前的初始化”函数:
//功能说明:发送前的初始化(对MT8880控制寄存器的
//操作)
void DTMF_send_init(void)
{
DTMF_REG=0x49;
//写1001到MT8880控制寄存器CRA(允许发送)
DTMF_CPW(); //写入控制器寄存器
DTMF_REG=0x40;//写0000到MT8880控制寄存器CRB
DTMF_CPW(); //写入控制器寄存器
}
“MT8880接收前的初始化”函数:
//功能说明:接收前的初始化(对MT8880控制寄存器
//的操作)
void DTMF_rec_init(void)
{
DTMF_REG=0x4C;
//写1100到MT8880控制寄存器CRA(使能中断模式,
//接着写CRB)
DTMF_CPW(); //写入控制器寄存器
DTMF_REG=0x40; //写0000到MT8880控制寄存器
//CRB
DTMF_CPW(); //写入控制器寄存器
}
“MT8880接收1位DTMF”函数:
//功能说明:接收1位DTMF信号
//返回参数:接收到数据存于A
//DTMF_REG为与MCU的接口寄存器,在“DTMF.H”有定义
//READSR为读状态寄存器SR时临时存储器,在“DTMF.H”
//有定义
uchar DTMF_rec_1byte(void)
{
uchar uc_data;
DTMF_REG=0x6f;//CS=0 RS0=1 RW=1 Q2=0
READSR=DTMF_CPR(); //读状态寄存器SR
while(SRB2!=1);
//判断SR的b2=1吗?=1说明收到有效数据
DTMF_REG=0x2f;
uc_data=DTMF_CPR(); //读取数据
return(uc_data);
}
“MT8880发送1位DTMF”函数:
//功能说明:发送1位DTMF信号
//输入参数:待发送数据给A
//DTMF_REG为与MCU的接口寄存器,在“DTMF.H”有定义
//READSR为读状态寄存器SR时临时存储器,在“DTMF.H”
//有定义
void DTMF_send_1byte(uchar uc_data)
{
DTMF_ON();
DTMF_Q2=0;
DTMF_RSO=0;
DTMF_RW=0;
DTMF_REG=uc_data;
DTMF_CPW();
delay_ms(130);
//突发模式,送出后延时的100 ms再读状态寄存器
DTMF_REG=0x6f;//CS=0 RS0=1 RW=1 Q2=0
READSR=DTMF_CPR();
}
4.3 对编码芯片地址线和数据线的控制
已正确识别用户通过DTMF技术输入的控制指令后,单片机只要控制8位地址线和4位数据线这12个IO口的高低电平就可以启动无线传输。而在无线接收端是由硬件电路自动完成的,不需要软件控制。
本文介绍的技术已在实际项目中运用,系统运行稳定。如果增加语音提示功能,则整个系统能做得更加完善和更加人性化。要实现语音提示功能,只要增加一块语音录放芯片就可以了。
评论
查看更多