徐鵬飛,馬國林,蘭光澤,員玉良
(青島農業大學機電工程學院,山東 青島 266109)
多通道數據采集通常采用較為成熟的數據采集卡[1-2]來實現。然而,數據采集卡價格高昂,中小型企業難以承受。而且,該方法需要上位機的聯機支持,靈活性較差,捷帶不便,不適用于復雜的實際工程環境。因此,目前已經開始采用單片機作為主控器[3-4],配合外部模擬數字轉換器(analog to digital converter,ADC)進行數據采集。其中,外部ADC器件的接口有并口方式[5]和串口方式[6]。并口方式可提高數據的讀取效率,但需要占用較多的處理器接口。串口方式可節省處理器的接口資源,但數據讀取的耗時較長。常見串口方式有串行外設接口(serial peripheral interface,SPI)、集成電路總線(inter-integrated circuit,I2C)、通用異步收發器接口(universal asynchronous receiver/transmitter,UART)等。
本文設計了一種基于STM32F7的多通道通用數據采集器,充分利用STM32F7微處理器的資源,采用片內ADC及多種協議接口,轉換結果通過直接存儲器訪問(direct memory access,DMA)[7-9]數據流方式存儲至外設靜態隨機存取存儲器(static random access memory,SRAM),有效解決了接口資源占用與轉換數據讀取效率之間的矛盾。DMA控制器可在外設寄存器與存儲器之間,以及在存儲器與存儲器之間提供高速數據傳輸,在數據傳輸過程中無需處理器操作控制,能在實現數據高速傳輸的同時節省片內資源,提升了處理器的執行效率。
多通道通用數據采集器最大的特點是實時性與普適性,可同時實時采集、傳輸、顯示不同協議下的通道數據。多通道通用數據采集器由微處理器、SD卡存儲模塊、顯示模塊、4G通信模塊和云端服務器等部分構成。多通道通用數據采集器結構如圖1所示。

圖1 多通道通用數據采集器結構圖
微處理器采用STM32F767ZIT6芯片。微處理器首先采集ADC通道、CAN、SPI、I2C等通信協議數據,然后將采集到的數據通過DMA傳輸緩存至SRAM,進行編碼后利用文件分配表(file allocation table,FAT)文件系統存入SD卡,并定時將SD卡的數據通過4G模塊發送到云端服務器。云端服務器對接收到的編碼信息進行解析顯示,同時將解析完的各通道數據導出為文本文檔。微處理器通過USART1連接4G通信模塊,通過USART2連接顯示模塊,與SD卡通信采用安全數字輸入輸出(secure digital input and output,SDIO)協議。
微處理器STM32F767ZIT6主頻可達216 MHz,片內集成多路ADC、I2C、通用同步異步收發器(universal synchronous/asynchronous receiver/transmitter,USART)等常見外設,內置兩個DMA控制器。豐富的內部資源可充分滿足系統設計需要。DMA支持外設到存儲器模式和存儲器到外設模式。采集通道數據選擇外設到存儲器模式。存儲數據和發送數據選擇存儲器到外設模式。DMA原理如圖2所示。

圖2 DMA原理圖
4G通信采用穩恒科技的WH_LTE_7S4模塊[10]。該模塊屬于二次開發模塊,內部集成了4G通信芯片,支持高速接入移動、聯通、電信4G。本設計中,將工作模式設置為網絡透傳模式,微處理器與4G模塊之間采用串口通信。模塊支持兩路Socket連接,只有發送數據時才會和服務器建立連接。如果在一定時間內停止數據傳輸,則會因超時而斷開連接。
存儲模塊電路如圖3所示。

