www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 單片機 > 單片機
[導讀]結合單片機和Matlab兩者的優(yōu)點,基于事件驅動的中斷通信機制,提出一種Matlab環(huán)境下PC機與單片機實時串行通信及數據處理的方法;完成單片機數據采集系統(tǒng)與PC機的RS-232/RS-485串行通信及其通信數據的分析處理、文件存儲、FIR濾波及圖形顯示;簡化系統(tǒng)開發(fā)流程,提高開發(fā)效率。該方法已成功應用于一個PIC16F876單片機應用系統(tǒng)實例之中。

 

    摘要:結合單片機和Matlab兩者的優(yōu)點,基于事件驅動的中斷通信機制,提出一種Matlab環(huán)境下PC機與單片機實時串行通信數據處理的方法;完成單片機數據采集系統(tǒng)與PC機的RS-232/RS-485串行通信及其通信數據的分析處理、文件存儲、FIR濾波及圖形顯示;簡化系統(tǒng)開發(fā)流程,提高開發(fā)效率。該方法已成功應用于一個PIC16F876單片機應用系統(tǒng)實例之中。

    關鍵詞:PIC16F876 Matlab 串口通信 RS-232 事件驅動 回調函數

引言

Matlab是由美國Mathworks公司開發(fā)的面向理論分析研究、工程計算數據處理和緩圖的一套具有強大功能的軟件系統(tǒng)。其中Matlab語言是一種以矩陣為基本運算單元的解釋執(zhí)行的高級語言,編程簡例,只要幾條語句就能實現諸如FFT變換、FIR/IIR濾波等數據分析處理,易于掌握。從Matlab6.0版本開始,Mathworks公司在軟件中增加了設備控制箱(instrument control toolbox),提供了對RS-232/RS-485通信標準的串口通信的正式支持。利用該工具箱的serial類及instrcallback()回調函數,能可靠地進行實時串地通信。為此,筆者充分結合單片機和Matlab的優(yōu)點,基于事件驅動的中斷通信機制,提出了一種Matlab環(huán)境下PC機與單片機實時串行通信的數據處理方法,極大地簡化開發(fā)流程,提高了系統(tǒng)開發(fā)效率。另外,與目前普遍采用的基于Matlab查詢方式下的非實時串行通信技術相比,這種方法的實用性也大大增強了。

1 系統(tǒng)總體設計簡介

下面以Mircochip公司的PIC16F876單片機為下位機,PC機為上位機組成的實時數據采集處理系統(tǒng)為例,介紹基于Matlab環(huán)境下PC機與單片機串行通信的實時數據處理方法的實現。數據采集系統(tǒng)的結構框圖如圖1所示。PC機串口與單片機USART口通過MAX232電平轉換芯片相連,系統(tǒng)工作時,Matlab通過調用設備控制工具箱中的serial類及相關函數。來創(chuàng)建串口設備對象,得到設備的文件句柄,從而以操作文件的方式實現對PC機串行口的讀寫操作。因而PC機可以通過Matlab向串行口發(fā)送特殊指令,PIC單片機應用系統(tǒng)對此作出相應的反應,將A/D采樣數據通過串行口回送給PC機。此時,Matlab通過中斷的方式,實時接收單片機發(fā)送的數據,并完成對數據的分析處理、文件存儲、FIR濾波及圖形顯示。

2 PIC16F876與PC機串行通信接口的設計

2.1 PIC16F876單片機串行通信接口的硬件設計

PIC16F876微處理器芯片內部集成了一個串行通信(SCI)模塊。該模塊是一個通用的同步/異步收發(fā)(USART)通信接口。

圖2

    PIC16F876的SCI通信接口有兩個外部引腳——RC6/TX(SCI發(fā)送輸出引腳)和RC7/RX(SCI接收輸入引腳),引腳的信號電平為TTL類型;而PC機串口的異步串行通信基于RS232標準。兩者通信信號的邏輯電平不一致,必須進行信號電平轉換。為此,在電路中選用Maxim公司的MAX232芯片,以實現TTL電平與RS-232電平的雙向轉換。RS-232通信距離一般以不超過12m為宜,在工業(yè)控制現場很受限制。為保證硬件設計的兼容性和易擴展性,能夠應用于不同場合,考慮到實際應用的需要,在硬件電路中還可選用一個MAX491芯片,添加了一個RS-485通信接口。

