《電子技術(shù)應用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應用 > 基于LabVIEW的單片機脈沖發(fā)生器
基于LabVIEW的單片機脈沖發(fā)生器
摘要: 上位機軟件LabVIEW同下位機通信時,,將下位機所要產(chǎn)生的脈沖的參數(shù)通過串口傳給下位機,,以便實現(xiàn)利用LabVIEW控制單片機產(chǎn)生所需脈沖的目的。
關(guān)鍵詞: 51單片機 LabView 單片機 下位機
Abstract:
Key words :

  1引言

  由于各種人群的皮膚阻抗的動態(tài)范圍不一樣,,甚至同個人在不同的時間、不同的環(huán)境下皮膚阻抗的動態(tài)范圍也不一樣,。因此,,在皮膚阻抗檢測系統(tǒng)中,刺激器需要根據(jù)不同的人群以及不同的環(huán)境,,產(chǎn)生不同頻率,、不同脈寬的刺激信號,才能保證檢測系統(tǒng)可以測量到人體皮膚的真實阻抗,。

  MCS-51單片機系統(tǒng)有3個定時器可以產(chǎn)生方波,,而且方波的脈沖頻率及寬度可以由軟件設(shè)定,這種產(chǎn)生脈沖的方式具有很大的靈活性,。上位機軟件LabVIEW下位機通信時,,將下位機所要產(chǎn)生的脈沖的參數(shù)通過串口傳給下位機,以便實現(xiàn)利用LabVIEW控制單片機產(chǎn)生所需脈沖的目的,。

  2下位機系統(tǒng)的設(shè)計

  2.1硬件部分

  MCS-51單片機內(nèi)部有一個功能很強的全雙工串行口,,該串行口有4種工作方式。片內(nèi)的定時器/計數(shù)器可以產(chǎn)生波特率,,大小可用軟件設(shè)置,。有2個物理上獨立的接收、發(fā)送緩沖器SBUF,,接收,、發(fā)送均可觸發(fā)中斷系統(tǒng),使用十分方便,。對外也有兩條獨立的收,、發(fā)信號線RXD(P3.0)和TXD(P3.1)。

  本文采用RS 232串行接口標準,,在電氣特性上,,RS232采用負邏輯,,要求高低兩信號間有較大的幅度,標準為:邏輯"1"在-5~-15V之間,,邏輯"0"在+5~+15V之間,。

  2.2軟件部分

  MCS-51的定時器0進行兩次計數(shù)。設(shè)P1.0為脈沖發(fā)生端,,當定時器0的第一次計數(shù)結(jié)束后,,將P1.0取反,賦新的初值,,再進行第二次計數(shù),。當?shù)诙斡嫈?shù)結(jié)束后,再一次將P1.0取反,,又賦原來的初值,,進行新一輪的計數(shù),如此反復即可產(chǎn)生方波,。這樣通過兩次計數(shù)值的不同就可以實現(xiàn)產(chǎn)生不同脈寬及頻率的方波了,。

 

 

圖

 

  圖1,圖2和圖3給出了單片機程序的詳細流程圖,。其中定時器1工作在方式2,,這是一種自動重裝方式,禁止中斷,,用于產(chǎn)生波特率(該波特率設(shè)置為9 600),。串口工作在方式1,發(fā)送或接受一幀信息為10位,,1位起始位(0),,8位數(shù)據(jù)位和1位停止位(1),無奇偶校驗位,。程序還設(shè)定串口中斷優(yōu)先級高于定時器0的中斷優(yōu)先級,。

 

  在通信前,上下位機一般會約定一個協(xié)議,,例如在發(fā)送的數(shù)據(jù)前加一個標識段,,一般為一個字節(jié)。當該字節(jié)傳輸正確后,,下位機才可以認為上位機準備發(fā)送數(shù)據(jù)段,。這樣可以避免串口偶爾產(chǎn)生的誤發(fā)信號。

 

  程序設(shè)定4個字節(jié)為一個數(shù)據(jù)段,,是因為上位機一次性要發(fā)完包括高低電平在內(nèi)的兩次定時器的初始值,,而每一個初始值都有兩個字節(jié)。因此下位機判斷一次完整的數(shù)據(jù)段是否發(fā)送完畢,,就是判斷其是否收到了4個字節(jié)的數(shù)據(jù),。

 

  3上位機系統(tǒng)的設(shè)計

 

  LabVIEW語言是美國國家儀器(NI)公司開發(fā)的一種基于圖形化語言(G語言)的編程語言,,利用該語言編寫的模塊化程序,具有良好的界面,,簡單、直觀,,且易于理解,、調(diào)試和維護。做成的虛擬儀表可以當作許多儀器設(shè)備來使用,,其功能完全由用戶編程定義,。另外,LabVIEW內(nèi)還包含豐富的數(shù)據(jù)采集,、數(shù)據(jù)信號分析以及控制等子程序,,特別適用于數(shù)據(jù)采集、通信處理系統(tǒng),。

 

  LabVIEW提供了很多現(xiàn)成的可供調(diào)用的函數(shù)庫,,從底層的GPIB,VXI,,PXI,,串口數(shù)據(jù)采集板的控制子程序到大量的儀器驅(qū)動程序;從基本的功能函數(shù)到高級分析庫,,幾乎涵蓋了儀器設(shè)計中需要的所有函數(shù),。同時,LabVIEW還支持用于網(wǎng)絡(luò)通訊的TCP/IP協(xié)議,、動態(tài)數(shù)據(jù)交換(DDE)和網(wǎng)絡(luò)化多媒體對象技術(shù)(ActiveX)等應用軟件標準,。

 

  3.1VISA LabVIEW提供了功能強大的VISA庫

 

