劉澤玲,周智榮,張 偉
(中航電測儀器股份有限公司,西安710100)
在畜牧養殖行業,常需要對多種飼料按科學的比例進行配料,而在大型牧場,若采用傳統的人工稱量配料,會耗費大量的時間。近年來,隨著畜牧養殖業的發展,為了提高養殖效能,許多畜牧養殖場對精準車載配料系統的需求越來越多[1],將配料稱重顯示儀配備在飼養車上,可以在飼養車輛行進過程中邊配料邊喂養,從而節省很多時間,為此要求配料稱重儀表具有高的可靠性和高的配料精度。在此,選用ARM 單片機STM32F407,設計了一款能夠在飼養車行進中輸出精準重量的車載配料稱重顯示儀。
STM32F407 單片機是ST 公司基于ARM Cortex M4 內核的微控制器,主頻可達168 MHz;片內集成了先進的外設,其可配置的GPIO 多達114 個,通訊接口有15 種:I2C,SPI,串行接口、CAN 接口、外存接口等,內部的Flash 存儲器可用于非易失性數據存儲[2]。故在此選用STM32F407 作為控制核心,用于接收來自內置信號采集模塊或外置數字傳感器的數據,檢測儀表按鍵組的狀態,實現各種參數的設置、工作模式的設置、多界面的切換等,并驅動5位數碼管顯示。
該儀表結構框圖如圖1所示。STM32F407 通過CAN 總線接收重量數據,通過按鍵組接收用戶的操作信號,其片內Flash 用于存儲儀表參數,LED 數碼管用于重量顯示及狀態提示,聲光提醒模塊用于配料提醒及故障提醒,485 接口用于驅動點陣式LED大顯示屏,USART 接口可用于程序升級,WiFi 模塊可用于與管理平臺通訊。

圖1 儀表結構框圖Fig.1 Instrument structure block diagram
儀表內置的信號采集模塊,用于采集處理模擬傳感器的信號,其結構框圖如圖2所示,包含信號調理電路、A/D 轉換電路、MCU 處理及CAN 接口電路。信號調理電路將模擬傳感器的mV 級信號進行調理放大,A/D 轉換電路將調理放大后的信號轉換為數字信號,并將轉換結果輸出給采集模塊MCU進行處理,該MCU 將此數字值轉換成重量值,通過CAN 接口傳輸給STM32F407。

圖2 信號采集模塊結構框圖Fig.2 Structure block diagram of signal acquisition module
若儀表外采用數字傳感器,則不需要信號采集模塊的處理,STM32F407 通過CAN 接口接收數據即可。CAN 收發器的電路原理如圖3所示。

圖3 CAN 收發器的電路原理Fig.3 Circuit schematic of CAN transceiver
電源調理模塊用于給儀表內各模塊及元器件供電。
采用GPIO 端口接收來自按鍵組的用戶操作信號。按鍵組含有1 個電源開關鍵、5 個功能鍵。其中電源開關鍵可實現儀表的一鍵開關機;功能鍵可單獨使用,也可組合使用,用于儀表參數設置、標定、稱重模式設置、多界面的切換及各流程的狀態切換等。
采用GPIO 端口輸出開關量信號,驅動聲光提醒模塊,用于在配料過程中,配料重量接近設置范圍時給配料人員提供聲音提示或燈光提醒。當儀表出現故障時,STM32F407 也會驅動聲光報警。
STM32F407 通過SPI 接口控制LED 顯示驅動芯片,驅動LED 數碼管顯示,用于顯示稱重模式下的重量,同時在各界面的流程控制中進行相應狀態提示。
儀表的485 接口電路用于STM32F407 與點陣式LED 大顯示屏的通訊。通過大顯示屏顯示相關信息。
USART 接口用于ISP 程序升級。
WiFi 模塊可用于將重量上傳至系統管理平臺,管理平臺也可向儀表發送廣播信息等。當儀表檢測到故障時,可將故障碼通過WiFi 發送至平臺。
總體流程如圖4所示。儀表在上電對各外設初始化后,讀出Flash 內的參數,并使能一鍵開關機電路的電源驅動,通過CAN 接口讀取采集模塊的關鍵參數,然后進入主界面稱重界面,顯示重量/超載等信息。同時,開啟定時器中斷、CAN 中斷,在定時器中斷中每250 ms 發送1 次讀取采集模塊重量的CAN 指令,在CAN 中斷中接收來自采集模塊的數據。開啟各按鍵端口的外部中斷,在外部中斷中對按下的功能鍵進行消抖,消抖后對按鍵標志置1,此時STM32F407 結合功能鍵的狀態執行功能操作或狀態切換,并進行各狀態下的顯示;若檢測到開關機鍵長按下,則斷電關機;若未檢測到開關機鍵按下,則在各界面一直循環下去。
在稱重界面下,模式0 或模式1 時,結合Flash存儲的參數對重量修正,將重量/超載等信息進行顯示,并結合功能鍵執行相應的功能操作或狀態切換,也可由功能鍵進入設置界面。