如圖2所示,實際使用過程中,系統(tǒng)可以根據需要,靈活使用不同的通信標準,十分方便。當PIC單片機SCI通信接口引腳直接通過MAX232芯片與PC機串口相連時,系統(tǒng)采用RS-232的通信標準;當PIC單片機SCI通信接口口引腳與MAX489芯片的DI、RO引腳相連時,系統(tǒng)采用RS-485的通信標準。另外,還可通過PIC單片機控制MAX489芯片的DE、RE引腳,隨時使能或屏蔽掉MAX489的數據接收和數據發(fā)送功能。

2.2 PIC16F876與PC機串行通信接口的軟件設計

本通信系統(tǒng)中規(guī)定的字符格式為:每一幀的數據占10位——1位起始位,8位數據位,1位停止位,無奇偶校驗位。中間的8位數據位即為有效的通信傳輸字節(jié)。雙方的波特率設置為115.2kb/s,以較高速度進行通信。同時,為了增強通信的可靠性、減少通信的誤碼率,在通信過程中約定了雙方的軟件握手方法。為了不致使通信過于復雜,提高通信速度,可以直接將握手信號0xFF嵌入到數據包中。軟件握手協議規(guī)定如下:PC機發(fā)送符合握手信號0xFF給單片機,PIC單片機接收到的上位機數據若為握手信號0xFF,則回送兩次A/D采樣數據包,并將握手信號0xFF嵌入到數據包作為第一個數據,兩次發(fā)送數據的時間間隔為5ms;單片機接收到的上位機數據若不是握手信號,則繼續(xù)等待。若PC機接收到的數據包的第1個字節(jié)不是0xFF,則屏棄該數據包;若是,則表示握手成功,經校驗正確后將該數據包直接存儲接收,并從中分解有效的A/D采樣數據信息。

PIC16F876端串行通信的C語言程序流程如圖3所示,相應的主要通信源代碼如下:

//串口相關寄存器的初始化子程序

void sci_initial(){

SPBRG=0C0A; //設置通信波特率為115.2kb/s

TXSTA=0X04; //選擇異步高速通信模式

RCSTA=0x80; //串行口使能,接收數據長度為8位,無奇偶校驗

TRISC6=0; //RC6引腳設置為輸出方式

TRISC7=1; //PC7引腳設置為輸入方式

}

//串口接收和發(fā)送數據子程序

void sci_com(){

while(!RCIF); //查詢接收中斷標志位,等待上位機發(fā)送的串口數據

rec_data[0]=RCREG;//接收串口數據

if(rec_data[0]==0xFF){

send_data[0]=rec_data[0]; //在第1組數據中嵌入回送握手數據0xFF

for(j=0;j<33;j++){

TXREG=send_data[j]; //發(fā)送第1組32字節(jié)的A/D

轉換數據,包含握手信號0xFF為33個字節(jié)數據

while(!TXIF); //查詢發(fā)送標志位,等待數據發(fā)送完畢再進行下一次數據發(fā)送

}

delay_ms(5); //PIC單片機定時5ms發(fā)送第2組A/D轉換數據

send1_data[0]=rec_data[0]; //在第2組數據中嵌入回送握手數據0xFF

for(j=0;j<33;j++){

TXREG=send1_data[j];//發(fā)送第2組32個字節(jié)A/D轉換數據及握手信號數據

While(!TXIF); //查詢發(fā)送標志位,等待數據發(fā)送完畢再進行下一次數據發(fā)送

}

}

}

3 Matlab環(huán)境下PC機與單片機的通信

在Matlab6.0中新增的設備控制工具條(instrument control toolbox)用來負責上、下位機之間的通信。該設備控制工具箱的特色如下:

①支持基于串行接口(RS-232、RS-422、RS-485)、GPIB總線(IEEE2488、HPIB標準)、VISA總線的通信;

②通信數據支持二進制和文本(ASCII)兩種方式,文本方式支持SCPI(Standard Commands for Programmable Instruments)語言;

③支持異步通信和同步通信;

④支持基于事件驅動的通信。

從以上的Matlab設備控制工具箱的特點可以看到,Matlab完全可以滿足我們實現串行通信的要求。

3.1 Matlab對串行口控制的基礎知識

Matlab對串行口的編程控制主要分為四個步驟。

①創(chuàng)建串口設備對象并設置其屬性。

scom=serial('com1');%創(chuàng)建串口1的設備對象scom

scom.Terminator='CR';%設置終止符為CR(回車符),缺省為LF(換行符)

scom.InputBufferSize=1024;%輸入緩沖區(qū)為256B,缺省值為512B

scom.OutputBufferSize=1024;%輸出緩沖區(qū)為256B,缺省值為512B

scom.Timeout=0.5;%Y設置一次讀或寫操作的最大完成時間為0.5s,缺省值為10s

