国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Matlab和AVR單片機(jī)的串行數(shù)據(jù)通信設(shè)計(jì)

2012-04-29 19:03:09伊磊聶歡歡劉任平
計(jì)算機(jī)時(shí)代 2012年3期

伊磊 聶歡歡 劉任平

摘要:介紹了基于Matlab和AVR單片機(jī)通過PC機(jī)進(jìn)行通信的方法。通過Matlab下的通信類Serial類元件庫實(shí)現(xiàn)串行通信,并利用AVR單片機(jī)對(duì)采集到的數(shù)據(jù)進(jìn)行相應(yīng)處理。

關(guān)鍵詞: 串行通信; Serial類對(duì)象; AVR單片機(jī); Matlab串行通信

中圖分類號(hào):TP919文獻(xiàn)標(biāo)志碼:A 文章編號(hào):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公司開發(fā)的一種科學(xué)計(jì)算軟件。Matlab運(yùn)行穩(wěn)定、可靠、使用方便,是廣大科研人員進(jìn)行科學(xué)研究的得力助手。Matlab不僅具有強(qiáng)大的科學(xué)計(jì)算功能,還具有滿足一般要求的數(shù)據(jù)采集以及界面設(shè)計(jì)開發(fā)等功能[1]。

串行通信是指使用一條數(shù)據(jù)線,將數(shù)據(jù)一位一位地依次傳輸,每一位數(shù)據(jù)占據(jù)一個(gè)固定的時(shí)間長度的通信方法。它只需要少數(shù)幾條線就可以在系統(tǒng)間交換信息,特別適用于計(jì)算機(jī)與計(jì)算機(jī)、計(jì)算機(jī)與外設(shè)之間的遠(yuǎn)距離通信。

目前常用的串行通訊協(xié)議有RS-232、RS-422和RS-485等。

從Matlab 6.0版本開始,軟件中增加了設(shè)備控制箱(Instrument Control Toolbox)功能,提供了對(duì)RS-232/RS-485通信標(biāo)準(zhǔn)的串口通信的正式支持。利用該工具箱的serial類及fopen、fread等函數(shù),能可靠地進(jìn)行實(shí)時(shí)串行通信。根據(jù)Matlab的設(shè)備控制箱功能,Matlab產(chǎn)生的數(shù)據(jù),例如圖像數(shù)據(jù)、音頻數(shù)據(jù)等,通過串口輸出作為傳輸?shù)臄?shù)據(jù)源,并可通過控制電路由AVR單片機(jī)實(shí)現(xiàn)。這種方法將Matlab的數(shù)據(jù)運(yùn)算與單片機(jī)的數(shù)據(jù)處理有機(jī)結(jié)合起來,具有一定的實(shí)際意義[2]。

1 Matlab的串口通信原理

對(duì)于系統(tǒng)的串口,在Matlab中以serial類的形式提供了支持。當(dāng)用指令建立一個(gè)串口對(duì)象(句柄)后,對(duì)串口的硬件操作可以以文件操作的軟件方式來完成,該方法比較簡單。

Matlab提供了對(duì)串口進(jìn)行打開、關(guān)閉、以及串口參數(shù)設(shè)置等操作的一系列函數(shù)。利用這些函數(shù)可以選擇串口號(hào)、設(shè)置串口通信參數(shù),例如波特率、數(shù)據(jù)位、停止位、校驗(yàn)位等。

Matlab對(duì)串口的控制主要通過以下幾個(gè)步驟[3]。

⑴ 為應(yīng)用程序創(chuàng)建串口對(duì)象,需要用到的函數(shù)為

s=serial(‘COM1):創(chuàng)建COM1串口對(duì)象,并以s標(biāo)識(shí)。其中串口的屬性使用系統(tǒng)默認(rèn)值。

⑵ 創(chuàng)建串口COM1后,打開串口需要用到的函數(shù)為

fopen(s):打開COM1串口。

⑶ 設(shè)置串口的屬性參數(shù),需要用到的函數(shù)為

props=set(s,‘PropertyName,PropertyValue,…):設(shè)置正確的串口通信參數(shù)。

通過定義串口對(duì)象的屬性, 就能定義串口的通信模式,也可以了解串口的狀態(tài)。串口對(duì)象幾個(gè)比較重要的屬性如下。

BaudRate:定義傳輸波特率,常用的波特率有1200、2400、4800、9600、19200、115200等,缺省值為9600;

DataBits:定義數(shù)據(jù)幀的比特位數(shù);

Parity:定義校驗(yàn)方式;

StopBits:定義數(shù)據(jù)停止位。

⑷ 從串口讀數(shù)據(jù)或者向串口寫數(shù)據(jù),也就是接收或者發(fā)送數(shù)據(jù)。需要用到的函數(shù)和參數(shù)有以下[4]。

fread(s):以二進(jìn)制通信方式讀取串口數(shù)據(jù)。

fwrite(s):以二進(jìn)制通信方式向串口寫數(shù)據(jù)。

fprintf(s, ‘ ID):以文本通信方式向串口輸出字符串‘ID,寫操作以同步方式進(jìn)行。

id=fscanf(s):以文本通信方式向串口讀入字符串‘ID,并且保存在變量id中。

⑸ 關(guān)閉串口并且釋放串口對(duì)象占用的存儲(chǔ)空間。需要用到的函數(shù)有以下。

