當(dāng)前位置: 首頁(yè) > 工業(yè)控制產(chǎn)品 > 運(yùn)動(dòng)控制 > 步進(jìn)電機(jī)
發(fā)布日期:2022-10-09 點(diǎn)擊率:65
摘要:步進(jìn)電機(jī)是一種將電脈沖信號(hào)轉(zhuǎn)換為線位移或角位移的電機(jī),但步進(jìn)電機(jī)的控制通常都采用匯編語(yǔ)言或C語(yǔ)言進(jìn)行軟件開(kāi)發(fā),本文結(jié)合SC3步進(jìn)電機(jī)控制器及平移臺(tái)的控制開(kāi)發(fā)為例,介紹了一種如何在Windows平臺(tái)下利用Visual C++6.0提供的串行通信控件MSComm來(lái)實(shí)現(xiàn)PC機(jī)與步進(jìn)電機(jī)控制器之間的數(shù)據(jù)通訊,最終實(shí)現(xiàn)由PC機(jī)直接控制步進(jìn)電機(jī)的方法,并詳細(xì)介紹了編寫(xiě)串行通信程序的基本步驟和方法。調(diào)試結(jié)果表明:設(shè)計(jì)的控制程序簡(jiǎn)單、易懂,工作可靠,且具有友好的人機(jī)交互界面。
關(guān)鍵詞:步進(jìn)電機(jī);Visual C++;串行通信;MSComm控件
A Discussion of the Measure on the Controlling of Stepper Motor in VC++
CHEN Jiafeng,PENG Qisheng
(Department of Electronic and Information Engineering,Southcentral University for Nationalities,Wuhan,430074,China)
Abstract:Stepper motor is a kind of motor of translating electrical pulse into displacement Ordinarily,the software of control system for stepper motor is programmedby assemble or C language The paper introduces a method of programming realizing serial communication between PC and stepper motor in VC++6.0 based MSComm control by SC3 stepper motor contoller The basal process and method ofprogramming serial communication are introduced. The result shows that designed program is simple and understandable and higher reliability and friendly manmachine conversation interface
Keywords:stepper motor;Visual C++;serial communication;MSComm control
步進(jìn)電機(jī)是一種將電脈沖轉(zhuǎn)化為角位移的機(jī)電式數(shù)模轉(zhuǎn)換器,在控制系統(tǒng)中具有十分廣泛的用途,但傳統(tǒng)的步進(jìn)電機(jī)的控制通常都采用匯編語(yǔ)言或C語(yǔ)言進(jìn)行軟件開(kāi)發(fā),本文利用VC++提供的串行通信控件MSComm實(shí)現(xiàn)PC機(jī)與步進(jìn)電機(jī)控制器之間的串行通信[1]。與 DOS下串行通信程序不同的是,Windows不提倡應(yīng)用程序直接控制硬件,而是通過(guò)Windows操作系統(tǒng)提供的設(shè)備驅(qū)動(dòng)程序來(lái)進(jìn)行數(shù)據(jù)傳送。串行口在Win32中是作為文件來(lái)進(jìn)行處理的,而不是直接對(duì)端口進(jìn)行操作,對(duì)于串行通信,Win32提供了相應(yīng)的文件I/O函數(shù)與通信函數(shù),通過(guò)了解這些函數(shù)的使用,可以編制出符合不同需要的通信程序。
實(shí)現(xiàn)串行通信[2]一般有3種方法[3]:使用VC++提供的串行通信控件MSComm[4];在單線程中實(shí)現(xiàn)自定義的串口通信類(lèi);多線程下實(shí)現(xiàn)串行通信。結(jié)合實(shí)際情況,本系統(tǒng)采用VC++提供的串行通信控件MSComm來(lái)進(jìn)行軟件編程,可以很方便地管理與控制計(jì)算機(jī)串口。
1 系統(tǒng)組成
由PC機(jī)控制步進(jìn)電動(dòng)機(jī)的系統(tǒng)如圖1所示。
本系統(tǒng)的電機(jī)控制采用通用的RS 232[5]串口的異步通信。由于RS 232早期是為促進(jìn)公用電話網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)通信而制定的標(biāo)準(zhǔn),其邏輯電平對(duì)地是對(duì)稱的,與TTL、MOS邏輯電平完全不同。邏輯0電平規(guī)定為+5~+15 V之間,邏輯1電平規(guī)定為-5~-15 V之間,因此,RS 232驅(qū)動(dòng)器與TTL電平連接必須經(jīng)過(guò)電平轉(zhuǎn)換。
2 控制軟硬件的技術(shù)參數(shù)
本系統(tǒng)采用卓立漢光儀器有限公司生產(chǎn)的SC3步進(jìn)電機(jī)控制器及平移臺(tái),實(shí)現(xiàn)平移臺(tái)的三維控制(x,y,z)。利用RS 232串口異步通信完成對(duì)步進(jìn)電機(jī)的單步和連續(xù)移動(dòng)控制,并且把電機(jī)的實(shí)際位置數(shù)據(jù)反饋給PC機(jī)處理。
電控平移臺(tái)的機(jī)械指標(biāo)如下:
(1)精密電控旋轉(zhuǎn)臺(tái):型號(hào)RSA200用于x軸。轉(zhuǎn)動(dòng)范圍>±40°;傳動(dòng)比180∶1;小步距0.000 312 5°;臺(tái)面直徑Φ200;分辨率0.00125°;重復(fù)定位精度<0.005°;最大速度25/s;中心最大負(fù)載60 kg。
(2)重載型電控平移臺(tái):型號(hào)TSA300B,用于z軸。最小步距0.003 15 mm;重復(fù)定位精度<0.005 mm;加固定平移臺(tái)有效行程為150 mm。
(3)超薄型電控平移臺(tái):型號(hào)TSA30C,用于y軸。最小步距為0.002 mm;重復(fù)定位精度<0.005 mm;有效行程30 mm。SC3步進(jìn)電機(jī)控制器設(shè)有手動(dòng)和聯(lián)動(dòng)方式,手動(dòng)能設(shè)置的操作有:速度設(shè)定、歸零操作、方向設(shè)定、位移量設(shè)定等,聯(lián)機(jī)方式可以使電機(jī)的運(yùn)動(dòng)直接受應(yīng)用軟件控制。由于是進(jìn)行二次開(kāi)發(fā),因此應(yīng)用程序必須嵌入原控制器的控制指令及協(xié)議。
該指令系統(tǒng)主要有以下幾條:
聯(lián)絡(luò)指令指令格式:“?R" & CHR$(13)
該指令發(fā)出200 ms以內(nèi)SC3回送:“OK”& CHR$(10),表示聯(lián)絡(luò)成功。
查詢指令指令格式:“?V”& CHR$(13)
SC3接到該指令后回送:“V number” & CHR$(10)。其中number為ASC碼表示的SC3當(dāng)前速度值。范圍0~255。
坐標(biāo)查詢指令指令格式:“?X”& CHR$(13) 或“?Y”& CHR$(13)或“?Z”& CHR$(13)
SC3接到該指令后回送:“X+number” & CHR$(10),或“Xnumber” & CHR$(10),其他軸類(lèi)似。其中number為以ASC碼表示的SC3當(dāng)前坐標(biāo)值,正負(fù)號(hào)代表當(dāng)前位置在開(kāi)機(jī)位置(0位)的正負(fù)方向的位置。
速度設(shè)置指令指令格式:“V”& number & CHR$(13)
其中number為以ASC碼表示的速度設(shè)置值。范圍0~255。
歸零指令指令格式:“HX”& CHR$(13) 或“HY”& CHR$(13) 或“HZ”& CHR$(13) 。
SC3接到此類(lèi)指令后進(jìn)行歸零操作。完成歸零操作后回送:“OK”& CHR$(10),表示SC3歸零完畢。
零狀態(tài)查詢指令指令格式:“?H”& CHR$(13)
SC3接到此類(lèi)指令后回送:“H000” & CHR$(10)
其中000的含義:
第一位數(shù)值:1表示z軸歸零成功,0表示z軸未歸零。
第二位數(shù)值:1表示y軸歸零成功,0表示y軸未歸零。
第三位數(shù)值:1表示x軸歸零成功,0表示x軸未歸零。
運(yùn)行指令指令格式:“Xdirectionnumber”& CHR$(13)或“Y directionnumber”& CHR$(13)或“Z directionnumber”& CHR$(13)
3 軟件實(shí)現(xiàn)
3.1 利用VC++提供的串行通信控件MSComm實(shí)現(xiàn)串行通信
首先,在VC++[5]的對(duì)話框中創(chuàng)建通信控件,若Control工具欄中缺少該控件,可通過(guò)菜單Project→Add toProject→Components and Control插入即可,再將該控件從工具箱拉到對(duì)話框中。此時(shí),你只需要關(guān)心控件提供的對(duì)Windows通信驅(qū)動(dòng)程序的API函數(shù)的接口,即只需要設(shè)置和監(jiān)視MSComm控件的屬性和事件。
在ClassWizard中為新建的通信控件定義成員對(duì)象(CMSComm m_Serial),通過(guò)該對(duì)象便可以對(duì)串口屬性進(jìn)行設(shè)置,MSComm控件共有27個(gè)屬性,其中主要包括:
Commport:設(shè)置并返回通信端口號(hào),缺省為COM1。
Settings:以字符串的形式設(shè)置并返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位。
PortOpen:設(shè)置并返回通信端口的狀態(tài),也可以打開(kāi)和關(guān)閉端口。
Input:從接收緩沖區(qū)返回和刪除字符。
Output:向發(fā)送緩沖區(qū)寫(xiě)入字符串。
InputLen:每次設(shè)置Input讀入的字符個(gè)數(shù),缺省值為0,表明讀取接收緩沖區(qū)中的全部?jī)?nèi)容。
InBufferCount:返回接收緩沖區(qū)中已接收到的字符數(shù),將其置0可以清除接收緩沖區(qū)。
InputMode:定義Input屬性獲取數(shù)據(jù)的方式(為0:文本方式;為1:二進(jìn)制方式)。
RThreshold和SThreshold屬性,表示在OnComm事件發(fā)生之前,接收緩沖區(qū)或發(fā)送緩沖區(qū)中可接收的字符數(shù)。
以下是通過(guò)設(shè)置控件屬性對(duì)串口進(jìn)行初始化的實(shí)例:
打開(kāi)所需串口后,需要考慮串口通信的時(shí)機(jī)。在接收或發(fā)送數(shù)據(jù)過(guò)程中,可能需要監(jiān)視并響應(yīng)一些事件和錯(cuò)誤,所以事件驅(qū)動(dòng)是處理串行端口交互作用的一種非常有效的方法。使用OnComm事件和CommEvent屬性捕捉并檢查通信事件和錯(cuò)誤的值。發(fā)生通信事件或錯(cuò)誤時(shí),將觸發(fā)OnComm事件,CommEvent屬性的值將被改變,應(yīng)用程序檢查CommEvent屬性值并作出相應(yīng)的反應(yīng)。在程序中用ClassWizard為CMSComm控件添加OnComm消息處理函數(shù):
3.2 系統(tǒng)初始化
在執(zhí)行應(yīng)用程序時(shí)首先必須進(jìn)行初始化,其初始化程序框圖如圖2所示。
運(yùn)行程序時(shí),視圖執(zhí)行初始化操作函數(shù)onInitialUpdate(),該函數(shù)內(nèi)要先打開(kāi)串口1,通過(guò)設(shè)置對(duì)象m_ContrCom各成員函數(shù),設(shè)置好各通信參數(shù):
然后經(jīng)過(guò)一個(gè)位置選擇對(duì)話框,通常選“保持原來(lái)的位置”,然后就發(fā)出詢問(wèn)各軸的坐標(biāo)值的指令。流程如圖2所示。除x軸是直接發(fā)送坐標(biāo)詢問(wèn)指令獲得坐標(biāo)數(shù)據(jù)外,其他2個(gè)軸都是通過(guò)連續(xù)的2個(gè)定時(shí)器來(lái)詢問(wèn)坐標(biāo)的,定時(shí)器響應(yīng)后執(zhí)行圖3的程序。此后就進(jìn)入待操作畫(huà)面。
3.3 運(yùn)行操作的編程
在電機(jī)運(yùn)動(dòng)操作區(qū)的各文本框內(nèi)輸入某一軸向的位移值、速度值,按下“運(yùn)行”按鈕,則程序會(huì)把位移值轉(zhuǎn)化為字符型的實(shí)際要運(yùn)行的步數(shù),通過(guò)串口送到SC3步進(jìn)電機(jī)控制器,控制對(duì)應(yīng)的軸的電機(jī)運(yùn)行相應(yīng)的步數(shù)。運(yùn)行結(jié)束后,SC3會(huì)返回一個(gè)“OK”字符至串口,PC機(jī)接受到這個(gè)字符后,就知道電機(jī)運(yùn)行結(jié)束,然后向串口發(fā)送坐標(biāo)詢問(wèn)指令,SC3會(huì)回送有關(guān)坐標(biāo)數(shù)據(jù),PC機(jī)接到這些數(shù)據(jù)后進(jìn)行處理運(yùn)算并在文本框中顯示出來(lái)。這樣就結(jié)束了一個(gè)完整的運(yùn)行操作。
所有主要的PC機(jī)和SC3控制器的有關(guān)數(shù)據(jù)通信程序都在MSComm控件內(nèi)。包括所有的接受、識(shí)別返回字符,各軸向坐標(biāo)的運(yùn)算和顯示。
當(dāng)步進(jìn)運(yùn)動(dòng)完畢后,返回到PC機(jī)的數(shù)據(jù)為步進(jìn)電機(jī)已經(jīng)運(yùn)行的步數(shù),根據(jù)這個(gè)步數(shù)要計(jì)算相應(yīng)的坐標(biāo),必須知道各軸的脈沖當(dāng)量。步進(jìn)電機(jī)每走一步,電移臺(tái)的位移等于脈沖當(dāng)量,即分辨率。
坐標(biāo)值=初始坐標(biāo)+運(yùn)行步數(shù)*脈沖當(dāng)量
平移臺(tái)脈沖當(dāng)量=絲杠導(dǎo)程mm*步距角/(360*細(xì)分?jǐn)?shù))
旋轉(zhuǎn)臺(tái)(x軸)的脈沖當(dāng)量(度)=步進(jìn)電機(jī)步距角/(傳動(dòng)比*細(xì)分?jǐn)?shù))
其中細(xì)分?jǐn)?shù)是由控制器后面板撥碼開(kāi)關(guān)設(shè)置的。
步進(jìn)電機(jī)的步距角都為1.8°,縱軸的絲杠導(dǎo)程為1 mm,橫軸為4 mm,旋轉(zhuǎn)軸傳動(dòng)比為180∶1,細(xì)分?jǐn)?shù)為2,則根據(jù)以上公式可得出:
縱軸(z)脈沖當(dāng)量=1/100
橫軸(y)脈沖當(dāng)量=1/400
旋轉(zhuǎn)軸(x)脈沖當(dāng)量=1/200
4 結(jié)語(yǔ)
在PC機(jī)和單片機(jī)之間實(shí)現(xiàn)串行通信控制是近幾年很受歡迎、較為流行的方法。本文介紹的運(yùn)用MSComm控件來(lái)編制的由PC機(jī)對(duì)步進(jìn)電機(jī)直接控制的應(yīng)用軟件具有友好的人機(jī)交互界面,且編程簡(jiǎn)便、工作可靠,是一種切實(shí)有效的方法。同時(shí),這種串行控制方法和技術(shù)還可運(yùn)用于相應(yīng)的工業(yè)控制場(chǎng)合。
參考文獻(xiàn)
[1]李朝青.PC機(jī)及單片機(jī)數(shù)據(jù)通信技術(shù)M].北京:北京航空航天大學(xué)出版社,1999.
[2][美]Joe Campbell.串行通信C程序員指南[M].徐國(guó)定譯.北京:清華大學(xué)出版社,1995.
[3]Herbert Schildt,Schildt′sExpert C++[M].MCGrawHill,1998.
[4][美]Young Michael J.Visual C++6從入門(mén)到精通[M]邱仲潘,等譯.北京:電子工業(yè)出版社,1999.
[5]向世明.Visual C++數(shù)字圖像與圖形處理[M].北京:電子工業(yè)出版社,2002.
上一篇: 索爾維全系列Solef?PV
型號(hào):2011400034
價(jià)格:面議
庫(kù)存:10
訂貨號(hào):2011400034
型號(hào):103H8223-6340
價(jià)格:面議
庫(kù)存:10
訂貨號(hào):103H8223-6340
型號(hào):SM2862-5151
價(jià)格:面議
庫(kù)存:10
訂貨號(hào):SM2862-5151
型號(hào):103H8222-6340
價(jià)格:面議
庫(kù)存:10
訂貨號(hào):103H8222-6340
型號(hào):103H5208-0410
價(jià)格:面議
庫(kù)存:10
訂貨號(hào):103H5208-0410
型號(hào):P542-M481U-G17L82
價(jià)格:面議
庫(kù)存:10
訂貨號(hào):P542-M481U-G17L82