基于PIC16F73和CC1000的無(wú)線(xiàn)數(shù)字傳輸模塊設(shè)計(jì)
在工業(yè)、科學(xué)研究以及醫(yī)療設(shè)備中,目前出現(xiàn)了大量需要進(jìn)行通信的設(shè)備,這些設(shè)備通信距離較近、數(shù)據(jù)量較小、不適合布線(xiàn)。比如自動(dòng)抄表系統(tǒng)、酒店點(diǎn)菜系統(tǒng)以及現(xiàn)場(chǎng)數(shù)據(jù)采集系統(tǒng)等,其中有很多設(shè)備是可移動(dòng)的,而且要求何種小便于攜帶。因此,要求其通過(guò)設(shè)備具有體積小、功耗低、成本低、使用方便等特點(diǎn)?;谶@些需求,本文給出了一款超低功耗的無(wú)線(xiàn)數(shù)字傳輸模塊的設(shè)備及實(shí)現(xiàn)方法。
本文引用地址:http://m.butianyuan.cn/article/246615.htm該模塊采用Chipcon公司的超低功耗FSK調(diào)制解調(diào)芯片CC1000和Microchip公司的低功耗單片機(jī)PIC16F73,從而保證了系統(tǒng)的超低功耗。同時(shí),為了適應(yīng)電池供電系統(tǒng)的應(yīng)用,該模塊支持查詢(xún)方式的無(wú)線(xiàn)通信,可以使系統(tǒng)的平均工作電流低至10μA。該模塊具有8組信道,可以實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)、點(diǎn)對(duì)多點(diǎn)的半雙工通信,并且提供標(biāo)準(zhǔn)串行數(shù)據(jù)接口,支持TTL、RS232和RS485通信接口,可以方便地與其它控制器或計(jì)算機(jī)連接。
1 模塊硬件設(shè)計(jì)
模塊結(jié)構(gòu)框圖如圖1所示。
作為工作在物理層和數(shù)據(jù)鏈路層的底層通信設(shè)備,該系統(tǒng)完成數(shù)據(jù)的調(diào)制解調(diào)、假數(shù)據(jù)過(guò)濾、數(shù)據(jù)組合、解碼數(shù)據(jù)幀、數(shù)據(jù)校驗(yàn)等功能。在接收過(guò)程中完成數(shù)據(jù)由電信號(hào)向位流、由位流數(shù)據(jù)向字節(jié),由字節(jié)向數(shù)據(jù)幀的變換,而在發(fā)送過(guò)程中則完成接收到的逆向過(guò)程。數(shù)據(jù)發(fā)送過(guò)程中數(shù)據(jù)流的變化如圖2所示。
調(diào)制解調(diào)由CC1000完成。系統(tǒng)采用頻移鍵控調(diào)制(FSK),載波頻率為434MHz,帶寬為64kHz,數(shù)據(jù)采用差分曼徹斯特編碼發(fā)送,空中發(fā)送數(shù)據(jù)速率可以根據(jù)需要設(shè)置,最高FSK數(shù)據(jù)速率為76.8kpbs。CC1000采用三線(xiàn)命令接口和兩線(xiàn)數(shù)據(jù)接口,可編程配置載波頻率和數(shù)據(jù)速率等內(nèi)容。有關(guān)CC1000的詳細(xì)內(nèi)容見(jiàn)參考文獻(xiàn)。
模塊控制器在發(fā)送時(shí)從用戶(hù)接口接數(shù)據(jù)和命令,并將用戶(hù)數(shù)據(jù)轉(zhuǎn)換成數(shù)據(jù)幀傳送給CC1000,控制CC1000進(jìn)行數(shù)據(jù)發(fā)送。在接收時(shí),控制器接收從CC1000傳送過(guò)來(lái)的數(shù)據(jù),分析數(shù)據(jù),過(guò)濾噪聲,將數(shù)據(jù)由位流轉(zhuǎn)換為字節(jié),進(jìn)行校驗(yàn)并將用戶(hù)數(shù)據(jù)通過(guò)串行口傳送給用戶(hù),使用戶(hù)可以實(shí)現(xiàn)所發(fā)即所收。
模塊是為低功耗系統(tǒng)而設(shè)計(jì)的,除了具有SLP引腳可以直接休眠模塊外,還有一些專(zhuān)門(mén)設(shè)計(jì)的命令來(lái)支持使用查詢(xún)方式的通信。PCMD、RX、TX三線(xiàn)組成模塊的三線(xiàn)接口,配置命令時(shí)PCMD必須為高電平。配置命令工作時(shí)序如圖3所示。
發(fā)送數(shù)據(jù)時(shí)PCMD應(yīng)置為低電平,通過(guò)串行口發(fā)送數(shù)據(jù)即可。模塊使用時(shí)間間隔區(qū)分?jǐn)?shù)據(jù)幀,如果有傳輸半個(gè)字節(jié)的時(shí)間沒(méi)有接收到數(shù)據(jù),則認(rèn)為此前接收到的為一幀數(shù)據(jù),系統(tǒng)將編碼該幀數(shù)據(jù)并通過(guò)CC1000進(jìn)行調(diào)制和發(fā)送。因此,如果用戶(hù)數(shù)據(jù)是以數(shù)據(jù)幀的格式發(fā)送的,用戶(hù)應(yīng)當(dāng)連續(xù)發(fā)送數(shù)據(jù),以避免模塊將一幀數(shù)據(jù)分割為兩幀數(shù)據(jù)發(fā)送,從而降低發(fā)送效率。模塊只能進(jìn)行半雙工通信,沒(méi)有數(shù)據(jù)發(fā)送時(shí)模塊處于接收狀態(tài);有休眠信號(hào)時(shí)模塊進(jìn)入體眠狀態(tài),此時(shí)模塊無(wú)法接收和發(fā)送數(shù)據(jù),只有將模塊喚醒后,才能發(fā)送和接收數(shù)據(jù)。READY信號(hào)是模塊工作狀態(tài)指示信號(hào)。當(dāng)READY長(zhǎng)時(shí)間處于低電平狀態(tài)時(shí),可以使用RST將模塊復(fù)位,重新設(shè)置模塊的工作狀態(tài),以避免模塊處于錯(cuò)誤工作狀態(tài)。
2 軟件設(shè)計(jì)
系統(tǒng)軟件采用專(zhuān)門(mén)為PIC單片機(jī)進(jìn)行了優(yōu)化,能夠?yàn)镻IC系列單片機(jī)產(chǎn)生優(yōu)質(zhì)高效的代碼,具體內(nèi)容參考文獻(xiàn)。系統(tǒng)控制器軟件設(shè)計(jì)是本系統(tǒng)的核心內(nèi)容,由于控制器要完成與用戶(hù)和CC1000雙方的通信及數(shù)據(jù)封裝,因此系統(tǒng)軟件借用Windows系統(tǒng)的消息循環(huán)機(jī)制設(shè)計(jì),采用消息循環(huán)的體系結(jié)構(gòu)。這種結(jié)構(gòu)使得程序結(jié)構(gòu)清晰、可擴(kuò)展性強(qiáng)、可移植性強(qiáng)。經(jīng)過(guò)長(zhǎng)時(shí)間的初中,證明這種結(jié)構(gòu)非常適合單片機(jī)系統(tǒng)軟件的開(kāi)發(fā)。
圖4為程序初始化和主函數(shù)部分的結(jié)構(gòu)框圖。系統(tǒng)程序總線(xiàn)結(jié)構(gòu)采用消息驅(qū)動(dòng)機(jī)制。在系統(tǒng)內(nèi)部寄存器和變量初始化完成后便可以進(jìn)入消息循環(huán)程序查詢(xún)系統(tǒng)消息。系統(tǒng)消息一般是CPU外部或內(nèi)部的事件通過(guò)CPU中斷系統(tǒng)激勵(lì)CPU運(yùn)行的。為了能夠使系統(tǒng)產(chǎn)生和響應(yīng)消息,必須啟動(dòng)CPU的中斷系統(tǒng),因而在進(jìn)入消息循環(huán)前啟動(dòng)CPU定時(shí)中斷、串行通信中斷、外部觸發(fā)中斷。程序初始化部分在CPU上電或復(fù)位后只執(zhí)行一次,CPU在正常工作時(shí)即將終都在消息循環(huán)中反復(fù)檢測(cè)消息是否存在,并根據(jù)消息的種類(lèi)做不同的操作,最后清除相應(yīng)的消息標(biāo)志,再進(jìn)行循環(huán)檢測(cè)消息。本系統(tǒng)中消息共有三種,分別是程序節(jié)拍控制信號(hào)、與CC1000通信的信號(hào)以及與用戶(hù)通信的信號(hào)。程序節(jié)拍控制信號(hào)控制程序的運(yùn)行過(guò)程,包括時(shí)間信號(hào)、外部中斷信號(hào)(休眠、喚醒)以及其它定時(shí)動(dòng)作信號(hào);與CC1000通信的信號(hào)包括CC1000狀態(tài)轉(zhuǎn)換信號(hào)、接收完成信號(hào)、發(fā)送開(kāi)始信號(hào)以及發(fā)送完畢信號(hào)等,負(fù)責(zé)管理與CC1000的通信和控制工作;與用戶(hù)通信的信號(hào)包括接收用戶(hù)數(shù)據(jù)完畢信號(hào)、用戶(hù)數(shù)據(jù)發(fā)送完畢信號(hào)以及向用戶(hù)發(fā)送數(shù)據(jù)開(kāi)始信號(hào)等,負(fù)責(zé)與用戶(hù)的通信管理。程序的消息循環(huán)結(jié)構(gòu)如圖5所示。
評(píng)論