新聞中心

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

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

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

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

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

其缺點有:

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

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

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

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

二、實現(xiàn)過程

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

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

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

(二)PC機高級語言部分

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

1.控制界面的完成

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

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

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

2.PC機對外通信

這個部分是本系統(tǒng)的重要部分, PC機的數(shù)據(jù)都可以設(shè)置,但要把PC機的數(shù)據(jù)送到串行端口上以及怎樣才能把串行端口上數(shù)據(jù)接收進來,是PC機編程中的關(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是一字符串表達式,說明端口的設(shè)置值,由四個設(shè)置值組成,格式如下:

“BBBB,P,D,S”

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

portooen

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

語法為:object.portopen[=value]

value為一布爾表達式,說明通訊端口的狀態(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返回一個二進制數(shù)據(jù)的數(shù)組。

output

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

語法為:object.output[=value]

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

說明:output屬性可以傳輸文本數(shù)據(jù)或二進制數(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.單片機和PC機的連機串行通訊

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

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

本系統(tǒng)CPU采用ATMel89C51芯片,89C51自帶2K閃存,用起來很方便;89C51與所有的51系統(tǒng)都兼容,性能好,價格也比較低廉。 89C51利用自身的串行口接收來自PC機的予置串行數(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)場的溫度,提高控制的精度。另外,單片機系統(tǒng)通過串行口把現(xiàn)場的溫度數(shù)據(jù)送到PC機上,在控制界面上顯示出來。

3.1 PC機部分

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)然,由于水平有限肯定存在許多不足,還請各位讀者給予指正。

參 考 文 獻

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

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


關(guān)鍵詞: PC機 單片機優(yōu)化控制

評論


相關(guān)推薦

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

關(guān)閉