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