圖4 總體流程Fig.4 Total flow chart
在設置界面下,可進入多參數設置、滿程目標值設置、標定、修正設定、超載門限設定、工作模式設定、稱重單位設定等二級界面。首先進入菜單選擇界面,此時結合按鍵可進行二級界面的選擇;在各二級界面下,可結合功能鍵執行相應的狀態切換,也可由功能鍵退出設置界面,進入稱重界面。同時,在各界面流程控制中,驅動數碼管進行實時狀態顯示。
由于CAN 總線具有可靠性高、功能完善、成本較低等諸多優點,目前已廣泛應用于汽車工業、工業控制等領域[3]。考慮到其具有可靠的錯誤檢測和出錯處理功能,在此采用CAN 接口實現STM32F407與采集模塊的數據傳輸,波特率采用500 kb/s。
CAN2 接口發送1 幀數據的程序代碼如下:

另外,在數據幀中均增加了校驗數據,接收方收到數據幀進行解析時按照約定的格式計算校驗值,若該校驗結果與數據幀中的校驗數據一致,則做出相應的回復或處理,否則不予處理。
數據幀中的數據約定格式見表1,其中含有幀頭、幀尾、數據、校驗等信息。
在各一級界面、二級界面的流程控制中,各狀態的切換以輸入條件和當前狀態為依據,輸入條件主要是各功能鍵的狀態,另外在不同界面中還包括其他對應條件。
具體工作過程為:判斷當前外界輸入條件是否滿足當前界面、當前狀態下的輸入條件,若滿足則狀態轉換為下一狀態;否則停留在當前狀態。

表1 編幀格式Tab.1 Frame format
為防止Flash 內部的參數丟失,采用備份的方式,將數據分別存儲于2 個不同的扇區。
在對參數進行存儲時,首先對待存儲數據進行CRC16 校驗,將數據和校驗值存入后,再將數據讀出進行CRC16 校驗,將計算所得校驗值與讀出的校驗值進行比對。若相等,說明存儲正確,否則將再次存儲原始參數,重復以上步驟;重復存儲3 次仍不能正確存儲,則顯示“Err”提示。
在每次讀取時,先讀出存儲扇區的數據進行CRC16 校驗,若計算所得校驗值與讀出的校驗值相等,說明參數正確;否則參數錯誤,則將備份扇區的數據讀出進行判斷,若參數正確則采用該備份數據,并將該數據再次存儲;若參數仍錯誤,則采用程序中預先定義的數組[4]中的出廠默認參數。
該儀表在正式使用前分別接模擬傳感器、比率校準器進行全面的精度測試,試驗結果見表2。在常溫下,信號源為模擬傳感器時,系統綜合精度為2.2×10-4;在-30~70 ℃溫度范圍內,系統綜合精度為5×10-4,完全可滿足牧場配料的精度要求。

表2 精度測試結果Tab.2 Accuracy test results
在振動試驗機上,采用表3所列的振動頻率、功率譜密度和加速度進行32 h 的振動試驗,其振動頻譜如圖5所示。振動停止后,儀表仍能正常工作,表明振動對儀表性能無明顯影響。

表3 振動頻率和能量譜密度Tab.3 Vibration frequency and energy spectral density

圖5 振動頻譜Fig.5 Vibration frequency
采用單片機STM32F407 實現儀表的多界面流程控制和CAN 通訊采集,不僅具有較高的可靠性,而且編程采用標準C 語言,便于程序的修改與優化。所設計的畜牧車配料稱重儀表具有可靠性高、可操作性強、配料精度高等優點。該設備操作方便,實現了人機對話,目前已在河南某牧場中投入使用。經試驗證明:該儀表工作穩定,可以滿足牧場配料控制的要求。