利用單片機(jī)實(shí)現(xiàn)多路電壓信號(hào)采集系統(tǒng)的設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
引言
在下業(yè)生產(chǎn)中,需要將環(huán)境和狀態(tài)的變化由傳感器轉(zhuǎn)換為電壓信號(hào),再由監(jiān)控設(shè)備完成對(duì)電壓信號(hào)的數(shù)據(jù)采集和監(jiān)控。傳感器的信號(hào)處理在監(jiān)測(cè)點(diǎn)完成,處理后的結(jié)果經(jīng)RS485網(wǎng)絡(luò)傳送到監(jiān)控計(jì)算機(jī)。這樣把監(jiān)控工作分散到各地,而對(duì)監(jiān)控結(jié)果集中管理,所形成的分布式監(jiān)控系統(tǒng)可有效減少因工業(yè)強(qiáng)噪聲干擾和傳輸距離的增加所帶來(lái)的信號(hào)失真。
1 系統(tǒng)構(gòu)成
本監(jiān)控系統(tǒng)下位機(jī)的核心部分為MEGA8單片機(jī)。MEGA8單片機(jī)內(nèi)置lO位的A/D轉(zhuǎn)換器。
故可不用外接A/D轉(zhuǎn)換器。當(dāng)多路電壓信號(hào)由多路轉(zhuǎn)換器(CIM051)進(jìn)入單片機(jī)后,即可對(duì)多路電壓信號(hào)進(jìn)行A/D轉(zhuǎn)換和數(shù)據(jù)處理,完成數(shù)據(jù)采集。
可根據(jù)處理的結(jié)果進(jìn)行報(bào)警操作,也可通過(guò)RS485網(wǎng)絡(luò)同監(jiān)控計(jì)算機(jī)進(jìn)行通信,以實(shí)現(xiàn)分布式監(jiān)控。
系統(tǒng)結(jié)構(gòu)如圖1所示。此系統(tǒng)的監(jiān)控計(jì)算機(jī)程序使用VB開(kāi)發(fā),單片機(jī)程序使用c語(yǔ)言開(kāi)發(fā)。本文主要討論單片機(jī)如何對(duì)多路電壓信號(hào)進(jìn)行采集,以及采集的數(shù)據(jù)如何由單片機(jī)經(jīng)RS485網(wǎng)絡(luò)傳送給監(jiān)控計(jì)算機(jī),以及如何編制CheckSum效驗(yàn)碼以實(shí)現(xiàn)錯(cuò)誤檢查。
2 數(shù)據(jù)采集
數(shù)據(jù)采集工作完全是在下位機(jī)進(jìn)行的,可通過(guò)對(duì)單片機(jī)編寫(xiě)控制程序已完成信號(hào)的采集和處理任務(wù),主程序流程如圖2所示。
除主程序外,程序中還設(shè)置了實(shí)現(xiàn)多路信號(hào)巡檢的1 s中斷程序模塊;將A/D轉(zhuǎn)換結(jié)果送人單片機(jī)進(jìn)行處理的A/D轉(zhuǎn)換完成中斷程序模塊;實(shí)現(xiàn)數(shù)據(jù)串行傳輸?shù)腢SART中斷程序模塊;以及實(shí)現(xiàn)按鍵報(bào)警,數(shù)據(jù)處理等功能的子程序模塊。
A/D轉(zhuǎn)換結(jié)束后,在ADC數(shù)據(jù)寄存器中可以取得轉(zhuǎn)換的結(jié)果,對(duì)于單端輸入的A/D轉(zhuǎn)換,其轉(zhuǎn)換結(jié)果為:
其中,Vin表示選定的輸入引腳上的電壓,Vref表示選定的參考電源的電壓。0x000表示輸入引腳的電壓為模擬地,Ox3FF表示輸入引腳的電壓為參考電壓值減去一個(gè)LSB。
3 串行通信協(xié)議
監(jiān)控計(jì)算機(jī)與單片機(jī)的數(shù)據(jù)交換包括如下3個(gè)步驟。
(1)單片機(jī)要發(fā)送數(shù)據(jù)時(shí),計(jì)算機(jī)會(huì)發(fā)送一組字符串過(guò)去。該字符串的第一個(gè)字符是前導(dǎo)碼,單片機(jī)根據(jù)前導(dǎo)碼辨認(rèn)是否應(yīng)該讀取該字符串,該字符串屬于哪一個(gè)命令集。
在前導(dǎo)碼之后是站號(hào),通常以兩個(gè)字符代表,以RS-485進(jìn)行網(wǎng)絡(luò)連接,需要用站號(hào)來(lái)辨別命令是屬于哪一個(gè)設(shè)備。站號(hào)之后是要解讀的命令或數(shù)據(jù)。
(2)當(dāng)單片機(jī)收到要求字符串,并經(jīng)過(guò)辨讀確定后,便會(huì)送出計(jì)算機(jī)所要求的數(shù)據(jù)。同樣,數(shù)據(jù)被送出時(shí)會(huì)在數(shù)據(jù)之前加上前導(dǎo)碼與站號(hào),計(jì)算機(jī)也有由此辨別數(shù)據(jù)來(lái)自何處。
(3)計(jì)算機(jī)端收到單片機(jī)發(fā)送回來(lái)的字符串,即進(jìn)行解讀檢查的操作。當(dāng)檢查完成后,再送一個(gè)確定的字符串給單片機(jī),用以說(shuō)明計(jì)算機(jī)端已成功收到字符串;而若發(fā)送失敗,計(jì)算機(jī)也在該回送的字符串中要求單片機(jī)重新發(fā)送數(shù)據(jù)。
另外數(shù)據(jù)發(fā)送時(shí),一般會(huì)加上錯(cuò)誤檢查機(jī)制,最常用的方法是將字符進(jìn)行運(yùn)算,而在字符串的最后加上CheckSum字符,收發(fā)雙方利用Check-Sum字符的檢查判斷字符串的正確性。
本系統(tǒng)設(shè)計(jì)的數(shù)據(jù)格式為:
其中,前導(dǎo)碼為一個(gè)字節(jié);站號(hào)為一個(gè)字節(jié);命令/數(shù)據(jù)為一個(gè)字節(jié);數(shù)據(jù)長(zhǎng)度為一個(gè)字節(jié);數(shù)據(jù)內(nèi)容為幾個(gè)字節(jié);CheckSum校驗(yàn)為兩個(gè)字節(jié);結(jié)束標(biāo)志位為一個(gè)字節(jié)。
4 通信軟件的實(shí)現(xiàn)
4.1 監(jiān)控計(jì)算機(jī)通信軟件的實(shí)現(xiàn)
利用VB提供的具有強(qiáng)大功能的通信控件MsComm,可設(shè)置串行通信的數(shù)據(jù)發(fā)送和接收,串口狀態(tài)及串口通信的數(shù)據(jù)發(fā)送和接收,以及串口狀態(tài)和串口通信的信息,格式和協(xié)議。監(jiān)控計(jì)算機(jī)的通信流程如圖3所示。
4.2 單片機(jī)通信部分的軟件實(shí)現(xiàn)
ATMEGA8單片機(jī)帶有一個(gè)全雙工通用同步/異步串行收發(fā)模塊USART,該接1:3是一個(gè)高度靈活的串行通信設(shè)備。單片機(jī)的通信流程如圖4所示。
4.3 CheckSum的使用
使用了outCheckSum和inCheckSum子函數(shù)以實(shí)現(xiàn)CheckSum計(jì)算。第1個(gè)函數(shù)(outCheckSum)用于處理所要發(fā)送的字符串,只要將所要發(fā)送的字符串傳人,返回的結(jié)果的結(jié)果字符串即是作完CheckSum處理。第2個(gè)函數(shù)(inCheckSum)用于處理接收到的返回字符串,只要將所收到的字符串傳人,返回的結(jié)果字符串即是做完CheckSum檢查,并去除校驗(yàn)和與結(jié)尾字符。
5 結(jié)語(yǔ)
以上提出的單片機(jī)和監(jiān)控計(jì)算機(jī)的軟硬件設(shè)計(jì)已在實(shí)際中得以應(yīng)用。數(shù)據(jù)的采集及單片機(jī)和監(jiān)控計(jì)算機(jī)之間的通信快速準(zhǔn)確,效果良好。可見(jiàn)上述多路電壓信號(hào)的采集和分布式監(jiān)控系統(tǒng)的設(shè)計(jì)方案是可行和可靠的。