公共電話網(wǎng)和全球移動(dòng)通信網(wǎng)(GSM)的語(yǔ)音和數(shù)據(jù)量的傳輸主要通過(guò)DTMF技術(shù)實(shí)現(xiàn)。本文介紹了一種基于DTMF收發(fā)技術(shù)和無(wú)線射頻技術(shù)相結(jié)合實(shí)現(xiàn)遠(yuǎn)程控制的方法。例如在辦公室打電話回家遠(yuǎn)程查詢、開啟或關(guān)閉家里的各種電器設(shè)備,使生活變得更加舒適安全便捷;也可以應(yīng)用于對(duì)人有毒害的工作場(chǎng)合,工人可以通過(guò)遠(yuǎn)程操作相關(guān)的設(shè)備完成特定的工作內(nèi)容。
1 DTMF技術(shù)及其硬件電路設(shè)計(jì)
1.1 DTMF電話原理介紹
雙音多頻DTMF(Double Tone MultiFrequency)作為實(shí)現(xiàn)電話號(hào)碼快速可靠傳輸?shù)囊环N技術(shù),具有很強(qiáng)的抗干擾能力和較高的傳輸速度,可用作電話的音頻撥號(hào),也可以在數(shù)據(jù)通信系統(tǒng)中用來(lái)實(shí)現(xiàn)各種數(shù)據(jù)流和語(yǔ)音等信息的遠(yuǎn)程傳輸。
DTMF是用兩個(gè)特定的單音頻組合信號(hào)來(lái)代表數(shù)字信號(hào)以實(shí)現(xiàn)其功能的一種編碼技術(shù)。國(guó)際上采用的頻率有:697 Hz、770 Hz、852 Hz、941 Hz、1 209 Hz、1 336 Hz、1 477 Hz 和1 633 Hz 等8種。用這8種頻率可形成16種不同的組合,從而代表16種不同的數(shù)字或功能鍵,具體組合如表1所示。
DTMF信號(hào)的產(chǎn)生原理:雙音頻信號(hào)是兩個(gè)正弦波信號(hào)的疊加,選定兩個(gè)頻率f1和f2后很容易地得到這種信號(hào)的數(shù)學(xué)表達(dá)式:Asin(2×π×f1×t)+Asin(2×π×f2×t)。
1.2 電話通信的實(shí)現(xiàn)
1.2.1 振鈴音的檢測(cè)
當(dāng)用戶被呼叫時(shí),電話交換機(jī)發(fā)來(lái)鈴流信號(hào),振鈴為(25±3) Hz的正弦波,諧鈴失真不大于10%,電壓有效值為(90±15) V。振鈴以5 s為周期,即1 s送、4 s斷。根據(jù)振鈴信號(hào)電壓比較高的特點(diǎn),可以先使用高壓穩(wěn)壓二極管進(jìn)行降壓,然后輸入至光電耦合器。經(jīng)過(guò)光耦的隔離轉(zhuǎn)換,從光電耦合器輸出的波形是時(shí)通時(shí)斷的正弦波,經(jīng)過(guò)RC回路進(jìn)行濾波輸出標(biāo)準(zhǔn)的方波。方波信號(hào)就可以直接輸出至單片機(jī)的中斷計(jì)數(shù)器輸入口,完成整個(gè)振鈴音檢測(cè)和計(jì)數(shù)的過(guò)程,如圖1所示。
1.2.2 自動(dòng)摘掛機(jī)
程控電話交換機(jī)對(duì)電話摘機(jī)的響應(yīng)是電話線回路電流突然變大至約30 mA,即當(dāng)程控交換機(jī)檢測(cè)到電話線回路中的電流變大時(shí),則認(rèn)為電話機(jī)已經(jīng)摘機(jī)。
自動(dòng)摘掛機(jī)電路可以通過(guò)單片機(jī)控制一個(gè)繼電器的開關(guān),繼電器的控制端將一個(gè)約300 Ω的電阻接入電話線兩端,從而完成模擬摘掛機(jī),如圖1所示。
1.2.3 雙音頻解碼
本文使用電話專用的雙音頻編解碼芯片MT8880進(jìn)行輸入雙音頻信號(hào)的解碼。經(jīng)過(guò)專用集成電路的解碼,信號(hào)轉(zhuǎn)換成為不同的碼制信號(hào),可以直接被單片機(jī)讀取。
1.3 DTMF信號(hào)收、發(fā)芯片MT8880簡(jiǎn)介[2]
MT8880是加拿大MITEL公司生產(chǎn)的DTMF收發(fā)一體的集成電路,該芯片集成度高,內(nèi)部含有一個(gè)帶增益可調(diào)放大器的DTMF接收器和一個(gè)DTMF發(fā)送器。接收器采用集頻帶分離濾波器和數(shù)字解碼為一體的結(jié)構(gòu)形式。其中濾波電路采取高頻群和低頻群兩個(gè)六階開關(guān)電容濾波器,解碼采用數(shù)字計(jì)數(shù)器技術(shù)來(lái)確定輸入DTMF信號(hào)的頻率,并譯成4位二進(jìn)制碼。發(fā)送器采用開關(guān)電容D/A變換器,可發(fā)出16種雙音多頻DTMF信號(hào)。接收部分用于完成DTMF信號(hào)的接收、分離和譯碼,并以4位并行二進(jìn)制碼的方式輸出。
1.4 MT8880與單片機(jī)控制接口
MT8880使用標(biāo)準(zhǔn)的單片機(jī)控制接口,單片機(jī)可以精確地完成接收和發(fā)送功能,允許單片機(jī)訪問(wèn)其內(nèi)部一個(gè)狀態(tài)寄存器、2個(gè)控制寄存器和2個(gè)數(shù)據(jù)寄存器。
MT8880內(nèi)部有2個(gè)數(shù)據(jù)寄存器,一個(gè)是只執(zhí)行讀操作的接收數(shù)據(jù)寄存器RDR;另一個(gè)是只執(zhí)行寫操作的發(fā)送數(shù)據(jù)寄存器TDR。另外,MT8880中還有2個(gè)4位的收、發(fā)控制寄存器CRA和CRB(這2個(gè)寄存器位于同一地址空間)。對(duì)CRB的操作通過(guò)CRA中的一個(gè)特定位b3來(lái)實(shí)現(xiàn),在寫CRA后,接著對(duì)同樣地址進(jìn)行特定操作以 把數(shù)據(jù)寫入CRB,再次寫時(shí)又指向CRA。在上電時(shí),內(nèi)部設(shè)置電路先要清除控制寄存器,因此作為防范措施,軟件應(yīng)設(shè)置清除寄存器的初始化程序;而MT8880中的4位狀態(tài)寄存器SR則用來(lái)反映收、發(fā)信號(hào)的工作狀態(tài)。寄存器的選擇與操作由RS0和R/W口線來(lái)控制,當(dāng)需要接收DTMF信號(hào)時(shí),首先往控制寄存器CRA和CRB寫入相應(yīng)的控制字,把MT8880芯片設(shè)置為DTMF模式,通過(guò)讀取狀態(tài)寄存器中的D2位,可以判斷是否收到一個(gè)有效的DTMF信號(hào)并已譯碼。若已收到則讀取內(nèi)部“接收數(shù)據(jù)寄存器”的內(nèi)容(從MT8880芯片的D0~D3腳讀出)。當(dāng)需要發(fā)送DTMF信號(hào)時(shí),同樣應(yīng)先往控制寄存器CRA和CRB寫入相應(yīng)的控制字,把MT8880芯片設(shè)置為DTMF模式,通過(guò)讀取狀態(tài)寄存器中的D1位,可以判斷是否發(fā)送完一個(gè) DTMF信號(hào)。若已發(fā)送完,則把下一個(gè)要發(fā)送的數(shù)字由D1~D3腳寫入到內(nèi)部“發(fā)送數(shù)據(jù)寄存器”。如果MT8880芯片同時(shí)又被設(shè)置為中斷模式,則通過(guò)檢測(cè)IRQ端狀態(tài),也能判斷一個(gè)DTMF信號(hào)收到或發(fā)送完畢與否。其應(yīng)用電路見(jiàn)圖1。
1.5 手機(jī)模塊與單片機(jī)控制接口
絕大多數(shù)的手機(jī)也與固定電話一樣有振鈴信號(hào),也可以收發(fā)DTMF信號(hào),只要對(duì)普通手機(jī)稍做改動(dòng)即可,即把手機(jī)的鈴流信號(hào)接出來(lái),同時(shí)把手機(jī)的耳機(jī)口分成兩路(一路為DTMF輸出即耳麥線,另一路為DTMF輸入即話筒線),手機(jī)模塊與單片機(jī)的接口電路如圖2所示。
2 射頻技術(shù)及其硬件電路設(shè)計(jì)
微功率無(wú)線射頻技術(shù)主要用于特定環(huán)境下的數(shù)據(jù)傳輸,常用于現(xiàn)代家庭多路電源的集中控制、智能小區(qū)物業(yè)管理、防盜報(bào)警、無(wú)線水塔控制、無(wú)線抄表、航空、航模和遙控遙測(cè)等場(chǎng)合。
本文采用的無(wú)線編解碼芯片是PT2262/2272,是***普城公司生產(chǎn)的一種CMOS工藝制造的低功耗低價(jià)位通用編解碼電路,PT2262/2272最多可有12位(A0~A11)三態(tài)地址端管腳(懸空、接高/接低電平),任意組合可提供531 441個(gè)地址碼,PT2262最多可有6位(D0~D5)數(shù)據(jù)端管腳,設(shè)定的地址碼和數(shù)據(jù)碼從17腳串行輸出,可用于無(wú)線遙控發(fā)射電路。
本文使用的無(wú)線發(fā)射頭與無(wú)線接收頭是現(xiàn)成的模塊。單片機(jī)與無(wú)線發(fā)射頭的接口電路框圖如圖3所示。無(wú)線接收頭經(jīng)解碼輸出后驅(qū)動(dòng)電路框圖如圖4所示。
3 遠(yuǎn)程控制應(yīng)用實(shí)現(xiàn)
為了實(shí)現(xiàn)對(duì)多點(diǎn)設(shè)備的控制,無(wú)線編碼芯片PT2262的地址線選用A0~A7地址腳和D0~D3數(shù)據(jù)腳,這12個(gè)口線均通過(guò)單片機(jī)AT89S52來(lái)控制。由于單片機(jī)很容易實(shí)現(xiàn)“0”和“1”控制,所以單片機(jī)對(duì)A0~A7這8?jìng)€(gè)地址線的控制可實(shí)現(xiàn)256種狀態(tài),即最多可以控制256種設(shè)備(每一個(gè)PT2272解碼芯片輸出對(duì)應(yīng)于一種受控設(shè)備);同樣地,單片機(jī)對(duì)D0~D3這4條數(shù)據(jù)線的控制可實(shí)現(xiàn)16種狀態(tài),即對(duì)同一設(shè)備可實(shí)現(xiàn)最多16種方式的操作。本文實(shí)現(xiàn)的是異地遠(yuǎn)程呼叫處理工廠各個(gè)無(wú)人操作車間的測(cè)試儀器,并能遙控操作進(jìn)行相關(guān)的測(cè)試任務(wù)。系統(tǒng)框圖如圖5所示。
系統(tǒng)的工作流程如下:?jiǎn)纹瑱C(jī)主板可以接入固定電話線也可以接入一個(gè)手機(jī)模塊(專為沒(méi)有預(yù)裝固定電話的區(qū)域使用),操作員在異地拔打本地電話號(hào)碼(或手機(jī)號(hào)碼),單片機(jī)主板會(huì)自動(dòng)檢測(cè)振鈴信號(hào),然后自動(dòng)摘機(jī),并提示操作員輸入密碼。當(dāng)單片機(jī)主板驗(yàn)證通過(guò)后,操作員就可輸入地址碼(對(duì)應(yīng)于一臺(tái)測(cè)試儀器,如001號(hào))和操作碼(當(dāng)前測(cè)試機(jī)的測(cè)試任務(wù),如A字符,代表打開測(cè)試機(jī)電源),單片機(jī)主板識(shí)別后,通過(guò)編碼芯片送給無(wú)線發(fā)射頭,無(wú)線發(fā)射頭按特定的規(guī)則送出地址碼和操作碼,每一臺(tái)測(cè)試機(jī)上的無(wú)線接收頭都能接收到該無(wú)線信號(hào),但只有與編碼芯片的地址匹配的那臺(tái)測(cè)試機(jī)才會(huì)響應(yīng)并執(zhí)行操作碼。
4 軟件實(shí)現(xiàn)
軟件部分主要分為三部分:(1)正確檢測(cè)到固定電話的振鈴音并自動(dòng)摘機(jī)或手機(jī)模塊自動(dòng)接通接聽(tīng)中的鈴流信號(hào);(2)對(duì)DTMF信號(hào)的接收和發(fā)送處理,實(shí)現(xiàn)身份認(rèn)證、向用戶發(fā)送提示音、接收用戶輸入的控制指令等。(3)控制編碼芯片地址線和數(shù)據(jù)線,從而把控制指令無(wú)線傳輸出去。
4.1 固話振鈴音的檢測(cè)及處理
針對(duì)固定電話、結(jié)合圖1,單片機(jī)AT89S52的TEST腳檢測(cè)到固定電話振鈴檢測(cè)信號(hào)波形,AT89S52只要判斷TEST腳的電平變化即可以正確檢測(cè)外線是否有電話撥入,然后控制TRI腳吸合繼電器實(shí)現(xiàn)模擬摘機(jī)。
針對(duì)手機(jī)模塊、結(jié)合圖2,本文選用的是一款諾基亞手機(jī)(手機(jī)設(shè)為自動(dòng)接聽(tīng)模式),經(jīng)局部改造提到鈴流信號(hào)線送入單片機(jī)AT89S52的GSM-RING的IO腳上,常態(tài)下為高電平,當(dāng)有電話打過(guò)來(lái)時(shí),GSM-RING的IO腳上得到的波形如圖6所示。所以單片機(jī)只要AT89S52判斷GSM-RING的IO腳的電平變化情況就可以了。
4.2 DTMF信號(hào)的收發(fā)處理
當(dāng)固定電話或手機(jī)模塊自動(dòng)摘機(jī)后,則啟用DTMF收發(fā)處理程序(主要是對(duì)MT8880芯片的處理),關(guān)鍵的程序代碼如下[3]:
“讀MT8880狀態(tài)或數(shù)據(jù)寄存器”函數(shù):
//功能說(shuō)明:讀取MT8880狀態(tài)寄存器
//輸出參數(shù):返回MT8880的狀態(tài)寄存器值
//DTMF_REG為與MCU的接口寄存器,在“DTMF.H”有定義
uchar DTMF_CPR(void)
{
uchar uc_data;
DTMF_Q2=1; //Q2=1產(chǎn)生Q2的上升沿
_nop_(); //Q2的高電平持續(xù)
_nop_();
uc_data=DTMF_REG; //讀MT8880狀態(tài)寄存器
uc_data=uc_data&0x0f; //屏蔽高四位,只取低4位
DTMF_Q2=0; //Q2=0完成一個(gè)Q2時(shí)鐘
return(uc_data);
}
“寫MT8880控制或數(shù)據(jù)寄存器時(shí)序”函數(shù):
//功能說(shuō)明:MT8880的Q2時(shí)序控制
void DTMF_CPW(void)
{
DTMF_Q2=1; //Q2=1產(chǎn)生Q2的上升沿
_nop_();//Q2的高電平持續(xù)
_nop_();
DTMF_Q2=0; //Q2=0完成一個(gè)Q2時(shí)鐘
}
“MT8880發(fā)送前的初始化”函數(shù):
//功能說(shuō)明:發(fā)送前的初始化(對(duì)MT8880控制寄存器的
//操作)
void DTMF_send_init(void)
{
DTMF_REG=0x49;
//寫1001到MT8880控制寄存器CRA(允許發(fā)送)
DTMF_CPW(); //寫入控制器寄存器
DTMF_REG=0x40;//寫0000到MT8880控制寄存器CRB
DTMF_CPW(); //寫入控制器寄存器
}
“MT8880接收前的初始化”函數(shù):
//功能說(shuō)明:接收前的初始化(對(duì)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”函數(shù):
//功能說(shuō)明:接收1位DTMF信號(hào)
//返回參數(shù):接收到數(shù)據(jù)存于A
//DTMF_REG為與MCU的接口寄存器,在“DTMF.H”有定義
//READSR為讀狀態(tài)寄存器SR時(shí)臨時(shí)存儲(chǔ)器,在“DTMF.H”
//有定義
uchar DTMF_rec_1byte(void)
{
uchar uc_data;
DTMF_REG=0x6f;//CS=0 RS0=1 RW=1 Q2=0
READSR=DTMF_CPR(); //讀狀態(tài)寄存器SR
while(SRB2!=1);
//判斷SR的b2=1嗎?=1說(shuō)明收到有效數(shù)據(jù)
DTMF_REG=0x2f;
uc_data=DTMF_CPR(); //讀取數(shù)據(jù)
return(uc_data);
}
“MT8880發(fā)送1位DTMF”函數(shù):
//功能說(shuō)明:發(fā)送1位DTMF信號(hào)
//輸入?yún)?shù):待發(fā)送數(shù)據(jù)給A
//DTMF_REG為與MCU的接口寄存器,在“DTMF.H”有定義
//READSR為讀狀態(tài)寄存器SR時(shí)臨時(shí)存儲(chǔ)器,在“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);
//突發(fā)模式,送出后延時(shí)的100 ms再讀狀態(tài)寄存器
DTMF_REG=0x6f;//CS=0 RS0=1 RW=1 Q2=0
READSR=DTMF_CPR();
}
4.3 對(duì)編碼芯片地址線和數(shù)據(jù)線的控制
已正確識(shí)別用戶通過(guò)DTMF技術(shù)輸入的控制指令后,單片機(jī)只要控制8位地址線和4位數(shù)據(jù)線這12個(gè)IO口的高低電平就可以啟動(dòng)無(wú)線傳輸。而在無(wú)線接收端是由硬件電路自動(dòng)完成的,不需要軟件控制。
本文介紹的技術(shù)已在實(shí)際項(xiàng)目中運(yùn)用,系統(tǒng)運(yùn)行穩(wěn)定。如果增加語(yǔ)音提示功能,則整個(gè)系統(tǒng)能做得更加完善和更加人性化。要實(shí)現(xiàn)語(yǔ)音提示功能,只要增加一塊語(yǔ)音錄放芯片就可以了。
評(píng)論
查看更多