s.ReadAsyncMode='continuous'(缺省方式);%在異步通信模式方式下,讀取串口數據采用連續(xù)接收數據(continuous)的缺省方式,那么下位機返回的數據會自動地存入輸入緩沖區(qū)中.

注意:在些屬性只有在對象沒有被打開時才能改變其值,如InputBufferSize、OutputBufferSize屬性等。對于一個RS-232/RS-422/RS-485串口設備對象,其屬性的缺省值為波特率9 600b/s,異步方式,通信數據格式為8位數據位,無奇偶校驗位,1位停止位。如果要設置的串口設置對象的屬性值與缺省值的屬性值相同,用戶可以不用另行設置。

另外,設置串口設置對象的屬性也可以用一條指令完成,如:scom=serial('COM1','BaudRate',38400,'Parity','none','DataBits',8,'StopBits',1)。也可以用set命令,如set(scom,'BaudRate',19200,'Parity','even')。創(chuàng)建了對象后可以在Matlab命令窗口直接敲對象名并回車,看到其基本屬性和當前狀態(tài)。若需要知道其全部的屬性,可以用get(scom)命令。

②打開串口設備對象。

fopen(scom);

③讀寫串口操作。初始化并打開串口調協對象之后,現在可以對串口設備對象進行讀寫操作,串口的讀寫操作支持二進制和文本(ASCII)兩種方式。當Matlab通信數據采用西方(ASCII)方式時,讀寫串口設備的命令分別是fscanf、fpritf;當Matlab通信數據采用二進制方式時,讀寫串口設備的命令分別是fread、fwrite。下面以文本方式讀寫串口為例:

