基于CAN總線的溫室測控系統(tǒng)的研究與設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:測控系統(tǒng)性能的優(yōu)劣是溫室作物優(yōu)質(zhì)、高產(chǎn)、高效栽培的關(guān)鍵。針對(duì)當(dāng)前溫室測控系統(tǒng)中需要解決的各種問題——降低成本、降低功耗、提高抗干擾能力、提高實(shí)時(shí)性和通信速率,提出了CAN總線在基于微控制器MC68S08QG8的測控系統(tǒng)中的應(yīng)用,詳細(xì)介紹了單個(gè)智能節(jié)點(diǎn)的硬件設(shè)計(jì)和軟件實(shí)現(xiàn),設(shè)計(jì)了簡單的CAN總線應(yīng)用層協(xié)議。運(yùn)行結(jié)果表明該系統(tǒng)結(jié)構(gòu)簡單、可靠性高、實(shí)時(shí)性強(qiáng)。
關(guān)鍵詞:CAN總線;MC68S08QG8;測控系統(tǒng);應(yīng)用層協(xié)議
CAN(Controller Area Network)總線又稱為控制局域網(wǎng),是一種多主方式串行通信協(xié)議,能有效地支持具有很高安全等級(jí)的分布實(shí)時(shí)控制。由于CAN總線具有造價(jià)低、通信速度快、可靠性高、實(shí)時(shí)性強(qiáng)等突出優(yōu)點(diǎn),在汽車行業(yè)、機(jī)械工業(yè)、家用電器及傳感器等領(lǐng)域應(yīng)用廣泛。
溫室控制技術(shù)是農(nóng)業(yè)現(xiàn)代化的重要內(nèi)容,在目前的溫室系統(tǒng)中主要是靠RS-485總線來組成控制網(wǎng)絡(luò),將采集到的數(shù)據(jù)和信息傳送到主控機(jī)中。其通信速率、節(jié)點(diǎn)連接數(shù)目都受到一定的限制。
本文提出了以CAN總線構(gòu)成現(xiàn)場控制網(wǎng)絡(luò)。CAN總線的通信速率最高可達(dá)1 Mbps/40 m,掛接的設(shè)備可達(dá)110個(gè)。另外信號(hào)的傳輸采用短幀結(jié)構(gòu),這樣傳輸時(shí)間短,受干擾的概率低。并且一旦網(wǎng)絡(luò)中某個(gè)節(jié)點(diǎn)故障時(shí),該節(jié)點(diǎn)具有自動(dòng)關(guān)閉輸出功能,以主動(dòng)切斷該節(jié)點(diǎn)與總線的聯(lián)系,使網(wǎng)絡(luò)上其他節(jié)點(diǎn)及通信不受影響,具有較強(qiáng)的抗干擾能力,降低了惡劣環(huán)境對(duì)于溫室系統(tǒng)的影響,提高了系統(tǒng)的實(shí)時(shí)性、可靠性和擴(kuò)充性。
1 系統(tǒng)總體設(shè)計(jì)
溫室測控系統(tǒng)采用分布式多主方式進(jìn)行通信。系統(tǒng)主要由主控上位機(jī)、CAN總線和多個(gè)智能測控模塊組成(注意:各個(gè)智能測控模塊之間存在強(qiáng)烈的相互關(guān)系)。通過對(duì)溫室內(nèi)外,特別是溫室內(nèi)部各種影響作物生長的要素用相應(yīng)智能傳感器進(jìn)行測量,然后通過CAN總線傳送給主控上位機(jī),上位機(jī)進(jìn)行數(shù)據(jù)打印、分析和處理、參數(shù)設(shè)置并且控制有關(guān)設(shè)備等工作,從而實(shí)現(xiàn)對(duì)溫室要素的調(diào)控,保證了作物生長所需的環(huán)境。系統(tǒng)上任何節(jié)點(diǎn)均可在任意時(shí)刻主動(dòng)向其他節(jié)點(diǎn)發(fā)出信息,支持點(diǎn)對(duì)點(diǎn)、一點(diǎn)對(duì)多點(diǎn)和全局廣播方式接受和發(fā)送數(shù)據(jù)。圖1是溫室測控系統(tǒng)總體設(shè)計(jì)圖。
2 硬件平臺(tái)設(shè)計(jì)
溫室測控系統(tǒng)的硬件平臺(tái)主要由多個(gè)CAN智能節(jié)點(diǎn)構(gòu)成,如圖2所示。本系統(tǒng)節(jié)點(diǎn)采用總線型拓?fù)浣Y(jié)構(gòu),兩芯電纜(CANH和CANL)雙絞線連接。主要由微控制器MC68S08QG8,CAN通信控制器MCP2515和CAN收發(fā)器TJA1050組成。本文中微控制器MC68S08QQ8與控制器MCP2515是通過SPI口連接,測控節(jié)點(diǎn)通過微控制器MC68S08QG8的IIC口來連接的。智能節(jié)點(diǎn)的個(gè)數(shù)是由溫室內(nèi)外所測控的環(huán)境要素來決定的,但是任意智能節(jié)點(diǎn)均可以像以太網(wǎng)節(jié)點(diǎn)那樣直接掛接在CAN總線網(wǎng)絡(luò)上,即在不犧牲可靠性的前提下進(jìn)一步擴(kuò)展現(xiàn)場測控節(jié)點(diǎn)的數(shù)量。
2.1 芯片介紹
選擇一款合適的MCU是系統(tǒng)穩(wěn)定的重要保障。綜合功耗、性能和價(jià)格等各種因素的考慮,本系統(tǒng)采用Freescale公司的MC68S08QG8(以下簡稱為QG8)作為系統(tǒng)控制信號(hào)采集的芯片。MC68S08QG8單片機(jī)采用高性能、低功耗HCS08飛思卡爾8位微控制器為內(nèi)核,是一款集成度高、結(jié)構(gòu)緊湊、功能豐富、適用于各種場合的低價(jià)位單片機(jī)。MC68S08QG8除了提供Freescale豐富的外圍接口與HCS08內(nèi)核卓越性能的多功能組合外,還包括更長的電池壽命(即使工作電壓低至1.8 V,也能發(fā)揮最大效能)、業(yè)界領(lǐng)先的Flash技術(shù)、3個(gè)通信接口(SCI、SPI和IIC)以及創(chuàng)新的開發(fā)支持等其他系列單片機(jī)不可比擬的優(yōu)勢。
智能節(jié)點(diǎn)中CAN控制器完成了CAN協(xié)議中數(shù)據(jù)鏈路層和物理層的所有功能,保證通信質(zhì)量。本系統(tǒng)選用了一種獨(dú)立的CAN協(xié)議控制器——Microchip公司的MCP2515。MCP2515完全支持CAN V2.0B技術(shù)規(guī)范,MCP2515還包含3個(gè)發(fā)送緩沖器和2個(gè)接受緩沖器,減少了單片機(jī)的管理負(fù)擔(dān)。與傳統(tǒng)上使用的CAN控制器SJA1000相比較,它與MCU的連接是通過行業(yè)標(biāo)準(zhǔn)串行外設(shè)接口(SPI)來實(shí)現(xiàn)的,這樣可以減少芯片使用的引腳,簡化CAN總線的電路的連接,提高了系統(tǒng)穩(wěn)定性。
CAN總線收發(fā)器提供CAN控制器與物理總線之間的接口,是影響CAN總線網(wǎng)絡(luò)安全性、可靠性和電磁兼容性的主要因素。本系統(tǒng)采用Phlips公司的TJA1050作為總線收發(fā)器。TJA1050有兩種工作模式:高速和待機(jī),其中待機(jī)模式可以防止由于CAN控制器失控而造成的網(wǎng)絡(luò)阻塞。并且在TJA1050中還設(shè)計(jì)了一個(gè)超時(shí)定時(shí)器,用以對(duì)TXD的低電壓(此時(shí)CAN總線上為顯性位)進(jìn)行監(jiān)視。該功能可以避免由于系統(tǒng)硬件或者軟件故障而造成TXD端長時(shí)問為低電位時(shí)總線上所有其他節(jié)點(diǎn)也將無法通信的情況出現(xiàn)。這也是FJA1050與82C250相比較之后最大的改進(jìn)地方。
2.2 智能節(jié)點(diǎn)硬件電路
智能節(jié)點(diǎn)最小系統(tǒng)硬件電路如圖3所示,主要的連接有以下3個(gè)方面:
1)QG8的SPI接口使用4條信號(hào)線:主機(jī)輸出低有效片選信號(hào)線、主機(jī)輸出線SPSCK、主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線MOSI以及主機(jī)輸入/從機(jī)輸出數(shù)據(jù)線MISO,分別于MCP2515的、SCK、SI、SO引腳連接。QG8的與MCP2515的中斷引腳相連,可以通過中斷來提高系統(tǒng)實(shí)時(shí)性。
2)MCP2515的3個(gè)發(fā)送緩沖器TXBn請(qǐng)求發(fā)送引腳(4、5、6引腳)接到+5 V終端,兩個(gè)接收緩沖器RXBn中斷引腳(10、11引腳)空置。由于該測控系統(tǒng)對(duì)于環(huán)境的要求比較高,MCP2515的TxCAN和RxCAN并不是直接與SJA1050的TXD和RXD相連,而是通過6N137(高速光耦)后于SJA1050相連,這樣很好地實(shí)現(xiàn)了總線上各CAN節(jié)點(diǎn)的電氣隔離,進(jìn)一步提高了該系統(tǒng)的抗干擾能力。不過需要特別注意的是,光耦部分電路的兩個(gè)VCC、VDD必須完全隔離,否則采用光耦也就失去了意義。電源的完全隔離可采用小功率電掾隔離模塊或帶多5 V隔離輸出地開關(guān)電源模塊實(shí)現(xiàn)。雖然這部分增加了接口電路的復(fù)雜性,但是卻提高了節(jié)點(diǎn)的穩(wěn)定性和安全性,從而也提高了測控系統(tǒng)的性能。
3)TJA1050的第8個(gè)引腳VREF是參考電壓,輸出可以空置。第5個(gè)引腳決定芯片的工作模式(高速和待機(jī)兩種模式),圖中和地之間接47 kΩ的電阻進(jìn)入高速模式(也是正常工作時(shí)的模式)。本系統(tǒng)在CANH和CANL總線輸入端與地之間分別接了一個(gè)SA28A(瞬態(tài)抑制二極管),當(dāng)兩輸入端與地之間出現(xiàn)瞬變干擾時(shí),通過SA28A的放電可起到一定的保護(hù)作用。在CANH和CANL之間還接了一個(gè)120 Ω的終端電阻,可以在阻抗不連續(xù)時(shí)消除通信線路中產(chǎn)生的信號(hào)發(fā)射。
3 軟件設(shè)計(jì)
本系統(tǒng)的軟件程序設(shè)計(jì)是在Freescale公司的集成開發(fā)環(huán)境——Freescale Codewarrior 5.1下完成的。該系統(tǒng)的軟件由CAN控制器軟件和應(yīng)用層通信協(xié)議構(gòu)成。
3.1 CAN總線驅(qū)動(dòng)層軟件實(shí)現(xiàn)
CAN控制器軟件主要包括器件初始化、數(shù)據(jù)發(fā)送和接收。初始化工作主要是對(duì)QG8微處理器、SPI接口和MCP2515CAN控制器的初始化。其中微處理器初始化主要包括定時(shí)器、變量和外部中斷的初始化。需要特別注意的是飛思卡爾單片機(jī)的定時(shí)器與其他單片機(jī)(如51系列單片機(jī))不太一樣,QG8微處理器的定時(shí)器是不能預(yù)置某個(gè)數(shù)值的,而且是只讀的,因此必須要有輔助寄存器才能實(shí)現(xiàn)該定時(shí)器的功能,本文采用的是QG8微處理器的16位的定時(shí)器模塊TPM:SPI接口的初始化主要包括對(duì)控制寄存器SPIC1和SPIC2、波特率寄存器SPIBR、狀態(tài)寄存器SPIS、數(shù)據(jù)寄存器SPID的設(shè)置。MCP2515的初始化為復(fù)位MCP2515、寄存器配置。只有對(duì)MCP2515初始化后,進(jìn)入了配置模式才能對(duì)相關(guān)的寄存器進(jìn)行初始化,初始化工作完成后進(jìn)入工作模式,進(jìn)行報(bào)文發(fā)送。為了能使節(jié)點(diǎn)穩(wěn)定的通信,CAN總線上所有的節(jié)點(diǎn)都必須有相同的波特率。對(duì)于振蕩器時(shí)鐘頻率不同的器件,可以通過對(duì)波特率預(yù)分頻比和每一個(gè)時(shí)間段中時(shí)間份額數(shù)量的設(shè)置來調(diào)整比特率。
QG8是通過使用標(biāo)準(zhǔn)SPI讀/寫命令對(duì)寄存器進(jìn)行讀/寫操作。外部數(shù)據(jù)和命令式通過SI引腳在SCK時(shí)鐘信號(hào)上升沿傳送到器件中。MCP25 15在SCK下降沿通過SO引腳發(fā)送數(shù)據(jù)。本文采用狀態(tài)查詢方式發(fā)送報(bào)文。首先應(yīng)該禁止CAN發(fā)送中斷產(chǎn)生,以保證報(bào)文發(fā)送不被中斷。為了啟動(dòng)報(bào)文發(fā)送,必須將相應(yīng)緩沖器的TxBnCTRL TxREQ位置1,文中是通過調(diào)用RTS2515()請(qǐng)求發(fā)送來實(shí)現(xiàn)的。緩沖器中TxBnCTRL TxP<1:0>優(yōu)先級(jí)最高的報(bào)文在總線空閑時(shí)首先被發(fā)送。如果發(fā)送成功將產(chǎn)生中斷來通知接收,否則TxBnC TRL TxRR和CANINIF.MERRF將被置位,產(chǎn)生發(fā)送錯(cuò)誤狀態(tài),同時(shí)INT引腳置位,產(chǎn)生中斷請(qǐng)求。具體報(bào)文發(fā)送流程如圖4所示。
為了提高系統(tǒng)的實(shí)時(shí)性,報(bào)文接收模塊采用中斷接受方式。該模塊包括主程序和接受中斷服務(wù)程序兩部分組成,主程序必須在中斷控制報(bào)文接受之前使能CAN的接受中斷和微控制器QG8的全局中斷。當(dāng)報(bào)文發(fā)送完之后會(huì)產(chǎn)生一個(gè)中斷通知來接收?qǐng)?bào)文。首先應(yīng)該看一下中斷標(biāo)志類型,如果是報(bào)文成功發(fā)送產(chǎn)生的中斷,將報(bào)文讀入濾波器中,否則產(chǎn)生報(bào)文出錯(cuò)標(biāo)志,CANINTF.MERRF位被置1.將接收到報(bào)文的標(biāo)示符字段與濾波寄存器中的值進(jìn)行比較,如果兩者匹配,將該報(bào)文載入相應(yīng)的接受緩沖器,否則產(chǎn)生一個(gè)無效報(bào)文。如果緩沖器慢將會(huì)產(chǎn)生溢出錯(cuò)誤,EFLG.RXOOVER位置1.報(bào)文接受成功且處理完畢后,MCU將清除中斷標(biāo)志,返回主程序以接受下一條報(bào)文。具體的流程圖如圖5所示。另外整個(gè)報(bào)文接受過程都可以在接受中斷服務(wù)程序中完成,不需要與主程序發(fā)生交互作用。
3.2 CAN總線應(yīng)用層軟件實(shí)現(xiàn)
目前國內(nèi)還沒有CAN通訊的應(yīng)用層協(xié)議標(biāo)準(zhǔn),而國外現(xiàn)有流行的CANopen、DeviceNet和CANkingdom等應(yīng)用層協(xié)議對(duì)于本系統(tǒng)的要求來說實(shí)現(xiàn)復(fù)雜會(huì)造成資源浪費(fèi)。本文定義了一個(gè)簡單的通信協(xié)議來完成系統(tǒng)所需求的功能。
該協(xié)議中采用29位(ID.28-ID.0)標(biāo)識(shí)符的擴(kuò)展幀格式,這些位的發(fā)送順序是從ID.28到ID.0,最高7位ID.28~I(xiàn)D.22不能全是隱性1。每一個(gè)標(biāo)識(shí)符對(duì)應(yīng)一條信息,只有與自己標(biāo)識(shí)符相同的信息才被接收端接收。標(biāo)識(shí)符ID號(hào)的大小還決定了發(fā)送的優(yōu)先級(jí)和等待時(shí)間,標(biāo)識(shí)符越小的報(bào)文幀優(yōu)先被發(fā)送。本協(xié)議中ID號(hào)位28~24的五位表示信息采集節(jié)點(diǎn),包括各種傳感器模塊,ID號(hào)為23~18的四位表示顯示節(jié)點(diǎn),包括各種數(shù)據(jù)的顯示和報(bào)警節(jié)點(diǎn)。ID號(hào)為19~14的六位為執(zhí)行控制節(jié)點(diǎn),包括CO2發(fā)生器、循環(huán)風(fēng)扇等控制設(shè)備節(jié)點(diǎn)。ID15~13為信息類別,包塊各種命令信息和狀態(tài)信息等信息節(jié)點(diǎn)。ID12~I(xiàn)D0為預(yù)留。
4 系統(tǒng)測試
為了測試本設(shè)計(jì)的性能,在實(shí)驗(yàn)室里進(jìn)行了CAN總線節(jié)點(diǎn)之間的溫度測試,如圖6所示。在18點(diǎn)和19點(diǎn)(橫坐標(biāo)表示時(shí)間)之間進(jìn)行了溫度的測試,在18點(diǎn)鐘到18點(diǎn)30分之間A和B節(jié)點(diǎn)一直顯示實(shí)驗(yàn)室的室內(nèi)溫度(15~17℃之間),過半個(gè)小時(shí)后將B節(jié)點(diǎn)放入22℃的溫水中,然后取出。從圖中可以看到紅色曲線(A節(jié)點(diǎn)溫度曲線)一直是恒溫狀態(tài)(15~17℃之間),而白色曲線(B節(jié)點(diǎn)溫度曲線)在18點(diǎn)30分鐘溫度升到22℃,隨著溫度傳感器被取出,溫度也在下降到15~17℃之間。
5 結(jié)束語
本文根據(jù)目前溫室系統(tǒng)存在的問題,提出了用CAN總線構(gòu)成溫室測控系統(tǒng)傳輸網(wǎng)絡(luò),并根據(jù)系統(tǒng)需要設(shè)計(jì)了簡單的應(yīng)用層通信協(xié)議和進(jìn)行了CAN節(jié)點(diǎn)之間溫度測試。測試結(jié)果表明:本設(shè)計(jì)傳輸網(wǎng)絡(luò)結(jié)構(gòu)簡單、可靠性高。另外該測控模塊也可以運(yùn)用在鍋爐控制、樓宇控制等各種工業(yè)現(xiàn)場測控系統(tǒng)中,實(shí)用性強(qiáng)、應(yīng)用范圍廣。