




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上matlab串口通信基礎(chǔ)講義支持基于串行接口(RS-232、RS-422、RS-485)、GPIB總線(IEEE2488、HPIB標(biāo)準)、VISA總線的通信;通信數(shù)據(jù)支持二進制和文本(ASCII)兩種方式,文本方式支持SCPI(Standard Commands for Programmable Instruments)語言;支持異步通信和同步通信;支持基于事件驅(qū)動的通信。從以上的Matlab設(shè)備控制工具箱的特點可以看到,Matlab完全可以滿足我們實現(xiàn)串行通信的要求。3.1 Matlab對串行口控制的基礎(chǔ)知識Matlab對串行口的編程控制主要分為四個步驟。創(chuàng)建串口設(shè)
2、備對象并設(shè)置其屬性。scom=serial('com1');%創(chuàng)建串口1的設(shè)備對象scomscom.Terminator='CR'%設(shè)置終止符為CR(回車符),缺省為LF(換行符)scom.InputBufferSize=1024;%輸入緩沖區(qū)為256B,缺省值為512Bscom.OutputBufferSize=1024;%輸出緩沖區(qū)為256B,缺省值為512Bscom.Timeout=0.5;%Y設(shè)置一次讀或?qū)懖僮鞯淖畲笸瓿蓵r間為0.5s,缺省值為10ss.ReadAsyncMode='continuous'(缺省方式);%在異步通信模式方式
3、下,讀取串口數(shù)據(jù)采用連續(xù)接收數(shù)據(jù)(continuous)的缺省方式,那么下位機返回的數(shù)據(jù)會自動地存入輸入緩沖區(qū)中.注意:在些屬性只有在對象沒有被打開時才能改變其值,如InputBufferSize、OutputBufferSize屬性等。對于一個RS-232/RS-422/RS-485串口設(shè)備對象,其屬性的缺省值為波特率9 600b/s,異步方式,通信數(shù)據(jù)格式為8位數(shù)據(jù)位,無奇偶校驗位,1位停止位。如果要設(shè)置的串口設(shè)置對象的屬性值與缺省值的屬性值相同,用戶可以不用另行設(shè)置。另外,設(shè)置串口設(shè)置對象的屬性也可以用一條指令完成,如:scom=serial('COM1','Ba
4、udRate',38400,'Parity','none','DataBits',8,'StopBits',1)。也可以用set命令,如set(scom,'BaudRate',19200,'Parity','even')。創(chuàng)建了對象后可以在Matlab命令窗口直接敲對象名并回車,看到其基本屬性和當(dāng)前狀態(tài)。若需要知道其全部的屬性,可以用get(scom)命令。打開串口設(shè)備對象。fopen(scom);讀寫串口操作。初始化并打開串口調(diào)協(xié)對象之后,現(xiàn)在可以對串口設(shè)備對象進行讀寫操作
5、,串口的讀寫操作支持二進制和文本(ASCII)兩種方式。當(dāng)Matlab通信數(shù)據(jù)采用西方(ASCII)方式時,讀寫串口設(shè)備的命令分別是fscanf、fpritf;當(dāng)Matlab通信數(shù)據(jù)采用二進制方式時,讀寫串口設(shè)備的命令分別是fread、fwrite。下面以文本方式讀寫串口為例:a.讀串口。A=fscanf(scom,'%d',10,100;%從串口設(shè)備對象scom中讀入10*100個數(shù)據(jù)填充到數(shù)組A10,100中,并以整型的數(shù)據(jù)格式存放。h.寫串口。Fprintf(scom,'%s','RS232','async');%將字符串R
6、S232?以字符的數(shù)據(jù)格式寫入到串口設(shè)備scom,寫操作以異步的方式進行。關(guān)閉并清除設(shè)備對象。fclose(scom);%關(guān)閉串口設(shè)備對象delete(scom);%刪除內(nèi)存中的串口設(shè)備對象clear scom; %清除工作空間中的串口設(shè)備對象當(dāng)不再使用該串口設(shè)備對象時,順序使用以上3條命令,可以將所創(chuàng)建的串口對象對象清除,以免占用系統(tǒng)資源??梢钥闯?,在Matlab中進行串行通信是十分方便的,編程較為簡單。而且,在Matlab中串行通信的失誤率很低,通信較為可靠,也可以采用增加握手信號以及數(shù)據(jù)校驗等的方式進一步增加通信的可靠性。32 Matlab實現(xiàn)串行通信的軟件設(shè)計在Matlab環(huán)境下,讀取
7、串口數(shù)據(jù)的方式可以分為兩種查詢和中斷。以查詢的方式進行串行通信時,如下位單片機有大量的數(shù)據(jù)分時分批傳送給PC機,就需要不停查詢串行口的緩沖區(qū),有數(shù)據(jù)就讀?。浑m然編程容易,但這樣做不能對數(shù)據(jù)進行實時處理,系統(tǒng)實時性不高,而且會極大地占用系統(tǒng)的資源。以中斷的方式對串口進行控制實現(xiàn)串行通信,就可以實時處理下位機傳送的數(shù)據(jù);但編程相對復(fù)雜一些,需要采用Matlab的事件和回調(diào)函數(shù)機制。(1)基于Matlab查詢方式的異步串行通信編程Matlab查詢方式的串行通信編程雖然簡單,但這種方法在實際應(yīng)用中實用價值不高,下面只作簡單介紹。通信源程序如下:clc;%初始化串口設(shè)備對象,設(shè)置串口屬性為:PC機com
8、2口,輸入緩沖區(qū)為1024,讀寫最大完成時間為0.6s,波特率為115 200b/s,1位停止位,遇到換行符中止,硬件流控制g=serial('com2');g.InputBufferSize=4096;g.timeout=0.6;g.BaudRate=;g.Parity='none'g.StopBits=1;g.Terminator='LF'g.FlowControl='hardware'fopen(g);%打開串口設(shè)備對象sfwrite(g,255);%以二進制的方式發(fā)送握手信號0xFF,缺省為異步通信方式out=fread(
9、g,33,'uint8')%接收單片機發(fā)送的33個數(shù)據(jù)(8位),并存入out數(shù)組中%釋放串口設(shè)備對象fclose(g);delete(g);clear g;(2)基于Matlab中斷方式的實時串行通信編程在Matlab環(huán)境下以中斷的方式進行串行通信,實際上是采用事件驅(qū)動的方法實現(xiàn)的。Matlab提供了instrcallback(obj,event)回調(diào)函數(shù),用戶根據(jù)需要可以自行設(shè)置具體的串行通信事件。Matlab常用的串行口通信中斷事件有:緩沖區(qū)有指定字節(jié)數(shù)目的數(shù)據(jù)可用事件(bytes-available event)、串口接收到的數(shù)據(jù)長時間處于非激活狀態(tài)事件(break-in
10、terrupt event)、串行口引腳狀態(tài)改變事件(pin-status event)、輸出緩沖區(qū)為空事件(output empty event)等。當(dāng)串口上有監(jiān)視的事件發(fā)生時,Matlab會自動調(diào)用回調(diào)函數(shù)進行通信事件的處理。因此,事件驅(qū)動實質(zhì)上是一種中斷機制,而回調(diào)函數(shù)實質(zhì)上相當(dāng)于一個中斷服務(wù)子程序。Matlab端實時串行通信的程序流程如圖4所示。以下是具體的編程步驟。建立一個串行通信主程序:serial.m文件,在主程序中進行串口設(shè)備初始化操作,并指定回調(diào)函數(shù)中串行通信的事件。程序主要源代碼如下(創(chuàng)建串口設(shè)備對象、設(shè)備串口設(shè)備屬性及打開串口等初始化操作的代碼與前述的查詢方式下的初始化代
11、碼相同):%設(shè)置回調(diào)函數(shù)觸發(fā)事件當(dāng)串口緩沖區(qū)中有33字節(jié)的數(shù)據(jù)時,觸發(fā)中斷事件,此后主程序自動調(diào)用instrcallback(obj,event)回調(diào)函數(shù)g.BytesAvaibleFcnMode='byte'%中斷觸發(fā)事件為bytes-available Eventg.BytesAvailableFcnCount=33;%接收緩沖區(qū)每收到33個字節(jié)時,觸發(fā)回調(diào)函數(shù)g.BytesAvailableFcn=instrcallback;%得到回調(diào)函數(shù)句柄fopen(g);%連接串口設(shè)備對象fwrite(g,255);%寫串口,發(fā)送握手信號0xFF(等價于十進制下的數(shù)值255)修改i
12、nstrcallback(obj,event)回調(diào)函數(shù),對所發(fā)生的串口通信事件進行處理。Matlab缺省的回調(diào)函數(shù)instrcallback(obj,event)存在于instrcallback.m文件中。該文件實際上是一個有待于用戶修改的程序模塊。其中只有一些最基本的程序代碼,能夠顯示導(dǎo)致串口中斷發(fā)生的是哪一類事件,中斷事件所發(fā)生的時間以及導(dǎo)致事件發(fā)生的對象名等信息(修改回調(diào)函數(shù)文件時,注意要取消文件中相應(yīng)信息后的分號,才能夠在Matlab的命令窗口(command window)中將這些信息顯示出來)。中斷發(fā)生后的通信事件處理以及通信數(shù)據(jù)的分析處理任務(wù),需要用戶自行添加相應(yīng)的服務(wù)程序代碼。
13、Matlab安裝目標(biāo)下有兩個instrcallback.m文件,我們只需要修改instrument目錄下的instrcallback.m文件即可。當(dāng)然,在修改instrcallback.m文件之前,最好對其做一個備份。另外,需要注意的是:程序調(diào)試過程中如果再次修改了該回調(diào)函數(shù),要重新啟動Matlab配置該文件,才能使得新的回調(diào)函數(shù)文件生效。 修改后的instrcallback.m文件見網(wǎng)站。該修改后的回調(diào)函數(shù)能夠完成如下任務(wù):實時接收單片機實時5ms發(fā)送的33個串行通信數(shù)據(jù),其中包括1個握手信號和32個A/D轉(zhuǎn)換數(shù)據(jù)(這些數(shù)據(jù)是PIC單片機系統(tǒng)采集到的傳感器信號,每個數(shù)據(jù)占1字節(jié)),并存儲在o
14、ut數(shù)組中;對接收到的數(shù)據(jù)進行處理,由于PIC單片機的A/D轉(zhuǎn)換值為10位,占2字節(jié),而單片機每次只能傳送1個字節(jié)的數(shù)據(jù),故將收到的每兩個通信數(shù)據(jù)整合成為1個真實的A/D轉(zhuǎn)換數(shù)據(jù),共16個A/D轉(zhuǎn)換數(shù)據(jù),并存儲在Dataout數(shù)組中;將接收到的串口數(shù)據(jù)存儲到serialdata.txt文件中,將整合后的單片機A/D轉(zhuǎn)換數(shù)據(jù)存儲到一個以中斷事件發(fā)生的時間為文件名的txt文件中;根據(jù)A/D轉(zhuǎn)換數(shù)據(jù),利用Matlab求其最大值、最小值和平均值,并利用FIR濾波器對傳感器信號A/D轉(zhuǎn)換值作FIR濾波處理,得到窗格為5的滑動濾波平均值;利用Matlab中的plot()函數(shù)實時繪制單片機采集到的傳感器信號的原始波形圖和FIR濾波后波形圖,如圖5所示,可以看到經(jīng)過FIR濾波后的傳感器動態(tài)信號值較為穩(wěn)定,精度大幅提高。實驗證明,基于Matlab中斷方式的PC機與單片機的實時
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- LY/T 3407-2024生物質(zhì)成型燃料用竹基粘結(jié)劑
- 統(tǒng)編版三年級語文下冊期末達標(biāo)測試卷(全真演練二)(含答案)
- 2019-2025年消防設(shè)施操作員之消防設(shè)備基礎(chǔ)知識模擬考試試卷B卷含答案
- 2019-2025年軍隊文職人員招聘之軍隊文職管理學(xué)全真模擬考試試卷A卷含答案
- 2019-2025年消防設(shè)施操作員之消防設(shè)備基礎(chǔ)知識提升訓(xùn)練試卷A卷附答案
- 2025年消防設(shè)施操作員之消防設(shè)備高級技能押題練習(xí)試卷A卷附答案
- 管理學(xué)原理b試題及答案
- 遺產(chǎn)繼承房產(chǎn)分割合同
- 高等教育自學(xué)考試《00065國民經(jīng)濟統(tǒng)計概論》模擬試卷二
- 2024年新疆公務(wù)員《行政職業(yè)能力測驗》試題真題及答案
- 北京服裝學(xué)院招聘考試題庫2024
- 金融科技概論-課件 第十五章 金融科技監(jiān)管與監(jiān)管科技
- 2024年江蘇省南京市中考數(shù)學(xué)試卷真題(含答案解析)
- 物資裝卸培訓(xùn)課件
- DB5101-T 71-2020 成都市電動汽車充電設(shè)施 安全管理規(guī)范
- 2025年北京電子科技職業(yè)學(xué)院高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- 2025年烏蘭察布醫(yī)學(xué)高等專科學(xué)校高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 2024年二級建造師之二建機電工程實務(wù)考試題庫含完整答案
- 高教版2023年中職教科書《語文》(基礎(chǔ)模塊)下冊教案全冊
- 《社群運營》全套教學(xué)課件
- 2024入團知識題庫(含答案)
評論
0/150
提交評論