a.讀串口。A=fscanf(scom,'%d',[10,100];%從串口設備對象scom中讀入10*100個數據填充到數組A[10,100]中,并以整型的數據格式存放。

h.寫串口。Fprintf(scom,'%s','RS232','async');%將字符串‘RS232?’以字符的數據格式寫入到串口設備scom,寫操作以異步的方式進行。

④關閉并清除設備對象。

fclose(scom);%關閉串口設備對象

delete(scom);%刪除內存中的串口設備對象

clear scom; %清除工作空間中的串口設備對象

當不再使用該串口設備對象時,順序使用以上3條命令,可以將所創(chuàng)建的串口對象對象清除,以免占用系統(tǒng)資源。

可以看出,在Matlab中進行串行通信是十分方便的,編程較為簡單。而且,在Matlab中串行通信的失誤率很低,通信較為可靠,也可以采用增加握手信號以及數據校驗等的方式進一步增加通信的可靠性。

3.2 Matlab實現串行通信的軟件設計

在Matlab環(huán)境下,讀取串口數據的方式可以分為兩種—查詢和中斷。以查詢的方式進行串行通信時,如下位單片機有大量的數據分時分批傳送給PC機,就需要不停查詢串行口的緩沖區(qū),有數據就讀??;雖然編程容易,但這樣做不能對數據進行實時處理,系統(tǒng)實時性不高,而且會極大地占用系統(tǒng)的資源。以中斷的方式對串口進行控制實現串行通信,就可以實時處理下位機傳送的數據;但編程相對復雜一些,需要采用Matlab的事件和回調函數機制。

(1)基于Matlab查詢方式的異步串行通信編程

Matlab查詢方式的串行通信編程雖然簡單,但這種方法在實際應用中實用價值不高,下面只作簡單介紹。通信源程序如下:

clc;%初始化串口設備對象,設置串口屬性為:PC機com2口,輸入緩沖區(qū)為1024,讀寫最大完成時間為0.6s,波特率為115 200b/s,1位停止位,遇到換行符中止,硬件流控制

g=serial('com2');

g.InputBufferSize=4096;

g.timeout=0.6;

g.BaudRate=115200;

g.Parity='none';

g.StopBits=1;

g.Terminator='LF';

g.FlowControl='hardware';

fopen(g);%打開串口設備對象s

fwrite(g,255);%以二進制的方式發(fā)送握手信號0xFF,缺省為異步通信方式

out=fread(g,33,'uint8')%接收單片機發(fā)送的33個數據(8位),并存入out數組中

%釋放串口設備對象

fclose(g);

delete(g);

clear g;

(2)基于Matlab中斷方式的實時串行通信編程

在Matlab環(huán)境下以中斷的方式進行串行通信,實際上是采用事件驅動的方法實現的。Matlab提供了instrcallback(obj,event)回調函數,用戶根據需要可以自行設置具體的串行通信事件。Matlab常用的串行口通信中斷事件有:緩沖區(qū)有指定字節(jié)數目的數據可用事件(bytes-available event)、串口接收到的數據長時間處于非激活狀態(tài)事件(break-interrupt event)、串行口引腳狀態(tài)改變事件(pin-status event)、輸出緩沖區(qū)為空事件(output empty event)等。當串口上有監(jiān)視的事件發(fā)生時,Matlab會自動調用回調函數進行通信事件的處理。因此,事件驅動實質上是一種中斷機制,而回調函數實質上相當于一個中斷服務子程序。Matlab端實時串行通信的程序流程如圖4所示。以下是具體的編程步驟。

①建立一個串行通信主程序:serial.m文件,在主程序中進行串口設備初始化操作,并指定回調函數中串行通信的事件。

程序主要源代碼如下(創(chuàng)建串口設備對象、設備串口設備屬性及打開串口等初始化操作的代碼與前述的查詢方式下的初始化代碼相同):

%設置回調函數觸發(fā)事件—當串口緩沖區(qū)中有33字節(jié)的數據時,觸發(fā)中斷事件,此后主程序自動調用instrcallback(obj,event)回調函數

g.BytesAvaibleFcnMode='byte';%中斷觸發(fā)事件為‘bytes-available Event’

g.BytesAvailableFcnCount=33;%接收緩沖區(qū)每收到33個字節(jié)時,觸發(fā)回調函數

g.BytesAvailableFcn=@instrcallback;%得到回調函數句柄

fopen(g);%連接串口設備對象

fwrite(g,255);%寫串口,發(fā)送握手信號0xFF(等價于十進制下的數值255)

②修改instrcallback(obj,event)回調函數,對所發(fā)生的串口通信事件進行處理。

Matlab缺省的回調函數instrcallback(obj,event)存在于instrcallback.m文件中。該文件實際上是一個有待于用戶修改的程序模塊。其中只有一些最基本的程序代碼,能夠顯示導致串口中斷發(fā)生的是哪一類事件,中斷事件所發(fā)生的時間以及導致事件發(fā)生的對象名等信息(修改回調函數文件時,注意要取消文件中相應信息后的分號,才能夠在Matlab的命令窗口(command window)中將這些信息顯示出來)。中斷發(fā)生后的通信事件處理以及通信數據的分析處理任務,需要用戶自行添加相應的服務程序代碼。

    Matlab安裝目標下有兩個instrcallback.m文件,我們只需要修改@instrument目錄下的instrcallback.m文件即可。當然,在修改instrcallback.m文件之前,最好對其做一個備份。另外,需要注意的是:程序調試過程中如果再次修改了該回調函數,要重新啟動Matlab配置該文件,才能使得新的回調函數文件生效。

修改后的instrcallback.m文件見網站www.dpj.com.cn。該修改后的回調函數能夠完成如下任務:

①實時接收單片機實時5ms發(fā)送的33個串行通信數據,其中包括1個握手信號和32個A/D轉換數據(這些數據是PIC單片機系統(tǒng)采集到的傳感器信號,每個數據占1字節(jié)),并存儲在out數組中;

②對接收到的數據進行處理,由于PIC單片機的A/D轉換值為10位,占2字節(jié),而單片機每次只能傳送1個字節(jié)的數據,故將收到的每兩個通信數據整合成為1個真實的A/D轉換數據,共16個A/D轉換數據,并存儲在Dataout數組中;

③將接收到的串口數據存儲到serialdata.txt文件中,將整合后的單片機A/D轉換數據存儲到一個以中斷事件發(fā)生的時間為文件名的txt文件中;

④根據A/D轉換數據,利用Matlab求其最大值、最小值和平均值,并利用FIR濾波器對傳感器信號A/D轉換值作FIR濾波處理,得到窗格為5的滑動濾波平均值;

⑤利用Matlab中的plot()函數實時繪制單片機采集到的傳感器信號的原始波形圖和FIR濾波后波形圖,如圖5所示,可以看到經過FIR濾波后的傳感器動態(tài)信號值較為穩(wěn)定,精度大幅提高。

實驗證明,基于Matlab中斷方式的PC機與單片機的實時串行通信穩(wěn)定可靠,處理數據方便,編程簡單,開發(fā)效率大大提高。

4 結論

本文介紹的基于Matlab環(huán)境下PC機與PIC單片機串行通信的實現方法,利用Matlab的Instrument Control Tollbox的serial類及instrcallback()回調函數,實現基于事件驅動的實時中斷通信。使開發(fā)人員可以充分利用Matlab工具箱中的現有函數,方便地實現串行通信、數據分析處理和圖形顯示,大大簡化系統(tǒng)上位機軟件的編程工作量。

 

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯合牽頭組建的NVI技術創(chuàng)新聯盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現場 NVI技術創(chuàng)新聯...

關鍵字: VI 傳輸協議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