本站小編為你精心準備了MATLAB與ARM的數據通信探討參考范文,愿這些范文能點燃您思維的火花,激發您的寫作靈感。歡迎深入閱讀并收藏。
1硬件電路部分
1.1ADXL345模塊ADXL345采用3mm×5mm×1mm,14引腳小型超薄塑料封裝,是一款小而薄的超低功耗3軸加速度計。數字輸出數據為16位二進制補碼格式,可通過SPI(3線或4線)或IIC數字接口訪問。ADXL345加速度傳感器首先由前端感應器感測加速度的大小,然后由感應電信號器件轉為可識別的電信號,這個信號是模擬信號。ADXL345中集成了AD轉換器,可以將此模擬信號數字化,AD轉換器輸出的是16位的二進制補碼。經過數字濾波器的濾波后在控制和中斷邏輯單元的控制下訪問32級FIFO,通過串行接口讀取數據。
1.2STM32模塊本系統中所采用的STM32F103VET6是一款意法半導體公司生產的基于CORTEX-M3內核的微控制器,由于其具有高性能、低成本、低功耗的特點被廣泛應用于嵌入式領域的開源中。該芯片最高工作頻率可達到72MHz,具有512K字節的閃存以及64K字節的SRAM[3]。STM32F103VET6內集成一個IIC-EEPROM以及兩個USART串行通信接口。內置最高可達4.5Mbit/s的波特率發生器,起始位、數據位、奇偶校驗位、終止位均可設置。同時,芯片內部還集成有一個SDIO接口,兼容SD存儲卡,該接口可以使數據傳輸速率達到48MHz,可以實現對采集數據的實時存儲。
2軟件通信部分
2.1通信模塊
2.1.1ADXL345與微控制器之間的通信在ADXL345中,可通過SPI或IIC數字接口通信。無論采用哪種模式,ADXL345都作為從機使用。其中SPI由三條信號線組成;IIC是雙向、兩線SDA、SCL。結合本系統所用的MCU以及近距離數據傳輸特點,故本試驗選取IIC通信。ADXL345的IIC通信過程為:ADXL345的CS腳與VDDI/O腳通過上拉電阻相連便選擇了IIC通信模式。IIC接口電路將ADXL345測量電路采集傳送過來的數字信號交由STM32處理器進行處理。STM32處理器首先將數字量進行存儲,然后通過相應算法處理得到被測物體加速度響應值,并將結果進行輸出。在這部分通信過程中,通過對ADXL345的初始化設置,選用定時方式,由下位機微控制器每隔0.2s從ADXL345中接收一個數據[4]。
2.1.2STM32微控制器與上位機之間的通信USART是一種基于RS232串口通信協議的通信方式。但是上位機串口并不是TTL電平,故在它們之間必須通過相應的電平轉換,才能夠進行數據傳輸。本文采用的是典型的MAX232電平轉換電路,如圖2所示。
2.2軟件部分軟件設計的主要目的是使測控系統各個部分協調工作,上位機對于下位機接收的數據進行實時處理需要設計相應的軟件如下:
2.2.1下位機數據通信軟件模塊下位機數據通信模塊軟件以MDK為開發平臺,實現了下位機的數據通信。首先對下位機進行相關的串口初始化,而后通過中斷方式判斷接受緩沖區狀態,若非空則利用握手信號發送數據,若空則繼續回到初始化進程中,其程序流程圖如圖3所示。串口外設主要由三個部分組成,分別是波特率的控制部分,收發控制部分及數據存儲轉移部分。在配置波特率時,向波特比率寄存器USART_BRR寫入參數,修改了串口時鐘的分頻值USARTDIV。USART_BRR寄存器包括兩部分,分別是DIV_Man-tissa(USARTDIV的整數部分)和DIVFraction(US-ARTDIV的小數)部分,最終,計算公式為:。對于收發控制部分,包括:CR1、CR2、CR3、SR,即USART的三個控制寄存器和一個狀態寄存器。通過向寄存器寫入各種參數,來控制收發,如奇偶校驗位,停止位等,還包括對USART中斷的控制。收發控制器根據具體寄存器配置,對數據存儲轉移部分的移位寄存器進行控制。當需要發送數據時,內核或DMA外設把數據從內存寫入到發送數據寄存器TDR后,發送控制器將適時地自動把數據從TDR加載到發送移位寄存器,然后通過串口把數據一位一位發送出去,數據從TDR轉移到移位寄存器時,會產生發送寄存器TDR已空事件TXE,當數據從移位寄存器全部發送出去時,會產生數據發送完成事件TC,這些事件可以在狀態寄存器中查詢到。
2.2.2上位機數據通信軟件模塊本文以matlab作為上位機,其中MATLAB串口通訊控制屬于MATLAB設備控制工具箱的一部分。該工具箱提供了MATLAB軟件與硬件的交流通道,支持GPIB,VISA,SerialPort和TCP/IP及UDP等接口設備或儀器,綜合考慮到STM32微控制器采用的是串口通訊,以及串口不需要額外的接口卡,無需硬件投入,且與RS232、RS485接口方便,硬件易于實現等情況,故采用SerialPort交流方式。MATLAB串口通訊設置包括:創建設備對象、向設備讀寫數據、通過串口控制設備三大部分。下位機接收的加速度值已經位于串口緩存區中,從而上位機只需從串口中讀取數據,可采用中斷或查詢方式。在數據量大的情況下,若用查詢方式時,數據必須分時傳至上位機中,大大影響效率,且不能達到實時性的目的;若用中斷方式,雖然程序相對復雜,但是可以實時傳輸數據。故本文采用中斷方式讀取數據。在以MATLAB為上位機并以中斷方式進行通信時,需用Instrcallback(obj,event)回調函數以及事件驅動來實現。本文采用緩沖區有指定字節數目的數據可用事件(bytes-availableevent),具體程序段如下:g.BytesAvailableFcnMode=‘byte’;%定義中斷觸發事件為‘bytes-availableEvent’;g.BytesAvailableFcnCount=10;%設置接收緩沖區每收到10個字節時,觸發回調函數;g.BytesAvailableFcn=@instrcallback;%得到回調函數句柄;fopen(g);%連接串口設備對象。
2.3實例分析為了驗證設計方案的正確性與可行性,針對該系統的各功能進行了相關的測試,測試內容為加速度信號的傳輸與顯示。試驗中,利用STM32顯示屏以及MATLAB繪圖功能同時顯示ADXL345測量的加速度,當傳感器做隨機運動時,STM32每隔0.2s從上至下、從左至右顯示ADXL345z軸加速度值(見圖4),與此同時,上位機根據接收的數據繪制了折線圖(見圖5實線部分)。由圖4~5可知,應用MATLAB儀器控制工具箱準確地實現了STM32與上位機之間實時通信。
3結語
本文采用MATLAB儀器控制工具箱實現了STM32與MATLAB之間實時、準確的數據通信。建立了一個由ADXL345為加速度信號采集模塊、STM32加速度信號處理顯示模塊和STM32與MATLAB實時通信模塊組成的測試系統,并對該系統進行了試驗分析,分析結果表明:該系統能實時、準確地將加速度信號顯示在MATLAB界面中。同時該系統穩定、編程簡單、效率較高、實時性強,且設計電路簡單,易于控制,穩定性好。由于本文中采用的是C語言編程,故而移植性、兼容性好,能廣泛應用于現實生產生活中的各個領域。
作者:吳敏東郭迎慶徐趙東龔興龍單位:南京林業大學機械電子工程學院東南大學土木工程學院廣西交通科學研究院中國科學技術大學