摘要:為實現(xiàn)C8051F320與多串口通信,利用GM8123進(jìn)行串口擴(kuò)展,使其與PC機(jī)、單片機(jī)及GPS實時通訊,達(dá)到C8051F320的核心作用,控制傳感探頭數(shù)據(jù)的收集時間、上傳時間,文中詳細(xì)給出串口擴(kuò)展部分的硬件設(shè)計、軟件設(shè)計及實驗結(jié)果。
關(guān)鍵詞:標(biāo)準(zhǔn)串口;GM8123;GPS
RS232C串行通信在控制領(lǐng)域里應(yīng)用很廣,但在實際系統(tǒng)中又因所控制的對象,解決的問題不同而各具特點。文中涉及:傳輸距離約100米,所傳數(shù)據(jù)量較大的PC機(jī)和單片機(jī)的通信、單片機(jī)之間的通信,以及單片機(jī)與GPS間的通信。
1硬件設(shè)計
系統(tǒng)中選擇串口通信,是由于雖然SMBUS、SPI、USB口為現(xiàn)在設(shè)計的主流,但它們能維持的傳輸距離很短,從探頭到終端都不過幾米,這對于下深井不能達(dá)到要求,所以我們還是用了較為傳統(tǒng)的標(biāo)準(zhǔn)232串口,它經(jīng)過系統(tǒng)隔離大概能達(dá)到100米左右的傳輸距離,比較符合工程上的實際需要。而C8051F320[1]只有一個串口,需要與PC機(jī)、子系統(tǒng)及GPS同時通信,就必須利用GM8123的一轉(zhuǎn)三擴(kuò)展串口功能來完成。電路如圖1所示。
GM8123可以將一個全雙工的標(biāo)準(zhǔn)串口擴(kuò)展成3個串口,并能通過外部引腳控制串口擴(kuò)展模式:單通道工作模式和多通道工作模式,即可以指定一個子串口和母串口以相同的波特率單一工作,也可以讓所有子串口在母串口波特率基礎(chǔ)上分頻同時工作。該芯片工作在多通道模式下時,子串口能主動響應(yīng)從機(jī)發(fā)送的數(shù)據(jù),并由母串口發(fā)送給主機(jī),同時返回子串口地址。該模式使每個從機(jī)的發(fā)送要求能被及時地響應(yīng),即使所有從機(jī)同時有發(fā)送要求,數(shù)據(jù)也不會丟失,基本實現(xiàn)了主控單元和外設(shè)通信的實時性。
系統(tǒng)中用了多通道工作模式,在圖1中當(dāng)GM8123的模式控制引腳MS=0時,芯片工作在多通道工作模式下,多通道模式允許3個子串口同時全雙工地工作。在該工作模式下,芯片的地址線STADD1~0是輸入口,由MCU控制選擇希望發(fā)送數(shù)據(jù)的子串口,地址線STADD1~0是輸出口,用于向MCU返回接收到數(shù)據(jù)的子串口地址。
在多通道模式下,母串口波特率等于子串口波特率的4倍。例如設(shè)置了子串口和外圍設(shè)備的通訊波特率為1200bps,則母串口波特率為1200*4=4800bps。MCU需先向地址線STADD1~0置入希望發(fā)送數(shù)據(jù)的子串口地址,再通過MCU的TXD口向母串口發(fā)送希望傳輸?shù)臄?shù)據(jù)。若需要對另一子串口發(fā)送數(shù)據(jù),則需要MCU修改地址線STADD1~0的狀態(tài)。需要注意的一點是由于母口波特率是子口波特率的4倍,母口發(fā)送4幀的時間,子口才能發(fā)送一幀,所以若只需對一個子口進(jìn)行連續(xù)發(fā)送,則必須對母口發(fā)送進(jìn)行延時操作,延時可采用延時程序?qū)崿F(xiàn),也可通過對母串口發(fā)送無效數(shù)據(jù)來實現(xiàn),具體方法為將地址線STADD置為0,然后對母串口寫0x00。
2軟件設(shè)計
在進(jìn)行數(shù)據(jù)通信的軟件設(shè)計時,必須解決好兩方面的問題:一是可靠性,二是速度。而這兩方面的問題,可靠性是第一位的,速度只能是在可靠基礎(chǔ)上的速度。可靠快速傳輸?shù)膶崿F(xiàn),需要上、下位機(jī)軟件以及通信協(xié)議等各個環(huán)節(jié)的相互配合。
下文從PC機(jī)通信部分軟件設(shè)計、核心單元通信部分軟件設(shè)計、傳感探頭通信部分軟件設(shè)計以及它們之間的通信協(xié)議來介紹整個系統(tǒng)的通信。
2.1 PC機(jī)通信部分軟件設(shè)計
PC機(jī)軟件,我們主要用VB語言來實現(xiàn)。在通信部分,用了串口控件--MSCOMM,利用其接收事件來實現(xiàn)對核心單元部分所收集的數(shù)據(jù)的接收,并按通道、時間進(jìn)行處理。[2]首先檢測標(biāo)志位,看是否是我們預(yù)接收數(shù)據(jù)的起始部分,如果是,則對數(shù)據(jù)進(jìn)行計算,把溫度和時間分開處理。接收是實時的,大概3秒鐘數(shù)據(jù)上傳一次,若5秒鐘內(nèi)仍無數(shù)據(jù)上傳,則PC機(jī)自動向核心單元獲取數(shù)據(jù)。
用示意圖表示大致的接收過程如圖2所示
2.2核心單元通信部分軟件設(shè)計
核心單元的軟件部分是用C語言實現(xiàn)的。[3]通信方面的核心也在此部分。
核心單元肩負(fù)著同時與GPS、傳感探頭及PC機(jī)通信的艱巨任務(wù),所以其軟件的編寫與實現(xiàn)顯得格外重要。
在此部分,我們克服了很多難點:
⑴核心單元與GPS的通信[4]
在與GPS的通信上,我們分了兩個部分:
①首次校時:在此部分,也有兩種情況,一種是系統(tǒng)接了GPS,這樣對其有一個相應(yīng)的喚起時間,等待GPS啟動,然后校時。另一種是系統(tǒng)未接GPS,這種情況下就要跳過校時程序直接用系統(tǒng)時間。在此部分中,我們克服了復(fù)雜情況的不同處理難點。
②常規(guī)校時:常規(guī)校時是一段時間一次,為了克服系統(tǒng)差設(shè)置的。在此部分中,關(guān)鍵要做好GPS是否被喚醒以及是否與天上衛(wèi)星時間校準(zhǔn)的判斷,通過這兩點來考察是否要對系統(tǒng)時間進(jìn)行更新。
⑵數(shù)據(jù)存儲空間與傳輸速度之間的矛盾。
C8051F320可以存儲大概50組數(shù)據(jù),如果是子單元就很容易操控,但對于核心單元,50組所容納的是所有子單元的最新數(shù)據(jù),這就說明倘若沒有快速良好的通信,很可能造成數(shù)據(jù)覆蓋,大量丟失。于是我們就很細(xì)致地算到每秒應(yīng)該如何控制,使數(shù)據(jù)快速良好的傳輸?shù)玫奖U稀?/p>
2.3傳感探頭通信部分軟件設(shè)計
傳感探頭的任務(wù)主要是把本單元的數(shù)據(jù)向核心單元傳送。
但由于是串聯(lián),外加核心單元只有一個串口,這就造成了數(shù)據(jù)傳輸?shù)膹?fù)雜性,要一個單元傳完下一個單元再傳,其中不能有沖突有混合。我們在這部分涉及到子單元間的通信問題,它們通過選擇開關(guān)來控制與下一個通道的開啟關(guān)閉問題,這樣只要再在通信之前,發(fā)送本單元的通道號,就能滿足一切要求,即一個單元傳輸數(shù)據(jù)前先發(fā)本單元通道號,然后把此單元的所有數(shù)據(jù)發(fā)出,接著打開與下一單元的控制口。
2.4主要通信協(xié)議
主要通信協(xié)議有標(biāo)志位和校驗法。標(biāo)志位用于核心單元和PC機(jī)之間,校驗和用于核心單元與傳感探頭之間。
2.4.1標(biāo)志位:所謂標(biāo)志位,是在上傳數(shù)據(jù)時,告知PC機(jī)這是一組數(shù)據(jù)的開頭,系統(tǒng)用了連發(fā)三個\"0XAA\"的方法,即PC機(jī)只有檢測到連續(xù)的三個\"0XAA\"才認(rèn)為它后面是一組數(shù)據(jù),否則將對數(shù)據(jù)不做處理。
2.4.2校驗法:所謂校驗法,是做了一個奇偶檢驗和,然后把這個和從傳感探頭傳給核心單元,核心單元收到數(shù)據(jù)后,再自己求一次校驗和,倘若這兩者相等,則認(rèn)為正確,否則命令傳感探頭重傳數(shù)據(jù)。
3實驗結(jié)果
我們進(jìn)行了多次室內(nèi)實驗和井下實驗,實驗結(jié)果如表1所示。它是我截取的半小時的分鐘值。
從數(shù)據(jù)中可以看出分鐘值的精度很高,為了更加直觀的分析問題,把一天的分鐘值數(shù)據(jù)用EXCEL畫出如圖3所示。
可以看出數(shù)據(jù)的精度很高,一天抖動不大,且符合水下溫度變化不大的特點。
結(jié)論
實現(xiàn)了利用C8051F320的一個串口進(jìn)行實時與多通道通信的結(jié)果,并制定通信協(xié)議解決了傳輸穩(wěn)定性的問題,使通信更可靠。在此基礎(chǔ)上,為了進(jìn)一步提高系統(tǒng)的可擴(kuò)展性,對系統(tǒng)的傳輸速率及存儲容量又進(jìn)行了改進(jìn),使溫度數(shù)據(jù)量能良好地實現(xiàn)3通道的存儲轉(zhuǎn)發(fā)功能。但系統(tǒng)還有待進(jìn)一步改善,使C8051F320的串口更快更好地完成傳輸、校時等任務(wù)。
參考文獻(xiàn)
[1] Silabs. Perliminary C8051F32XC/1/2/3. http://silabs.com./2005
[2] 范逸之,陳立元. Visual Basic與RS-232串行通信控制. 清華大學(xué)出版社,2004.
[3] 童長飛. C8051F系列單片機(jī)開發(fā)與C語言編程. 北京航空航天大學(xué)出版社,2005.
[4] CIROCOMM TECHNOLOGY CORP. 全球衛(wèi)星定位、授時系統(tǒng)模塊--GUS-38A0 Global Positioning System Receiver Module (BUILT-IN TYPE-GSU-38A0. http://www.ureika.net./ 2005.