fclose(s):關(guān)閉串口。

delete(s):釋放串口對(duì)象占用的內(nèi)存空間。

clear s:釋放串口對(duì)象在Matlab工作區(qū)中占用的存儲(chǔ)空間。

用Matlab實(shí)現(xiàn)對(duì)串口的讀寫操作,單片機(jī)可以通過串口接收Matlab傳來的數(shù)據(jù),并且對(duì)數(shù)據(jù)作出處理。

2 AVR對(duì)串口數(shù)據(jù)進(jìn)行處理

以下實(shí)驗(yàn)是通過Matlab對(duì)串口寫數(shù)據(jù)后,單片機(jī)對(duì)傳到串口的數(shù)據(jù)進(jìn)行處理的過程。整個(gè)系統(tǒng)的結(jié)構(gòu)圖如圖1所示。

[PC機(jī)

模塊][MAX232A

電平轉(zhuǎn)換][AVR

單片機(jī)

模塊]

圖1系統(tǒng)結(jié)構(gòu)圖

2.1 基于Matlab的上位機(jī)通訊

用Matlab以查詢方式的進(jìn)行異步串行通信的主要代碼為:

s=serial(‘COM1);%創(chuàng)建COM1串口對(duì)象,并以s標(biāo)示

s.baudrate=9600;%波特率為9600

s.stopbits=1;%設(shè)置停止位

fopen(s);%打開COM1串口

fwrite ( s , ‘16, ‘uchar);%向s寫十進(jìn)制數(shù)16

fclose (s);%斷開串口COM1與s的相連

delete (s);%從內(nèi)存中刪除串口對(duì)象s

clear s;%從Matlab工作區(qū)中清除串行接口對(duì)象s

2.2 基于AVR單片機(jī)的下位機(jī)通訊

單片機(jī)系統(tǒng)處于下位機(jī)狀態(tài),等待Matlab 傳來的命令。當(dāng)串口接收到數(shù)據(jù)后,按照協(xié)議對(duì)數(shù)據(jù)進(jìn)行分析(這里使用的是AVR單片機(jī)中的mega8系列)。對(duì)串行數(shù)據(jù)進(jìn)行處理的軟件處理流程圖如圖2所示[5]。

本設(shè)計(jì)來源于機(jī)器人語音識(shí)別項(xiàng)目。利用PC機(jī)識(shí)別語音信號(hào)后,讓機(jī)器人將做出相應(yīng)的動(dòng)作。

實(shí)現(xiàn)過程為:Matlab做出語音識(shí)別后輸出一個(gè)值,單片機(jī)根據(jù)這個(gè)值所對(duì)應(yīng)的數(shù)據(jù),來寫端口值進(jìn)而驅(qū)動(dòng)電機(jī),電機(jī)的轉(zhuǎn)動(dòng)帶動(dòng)機(jī)器人四肢的轉(zhuǎn)動(dòng),從而實(shí)現(xiàn)目標(biāo)。

[開始][串行口初始化

設(shè)置相關(guān)寄存器] [接受緩存為空?][接收PC機(jī)

發(fā)送信號(hào)] [是否為握手信號(hào)

0XFFH?][開始通信][單片機(jī)處理過程][結(jié)束][Y][N] [N][Y]

圖2AVR單片機(jī)下位機(jī)流程圖

3 結(jié)束語

本文所采用的串行通信方式為查詢方式,因此系統(tǒng)的實(shí)時(shí)性不是很好。在實(shí)際運(yùn)用中,可以選擇Matlab所提供的instrcallback(s)回調(diào)函數(shù)以實(shí)現(xiàn)良好的實(shí)時(shí)性。另外本文所述單片機(jī)驅(qū)動(dòng)的是電機(jī),有興趣的讀者可以驅(qū)動(dòng)其他外設(shè)。

參考文獻(xiàn):

[1] 王戰(zhàn)軍,沈明.基于Matlab GUI的串口通信編程實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2010.9:39~44

[2] 李俊華.基于Matlab的紅外串行通信研究[J].現(xiàn)代電子技術(shù),2011.3:59~65

[3] 張立材.基于Matlab環(huán)境的串行數(shù)據(jù)通信[J].微計(jì)算機(jī)信息,2004.3:100~101

[4] 孫希延,紀(jì)元法,施滸立.基于MATLAB的串口GPS數(shù)據(jù)通信處理系統(tǒng)設(shè)計(jì)[J].儀器儀表用戶,2006.6:64~65

[5] 向先波,徐國華,張琴.Matlab環(huán)境下PC機(jī)與單片機(jī)的串行通信及數(shù)據(jù)處理[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2004.12:27~31

榆林市| 汝阳县| 南溪县| 信宜市| 沅陵县| 启东市| 科技| 新密市| 乌鲁木齐县| 宿松县| 蓬溪县| 新巴尔虎左旗| 崇信县| 双城市| 重庆市| 会东县| 东乡族自治县| 新泰市| 汨罗市| 瓮安县| 温泉县| 肃北| 溧阳市| 彰武县| 彭水| 黔西县| 电白县| 象州县| 永泰县| 调兵山市| 金昌市| 什邡市| 马鞍山市| 教育| 永州市| 唐山市| 余干县| 迭部县| 杭锦后旗| 会昌县| 连江县|