摘 要:步進(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控件
步進(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)自定義的串口通信類;多線程下實(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.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)行二次開(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),其他軸類似。其中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接到此類指令后進(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++[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í)例:





