基于串行通信的車載信息采集系統(tǒng)的設(shè)計(jì)
本文介紹了一款電動汽車的車載信息采集系統(tǒng):多從機(jī)采集信息,從機(jī)與主機(jī)間采用串行通信的多機(jī)通信,再由主機(jī)將通信的數(shù)據(jù)送往LCD顯示。它解決了車載信息繁多以及車身布線復(fù)雜而數(shù)據(jù)難于采集的難點(diǎn)。
本文引用地址:http://butianyuan.cn/article/196559.htm1 引言
串行通信作為一種重要的通信技術(shù)已經(jīng)在PC機(jī)通信及工業(yè)現(xiàn)場控制在線檢測等領(lǐng)域得到了廣泛的應(yīng)用[1]。本文所設(shè)計(jì)的車載信息采集系統(tǒng)是包含數(shù)據(jù)采集,數(shù)據(jù)傳輸和數(shù)據(jù)顯示的結(jié)構(gòu)系統(tǒng),是對一款新型電動汽車的車載信息進(jìn)行采集,傳送和顯示的設(shè)計(jì)過程:車載信息通過傳感器(模擬量形式)或開關(guān)量形式被采到從單片機(jī),主單片機(jī)和從單片機(jī)之間通過串行通信進(jìn)行數(shù)據(jù)傳輸,并由主機(jī)將數(shù)據(jù)送往液晶面板顯示出來。
2 總線型主從式多機(jī)系統(tǒng)
綜合考慮了電動汽車所涉及到的大量的車載信息和串行口的多機(jī)通信能力,該設(shè)計(jì)采用了總線型主從式多機(jī)通信模式,而進(jìn)行數(shù)據(jù)傳輸?shù)臉?biāo)準(zhǔn)總線選為最普通實(shí)用的RS-485??偩€型主從式多機(jī)通信系統(tǒng)模式如下圖:
而串口的通信協(xié)議在這里就不作介紹了。
3 車載信息采集系統(tǒng)硬件設(shè)計(jì)
該系統(tǒng)所研究的對象為一款電動汽車的車載信息,筆者把信息分為兩類:模擬量和開關(guān)量。模擬量包括:電池組(蓄電池)溫度,電池組(蓄電池)電壓,電池組(蓄電池)容量,車速(里程),總電流等;開關(guān)量是指各種操作狀態(tài),包括:燈(系列)的狀態(tài),檔位開關(guān)量,剎車狀態(tài),限位開關(guān)狀態(tài)等。
由于涉及到的信息量比較多,且分布在車身周圍范圍較廣,筆者采用AVR公司的一款單片機(jī)——ATMEGA8L。這是一款體積小但采集能力和通信能力卻足夠強(qiáng)的單片機(jī):在采集方面,它含8通道A/D轉(zhuǎn)換和最多23個可編程I/O口;在數(shù)據(jù)通信方面,它含一個可編程的串行USART接口,支持同步,異步以及多機(jī)通信自動地址識別[3]。ATMEGA8L相對8051或其他單片機(jī)一個重要的優(yōu)勢是單片機(jī)所需外圍電路比較簡單(考慮到在車身布線,電路越簡單越好)。LCD顯示模塊采用的是內(nèi)置T6963C的MGLS240128T的點(diǎn)陣液晶,它的特點(diǎn)是與單片機(jī)引腳接口電路簡單且顯示功能強(qiáng)大。
本文所設(shè)計(jì)的車載信息采集系統(tǒng)硬件框架如下圖:
模擬量通過特定傳感器采樣,轉(zhuǎn)換成電壓信號進(jìn)入從機(jī)的A/D通道,從機(jī)做A/D轉(zhuǎn)換后將數(shù)據(jù)存儲下來;開關(guān)量通過繼電器將電平信號送至從機(jī)的I/O口,從機(jī)也對信號做相關(guān)處理。主機(jī)與從機(jī)之間通過串行通信進(jìn)行數(shù)據(jù)傳輸,并由主機(jī)將合理數(shù)據(jù)送往LCD顯示。
4 車載信息采集系統(tǒng)軟件設(shè)計(jì)
基于串行通信的多機(jī)通信協(xié)議可以這樣進(jìn)行:1.所有從機(jī)處于監(jiān)聽狀態(tài)。2.主機(jī)先發(fā)同步字符(即起始符,這里定為E8H),再發(fā)某個標(biāo)識符(根據(jù)信息類別來定義不同值,比如電流值的標(biāo)識符定義為14H),并將通信狀態(tài)轉(zhuǎn)換為接收狀態(tài)(RXD=1)。3.當(dāng)標(biāo)識符所定義的從機(jī)(比如負(fù)責(zé)電流數(shù)據(jù)采集的從機(jī)1)監(jiān)聽到標(biāo)識符(14H)后,從機(jī)轉(zhuǎn)為發(fā)送速據(jù)狀態(tài),并將準(zhǔn)備好的數(shù)據(jù)(電流值)和結(jié)束字符(這里定為CEH)傳給主機(jī),結(jié)束字符傳完,從機(jī)通信狀態(tài)轉(zhuǎn)換為監(jiān)聽狀態(tài)。4.主機(jī)接收到結(jié)束字符后,將數(shù)據(jù)送往LCD顯示。5.主機(jī)發(fā)同步字符,發(fā)下一個標(biāo)識符(比如電壓15H)。
所以,數(shù)據(jù)幀格式可以列為:起始符(E8H)+標(biāo)識符+數(shù)據(jù)串+結(jié)束符(CEH),所有特定字符的選擇都是為了與數(shù)據(jù)串中數(shù)字的ASCⅡ碼(30H–39H)區(qū)分開來。
下面是主機(jī)和從機(jī)程序流程:
主機(jī)采用循環(huán)點(diǎn)明的方式查詢從機(jī),被點(diǎn)到名的從機(jī)作出應(yīng)答,將采集到的數(shù)據(jù)或信號傳給主機(jī),主機(jī)將數(shù)據(jù)送給LCD顯示,再進(jìn)入下一個循環(huán)。串行通信的波特率選用9600,數(shù)據(jù)格式定義為8位數(shù)據(jù)位加一位停止位。串口初始化程序如下:
voidinit_usart(void)//串口初始化
{
UCSRB|=0x18;//數(shù)據(jù)發(fā)送允許和接收允許
UBRRL=(fosc/16/(baud+1))%256;//設(shè)置波特率寄存器低位字節(jié)
UBRRH=(fosc/16/(baud+1))/256;//設(shè)置波特率寄存器高位字節(jié)
UCSRC=0x86;//8位數(shù)據(jù)位+1位停止位
}
主機(jī)和從機(jī)都采用查詢方式接收和發(fā)送數(shù)據(jù):
voidtransmit(unsignedchardata)//數(shù)據(jù)發(fā)送
{
while(!(UCSRA(1
UDR=data;//發(fā)送數(shù)據(jù)
}
unsignedcharreceive(void)//數(shù)據(jù)接收
{
while(!(UCSRA(1
returnUDR;//接收數(shù)據(jù)
}
5 結(jié)束語
本文成功設(shè)計(jì)了針對一款電動汽車的車載信息采集系統(tǒng)結(jié)構(gòu),一方面用多個從機(jī)采集車載信息解決了車載信息眾多而難于采集的問題;用簡單的串口通信的多機(jī)通信原理避免了車身周圍布線繁多的麻煩,另一方面采用液晶顯示車載信息,給用戶提供友好界面的同時,又可以準(zhǔn)確實(shí)時地掌握汽車狀況。從液晶的數(shù)據(jù)顯示和數(shù)據(jù)刷新的效果來看,這種基于串口通信的車載信息采集系統(tǒng)是有很好的應(yīng)用前景的。
評論