<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 采用PC機(jī)實現(xiàn)單片機(jī)優(yōu)化控制

          采用PC機(jī)實現(xiàn)單片機(jī)優(yōu)化控制

          作者: 時間:2012-01-30 來源:網(wǎng)絡(luò) 收藏

          一、用實現(xiàn)的必要性

          目前,單片機(jī)的控制很廣泛。但是對于復(fù)雜的現(xiàn)場控制,大多數(shù)單片機(jī)的控制程序都是采用單一的匯編語言編寫。

          其缺點有:

          1.由于匯編語言功能的限制,不能形成友好的控制界面。不能很好的反映出控制現(xiàn)場的實時變化情況。

          2.對于不同的單片機(jī)CPU芯片,還要有不同的匯編語言,可移植性差,增加了編程的難度。

          3.當(dāng)被控對象的工藝條件變化時,單片機(jī)很難跟著變化。除非重新編制程序,再一次的固化,這樣操作起來就比較困難。

          筆者采用了高級語言編程和單片機(jī)匯編語言編程相結(jié)合解決上述的缺點。

          二、實現(xiàn)過程

          將各種予置信號通過串行口送給單片機(jī)控制系統(tǒng),再由單片機(jī)系統(tǒng)通過D/A變換產(chǎn)生實際的模擬信號送到現(xiàn)場;予置數(shù)值可以顯示在PC機(jī)的軟件窗口上。同時,現(xiàn)場由傳感器實測的信號通過A/D轉(zhuǎn)換送到單片機(jī)分析處理,通過和予置的數(shù)值比較得到誤差數(shù)據(jù),誤差數(shù)據(jù)被送到控制現(xiàn)場進(jìn)行精度調(diào)整,這樣就形成了一個閉環(huán)控制系統(tǒng)。同時,單片機(jī)將實測的準(zhǔn)確數(shù)據(jù)通過串行口送到PC機(jī),顯示在軟件窗口上,供操作人員查看、記錄和調(diào)整控制。關(guān)鍵是如果控制對象的工藝條件改變時,只需在PC上把予置數(shù)據(jù)改變?yōu)橐蟮臄?shù)據(jù)即可。 在后面地系統(tǒng)示例中筆者采用的是自己開發(fā)的溫度控制系統(tǒng)。

          (一)單片機(jī)匯編語言部分

          在設(shè)計好了控制電路之后,用傳統(tǒng)的匯編語言完成了單片機(jī)控制的初始化部分。初始化包括串行口接收和發(fā)送數(shù)據(jù)、A/D、D/A等功能。其余的由PC機(jī)來完成。這個部分,大多數(shù)讀者都比較清楚,在此不在贅述,具體的可以見后面的實例論證部分。要注意的是在初始化程序里要留有串行通信的程序接口和實現(xiàn)過程。

          (二)PC機(jī)高級語言部分

          在PC機(jī)高級語言編程中,筆者采用了VISUAL BASIC 高級語言。VISUAL BASIC(VB)是MICROSOFT 公司推出的面向?qū)ο缶幊痰母呒壵Z言,它以編程簡單、ActiveX控件豐富、可移植性好、功能強(qiáng)大而受到廣大編程人員的歡迎。因此本系統(tǒng)高級語言編程采用了VB。

          1.控制界面的完成

          本系統(tǒng)以溫度控制系統(tǒng)為例進(jìn)行闡述說明的。

          使用高級語言編程可以在PC機(jī)上編制非常友好、直觀的人機(jī)控制界面。把原來的人體直接控制變成了鼠標(biāo)、鍵盤的間接控制;并且通過直觀的控制界面可以很容易的實現(xiàn)控制,對現(xiàn)場的控制情況一目了然,增加了操作人員的視覺感、安全感,簡化了操作。

          控制界面包括:現(xiàn)場數(shù)據(jù)顯示、予置數(shù)據(jù)輸入、現(xiàn)場數(shù)據(jù)上下限數(shù)值、報警提示、數(shù)據(jù)記錄、時間和日期、數(shù)據(jù)打印、本程序使用密碼等。

          2.PC機(jī)對外通信

          這個部分是本系統(tǒng)的重要部分, PC機(jī)的數(shù)據(jù)都可以設(shè)置,但要把PC機(jī)的數(shù)據(jù)送到串行端口上以及怎樣才能把串行端口上數(shù)據(jù)接收進(jìn)來,是PC機(jī)編程中的關(guān)鍵部分。

          在VB的大量控件中,有一個MSCOmm控件,是專門用來實現(xiàn)串行端口數(shù)據(jù)的傳輸和接收的,為應(yīng)用程序提供了串行通信功能,是一個標(biāo)準(zhǔn)的十位串口通信。本次設(shè)計就使用了該控件。下面就介紹一下該控件的使用方法。

          控件屬性:

          commport

          設(shè)置并返回通信端口號。語法為:

          object.comport[=value]

          value是一個整型值,表明使用的端口號

          說明:在設(shè)計時,value可以設(shè)成從1—16的任何數(shù),在打開端口之前必須設(shè)置端號。

          settings

          設(shè)置并返回波特率、奇偶校驗、數(shù)據(jù)位、停止位等參數(shù)

          語法為: object.settings[=value]

          value是一字符串表達(dá)式,說明端口的設(shè)置值,由四個設(shè)置值組成,格式如下:

          “BBBB,P,D,S”

          其中,BBBB為波特率;P為奇偶校驗;D為數(shù)據(jù)位;S為停止為數(shù)。要值得注意的是此處的設(shè)置值一定要和單片機(jī)系統(tǒng)的串行口波特率設(shè)置值一致。

          portooen

          設(shè)置并返回通訊端口的狀態(tài);

          語法為:object.portopen[=value]

          value為一布爾表達(dá)式,說明通訊端口的狀態(tài);

          value=true:端口開;value=false:端口關(guān)

          要注意的地方是如果在端口打開之前,DTREnable或RtsENable屬性設(shè)為true;當(dāng)端口關(guān)閉時一定要將這兩個屬性設(shè)置為false.

          Input

          返回并刪除接收緩沖區(qū)中的數(shù)據(jù)流

          語法為:object.input

          說明:inputlen屬性確定被input屬性讀取的字符數(shù)。設(shè)置inputlen為0,則input屬性讀取緩沖區(qū)中全部的內(nèi)容。 Inputmode屬性確定被input讀取的數(shù)據(jù)類型。如果inputmode=cominputmodetext,則input屬性通過一個 variant返回文本數(shù)據(jù);如果設(shè)置inputmode=cominputmodebinary,則input屬性通過一個variant返回一個二進(jìn)制數(shù)據(jù)的數(shù)組。

          output

          往傳輸緩沖區(qū)寫數(shù)據(jù)流

          語法為:object.output[=value]

          value是一準(zhǔn)備寫到傳輸緩沖區(qū)的一字符串。

          說明:output屬性可以傳輸文本數(shù)據(jù)或二進(jìn)制數(shù)據(jù)

          commevent

          返回最近的通訊事件或錯誤。用此屬性處理在數(shù)據(jù)傳輸過程中的異常事件。

          handshaking

          設(shè)置并返回硬件握手協(xié)議

          語法為:object.handshaking[=value]

          value為一整型值

          value=0 沒有握手

          value=1 (xon/xoff)握手

          value=2 (rts/cts)握手

          value=3 (xon/xoff和rts/cts兩種皆可)握手

          說明:handshaking是指內(nèi)部通訊協(xié)議,通過該協(xié)議,數(shù)據(jù)從硬件端口傳輸?shù)浇邮站彌_區(qū)。握手協(xié)議保證在緩沖區(qū)過載時數(shù)據(jù)不丟失。

          控件事件:

          oncomm

          無論何時當(dāng)commevent屬性的值變化時,就產(chǎn)生oncomm事件。它標(biāo)志發(fā)生了一個通訊事件或一個錯誤。Commevent屬性包括實際錯誤或產(chǎn)生oncomm事件的編碼。但是,當(dāng)rthreshold或sthreshold屬性被設(shè)置為0時,則會分別使comevreceive和 comevsend事件無效。

          3.單片機(jī)和PC機(jī)的連機(jī)串行通訊

          經(jīng)過此過程將單片機(jī)和PC機(jī)進(jìn)行連機(jī)通信控制,真正實現(xiàn)PC機(jī)的高級編程控制單片機(jī)。在通訊中,我用的是串行通信。用串行通訊的好處是簡單,抗干擾性強(qiáng),傳輸距離遠(yuǎn)。接口是RS232C接口。但是由于RS232C或其他的串行通信接口都不能滿足TTL電平的傳輸要求,所以要在這種接口中加個電平轉(zhuǎn)換裝置。這里采用的是Max公司的Max232電平轉(zhuǎn)換芯片。

          系統(tǒng)的上位機(jī)由一臺(PC586)微機(jī)構(gòu)成,高級語言采用VISUAL BASIC編程。通過VB的編程設(shè)計,很容易的作出了十分直觀的界面。在界面上,有“溫度計”顯示當(dāng)前控制現(xiàn)場的溫度,同時還有“數(shù)碼”配合顯示溫度;界面上的予置按鈕可以設(shè)置現(xiàn)場的控制溫度值;為了安全,在控制界面上做出了上下限溫度控制裝置,超過規(guī)定的范圍將進(jìn)行提示、報警,并且系統(tǒng)自動調(diào)節(jié)爐溫,處于安全范圍。如果1分鐘內(nèi)不能解決問題,系統(tǒng)將自動關(guān)閉。而且,如果要改變爐子的溫度,通過計算機(jī)予置數(shù)據(jù)就可以實現(xiàn),不用改變單片機(jī)的固化的程序。因此,當(dāng)控制對象的工藝條件改變時,在PC機(jī)的作用下,很容易就能夠滿足控制條件,從而實現(xiàn)了控制的優(yōu)化。

          本系統(tǒng)CPU采用ATMel89C51芯片,89C51自帶2K閃存,用起來很方便;89C51與所有的51系統(tǒng)都兼容,性能好,價格也比較低廉。 89C51利用自身的串行口接收來自PC機(jī)的予置串行數(shù)據(jù),然后從并口輸出到數(shù)據(jù)鎖存器74LS373,最后把鎖存的數(shù)據(jù)送到D/A轉(zhuǎn)換接口芯片 DAC0832,變成模擬信號,送到溫度控制系統(tǒng)。溫度控制系統(tǒng)接收到來自D/A的模擬信號,并把它變成脈沖的形式去出發(fā)雙向可控硅,通過改變雙向可控硅的導(dǎo)通角的大小,從而改變了加熱裝置中電流的大小。根據(jù)Q=I2Rt可知,改變了熱量,也就改變了溫度。同時,通過溫度傳感器的作用,從現(xiàn)場采集回來現(xiàn)場的溫度,經(jīng)過采樣保持、數(shù)據(jù)鎖存、D/A變換之后,送到89C51中,和預(yù)置的數(shù)據(jù)比較分析,得出誤差數(shù)據(jù)。通過誤差數(shù)據(jù)去調(diào)整 89C51的輸出,經(jīng)過一系列的變換之后,從而改變現(xiàn)場的溫度,提高控制的精度。另外,單片機(jī)系統(tǒng)通過串行口把現(xiàn)場的溫度數(shù)據(jù)送到PC機(jī)上,在控制界面上顯示出來。

          3.1 PC機(jī)部分

          VB通信控件設(shè)計軟件如下:

          Global comm._time as integer ;定義全局變量

          Global data(1000) As Integer

          Global Receive(1000) As Integer ;串行數(shù)據(jù)接收、發(fā)送

          Private Sub Form_load( )

          Comm1.Comport=1

          Comm1.Settings=”9600,N,8,1”

          Comm1.Inputlen=0

          Comm1.Inbuffersize=256

          Comm1.Outbuffersize=256

          Comm1.Portopen=ture

          Comm1.Sthreshold=1

          Comm1.Rthreshold=1

          End Sub

          Public Sub send-data( ) ;(數(shù)據(jù)發(fā)送程序)

          For i=0 to n

          Comm1.output=Chr(data(i))

          Next I

          End Sub

          Public Sub Comm1_oncomm( ) ;(接收程序)

          Select Case Comm1.CommEvent

          Case comEvreceive

          Receive(comm._time)=Asc(Comm1.Input)

          Comm_time=Comm_time+1

          End Select

          End Sub

          (還有許多程序,由于篇幅限制,其他的程序清單略)

          三、結(jié)束語

          本系統(tǒng)成功開發(fā)之后,使用效果良好。如果控制對象有多個,可以構(gòu)成集散系統(tǒng)。當(dāng)然,由于水平有限肯定存在許多不足,還請各位讀者給予指正。

          參 考 文 獻(xiàn)

          [1] 吳成賓編著. VB⒌0實用編程指南.電子科技大學(xué)出版社.1998.3.

          [2] 李華主編.MCS-51系列單片機(jī)實用接口技術(shù).北京航空航天大學(xué)出版社(第三次印刷).1997.8.


          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();