劉澤玲,周智榮,張 偉
(中航電測(cè)儀器股份有限公司,西安710100)
在畜牧養(yǎng)殖行業(yè),常需要對(duì)多種飼料按科學(xué)的比例進(jìn)行配料,而在大型牧場(chǎng),若采用傳統(tǒng)的人工稱(chēng)量配料,會(huì)耗費(fèi)大量的時(shí)間。近年來(lái),隨著畜牧養(yǎng)殖業(yè)的發(fā)展,為了提高養(yǎng)殖效能,許多畜牧養(yǎng)殖場(chǎng)對(duì)精準(zhǔn)車(chē)載配料系統(tǒng)的需求越來(lái)越多[1],將配料稱(chēng)重顯示儀配備在飼養(yǎng)車(chē)上,可以在飼養(yǎng)車(chē)輛行進(jìn)過(guò)程中邊配料邊喂養(yǎng),從而節(jié)省很多時(shí)間,為此要求配料稱(chēng)重儀表具有高的可靠性和高的配料精度。在此,選用ARM 單片機(jī)STM32F407,設(shè)計(jì)了一款能夠在飼養(yǎng)車(chē)行進(jìn)中輸出精準(zhǔn)重量的車(chē)載配料稱(chēng)重顯示儀。
STM32F407 單片機(jī)是ST 公司基于ARM Cortex M4 內(nèi)核的微控制器,主頻可達(dá)168 MHz;片內(nèi)集成了先進(jìn)的外設(shè),其可配置的GPIO 多達(dá)114 個(gè),通訊接口有15 種:I2C,SPI,串行接口、CAN 接口、外存接口等,內(nèi)部的Flash 存儲(chǔ)器可用于非易失性數(shù)據(jù)存儲(chǔ)[2]。故在此選用STM32F407 作為控制核心,用于接收來(lái)自?xún)?nèi)置信號(hào)采集模塊或外置數(shù)字傳感器的數(shù)據(jù),檢測(cè)儀表按鍵組的狀態(tài),實(shí)現(xiàn)各種參數(shù)的設(shè)置、工作模式的設(shè)置、多界面的切換等,并驅(qū)動(dòng)5位數(shù)碼管顯示。
該儀表結(jié)構(gòu)框圖如圖1所示。STM32F407 通過(guò)CAN 總線(xiàn)接收重量數(shù)據(jù),通過(guò)按鍵組接收用戶(hù)的操作信號(hào),其片內(nèi)Flash 用于存儲(chǔ)儀表參數(shù),LED 數(shù)碼管用于重量顯示及狀態(tài)提示,聲光提醒模塊用于配料提醒及故障提醒,485 接口用于驅(qū)動(dòng)點(diǎn)陣式LED大顯示屏,USART 接口可用于程序升級(jí),WiFi 模塊可用于與管理平臺(tái)通訊。
圖1 儀表結(jié)構(gòu)框圖Fig.1 Instrument structure block diagram
儀表內(nèi)置的信號(hào)采集模塊,用于采集處理模擬傳感器的信號(hào),其結(jié)構(gòu)框圖如圖2所示,包含信號(hào)調(diào)理電路、A/D 轉(zhuǎn)換電路、MCU 處理及CAN 接口電路。信號(hào)調(diào)理電路將模擬傳感器的mV 級(jí)信號(hào)進(jìn)行調(diào)理放大,A/D 轉(zhuǎn)換電路將調(diào)理放大后的信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),并將轉(zhuǎn)換結(jié)果輸出給采集模塊MCU進(jìn)行處理,該MCU 將此數(shù)字值轉(zhuǎn)換成重量值,通過(guò)CAN 接口傳輸給STM32F407。
圖2 信號(hào)采集模塊結(jié)構(gòu)框圖Fig.2 Structure block diagram of signal acquisition module
若儀表外采用數(shù)字傳感器,則不需要信號(hào)采集模塊的處理,STM32F407 通過(guò)CAN 接口接收數(shù)據(jù)即可。CAN 收發(fā)器的電路原理如圖3所示。
圖3 CAN 收發(fā)器的電路原理Fig.3 Circuit schematic of CAN transceiver
電源調(diào)理模塊用于給儀表內(nèi)各模塊及元器件供電。
采用GPIO 端口接收來(lái)自按鍵組的用戶(hù)操作信號(hào)。按鍵組含有1 個(gè)電源開(kāi)關(guān)鍵、5 個(gè)功能鍵。其中電源開(kāi)關(guān)鍵可實(shí)現(xiàn)儀表的一鍵開(kāi)關(guān)機(jī);功能鍵可單獨(dú)使用,也可組合使用,用于儀表參數(shù)設(shè)置、標(biāo)定、稱(chēng)重模式設(shè)置、多界面的切換及各流程的狀態(tài)切換等。
采用GPIO 端口輸出開(kāi)關(guān)量信號(hào),驅(qū)動(dòng)聲光提醒模塊,用于在配料過(guò)程中,配料重量接近設(shè)置范圍時(shí)給配料人員提供聲音提示或燈光提醒。當(dāng)儀表出現(xiàn)故障時(shí),STM32F407 也會(huì)驅(qū)動(dòng)聲光報(bào)警。
STM32F407 通過(guò)SPI 接口控制LED 顯示驅(qū)動(dòng)芯片,驅(qū)動(dòng)LED 數(shù)碼管顯示,用于顯示稱(chēng)重模式下的重量,同時(shí)在各界面的流程控制中進(jìn)行相應(yīng)狀態(tài)提示。
儀表的485 接口電路用于STM32F407 與點(diǎn)陣式LED 大顯示屏的通訊。通過(guò)大顯示屏顯示相關(guān)信息。
USART 接口用于ISP 程序升級(jí)。
WiFi 模塊可用于將重量上傳至系統(tǒng)管理平臺(tái),管理平臺(tái)也可向儀表發(fā)送廣播信息等。當(dāng)儀表檢測(cè)到故障時(shí),可將故障碼通過(guò)WiFi 發(fā)送至平臺(tái)。
總體流程如圖4所示。儀表在上電對(duì)各外設(shè)初始化后,讀出Flash 內(nèi)的參數(shù),并使能一鍵開(kāi)關(guān)機(jī)電路的電源驅(qū)動(dòng),通過(guò)CAN 接口讀取采集模塊的關(guān)鍵參數(shù),然后進(jìn)入主界面稱(chēng)重界面,顯示重量/超載等信息。同時(shí),開(kāi)啟定時(shí)器中斷、CAN 中斷,在定時(shí)器中斷中每250 ms 發(fā)送1 次讀取采集模塊重量的CAN 指令,在CAN 中斷中接收來(lái)自采集模塊的數(shù)據(jù)。開(kāi)啟各按鍵端口的外部中斷,在外部中斷中對(duì)按下的功能鍵進(jìn)行消抖,消抖后對(duì)按鍵標(biāo)志置1,此時(shí)STM32F407 結(jié)合功能鍵的狀態(tài)執(zhí)行功能操作或狀態(tài)切換,并進(jìn)行各狀態(tài)下的顯示;若檢測(cè)到開(kāi)關(guān)機(jī)鍵長(zhǎng)按下,則斷電關(guān)機(jī);若未檢測(cè)到開(kāi)關(guān)機(jī)鍵按下,則在各界面一直循環(huán)下去。
在稱(chēng)重界面下,模式0 或模式1 時(shí),結(jié)合Flash存儲(chǔ)的參數(shù)對(duì)重量修正,將重量/超載等信息進(jìn)行顯示,并結(jié)合功能鍵執(zhí)行相應(yīng)的功能操作或狀態(tài)切換,也可由功能鍵進(jìn)入設(shè)置界面。
圖4 總體流程Fig.4 Total flow chart
在設(shè)置界面下,可進(jìn)入多參數(shù)設(shè)置、滿(mǎn)程目標(biāo)值設(shè)置、標(biāo)定、修正設(shè)定、超載門(mén)限設(shè)定、工作模式設(shè)定、稱(chēng)重單位設(shè)定等二級(jí)界面。首先進(jìn)入菜單選擇界面,此時(shí)結(jié)合按鍵可進(jìn)行二級(jí)界面的選擇;在各二級(jí)界面下,可結(jié)合功能鍵執(zhí)行相應(yīng)的狀態(tài)切換,也可由功能鍵退出設(shè)置界面,進(jìn)入稱(chēng)重界面。同時(shí),在各界面流程控制中,驅(qū)動(dòng)數(shù)碼管進(jìn)行實(shí)時(shí)狀態(tài)顯示。
由于CAN 總線(xiàn)具有可靠性高、功能完善、成本較低等諸多優(yōu)點(diǎn),目前已廣泛應(yīng)用于汽車(chē)工業(yè)、工業(yè)控制等領(lǐng)域[3]。考慮到其具有可靠的錯(cuò)誤檢測(cè)和出錯(cuò)處理功能,在此采用CAN 接口實(shí)現(xiàn)STM32F407與采集模塊的數(shù)據(jù)傳輸,波特率采用500 kb/s。
CAN2 接口發(fā)送1 幀數(shù)據(jù)的程序代碼如下:
另外,在數(shù)據(jù)幀中均增加了校驗(yàn)數(shù)據(jù),接收方收到數(shù)據(jù)幀進(jìn)行解析時(shí)按照約定的格式計(jì)算校驗(yàn)值,若該校驗(yàn)結(jié)果與數(shù)據(jù)幀中的校驗(yàn)數(shù)據(jù)一致,則做出相應(yīng)的回復(fù)或處理,否則不予處理。
數(shù)據(jù)幀中的數(shù)據(jù)約定格式見(jiàn)表1,其中含有幀頭、幀尾、數(shù)據(jù)、校驗(yàn)等信息。
在各一級(jí)界面、二級(jí)界面的流程控制中,各狀態(tài)的切換以輸入條件和當(dāng)前狀態(tài)為依據(jù),輸入條件主要是各功能鍵的狀態(tài),另外在不同界面中還包括其他對(duì)應(yīng)條件。
具體工作過(guò)程為:判斷當(dāng)前外界輸入條件是否滿(mǎn)足當(dāng)前界面、當(dāng)前狀態(tài)下的輸入條件,若滿(mǎn)足則狀態(tài)轉(zhuǎn)換為下一狀態(tài);否則停留在當(dāng)前狀態(tài)。
表1 編幀格式Tab.1 Frame format
為防止Flash 內(nèi)部的參數(shù)丟失,采用備份的方式,將數(shù)據(jù)分別存儲(chǔ)于2 個(gè)不同的扇區(qū)。
在對(duì)參數(shù)進(jìn)行存儲(chǔ)時(shí),首先對(duì)待存儲(chǔ)數(shù)據(jù)進(jìn)行CRC16 校驗(yàn),將數(shù)據(jù)和校驗(yàn)值存入后,再將數(shù)據(jù)讀出進(jìn)行CRC16 校驗(yàn),將計(jì)算所得校驗(yàn)值與讀出的校驗(yàn)值進(jìn)行比對(duì)。若相等,說(shuō)明存儲(chǔ)正確,否則將再次存儲(chǔ)原始參數(shù),重復(fù)以上步驟;重復(fù)存儲(chǔ)3 次仍不能正確存儲(chǔ),則顯示“Err”提示。
在每次讀取時(shí),先讀出存儲(chǔ)扇區(qū)的數(shù)據(jù)進(jìn)行CRC16 校驗(yàn),若計(jì)算所得校驗(yàn)值與讀出的校驗(yàn)值相等,說(shuō)明參數(shù)正確;否則參數(shù)錯(cuò)誤,則將備份扇區(qū)的數(shù)據(jù)讀出進(jìn)行判斷,若參數(shù)正確則采用該備份數(shù)據(jù),并將該數(shù)據(jù)再次存儲(chǔ);若參數(shù)仍錯(cuò)誤,則采用程序中預(yù)先定義的數(shù)組[4]中的出廠默認(rèn)參數(shù)。
該儀表在正式使用前分別接模擬傳感器、比率校準(zhǔn)器進(jìn)行全面的精度測(cè)試,試驗(yàn)結(jié)果見(jiàn)表2。在常溫下,信號(hào)源為模擬傳感器時(shí),系統(tǒng)綜合精度為2.2×10-4;在-30~70 ℃溫度范圍內(nèi),系統(tǒng)綜合精度為5×10-4,完全可滿(mǎn)足牧場(chǎng)配料的精度要求。
表2 精度測(cè)試結(jié)果Tab.2 Accuracy test results
在振動(dòng)試驗(yàn)機(jī)上,采用表3所列的振動(dòng)頻率、功率譜密度和加速度進(jìn)行32 h 的振動(dòng)試驗(yàn),其振動(dòng)頻譜如圖5所示。振動(dòng)停止后,儀表仍能正常工作,表明振動(dòng)對(duì)儀表性能無(wú)明顯影響。
表3 振動(dòng)頻率和能量譜密度Tab.3 Vibration frequency and energy spectral density
圖5 振動(dòng)頻譜Fig.5 Vibration frequency
采用單片機(jī)STM32F407 實(shí)現(xiàn)儀表的多界面流程控制和CAN 通訊采集,不僅具有較高的可靠性,而且編程采用標(biāo)準(zhǔn)C 語(yǔ)言,便于程序的修改與優(yōu)化。所設(shè)計(jì)的畜牧車(chē)配料稱(chēng)重儀表具有可靠性高、可操作性強(qiáng)、配料精度高等優(yōu)點(diǎn)。該設(shè)備操作方便,實(shí)現(xiàn)了人機(jī)對(duì)話(huà),目前已在河南某牧場(chǎng)中投入使用。經(jīng)試驗(yàn)證明:該儀表工作穩(wěn)定,可以滿(mǎn)足牧場(chǎng)配料控制的要求。