基于Proteus 的PC 機(jī)對(duì)步進(jìn)電機(jī)運(yùn)動(dòng)控制仿真
步進(jìn)電機(jī)在簡(jiǎn)單的開環(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ī)開發(fā)過程復(fù)雜,主體包含硬件電路設(shè)計(jì)和控制程序設(shè)計(jì)兩方面??刂瞥绦蛟O(shè)計(jì)過程需要軟件調(diào)試、硬件調(diào)試、系統(tǒng)調(diào)試3個(gè)過程。軟件調(diào)試一般比較容易進(jìn)行,但如果要進(jìn)行牽涉硬件的硬件調(diào)試或系統(tǒng)調(diào)試,包括元器件選用、PCB板制作、元器件焊接、程序燒錄環(huán)節(jié),其中任一環(huán)節(jié)的疏漏都可能造成程序調(diào)試失真。通過Proteus中各虛擬儀器所構(gòu)建硬件電路,調(diào)試所設(shè)計(jì)程序的控制效果,達(dá)到虛擬硬件調(diào)試、虛擬系統(tǒng)調(diào)試程序的目的,為PC機(jī)步進(jìn)電機(jī)系統(tǒng)開發(fā)提供有效的理論實(shí)踐依據(jù),避免因硬件電路設(shè)計(jì)過程錯(cuò)誤引起的程序異?;蛴布?shí)驗(yàn)條件限制影響開發(fā)。
Proteus是英國(guó)Labcenter公司開發(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)境,如KeiluVision2、MTLAB等軟件。由于Proteus軟件本身的優(yōu)良仿真特性,所設(shè)計(jì)程序能于Proteus中完成仿真過程的同時(shí),即基本證明了所設(shè)計(jì)程序的準(zhǔn)確性,從而基本完成了系統(tǒng)開發(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開發(fā)完成;下位機(jī)硬件電路由Proteus中各虛擬儀器所構(gòu)建完成;下位機(jī)控制程序由KeiluVision2開發(fā)完成;期間還要采用虛擬串口(VSPD),用于模擬一根串口通信線,實(shí)現(xiàn)上位機(jī)與下位機(jī)的串口通信,最終實(shí)現(xiàn)上位機(jī)(VB)對(duì)下位機(jī)(Proteus)中步進(jìn)電機(jī)的實(shí)時(shí)控制過程。
2.1系統(tǒng)總體框圖
上位機(jī)通過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來完成實(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)行,所以無需電平轉(zhuǎn)換芯片,否則會(huì)發(fā)生錯(cuò)誤。實(shí)際仿真時(shí),串口的2、3位直接與AT89C51的RXD、TXD直接對(duì)接就可以了。
LCD部分顯示電路,當(dāng)單片機(jī)驅(qū)動(dòng)LCD時(shí),由于信號(hào)的傳輸過程會(huì)有損耗,所以在實(shí)際應(yīng)用驅(qū)動(dòng)LCD時(shí),常采用信號(hào)增益模塊加以驅(qū)動(dòng)。仿真過程無信號(hào)損耗,系統(tǒng)外部晶振電路,復(fù)位電路等在仿真過程可以省略。
綜上所述,在搭建Proteus下位機(jī)系統(tǒng)時(shí),隔離放大模塊、LCD驅(qū)動(dòng)模塊、外部晶振電路和復(fù)位電路可有可無,而RS232電平與TTL電平轉(zhuǎn)換模塊必需省去。
3軟件設(shè)計(jì)
3.1下位機(jī)軟件設(shè)計(jì)
下位機(jī)軟件由KeiluVision2開發(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],使用語句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è),使用語句if(temp=57temp>=48)temp=temp-0x30;即可實(shí)現(xiàn)。整個(gè)串行中斷程序設(shè)計(jì)如下:
staticvoidcom_isr(void)interruptSIO_VECTORusing1
{
if(RI)//RI=0申請(qǐng)串行中斷
{
temp=SBUF;
//從接收寄存器中讀取指令數(shù)據(jù)
if(temp=57temp>=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)。 塵埃粒子計(jì)數(shù)器相關(guān)文章:塵埃粒子計(jì)數(shù)器原理 晶振相關(guān)文章:晶振原理
評(píng)論