新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 采用PC機實現單片機優化控制

        采用PC機實現單片機優化控制

        作者: 時間:2012-01-30 來源:網絡 收藏

        一、用實現的必要性

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

        其缺點有:

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

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

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

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

        二、實現過程

        將各種予置信號通過串行口送給單片機控制系統,再由單片機系統通過D/A變換產生實際的模擬信號送到現場;予置數值可以顯示在PC機的軟件窗口上。同時,現場由傳感器實測的信號通過A/D轉換送到單片機分析處理,通過和予置的數值比較得到誤差數據,誤差數據被送到控制現場進行精度調整,這樣就形成了一個閉環控制系統。同時,單片機將實測的準確數據通過串行口送到PC機,顯示在軟件窗口上,供操作人員查看、記錄和調整控制。關鍵是如果控制對象的工藝條件改變時,只需在PC上把予置數據改變為要求的數據即可。 在后面地系統示例中筆者采用的是自己開發的溫度控制系統。

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

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

        (二)PC機高級語言部分

        在PC機高級語言編程中,筆者采用了VISUAL BASIC 高級語言。VISUAL BASIC(VB)是MICROSOFT 公司推出的面向對象編程的高級語言,它以編程簡單、ActiveX控件豐富、可移植性好、功能強大而受到廣大編程人員的歡迎。因此本系統高級語言編程采用了VB。

        1.控制界面的完成

        本系統以溫度控制系統為例進行闡述說明的。

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

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

        2.PC機對外通信

        這個部分是本系統的重要部分, PC機的數據都可以設置,但要把PC機的數據送到串行端口上以及怎樣才能把串行端口上數據接收進來,是PC機編程中的關鍵部分。

        在VB的大量控件中,有一個MSCOmm控件,是專門用來實現串行端口數據的傳輸和接收的,為應用程序提供了串行通信功能,是一個標準的十位串口通信。本次設計就使用了該控件。下面就介紹一下該控件的使用方法。

        控件屬性:

        commport

        設置并返回通信端口號。語法為:

        object.comport[=value]

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

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

        settings

        設置并返回波特率、奇偶校驗、數據位、停止位等參數

        語法為: object.settings[=value]

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

        “BBBB,P,D,S”

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

        portooen

        設置并返回通訊端口的狀態;

        語法為:object.portopen[=value]

        value為一布爾表達式,說明通訊端口的狀態;

        value=true:端口開;value=false:端口關

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

        Input

        返回并刪除接收緩沖區中的數據流

        語法為:object.input

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

        output

        往傳輸緩沖區寫數據流

        語法為:object.output[=value]

        value是一準備寫到傳輸緩沖區的一字符串。

        說明:output屬性可以傳輸文本數據或二進制數據

        commevent

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

        handshaking

        設置并返回硬件握手協議

        語法為:object.handshaking[=value]

        value為一整型值

        value=0 沒有握手

        value=1 (xon/xoff)握手

        value=2 (rts/cts)握手

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

        說明:handshaking是指內部通訊協議,通過該協議,數據從硬件端口傳輸到接收緩沖區。握手協議保證在緩沖區過載時數據不丟失。

        控件事件:

        oncomm

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

        3.單片機和PC機的連機串行通訊

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

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

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

        3.1 PC機部分

        VB通信控件設計軟件如下:

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

        Global data(1000) As Integer

        Global Receive(1000) As Integer ;串行數據接收、發送

        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( ) ;(數據發送程序)

        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

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

        三、結束語

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

        參 考 文 獻

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

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


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 安福县| 界首市| 米脂县| 交口县| 隆德县| 东兰县| 双江| 高青县| 德昌县| 绩溪县| 阿坝县| 宁国市| 商河县| 五莲县| 鄱阳县| 册亨县| 临沧市| 衡阳市| 古丈县| 贵溪市| 安新县| 巧家县| 项城市| 公主岭市| 耿马| 临武县| 四子王旗| 海伦市| 万山特区| 吉林省| 色达县| 于都县| 宁明县| 怀安县| 安徽省| 弥渡县| 岚皋县| 石屏县| 华亭县| 股票| 买车|