伊磊 聶歡歡 劉任平
摘要:介紹了基于Matlab和AVR單片機通過PC機進行通信的方法。通過Matlab下的通信類Serial類元件庫實現串行通信,并利用AVR單片機對采集到的數據進行相應處理。
關鍵詞: 串行通信; Serial類對象; AVR單片機; Matlab串行通信
中圖分類號:TP919文獻標志碼:A 文章編號:1006-8228(2012)03-33-02
Serial communication based on Matlab and AVR
Yi Lei, Nie Huanhuan, Liu Renping
(North China University of Technology, Beijing, 100144, China)
Abstract: The authors present in this paper an approach for serial communication based on Matlab and AVR through PC and explain how to achieve the serial communication based on the component library of Matlab and act respectively according to the data which the MCU collects.
Key words: serial communication; serial class object; MCU of AVR; serial communication of Matlab
0 引言
Matlab是MathWorks公司開發的一種科學計算軟件。Matlab運行穩定、可靠、使用方便,是廣大科研人員進行科學研究的得力助手。Matlab不僅具有強大的科學計算功能,還具有滿足一般要求的數據采集以及界面設計開發等功能[1]。
串行通信是指使用一條數據線,將數據一位一位地依次傳輸,每一位數據占據一個固定的時間長度的通信方法。它只需要少數幾條線就可以在系統間交換信息,特別適用于計算機與計算機、計算機與外設之間的遠距離通信。
目前常用的串行通訊協議有RS-232、RS-422和RS-485等。
從Matlab 6.0版本開始,軟件中增加了設備控制箱(Instrument Control Toolbox)功能,提供了對RS-232/RS-485通信標準的串口通信的正式支持。利用該工具箱的serial類及fopen、fread等函數,能可靠地進行實時串行通信。根據Matlab的設備控制箱功能,Matlab產生的數據,例如圖像數據、音頻數據等,通過串口輸出作為傳輸的數據源,并可通過控制電路由AVR單片機實現。這種方法將Matlab的數據運算與單片機的數據處理有機結合起來,具有一定的實際意義[2]。
1 Matlab的串口通信原理
對于系統的串口,在Matlab中以serial類的形式提供了支持。當用指令建立一個串口對象(句柄)后,對串口的硬件操作可以以文件操作的軟件方式來完成,該方法比較簡單。
Matlab提供了對串口進行打開、關閉、以及串口參數設置等操作的一系列函數。利用這些函數可以選擇串口號、設置串口通信參數,例如波特率、數據位、停止位、校驗位等。
Matlab對串口的控制主要通過以下幾個步驟[3]。
⑴ 為應用程序創建串口對象,需要用到的函數為
s=serial(‘COM1):創建COM1串口對象,并以s標識。其中串口的屬性使用系統默認值。
⑵ 創建串口COM1后,打開串口需要用到的函數為
fopen(s):打開COM1串口。
⑶ 設置串口的屬性參數,需要用到的函數為
props=set(s,‘PropertyName,PropertyValue,…):設置正確的串口通信參數。
通過定義串口對象的屬性, 就能定義串口的通信模式,也可以了解串口的狀態。串口對象幾個比較重要的屬性如下。
BaudRate:定義傳輸波特率,常用的波特率有1200、2400、4800、9600、19200、115200等,缺省值為9600;
DataBits:定義數據幀的比特位數;
Parity:定義校驗方式;
StopBits:定義數據停止位。
⑷ 從串口讀數據或者向串口寫數據,也就是接收或者發送數據。需要用到的函數和參數有以下[4]。
fread(s):以二進制通信方式讀取串口數據。
fwrite(s):以二進制通信方式向串口寫數據。
fprintf(s, ‘ ID):以文本通信方式向串口輸出字符串‘ID,寫操作以同步方式進行。
id=fscanf(s):以文本通信方式向串口讀入字符串‘ID,并且保存在變量id中。
⑸ 關閉串口并且釋放串口對象占用的存儲空間。需要用到的函數有以下。
fclose(s):關閉串口。
delete(s):釋放串口對象占用的內存空間。
clear s:釋放串口對象在Matlab工作區中占用的存儲空間。
用Matlab實現對串口的讀寫操作,單片機可以通過串口接收Matlab傳來的數據,并且對數據作出處理。
2 AVR對串口數據進行處理
以下實驗是通過Matlab對串口寫數據后,單片機對傳到串口的數據進行處理的過程。整個系統的結構圖如圖1所示。
[PC機
模塊][MAX232A
電平轉換][AVR
單片機
模塊]
圖1系統結構圖
2.1 基于Matlab的上位機通訊
用Matlab以查詢方式的進行異步串行通信的主要代碼為:
s=serial(‘COM1);%創建COM1串口對象,并以s標示
s.baudrate=9600;%波特率為9600
s.stopbits=1;%設置停止位
fopen(s);%打開COM1串口
fwrite ( s , ‘16, ‘uchar);%向s寫十進制數16
fclose (s);%斷開串口COM1與s的相連
delete (s);%從內存中刪除串口對象s
clear s;%從Matlab工作區中清除串行接口對象s
2.2 基于AVR單片機的下位機通訊
單片機系統處于下位機狀態,等待Matlab 傳來的命令。當串口接收到數據后,按照協議對數據進行分析(這里使用的是AVR單片機中的mega8系列)。對串行數據進行處理的軟件處理流程圖如圖2所示[5]。
本設計來源于機器人語音識別項目。利用PC機識別語音信號后,讓機器人將做出相應的動作。
實現過程為:Matlab做出語音識別后輸出一個值,單片機根據這個值所對應的數據,來寫端口值進而驅動電機,電機的轉動帶動機器人四肢的轉動,從而實現目標。
[開始][串行口初始化
設置相關寄存器] [接受緩存為空?][接收PC機
發送信號] [是否為握手信號
0XFFH?][開始通信][單片機處理過程][結束][Y][N] [N][Y]
圖2AVR單片機下位機流程圖
3 結束語
本文所采用的串行通信方式為查詢方式,因此系統的實時性不是很好。在實際運用中,可以選擇Matlab所提供的instrcallback(s)回調函數以實現良好的實時性。另外本文所述單片機驅動的是電機,有興趣的讀者可以驅動其他外設。
參考文獻:
[1] 王戰軍,沈明.基于Matlab GUI的串口通信編程實現[J].現代電子技術,2010.9:39~44
[2] 李俊華.基于Matlab的紅外串行通信研究[J].現代電子技術,2011.3:59~65
[3] 張立材.基于Matlab環境的串行數據通信[J].微計算機信息,2004.3:100~101
[4] 孫希延,紀元法,施滸立.基于MATLAB的串口GPS數據通信處理系統設計[J].儀器儀表用戶,2006.6:64~65
[5] 向先波,徐國華,張琴.Matlab環境下PC機與單片機的串行通信及數據處理[J].單片機與嵌入式系統應用,2004.12:27~31