肖云茂 孫毅 張華興
1 引言
步進(jìn)電機(jī)在簡(jiǎn)單的開(kāi)環(huán)工作方式下能夠達(dá)到相當(dāng)高的定位精度,且低速運(yùn)行時(shí)又可輸出很大的轉(zhuǎn)矩,,因此在運(yùn)動(dòng)控制中得到了廣泛的應(yīng)用[1],。PC 機(jī)步進(jìn)電機(jī)控制系統(tǒng),應(yīng)用于多個(gè)領(lǐng)域如數(shù)控機(jī)床,、機(jī)器人,、激光加工設(shè)備等各種儀器設(shè)備。一個(gè)完整的PC 機(jī)步進(jìn)電機(jī)控制系統(tǒng),,下位機(jī)與PC 機(jī)構(gòu)成主從式控制結(jié)構(gòu):PC 機(jī)負(fù)責(zé)人機(jī)交互界面的管理,,包括鍵盤和鼠標(biāo)的管理、系統(tǒng)狀態(tài)的顯示,、控制指令的發(fā)送等部分工作,;下位機(jī)完成運(yùn)動(dòng)控制的所有細(xì)節(jié),,包括脈沖和方向信號(hào)的輸出、自動(dòng)升降速的處理等部分工作,。實(shí)際下位機(jī)開(kāi)發(fā)過(guò)程復(fù)雜,,主體包含硬件電路設(shè)計(jì)和控制程序設(shè)計(jì)兩方面??刂瞥绦蛟O(shè)計(jì)過(guò)程需要軟件調(diào)試,、硬件調(diào)試、系統(tǒng)調(diào)試3 個(gè)過(guò)程,。軟件調(diào)試一般比較容易進(jìn)行,,但如果要進(jìn)行牽涉硬件的硬件調(diào)試或系統(tǒng)調(diào)試,包括元器件選用,、PCB 板制作,、元器件焊接、程序燒錄環(huán)節(jié),,其中任一環(huán)節(jié)的疏漏都可能造成程序調(diào)試失真,。通過(guò)Proteus 中各虛擬儀器所構(gòu)建硬件電路,調(diào)試所設(shè)計(jì)程序的控制效果,,達(dá)到虛擬硬件調(diào)試,、虛擬系統(tǒng)調(diào)試程序的目的,為PC 機(jī)步進(jìn)電機(jī)系統(tǒng)開(kāi)發(fā)提供有效的理論實(shí)踐依據(jù),,避免因硬件電路設(shè)計(jì)過(guò)程錯(cuò)誤引起的程序異?;蛴布?shí)驗(yàn)條件限制影響開(kāi)發(fā)。
Proteus 是英國(guó)Labcenter 公司開(kāi)發(fā)的電路分析與實(shí)物仿真軟件實(shí)現(xiàn)了單片機(jī)仿真和SPICE 電路仿真相結(jié)合,,具有模擬電路仿真,、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)的仿真,、RS232 動(dòng)態(tài)仿真,、I2C 調(diào)試器、SPI 調(diào)試器,、鍵盤,、LCD、虛擬儀器,、示波器,、邏輯分析儀系統(tǒng)仿真的功能;支持主流單片機(jī)系統(tǒng)的仿真功能,;在硬件仿真系統(tǒng)中具有全速,、單步、設(shè)置斷點(diǎn)等調(diào)試功能,同時(shí)可以觀察各個(gè)變量,、寄存器等的當(dāng)前狀態(tài),;支持第三方的軟件編譯和調(diào)試環(huán)境,如Keil uVision2,、MTLAB 等軟件,。由于Proteus 軟件本身的優(yōu)良仿真特性,所設(shè)計(jì)程序能于Proteus 中完成仿真過(guò)程的同時(shí),,即基本證明了所設(shè)計(jì)程序的準(zhǔn)確性,,從而基本完成了系統(tǒng)開(kāi)發(fā)中的控制程序設(shè)計(jì)部分,并為系統(tǒng)硬件電路設(shè)計(jì)提供指導(dǎo)意義,。
2 設(shè)計(jì)要求
以構(gòu)建基于Proteus 的PC 機(jī)對(duì)步進(jìn)電機(jī)運(yùn)動(dòng)控制仿真系統(tǒng)為例,,上位機(jī)人機(jī)交互界面由VB 開(kāi)發(fā)完成;下位機(jī)硬件電路由Proteus 中各虛擬儀器所構(gòu)建完成,;下位機(jī)控制程序由Keil uVision2開(kāi)發(fā)完成,;期間還要采用虛擬串口(VSPD),用于模擬一根串口通信線,,實(shí)現(xiàn)上位機(jī)與下位機(jī)的串口通信,,最終實(shí)現(xiàn)上位機(jī)(VB)對(duì)下位機(jī)(Proteus)中步進(jìn)電機(jī)的實(shí)時(shí)控制過(guò)程。
2.1 系統(tǒng)總體框圖
上位機(jī)通過(guò)RS232C 串口通信方式實(shí)現(xiàn)對(duì)下位機(jī)下達(dá)指令,,下位機(jī)AT89C51 單片機(jī)根據(jù)接受到的指令,,按一定的時(shí)序產(chǎn)生A、B,、C,、D 四相控制信號(hào),,分別實(shí)現(xiàn)單拍,、雙拍、單雙拍的三種步進(jìn)電機(jī)驅(qū)動(dòng)方式,。在實(shí)際運(yùn)用中,,單片機(jī)與步進(jìn)電機(jī)之間一般還需要信號(hào)隔離、放大集成電路,。下位機(jī)部分增設(shè)顯示功能,,由LCD1602 來(lái)完成實(shí)時(shí)地顯示步進(jìn)電機(jī)運(yùn)動(dòng)狀態(tài)。Proteus 的仿真電路與實(shí)際電路可以有一定的區(qū)別,,考慮到仿真的實(shí)踐性驗(yàn)證,,設(shè)計(jì)出實(shí)際仿真適用的整個(gè)控制模塊,如圖1 所示,。
2.2 下位機(jī)仿真系統(tǒng)結(jié)構(gòu)設(shè)計(jì)
在實(shí)際運(yùn)用中,,單片機(jī)控制步進(jìn)電機(jī)需要隔離、放大模塊。在仿真時(shí)該控制模塊可省略,,直接將步進(jìn)電機(jī)與AT89C51 相連接,,也可在仿真電路中使用,因這里主要是為了檢測(cè)脈沖的控制效果,,所以省去隔離,、放大電路。
串口通信部分[3],,非仿真控制中,,上位機(jī)電平是RS232C 電平,而下位機(jī)是TTL 電平,,不能直接通信的,,所以增加一個(gè)電平轉(zhuǎn)換芯片MAX232。在實(shí)際仿真中,,由于上下位機(jī)都是在PC 中進(jìn)行,,所以無(wú)需電平轉(zhuǎn)換芯片,否則會(huì)發(fā)生錯(cuò)誤,。實(shí)際仿真時(shí),,串口的2、3 位直接與AT89C51 的RXD,、TXD 直接對(duì)接就可以了,。
LCD 部分顯示電路,當(dāng)單片機(jī)驅(qū)動(dòng)LCD 時(shí),,由于信號(hào)的傳輸過(guò)程會(huì)有損耗,,所以在實(shí)際應(yīng)用驅(qū)動(dòng)LCD 時(shí),常采用信號(hào)增益模塊加以驅(qū)動(dòng),。仿真過(guò)程無(wú)信號(hào)損耗,,系統(tǒng)外部晶振電路,復(fù)位電路等在仿真過(guò)程可以省略,。
綜上所述,,在搭建Proteus 下位機(jī)系統(tǒng)時(shí),隔離放大模塊,、LCD 驅(qū)動(dòng)模塊,、外部晶振電路和復(fù)位電路可有可無(wú),而RS232 電平與TTL 電平轉(zhuǎn)換模塊必需省去,。
3 軟件設(shè)計(jì)
3.1 下位機(jī)軟件設(shè)計(jì)
下位機(jī)軟件由Keil uVision2 開(kāi)發(fā)完成,。程序本身通用于仿真Proteus、實(shí)際步進(jìn)電機(jī)控制系統(tǒng),。下位機(jī)程序包括:初始化程序,,串行中斷程序,定時(shí)器T0 中斷程序,LCD 顯示函數(shù)(含幾條控制命令子函數(shù))及程序主函數(shù)體五部分構(gòu)成,。程序設(shè)計(jì)流程,,如圖2 所示。
程序設(shè)計(jì)中要注意設(shè)置串行中斷的優(yōu)先級(jí)應(yīng)高于T0 中斷,,因?yàn)槟J(rèn)的ET0 中斷優(yōu)先級(jí)是高于串行中斷ES 的[6],,使用語(yǔ)句PT0=0;//低優(yōu)先級(jí),,PS=1,;//高優(yōu)先級(jí)即可,因?yàn)橹灰?dāng)串行通信優(yōu)先級(jí)最高時(shí),,才能實(shí)現(xiàn)上位機(jī)對(duì)下位機(jī)的實(shí)時(shí)控制,,十分重要。串行中斷中需應(yīng)用字符型數(shù)據(jù)與ASCII 碼轉(zhuǎn)化的算法,。因?yàn)镸SComm1.Output 中送出去的是字符型數(shù)據(jù),,而AT89C51 會(huì)把接收到的字符數(shù)據(jù)轉(zhuǎn)化成ASCII 碼,這樣如果上位機(jī)發(fā)送一個(gè)數(shù)據(jù)“0”,,而下位機(jī)轉(zhuǎn)化成ASCII 碼后即變成了“48”,,顯然這不是事先跟下位機(jī)約定的控制指令,所以需要對(duì)接收到的指令數(shù)據(jù)做一定的計(jì)算處理,,然后再交給CPU 進(jìn)行判斷,。因?yàn)樯衔粰C(jī)的控制指令數(shù)據(jù)只有七個(gè),使用語(yǔ)句if(temp<=57 & temp>=48)temp=temp-0x30,;即可實(shí)現(xiàn),。整個(gè)串行中斷程序設(shè)計(jì)如下:
static void com_isr(void)interrupt SIO_VECTOR using 1
{
if(RI)//RI=0 申請(qǐng)串行中斷
{
temp=SBUF;
//從接收寄存器中讀取指令數(shù)據(jù)
if(temp<=57 & temp>=48)
//判斷指令寄存器數(shù)據(jù)
temp=temp-0x30,;
//計(jì)算指令寄存器數(shù)據(jù)
RI=0,;
//RI=0 為下一次串行中斷做準(zhǔn)備
k=0;//為顯示函數(shù)執(zhí)行條件
return,;
}
}
設(shè)計(jì)T0 中斷程序時(shí),,中段時(shí)間(它由定時(shí)計(jì)數(shù)器的初始值,、工作方式共同決定)與中斷次數(shù)關(guān)鍵內(nèi)容,,決定了驅(qū)動(dòng)電機(jī)脈沖頻率的變化,即決定了步進(jìn)電機(jī)轉(zhuǎn)速,,需要設(shè)計(jì)一個(gè)合理的轉(zhuǎn)速方便記錄采集步進(jìn)電機(jī)數(shù)據(jù),,觀察單拍、雙拍,、單雙拍驅(qū)動(dòng)方式下電機(jī)的運(yùn)動(dòng)狀態(tài),。
LCD 顯示程序設(shè)計(jì)中因?yàn)?ldquo;MODE:”是始終顯示的,所以可以在程序初始化的時(shí)候就設(shè)計(jì)好LCD 的“MODE:”顯示,然后再根據(jù)數(shù)據(jù)指令顯示對(duì)應(yīng)的步進(jìn)電機(jī)運(yùn)動(dòng)狀態(tài),,這樣能節(jié)省MCU的處理時(shí)間,,提高仿真系統(tǒng)的實(shí)時(shí)控能力。主程序體中完成最終接受來(lái)的上位機(jī)指令的處理,,進(jìn)而完成上位機(jī)控制步進(jìn)電機(jī)的整個(gè)過(guò)程,。
其中對(duì)應(yīng)控制指令N,各個(gè)器件的狀態(tài),。每一個(gè)N 值都意味著一條控制指令,,不同N 值,步進(jìn)電機(jī),、LCD,、上位機(jī)Text、P1 口脈沖[5]會(huì)有對(duì)應(yīng)的狀態(tài)內(nèi)容,。具體如表1 所示,。
3.2 上位機(jī)軟件設(shè)計(jì)
上位機(jī)軟件用VB 進(jìn)行開(kāi)發(fā)。采用Microsoft 公司提供的MicrosoftCommunications Control 串行通信編程的ActiveX 控件,,封裝了完整的所需的API 函數(shù),,為應(yīng)用程序提供了通過(guò)串行口收發(fā)數(shù)據(jù)的簡(jiǎn)便方法。只要設(shè)置Settings 屬性包括返回波特率,、奇偶校驗(yàn),、數(shù)據(jù)位、停止位,、對(duì)應(yīng)串口等參數(shù),。然后設(shè)計(jì)對(duì)應(yīng)的事件處理,以達(dá)到目標(biāo)通信控制效果,。程序主要開(kāi)發(fā)對(duì)下位機(jī)發(fā)送的七條指令及Text 電機(jī)狀態(tài)顯示,,實(shí)現(xiàn)上位機(jī)控制。
4 系統(tǒng)仿真運(yùn)行效果及仿真分析
對(duì)應(yīng)的單拍正轉(zhuǎn),、雙拍正轉(zhuǎn),、單雙拍正轉(zhuǎn)種情況下由虛擬示波器(OSCILLOSCOPE)采集的脈沖驅(qū)動(dòng)信號(hào),如圖3 所示,。結(jié)合表1 的P1 口脈沖,,剔除正常存在的毛刺與抖動(dòng),與實(shí)際驅(qū)動(dòng)所需的對(duì)應(yīng)脈沖信號(hào)是完全吻合的,。
下位機(jī)在接收到單拍正轉(zhuǎn)對(duì)應(yīng)圖3(a)指令后步進(jìn)電機(jī)的相應(yīng)運(yùn)動(dòng)過(guò)程,,如圖4 所示。此處,,虛擬步進(jìn)電機(jī)的虛擬步距角為90 度,,圖中A,、B、C,、D 四相紅代表高電平,,藍(lán)代表低電平。圖3 與圖4 仿真過(guò)程記錄的信息,,與實(shí)際設(shè)計(jì)程序控制預(yù)期運(yùn)行結(jié)果完全吻合,,仿真效果明顯可信。
如圖5 所示,,下位機(jī)在運(yùn)行的條件下,,上位機(jī)Option 單拍,單擊正轉(zhuǎn)按鈕,,即上位機(jī)向下位機(jī)發(fā)送指令“1”,。其中的virtualTerminal(虛擬終端),是Proteus 軟件的輔助分析工具,,每次串口通信的指令將會(huì)被記錄下來(lái),。步進(jìn)電機(jī)會(huì)根據(jù)P1 的脈沖形式做對(duì)應(yīng)的運(yùn)動(dòng),Proteus 中LCD,、上位機(jī)Text 正確顯示步進(jìn)電機(jī)運(yùn)動(dòng)狀態(tài),。
5 結(jié)束語(yǔ)
提出了一種基于Proteus 的PC 機(jī)對(duì)步進(jìn)電機(jī)運(yùn)動(dòng)控制仿真方法。所構(gòu)建的仿真系統(tǒng)能很好的實(shí)現(xiàn)PC 機(jī)對(duì)步進(jìn)電機(jī)的同步控制與狀態(tài)顯示整體過(guò)程,,通過(guò)程序設(shè)計(jì)開(kāi)發(fā)與仿真系統(tǒng)無(wú)縫連接,,實(shí)現(xiàn)了程序所預(yù)期要求的控制過(guò)程,并給出了豐富的實(shí)驗(yàn)觀察接口,,仿真實(shí)現(xiàn)了程序硬件調(diào)試,、系統(tǒng)調(diào)試過(guò)程。
參考文獻(xiàn)
1 孫耀杰,,左賀,,康龍?jiān)疲鼙鼊?,史維祥. 抑制混合式步進(jìn)電機(jī)轉(zhuǎn)矩波動(dòng)的時(shí)變重復(fù)控制[J]. 中國(guó)電機(jī)工程學(xué)報(bào),,2004,24(11):183~187
2 孟武勝,,李亮. 基于AT89C52 單片機(jī)的步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)[J]. 測(cè)控技術(shù),,2006,25(12):46~51
3 張俊杰,,李世其,,熊友軍. 基于數(shù)據(jù)手套的機(jī)械手控制技術(shù)應(yīng)用[J]. 計(jì)算機(jī)應(yīng)用研究,,2006(6):170~175
4 李河清,,侯志祥. 基于串行通信的步進(jìn)電機(jī)小型集散控制系統(tǒng)[J].計(jì)算機(jī)工程,,2007,33(10):258~260
5 金建新,,鄭虎子. 16 位單片機(jī)控制混合式步進(jìn)電機(jī)的研究[J]. 機(jī)械設(shè)計(jì)與制造,,2007(9):94~96
6 李全利,遲榮強(qiáng). 單片機(jī)原理及接口技術(shù)[M]. 北京:高等教育出版社,,2004(1)
http://www.chuandong.com/publish/tech/thesis/2009/5/thesis_0_8_7298.html