• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

      2012-04-29 19:03:09伊磊聶歡歡劉任平
      計算機時代 2012年3期

      伊磊 聶歡歡 劉任平

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

      關(guān)鍵詞: 串行通信; 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公司開發(fā)的一種科學計算軟件。Matlab運行穩(wěn)定、可靠、使用方便,是廣大科研人員進行科學研究的得力助手。Matlab不僅具有強大的科學計算功能,還具有滿足一般要求的數(shù)據(jù)采集以及界面設(shè)計開發(fā)等功能[1]。

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

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

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

      1 Matlab的串口通信原理

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

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

      Matlab對串口的控制主要通過以下幾個步驟[3]。

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

      s=serial(‘COM1):創(chuàng)建COM1串口對象,并以s標識。其中串口的屬性使用系統(tǒng)默認值。

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

      fopen(s):打開COM1串口。

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

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

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

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

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

      Parity:定義校驗方式;

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

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

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

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

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

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

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

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

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

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

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

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

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

      [PC機

      模塊][MAX232A

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

      單片機

      模塊]

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

      2.1 基于Matlab的上位機通訊

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

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

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

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

      fopen(s);%打開COM1串口

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

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

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

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

      2.2 基于AVR單片機的下位機通訊

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

      本設(shè)計來源于機器人語音識別項目。利用PC機識別語音信號后,讓機器人將做出相應的動作。

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

      [開始][串行口初始化

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

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

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

      圖2AVR單片機下位機流程圖

      3 結(jié)束語

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

      參考文獻:

      [1] 王戰(zhàn)軍,沈明.基于Matlab GUI的串口通信編程實現(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].微計算機信息,2004.3:100~101

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

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

      中超| 荥阳市| 澎湖县| 大宁县| 定安县| 手游| 大港区| 昌邑市| 广昌县| 云安县| 合川市| 马龙县| 巩留县| 玉林市| 扶绥县| 伊川县| 杭州市| 东乌珠穆沁旗| 余干县| 诏安县| 营口市| 治多县| 田阳县| 荆门市| 祁阳县| 温州市| 新平| 安康市| 松阳县| 密云县| 通辽市| 崇州市| 罗甸县| 志丹县| 项城市| 高要市| 巢湖市| 平南县| 贡觉县| 周口市| 远安县|