基于雙C8051F020微控制器的應(yīng)用系統(tǒng)
0 引言
由于MCU(微控制器)在可靠性、體積、功耗、性價(jià)比等方面都具有明顯的優(yōu)勢,所以由其組成的上下位機(jī)形式的儀器(下位機(jī)部分),已經(jīng)在許多工業(yè)控制和數(shù)據(jù)采集系統(tǒng)中得到廣泛應(yīng)用。在實(shí)際應(yīng)用中,如果一片MCU芯片的功能不能滿足實(shí)際需求時(shí),就需要進(jìn)行擴(kuò)展。在本文中,我們使用兩片C8051F020微控制器通過SMBus(System Management Bus)系統(tǒng)管理總線進(jìn)行擴(kuò)展,使其滿足了15路模擬量輸入(AD)、6數(shù)字量輸入、2路開關(guān)量輸出以及1路PWM波輸出的設(shè)計(jì)要求。
1 系統(tǒng)硬件構(gòu)成
整個系統(tǒng)的裝置示意圖如圖1所示。我們選擇美國Silicon公司的微控制器(MCU)C8051F020(簡稱F020)作為應(yīng)用系統(tǒng)的CPU。F020是一種混合信號SOC型8位單片機(jī),它有一個8通道的、轉(zhuǎn)換速率為100Kbps的12位ADC,以及一個8通道的、轉(zhuǎn)換速率為500Kbps的8位ADC;2個12位DAC;64KB FlashRom,4KB RAM;有22個中斷源和5個定時(shí)器/計(jì)數(shù)器;內(nèi)部有兩個增強(qiáng)型全雙工UART、SPI總線和SMBus總線[1]。
CP2101是美國Silicon公司推出的USB-UART橋接電路。該電路的集成度高,內(nèi)置USB2.0全速功能控制器、USB收發(fā)器、晶體振蕩器、EEPROM及異步串行數(shù)據(jù)總線(UART),支持調(diào)制解調(diào)器全功能信號,全部功能集成在一個5mm ′5mm IC中。
圖2典型的SMBus配置
在PC機(jī)上安裝CP2101的驅(qū)動程序以后,CP2101就作為PC機(jī)的一個虛擬 COM 口 (VCP),對它的操作與對PC機(jī)的COM口操作完全一樣,因此無需修改現(xiàn)有的 COM 口應(yīng)用就可以實(shí)現(xiàn)通過 USB 向基于CP2101 的器件傳輸數(shù)據(jù),保證了對已有的串口通訊程序的兼容。其數(shù)據(jù)傳輸?shù)牟ㄌ芈史秶鸀?00b/s~921.6kb/s[2]。
2 SMBus總線
SMBus總線標(biāo)準(zhǔn)最早由Intel公司于1995年發(fā)布,它以Philips公司的I2C總線為基礎(chǔ),面向于“不同系統(tǒng)組成芯片與系統(tǒng)其他部分間的通訊”[3]。SMBus接口的工作電壓可以在(3.0~5.0)V之間,總線上不同器件的工作電壓可以不同。SCL串行時(shí)鐘線和SDA串行數(shù)據(jù)線是雙向的,因此兩條線上都需要上拉電阻或類似電路將它們連到電源電壓,在沒有數(shù)據(jù)傳輸時(shí),兩條線都處于高電平。典型的SMBus配置如圖2所示。SMBus采用多種線路條件作為器件的握手信號。在一次數(shù)據(jù)傳輸過程中,SDA只能在SCL為低電平時(shí)改變。在SCL為高電平時(shí),SDA發(fā)生改變則開始和停止信號。
圖3一次典型的SMBus數(shù)據(jù)傳輸過程
SMBus協(xié)議有兩種可能的數(shù)據(jù)傳輸類型:從主發(fā)送器到所尋址的從接收器(寫)和從被尋址的從發(fā)送器到主接收器(讀)。這兩種數(shù)據(jù)傳輸都由主器件啟動,主器件還提供串行時(shí)鐘。一次典型的SMBus數(shù)據(jù)傳輸包括一個起始條件(START)、一個地址字節(jié)(位7-1:7 位從地址;位0:R/W 方向位)、一個或多個字節(jié)的數(shù)據(jù)和一個停止條件(STOP)。每個接收的字節(jié)(由一個主器件或從器件)都必須用SCL高電平期間的SDA低電平來確認(rèn)(ACK)。如果接收器件不確認(rèn),則發(fā)送器件將讀到一個“非確認(rèn)”(NACK),這用SCL 高電平期間的SDA高電平表示。
所有的數(shù)據(jù)傳輸都由主器件啟動,可以尋址一個或多個目標(biāo)從器件。主器件產(chǎn)生一個起始條件,然后發(fā)送地址和方向位。在數(shù)據(jù)傳輸結(jié)束時(shí),主器件產(chǎn)生一個停止條件,結(jié)束數(shù)據(jù)交換并釋放總線。圖3示出了一次典型的SMBus數(shù)據(jù)傳輸過程[1]。
3 系統(tǒng)通信的設(shè)計(jì)
系統(tǒng)的任務(wù)主要對模擬量進(jìn)行AD轉(zhuǎn)換,對數(shù)字量進(jìn)行計(jì)數(shù),并將這些數(shù)據(jù)最終要傳給上位微機(jī)進(jìn)行顯示與數(shù)據(jù)處理,上位機(jī)根據(jù)其處理結(jié)果控制PWM波的頻率及占空比。
3.1 上下位機(jī)的數(shù)據(jù)通信[4-5]
由于我們使用了USB-UART橋接電路CP2101,因而上下位機(jī)的程序仍是按照UART形式編寫。為保證雙方傳輸?shù)臄?shù)據(jù)準(zhǔn)確可靠,程序中使用軟件握手:上位機(jī)首先給下位機(jī)傳波特率參數(shù),其值為600H,300H,180H,C0H,60H,0CH之一,下位機(jī)對收到波特率參數(shù)進(jìn)行驗(yàn)證,如果為其中之一,則發(fā)送字節(jié)AAH給上位機(jī),并更新下位機(jī)波特率,反之認(rèn)為是噪聲干擾,丟棄此數(shù)據(jù),再重新等待接收。上位機(jī)收到AAH字節(jié)后,就更新新的波特率,然后向下位機(jī)發(fā)送控制命令子,如采樣通道選擇,單端方式還是差分方式,開關(guān)量的狀態(tài),采樣周期和采樣時(shí)間等,以及是否要求從下位機(jī)工作,如果要求從下位機(jī)工作,還要正確建立主從下位機(jī)的通信,之后再向上位機(jī)發(fā)應(yīng)答字節(jié)55H。協(xié)議還采用超時(shí)重發(fā)功能,可自動連接5次。
3.2 主從下位機(jī)的SMBus通信[6]
為使SMBus通信程序便于編寫,我們規(guī)定第1片為主片,第二片為從片。SMBus的工作由下列寄存器中的內(nèi)容決定:狀態(tài)寄存器(SMB0STA)、控制寄存器 (SMB0CN)、地址寄存器(SMB0ADR)和數(shù)據(jù)寄存器(SMB0DAT)。要通過SMBus通訊協(xié)議實(shí)現(xiàn)兩片芯片之間的數(shù)據(jù)通信,關(guān)鍵在于如何利用單片機(jī)中的狀態(tài)寄存器中的狀態(tài)碼,通過軟件編程來實(shí)現(xiàn)對狀態(tài)碼的查詢。每一個狀態(tài)碼都對應(yīng)一個當(dāng)前的通信狀態(tài)和將要執(zhí)行的操作,因此,根據(jù)所得到的狀態(tài)碼來確定當(dāng)前的通信狀態(tài),以實(shí)現(xiàn)相互間的通信。
在編程時(shí),SMBus通信協(xié)議是利用中斷查詢狀態(tài)碼的方式實(shí)現(xiàn)的,為使雙方的通信可靠,也規(guī)定了軟件握手:初始化后,從片等待主片的命令字節(jié)33H,從片收到33H后給主片發(fā)CCH應(yīng)答字節(jié),主片收到CCH字節(jié)后,根據(jù)上位機(jī)要求給從片發(fā)送相應(yīng)的命令字節(jié)(采樣周期,采樣時(shí)間,采樣通道,開關(guān)量狀態(tài)等),然后發(fā)送BBH字節(jié)個主片,并啟動相應(yīng)AD轉(zhuǎn)換,主片收到BB后才進(jìn)行AD轉(zhuǎn)換,保證主片與從片對模擬量的同步采樣。
4 系統(tǒng)軟件設(shè)計(jì)
考慮到系統(tǒng)靈活性,我們編程使得通道選擇、采樣時(shí)間、采樣周期、數(shù)字量輸入、開關(guān)量的控制、PWM波的頻率及占空比、從下位機(jī)的工作情況等由用戶在上位機(jī)上指定,然后以命令字傳給下位機(jī),具體為:用4個字節(jié)分別表示兩片MCU的AD通道是否被選中,每個字節(jié)位上為1表示該通道被選中,否則不選該通道。用3個字節(jié)存放采樣周期,其最小單位為10微妙,5個字節(jié)存放采樣時(shí)間,一個字節(jié)用于開關(guān)量,2個字節(jié)用于存放PWM波的頻率,2個字節(jié)用于存放占空比值,1個字節(jié)用于表示數(shù)字量輸入是否被選中。對于輸入的數(shù)字量,輸入是渦輪流量計(jì)來的脈沖,輸入脈沖數(shù)的確定是采樣引腳電平變化的方法來確定的。為保證小流量時(shí)的精度,按4秒鐘所計(jì)脈沖數(shù),通過其轉(zhuǎn)換關(guān)系來確定流量。其中引腳電平采樣的時(shí)間設(shè)為100微妙。
為減輕下位機(jī)的任務(wù),其采集的原始數(shù)據(jù)直接送給上位機(jī)進(jìn)行處理,保證下位機(jī)有高的采樣速率和高的傳輸速率。圖4給出了下位機(jī)主片的工作流程圖。
5 結(jié)束語
我們使用了自身帶有AD轉(zhuǎn)換電路及SMBus通信總線接口C8051F020微控制器,實(shí)現(xiàn)了兩片MCU之間數(shù)據(jù)的高速可靠的數(shù)據(jù)通信。而且還使用了USB-UART橋接電路,保證了下位機(jī)與上位機(jī)有高的數(shù)據(jù)傳輸率。并且,在上位機(jī)軟件設(shè)計(jì)時(shí)考慮到應(yīng)用系統(tǒng)的通用性,可根據(jù)實(shí)際需求選用不同的傳感器,并在上位機(jī)上進(jìn)行相應(yīng)的選擇,就能得到所需的測量數(shù)據(jù)及曲線,使得該應(yīng)用系統(tǒng)有較強(qiáng)的通用性。
參考文獻(xiàn):
[1] 潘琢金,施國君. C8051FXXX高速SOC單片機(jī)原理及應(yīng)用. 北京:北京航空航天大學(xué)出版社,2002.
[2] CP2101數(shù)據(jù)手冊. http://www.xhl.com.cn
/xhl/downfile/CP210x.pdf.
[3]謝瑞和.串行技術(shù)大全.北京:清華大學(xué)出版社,2003.4 .
[4] 陳建平,姚凱學(xué),等. 通用動態(tài)測試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn). 貴州大學(xué)學(xué)報(bào)(自然科學(xué)版), 2004,
21(1):79-82.
[5] 范逸之 陳立元. Visual Basic 與RS-232串行通信控制[M],北京:中國青年出版社,2002.
[6] 王力,王開和,等. 基于C8051F的SMBus實(shí)現(xiàn)多點(diǎn)測溫系統(tǒng). 天津科技大學(xué)學(xué)報(bào),2004,19(3):
39-41.
評論