《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于VC++的步進(jìn)電機(jī)控制系統(tǒng)研究
基于VC++的步進(jìn)電機(jī)控制系統(tǒng)研究
摘要: 在Windows平臺(tái)下利用VisualC++6.0提供的串行通信控件MSComm來(lái)實(shí)現(xiàn)PC機(jī)與步進(jìn)電機(jī)控制器之間的數(shù)據(jù)通訊,,最終實(shí)現(xiàn)由PC機(jī)直接控制步進(jìn)電機(jī)的方法,。
關(guān)鍵詞: 軟件 VC++ 步進(jìn)電機(jī)
Abstract:
Key words :

  步進(jìn)電機(jī)是一種將電脈沖信號(hào)轉(zhuǎn)換為線位移或角位移的電機(jī),但步進(jìn)電機(jī)的控制通常都采用匯編語(yǔ)言或C語(yǔ)言進(jìn)行軟件開發(fā),,本文結(jié)合SC3步進(jìn)電機(jī)控制器及平移臺(tá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ì)介紹了編寫串行通信程序的基本步驟和方法。調(diào)試結(jié)果表明:設(shè)計(jì)的控制程序簡(jiǎn)單,、易懂,,工作可靠,且具有友好的人機(jī)交互界面,。
 
     步進(jìn)電機(jī)是一種將電脈沖轉(zhuǎn)化為角位移的機(jī)電式數(shù)模轉(zhuǎn)換器,,在控制系統(tǒng)中具有十分廣泛的用途,但傳統(tǒng)的步進(jìn)電機(jī)的控制通常都采用匯編語(yǔ)言或C語(yǔ)言進(jìn)行軟件開發(fā),,本文利用VC++提供的串行通信控件MSComm實(shí)現(xiàn)PC機(jī)與步進(jìn)電機(jī)控制器之間的串行通信,。與 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)串行通信一般有3種方法:使用VC++提供的串行通信控件MSComm;在單線程中實(shí)現(xiàn)自定義的串口通信類,;多線程下實(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所示,。

圖1 PC機(jī)控制步進(jìn)電機(jī)系統(tǒng)框圖

     本系統(tǒng)的電機(jī)控制采用通用的RS 232串口的異步通信,。由于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.001 25°,;重復(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)行二次開發(fā),,因此應(yīng)用程序必須嵌入原控制器的控制指令及協(xié)議,。

  步進(jìn)電機(jī)是一種將電脈沖信號(hào)轉(zhuǎn)換為線位移或角位移的電機(jī),,但步進(jìn)電機(jī)的控制通常都采用匯編語(yǔ)言或C語(yǔ)言進(jìn)行軟件開發(fā),本文結(jié)合SC3步進(jìn)電機(jī)控制器及平移臺(tá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ì)介紹了編寫串行通信程序的基本步驟和方法,。調(diào)試結(jié)果表明:設(shè)計(jì)的控制程序簡(jiǎn)單,、易懂,工作可靠,,且具有友好的人機(jī)交互界面,。
 
     步進(jìn)電機(jī)是一種將電脈沖轉(zhuǎn)化為角位移的機(jī)電式數(shù)模轉(zhuǎn)換器,在控制系統(tǒng)中具有十分廣泛的用途,,但傳統(tǒng)的步進(jìn)電機(jī)的控制通常都采用匯編語(yǔ)言或C語(yǔ)言進(jìn)行軟件開發(fā),,本文利用VC++提供的串行通信控件MSComm實(shí)現(xiàn)PC機(jī)與步進(jìn)電機(jī)控制器之間的串行通信。與 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)串行通信一般有3種方法:使用VC++提供的串行通信控件MSComm,;在單線程中實(shí)現(xiàn)自定義的串口通信類,;多線程下實(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所示,。

圖1 PC機(jī)控制步進(jìn)電機(jī)系統(tǒng)框圖

     本系統(tǒng)的電機(jī)控制采用通用的RS 232串口的異步通信。由于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.001 25°,;重復(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)行二次開發(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),,其他軸類似。其中number為以ASC碼表示的SC3當(dāng)前坐標(biāo)值,,正負(fù)號(hào)代表當(dāng)前位置在開機(jī)位置(0位)的正負(fù)方向的位置,。

  速度設(shè)置指令指令格式:“V”& number & CHR$(13)

    其中number為以ASC碼表示的速度設(shè)置值。范圍0~255,。

  歸零指令指令格式:“HX”& CHR$(13) 或“HY”& CHR$(13) 或“HZ”& CHR$(13)

     SC3接到此類指令后進(jìn)行歸零操作,。完成歸零操作后回送:“OK”& CHR$(10),表示SC3歸零完畢,。

  零狀態(tài)查詢指令指令格式:“,?H”& CHR$(13)

     SC3接到此類指令后回送:“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++的對(duì)話框中創(chuàng)建通信控件,,若Control工具欄中缺少該控件,可通過(guò)菜單Project→Add toProject→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),,也可以打開和關(guān)閉端口。
     Input:從接收緩沖區(qū)返回和刪除字符,。
     Output:向發(fā)送緩沖區(qū)寫入字符串,。
     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í)例:
   
     打開所需串口后,,需要考慮串口通信的時(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所示。

圖2 初始化程序框圖

     運(yùn)行程序時(shí),,視圖執(zhí)行初始化操作函數(shù)OnInitialUpdate(),,該函數(shù)內(nèi)要先打開串口1,通過(guò)設(shè)置對(duì)象m_ContrCom各成員函數(shù),,設(shè)置好各通信參數(shù):
   
     然后經(jīng)過(guò)一個(gè)位置選擇對(duì)話框,,通常選“保持原來(lái)的位置”,然后就發(fā)出詢問各軸的坐標(biāo)值的指令,。流程如圖2所示,。除x軸是直接發(fā)送坐標(biāo)詢問指令獲得坐標(biāo)數(shù)據(jù)外,其他2個(gè)軸都是通過(guò)連續(xù)的2個(gè)定時(shí)器來(lái)詢問坐標(biāo)的,,定時(shí)器響應(yīng)后執(zhí)行圖3的程序,。此后就進(jìn)入待操作畫面。

     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)詢問指令,,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ù)是由控制器后面板撥碼開關(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)合。

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。