在戶用儀表(電能表、燃?xì)獗怼⑺怼崮鼙淼龋┳詣?br />
抄讀系統(tǒng)及工業(yè)控制系統(tǒng)中, 往往使用現(xiàn)場總線采用
有關(guān)通信規(guī)約進(jìn)行數(shù)據(jù)交換以獲取有關(guān)信息。 而數(shù)據(jù)
通信一般使用主從應(yīng)答的查詢方式, 其數(shù)據(jù)鏈路層一
般由前導(dǎo)字符、幀起始符、控制碼、數(shù)據(jù)長度、數(shù)據(jù)域(包
含地址)、校驗碼、結(jié)束符等組成。 由于不同的工作環(huán)境
要求系統(tǒng)有不一樣的通信波特率,因此,戶用儀表等必
須有波特率自適應(yīng)的軟硬件模塊, 達(dá)到現(xiàn)場系統(tǒng)配置
靈活,提高系統(tǒng)數(shù)據(jù)通信的工作效率及可*性。
一、從機(jī)波特率的計算方法
設(shè)定通信時每字節(jié)的傳輸格式為:1個起始位、8個
數(shù)據(jù)位(低bit位在先)、1個停止位,如圖1所示。 服務(wù)器主
機(jī)在發(fā)送1幀信息之前先發(fā)送1個以上的前導(dǎo)字節(jié)FEh,
從機(jī)就是從1幀通信數(shù)據(jù)前的前導(dǎo)字符中提取相應(yīng)的波
特率信息。 在發(fā)送前導(dǎo)字符FEh字節(jié)時bit位的傳輸如圖2
所示, 從機(jī)在起始位的下降沿CPU進(jìn)行內(nèi)部時鐘的開始
計數(shù)至上升沿時時鐘計數(shù)結(jié)束。 根據(jù)圖2可知,時鐘計數(shù)
的1/2即為波特率傳輸1個bit位所需的時間。
二、硬件的工作原理
本文選擇MSP430系列單片機(jī)作為從機(jī)的微控制
器,采用模擬串口的異步半雙工通信方式(因有些型號
單片機(jī)不帶串行通信口)。MSP430系列單片機(jī)是由美國
TI公司設(shè)計制造的,是一種具有超低功耗并且功能強(qiáng)大
的單片機(jī),系列型號以FLASH芯片為主,單片機(jī)自身帶
有JTAG仿真接口,調(diào)試工具簡單、使用方便,非常適合
戶用儀表等低功耗產(chǎn)品的開發(fā)。
MSP430系列單片機(jī)的定時器系統(tǒng)由一個16位的定
時計數(shù)器及對應(yīng)的多組具有輸入捕獲或比較功能的
CCRx寄存器組成。 每個CCRx寄存器能獨(dú)立選擇輸入捕
獲或比較功能中的一種模式, 通過簡單的控制字設(shè)置
就能相互轉(zhuǎn)換。 定時計數(shù)器有多種時鐘源選擇方式(如
外部輸入、晶體振蕩器、內(nèi)部數(shù)控(DCO)的RC振蕩器
等),并有停止、增計數(shù)、連續(xù)、增/減計數(shù)4種工作模式。
每個CCRx寄存器都具有外接輸入信號及控制輸出功
能,當(dāng)單個CCRx寄存器啟動捕獲功能時,輸入的邊沿觸
發(fā)信號能把定時計數(shù)器內(nèi)的當(dāng)時值拷貝到CCRx寄存器
并能響應(yīng)中斷處理。 而當(dāng)CCRx寄存器啟動比較功能,且
CCRx寄存器的值與定時計數(shù)器的值相同時,能產(chǎn)生預(yù)置
的bit位輸出信號并響應(yīng)中斷處理。 在1幀數(shù)據(jù)的應(yīng)答通
信過程中時間比較短,此時間內(nèi)溫度變化很小,可認(rèn)定
當(dāng)時內(nèi)部DCO的RC振蕩值是個相對穩(wěn)定值,而波特率的
計算只是1個bit位所占用的多少個定時器的時鐘數(shù),因
此不必考慮高精度的晶體振蕩器作為時鐘源,可以使用
內(nèi)部的DCO振蕩器作為數(shù)據(jù)通信的時鐘源, 因為通信時
的波特率計時的時鐘脈沖數(shù)對時鐘源的準(zhǔn)確度沒有要
求,只要保證傳送1幀信息的時鐘穩(wěn)定性就能可*工作。
考慮到單片機(jī)波特率計算會產(chǎn)生的時鐘誤差及1個字節(jié)
可能產(chǎn)生時鐘累積誤差,一般要求定時器的時鐘頻率大
于最高波特率的100倍以上,使每傳輸1個字節(jié)時的時鐘
誤差積累不會引起通信誤碼。 對于仿真的模擬串口利用
定時器捕獲模式對端口上、下沿的信號進(jìn)行捕捉,獲取
接收時第一個前導(dǎo)碼字節(jié)(FEh)兩個低電平bit位的時鐘
周期數(shù),從而計算出波特率發(fā)生的正確時序。 從機(jī)定時
器的捕獲模式還能感應(yīng)接收字節(jié)起始位的下降沿信號
以得到CCRx的時鐘值,利用波特率計算的時鐘數(shù)設(shè)置比
較模式的寄存器CCRx值, 下次比較模式產(chǎn)生中斷的
CCRx值=CCRx(當(dāng)前值)+波特率計算的時鐘數(shù)。 注意,接
收時的D0位計算為1.5倍波特率計算的時鐘數(shù),定時器的
比較模式中斷得到接收bit位的電平信號,如圖3所示。 當(dāng)
從機(jī)發(fā)送數(shù)據(jù)時,定時器的比較模式使用了單片機(jī)定時
器的PWM輸出模式1、模式5的方法,確定了輸出bit位的
電平同步信號,如圖4所示。 上述接收、發(fā)送數(shù)據(jù)信息的
處理在定時器中斷處理程序中完成。
三、軟件流程
(見圖5)
為了充分利用MSP430單片機(jī)的低功耗功能, 單片
機(jī)平時可以工作在休眠狀態(tài),定時器初始化的工作模式
設(shè)為連續(xù)增計數(shù)方式, 根據(jù)相對應(yīng)的捕獲/比較寄存器
CCRx初始化相應(yīng)的通信輸入、輸出端口,設(shè)置定時器的
控制寄存器CCTLx為下降沿捕獲模式。 當(dāng)有串行通信時
開啟定時器的時鐘, 同時產(chǎn)生定時器捕獲/比較模式
CCRx的中斷處理信號,在CCRx中斷處理程序中完成數(shù)
據(jù)通信。 為了防止通信過程中產(chǎn)生意外事故的死循環(huán),
可在通信過程中設(shè)置一個看門狗,當(dāng)然可以使用定時器
另外一組CCRx的比較模式功能來仿真看門狗程序。 當(dāng)
通信結(jié)束時設(shè)置定時器的CCTLx為下降沿捕獲模式,為
了降低功耗還可以關(guān)閉定時器時鐘。
此方法已成功應(yīng)用在總線制網(wǎng)絡(luò)水表的自動抄讀
系統(tǒng)上,在DCO頻率為3MHz時波特率(300~9600)BPS均
能正常工作。 實施的方法也可以移植到別的單片機(jī)系
列,尤其是沒有串口功能的單片機(jī)系統(tǒng),有時還可以節(jié)
省系統(tǒng)硬件的通信資源
本文完整版本及圖列從這里下載:http://www.zg4o1577.cn/f/波特率自適應(yīng)的模擬串行通信.kdh
程序詳見: http://www.zg4o1577.cn/mcu/1541.html
kdh閱讀器下載: http://www.xdowns.com/soft/4/136/2012/Soft_88914.html