圖3 存儲模塊電路
為了防止因網絡連接不穩定而引起數據丟失或錯亂,系統定時向SD卡中寫入數據,并實時將SD卡中的數據發送到上位機,對采集到的數據進行雙重保護。本設計選取容量為8 GB的SD卡。該卡采用SDIO4 bit接口模式讀寫,文件讀取速度最高可達20 Mbit/s。
圖3中,SDI0_D0、SDIO_D1、SDIO_D2、SDIO_D3是四位并行雙向數據線,SDIO_CK為SD卡的時鐘線,SDIO_CMD為指令線。微處理器向SD卡儲存數據:通過指令線向SD卡發送一個指令,SD卡隨即返回一個應答信號; 下一個時鐘周期開始由數據線進行數據傳輸,直到數據傳輸結束;微處理器發送一個結束指令,即完成一次操作。
采集器提供三種電壓源,分別為+3.3 V、+5 V和+12 V。通過AC-DC將220 V交流電轉換為+12 V直流電,給4G通信模塊、風速傳感器和光照度傳感器供電。同時,+12 V電壓通過LM2596S-ADI調節至+5 V,給莖稈直徑傳感器、土壤濕度傳感器和SD存儲模塊供電。+5 V電壓通過AMS1117調節至+3.3 V,給微處理器和溫濕度模塊供電。同時,采用不間斷電源模塊,可實現市電和鋰電池應急切換,保證系統的穩定、可靠運行。
采集器主程序使用STM32CubeMX工具和Keil μVision5集成開發環境進行程序開發調試。初始化子程序包括片內ADC、DMA、4G通信模塊和SD卡的初始化。
上電后,首先進行系統初始化,判斷是否到達數據的采集時間。如果沒有,則直接進入睡眠狀態;反之,則啟動各數據通道,采集相關數據,并讀取采樣時刻。數據采集完畢后,關閉采集通道,使其進入空閑狀態,直至下次采集時再打開通道。啟動DMA將數據發送至外部SRAM緩沖區,并通過FAT文件系統存入SD卡。如果檢測到網絡已連接,則還需將SD卡中的數據通過4G通信模塊發送給遠程服務器。
主程序流程如圖4所示。

圖4 主程序流程圖
2020年11月在青島城陽區(120°39′64′E,36°31′95′N)進行試驗。試驗對象為隨機選取的兩株茄子樣本,播種時間為2020年7月初。對兩株茄子樣本分別安裝一套溫室作物水分無創檢測系統。
試驗現場如圖5所示。

圖5 試驗現場示意圖
采集器所用傳感器配置如下:溫濕度傳感器采用單總線協議;大氣壓強傳感器采用I2C協議;光照度傳感器為RS-485輸出;風速、莖稈直徑微變[11]、土壤濕度傳感器為模擬0~5 V輸出。
傳感器參數如表1所示。

表1 傳感器參數
根據11月8~18日在試驗現場測得的數據繪制微環境因子變化曲線,如圖6所示。由圖6可知:溫室內的光合有效輻射量與飽和水汽壓差每天都會發生周期性變化。

圖6 微環境因子變化曲線
茄子樣本主要參數變化曲線如圖7所示。

圖7 茄子樣本主要參數變化曲線
11月10日上午10點對樣本進行了澆灌,澆水量為1 L。由圖7(a)可以看出,土壤相對濕度明顯變高。
澆水前,天氣狀況良好,土壤相對濕度小于20%。此時,茄子樣本已經不能從土壤中獲得足夠的水分來維持正常的蒸騰作用,出現了一定的干旱現象,造成莖稈出現大幅收縮。澆水后,莖稈得到了有效的水分補充。莖稈直徑變化基本穩定,并略有增長。
由圖7(b)可知,每天早上8點,光合有效輻射量開始增大,樣本莖稈開始收縮。至中午前后,光合有效輻射量達到最大值,莖稈直徑達到最小值。之后,莖稈逐漸膨脹變粗,一直持續到次日凌晨,達到最大值。如此反復,茄子樣本的莖稈直徑每日呈周期性變化,同時茄子樣本的莖稈直徑每天還有小幅度增長。11月8~17日,莖稈直徑大約增長了1.5 mm。
11月13日,茄子樣本的莖稈直徑與光合有效輻射量變化曲線如圖8所示。

圖8 11月13日茄子樣本的莖稈直徑與光合有效輻射量變化曲線
由圖8可知,光合有效輻射量在上午10點和下午1點前后出現波動。其原因是溫室結構支柱遮擋了太陽。
通過連續長時間的測量驗證,多通道通用數據采集器能夠高速、準確地測量出作物莖桿直徑、溫度、濕度、光照度和土壤濕度等信息,具有較高的可靠性與普適性。
本文基于STM32F7的多通道通用數據采集器,實現了多通道、多協議的高速數據采集。將其應用于溫室作物無創水分檢測系統中,可實現對作物莖桿直徑、溫度、濕度、光照度和土壤濕度等信息進行遠程監控。試驗結果表明,該采集器具有性能高、功耗小等優點,在保證高速采集多路數據的同時,極大地降低了硬件成本。該采集器運行穩定、可靠,實用性強,具有較高的推廣應用價值。