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