VISA(Virtual InSTrument Software Architecture,虛擬儀器軟件規(guī)范)是用于儀器編程的標準I/O函數(shù)庫及其相關(guān)規(guī)范的總稱,。VISA庫駐留于計算機系統(tǒng)中,,完成計算機與儀器之間的連接,用以實現(xiàn)對儀器的程序控制,,其實質(zhì)是用于虛擬儀器系統(tǒng)的標準的API(ApplicatiON Programmer Inter-face,,應用程序接口)。正因為如此,,VISA可以連接不同標準的I/O設(shè)備,。

 

  VISA本身并不具備編程能力,惟他通過調(diào)用底層的驅(qū)動程序來實現(xiàn)對儀器的編程,。VISA的I/O軟件庫的源程序是惟一的,,其與操作系統(tǒng)及編程語言無關(guān),只是提供了標準形式的API文件作為系統(tǒng)的輸出,。

 

 

圖

 

3.2LabVIEW中利用VISA實現(xiàn)串口通信

 

  在LabVIEW中使用串口的基本流程為:先調(diào)用VISA Configure Serial Port來完成串口參數(shù)的初始化設(shè)置,,包括了串口的資源分配,,波特率的設(shè)定,數(shù)據(jù)位,、停止位,、校驗位和流控制等。

 

  當某一個串口初始化成功后,,就可以使用該串口進行數(shù)據(jù)的收發(fā),。使用VISA Write進行數(shù)據(jù)的發(fā)送,使用VISA Read進行數(shù)據(jù)的接收,。在接收數(shù)據(jù)前,,有時需要VISA Bytes at Serial Port查詢當前串口接收緩沖區(qū)中的數(shù)據(jù)字節(jié)數(shù),如果VISA Read要讀取的字節(jié)數(shù)大于緩沖區(qū)中的數(shù)據(jù)字節(jié)數(shù),,VISA Read操作將一直等待,,直至緩沖區(qū)中的數(shù)據(jù)字節(jié)數(shù)達到要求或是等待時間滿足VISA Configure Serial Port所設(shè)定的Timeout?! ≡趯?shù)據(jù)的連續(xù)性要求不高的時候,,VISA Read也支持分批讀取接收緩沖區(qū)里的數(shù)據(jù)字節(jié)或者只是讀取其中的一部分字節(jié)。

 

  在某些特殊的情況下,,可以利用VISA SET I/O Buffer Size設(shè)置串口接受/發(fā)送緩沖區(qū)的大小,,使用VISAFlash I/O Buffer清空接收與發(fā)送緩沖區(qū)?! ≡诖谑褂媒Y(jié)束后,,使用VISA Close結(jié)束與VISAresource name所指定串口間的會話。

 

  該LabVIEW程序框圖中調(diào)用了一個叫做change的子VI程序,,該子VI程序的功能是將高低電平的脈沖寬度值,,轉(zhuǎn)換成定時器的初始值,并且拼湊成一個4個字節(jié)的16進制數(shù),,通過VISA Write模塊送入下位機,。該子VI的程序框圖如圖5所示。

 

 

圖

 

在接收到數(shù)據(jù)后,,單片機有一條反饋的指令,,他將其緩沖區(qū)內(nèi)的值再次送回上位機,LabVIEW對該值進行顯示,,并可以和原來實際輸出的16進制數(shù)進行比較,。用戶可以很方便地知道,是否在上下位機通信中出現(xiàn)誤碼,。

 

  圖6左側(cè)的倒三角表示從圖4(a)的VISA Read中接收到的值,,他與LabVIEW上一次顯示的值拼裝成一個完整的字符串,成為新的顯示值,在字符串顯示區(qū)顯示出來,。

 

 

圖

 

 

4程序運行結(jié)果與驗證

 

  程序的前面板界面如圖7所示,。

 

 

圖

 

圖8是另一個程序的前面板,該程序可以將采樣率設(shè)定為50kHz的采集卡采集到的數(shù)據(jù)顯示在屏幕上,。該屏幕顯示的是,,上位機程序發(fā)送欲產(chǎn)生高低電平均為0.6ms脈沖波的定時器初始值給下位機后,下位機產(chǎn)生的脈沖序列,。

 

 

圖

 

上位機發(fā)送的16進制數(shù)為FDA8FDA8,,下位機準確接收后,反饋的值也為FDA8FDA8,。

 

  根據(jù)采樣率為50kHz,即0.02ms采樣一次,,則在顯示波形圖中任選一次完整脈沖(如圖8所示)進行計算,,可以得到該次的低電平的持續(xù)時間為0.66ms,高電平的持續(xù)時間為0.68ms,。

 

這兩個數(shù)據(jù)的誤差可能是采集卡的采樣率誤差引起的,,或是單片機的定時器中斷服務(wù)程序的執(zhí)行周期產(chǎn)生的延時所造成的。

 

  另外,,在上下位機的通信中,,也可能會產(chǎn)生誤碼,導致產(chǎn)生的波形不符合要求,。如果要一次性完成數(shù)據(jù)傳輸?shù)娜蝿?wù),,則應該在上下位機間增加可糾錯的編碼和譯碼電路,否則,,可以選擇再次發(fā)送數(shù)據(jù),,當返回值與發(fā)送值一致時,才可認為發(fā)送成功,,產(chǎn)生的波形基本可以符合要求,。

 

  5結(jié)語

 

  本文用RS 232串行通信接口將計算機與單片機相連,組成一個可控脈沖發(fā)生器用于皮膚阻抗檢測,。上位機用LabVIEW編程,,產(chǎn)生的界面友好,操作方便,。這種可控脈沖發(fā)生器編程靈活,,不僅可以產(chǎn)生方波,還可以產(chǎn)生三角波,,正弦波等,,基本可以滿足實驗的要求。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。