面向纖維測量微操作的步進(jìn)電機(jī)控制軟件設(shè)計
摘要: 將步進(jìn)電機(jī)用于纖維測量系統(tǒng)的定位控制,提出一種基于Pc機(jī)和數(shù)據(jù)采集/控制卡的步進(jìn)電動機(jī)控制方案,并將windows多線程和高精度定時技術(shù)應(yīng)用到軟件設(shè)計中,以產(chǎn)生高穩(wěn)定度的脈沖信號,提高步進(jìn)電動機(jī)的定位
[摘要]:將步進(jìn)電機(jī)用于纖維測量系統(tǒng)的定位控制,提出一種基于Pc機(jī)和數(shù)據(jù)采集/控制卡的步進(jìn)電動機(jī)控制方案,并將windows多線程和高精度定時技術(shù)應(yīng)用到軟件設(shè)計中,以產(chǎn)生高穩(wěn)定度的脈沖信號,提高步進(jìn)電動機(jī)的定位精度。文章介紹了軟件設(shè)計過程,并給出了相應(yīng)的控制軟件界面。
[關(guān)鍵詞]:纖維測量 控制軟件 數(shù)據(jù)采集/控制卡 步進(jìn)電動機(jī)
中圖分類號:TM383.6 文獻(xiàn)標(biāo)識碼:A 文章編號:1004—7018(2010)05—0060—03
0引言
步進(jìn)電機(jī)是一種將數(shù)字脈沖信號直接轉(zhuǎn)換成角位移或線位移的控制驅(qū)動元件,具有精確步進(jìn)、平滑調(diào)速以及快速起停和換相等特點(diǎn),廣泛用于速度控制和位置控制系統(tǒng)。本文將步進(jìn)電動機(jī)用于纖維測量微操作系統(tǒng),該系統(tǒng)主要通過控制步進(jìn)電動機(jī)運(yùn)動拉伸纖維,達(dá)到測量纖維張力的目的,要求有較高定位精度,并臣能通過軟件界面控制拉伸運(yùn)動過程。系統(tǒng)設(shè)計的關(guān)鍵是實現(xiàn)步進(jìn)電動機(jī)的運(yùn)動控制,常見方案有”。:(1)工控機(jī)結(jié)合運(yùn)動控制卡方式;(2)Pc機(jī)結(jié)合單片機(jī)最小系統(tǒng)方式;(3)工控機(jī)結(jié)合PLC方式。這些方案中,有的成本較高,有的實現(xiàn)較復(fù)雜。本文采用Pc機(jī)結(jié)合數(shù)據(jù)采集/控制卡的控制方案,控制軟件的沒計充分利用Windows多線程和高精度定時技術(shù),生成的進(jìn)給脈沖信號穩(wěn)定性好,步進(jìn)電動機(jī)定位精度高。該方案不僅可以方便地通過軟件界面控制步進(jìn)電動機(jī)的運(yùn)動過程,而且可以依托Pc機(jī)和數(shù)據(jù)采集/控制卡的優(yōu)勢條件,實現(xiàn)數(shù)據(jù)采集、處理等其他功能。
1系統(tǒng)構(gòu)成及功能
步進(jìn)電動機(jī)控制系統(tǒng)構(gòu)成框圖如圖1所示。圖中的計算機(jī)是一臺普通PC機(jī),配有鍵盤和打印機(jī),數(shù)據(jù)采集/控制卡插在PC機(jī)的PCI插槽中,步進(jìn)電動機(jī)是兩相混合式步進(jìn)電動機(jī),其驅(qū)動電路由廠商提供。系統(tǒng)工作時,由Pc機(jī)上的控制軟件操作數(shù)據(jù)采集/控制卡向驅(qū)動電路發(fā)出控制信號和脈沖信號,驅(qū)動電路將輸入信號轉(zhuǎn)換成d十、A一、B+、B四路輸出信號,驅(qū)動步進(jìn)電動機(jī)。
系統(tǒng)控制軟件主要功能包括:(1)控制數(shù)據(jù)采集/控制卡開關(guān)量通道Doutl電平實現(xiàn)步進(jìn)電機(jī)的起??刂疲?2)Dour2電平實現(xiàn)步進(jìn)電動機(jī)正反轉(zhuǎn)控制;(3)Dout0電平生成步進(jìn)電動機(jī)的進(jìn)給脈沖信號;(4)通過改變脈沖頻率,實現(xiàn)調(diào)速;(5)控制數(shù)據(jù)采集/控制卡模擬量通道及A/D轉(zhuǎn)換,實現(xiàn)模擬量面向纖維測量微操作的步進(jìn)電動機(jī)控制軟件設(shè)計信號采集。
2關(guān)鍵技術(shù)介紹
2.1數(shù)據(jù)采集/控制卡
系統(tǒng)采用一種國產(chǎn)的PcI總線數(shù)據(jù)采集/控制卡,該卡具有16路開關(guān)量輸入/輸出通道、16路模擬量輸入通道、1個12位的AD轉(zhuǎn)換器。使用時,將數(shù)據(jù)采集/控制卡插在計算機(jī)主板上的任一PcI插槽巾,并安裝沒備驅(qū)動程序。應(yīng)用程序通過動態(tài)鏈接庫提供的庫函數(shù)訪問數(shù)據(jù)采集/控制卡。常用的庫函數(shù)及功能如下:
(1)]KP8l LocateOpen,打開數(shù)據(jù)采集/控制卡;
(2)KP811 c10se,關(guān)閉數(shù)據(jù)采集/控制專;
(3)KP8ll—FIFOcls,屆I新FIFO;
(4)KP811一ReadnF0,讀HFO數(shù)據(jù);
(5)KP811_Input,開關(guān)量輸入;
(6)KP811一Output,開關(guān)量輸出。
設(shè)計中最常用的庫函數(shù)是KP811 Output,該函數(shù)可直接控制某路開關(guān)量輸出的電平,原形如下:
V0ld KP811一Output(IO HLE hIO.shor channel,b001 states,bool initop,1ong val)
輸入?yún)?shù)的含義:h10為打開的數(shù)據(jù)采集/控制卡句柄;In劬p為輸出方式選擇,邏輯值“1”時,按字節(jié)方式輸出,邏輯值“0”時,按通道方式輸出;chan—nel為通道輸出方式下的通道號;stms為通道輸出方式下通道狀態(tài),“l”時輸出高電平,“0”時輸出低電平;vd用于字節(jié)方式輸出。
數(shù)據(jù)采集/控制卡編程時要注意兩點(diǎn):
1)首先要調(diào)用LoadⅡbrary函數(shù)鏈接數(shù)據(jù)采集/控制卡的動態(tài)庫;
2)在訪問數(shù)據(jù)采集/控制卡前必須先打開板卡,訪問結(jié)束后應(yīng)關(guān)閉板卡。
2.2高精度定時
windows系統(tǒng)中,實現(xiàn)高精度定時有兩種方法[4-5]:一種是采用硬件中斷,該方法需要訪問系統(tǒng)硬件,由于windows已經(jīng)封裝了對計算機(jī)底層硬件訪問,實現(xiàn)起來工作量較大,且容易產(chǎn)生不穩(wěn)定因素;另一種方法是利用cPu高性能計數(shù)器實現(xiàn)高精度定時,這種方法要求計算機(jī)從硬件上支持高精度計時器,其定時精度和計算機(jī)的cPu有關(guān),能夠?qū)崿F(xiàn)微秒級定時。編程實現(xiàn)時需要用到兩個函數(shù):
(1)QueryPerforanceFrequency,讀計數(shù)器頻率;
(2)QlleryPerformanceer,讀計數(shù)器的計數(shù)值。
通過調(diào)用上述兩個函數(shù)結(jié)合while循環(huán)及可實現(xiàn)高精度定時,定時程序流程如圖2所示。
2.3多線程
在32位windows編程環(huán)境中,可利用多線程技術(shù)可實現(xiàn)多項任務(wù)的并行運(yùn)行。多線程程序運(yùn)行時,操作系統(tǒng)根據(jù)線程的優(yōu)先級向每個線程分配時間片,通過時間片的輪換,實現(xiàn)多個線程同時工作。MFc區(qū)分兩類線程:用戶界面線程和輔助線程。用戶界面線程有消息循環(huán),能夠創(chuàng)建窗口并處理發(fā)給這個窗口的消息;輔助線程沒有消息循環(huán),適合于執(zhí)行后臺任務(wù)。
windows應(yīng)用程序以單個用戶界面線程(主線程)作為生命周期的開始,主線程可以起動輔助線程。輔助線程用一個全局線程函數(shù)表示,當(dāng)線程起動后,執(zhí)行線程函數(shù),線程運(yùn)行。線程函數(shù)代碼執(zhí)行結(jié)束后,線程會自行終止,輔助線程運(yùn)行時,可以掛起或強(qiáng)行終止。常用的編程函數(shù)有[6]:
(1)AfxB。gin_rhread,創(chuàng)建并起動線程;
(2)A&EndThread,強(qiáng)行終止線程并釋放線程資源;
(3)suspendThread,掛起線程;
(4)Resumelrhread,繼續(xù)運(yùn)行掛起的線程。
在多線程應(yīng)用程序中,線程運(yùn)行是相互獨(dú)立的,必須采用線程同步技術(shù)使多個線程正常同步工作。windows提供了臨界區(qū)、互斥量、信號燈等多種線程同步技術(shù)。其中臨界區(qū)是避免多個線程同時訪問共享數(shù)據(jù)區(qū)而引起沖突的有效方法。MFc中通過創(chuàng)建臨界區(qū)類ccTit·calsection的實例來創(chuàng)建一個臨界區(qū)對象,線程通過臨界區(qū)對象調(diào)用函數(shù)L0ck和un—L0ck獲取和釋放對共享數(shù)據(jù)區(qū)的控制權(quán)。
3控制軟件設(shè)計
3.1設(shè)計思路
Visual c++6。0是當(dāng)今比較流行的一種可視化編程環(huán)境,編寫的代碼運(yùn)行速度快、效率高。本系統(tǒng)控制軟件采用Vc++6 0編程環(huán)境設(shè)計,實現(xiàn)步進(jìn)電動機(jī)的正反轉(zhuǎn)控制、起停(使能)控制、速度控制豎以及產(chǎn)生進(jìn)給脈沖信號等功能。
根據(jù)系統(tǒng)調(diào)速要求,進(jìn)給脈沖頻率有時會超過1 kH:,且脈沖信號的穩(wěn)定性對步進(jìn)電動機(jī)的定位精度也有直接影響。因此,系統(tǒng)采用高度定時技術(shù)產(chǎn)生脈沖信號。
如上所述,利用CPU高性能計數(shù)器可實現(xiàn)高精度定時,這種方法一般由While循環(huán)結(jié)構(gòu)程序?qū)崿F(xiàn),若軟件采用單線程設(shè)計,則循環(huán)程序運(yùn)行時系統(tǒng)將無法響應(yīng)其他操作,即脈沖產(chǎn)生和其他操作不能并行進(jìn)行,因此,軟件設(shè)計必須采用多線程技術(shù),即除了主線程外,再創(chuàng)建一個輔助線程。步進(jìn)電動機(jī)的起停控制、正反轉(zhuǎn)控制等功能由主線程完成,脈沖信號的產(chǎn)生作為后臺任務(wù)放在輔助線程中完成。這樣既能產(chǎn)生穩(wěn)定的脈沖信號,又不影響其他功能的執(zhí)行。
3.2具體功能實現(xiàn)
3 2 1起停控制
步進(jìn)電動機(jī)的起停由數(shù)據(jù)采集/控制卡的開關(guān)量通道Doutl的電平?jīng)Q定,程序調(diào)用KPSll一Output函數(shù)向Doutl通道輸出“0”,起動電機(jī),輸出“1”,停止電機(jī)。
3.2.2正反轉(zhuǎn)控制
步進(jìn)電動機(jī)的正反轉(zhuǎn)由數(shù)據(jù)采集/控制卡的開關(guān)量通道Dout2的電平?jīng)Q定,程序調(diào)用KP811一Out—put函數(shù)向Dout2通道輸出“0”,電機(jī)正傳,輸出“1”,電機(jī)反轉(zhuǎn)。
3 2 3脈沖信號生成與控制
程序控制數(shù)據(jù)采集/控制卡的開關(guān)量通道Dour0,使其周期性地輸出高低電平,即可產(chǎn)生周期性的脈沖信號。脈沖信號的產(chǎn)生主要由輔助線程實現(xiàn)。輔助線程由一段While循環(huán)程序構(gòu)成,循環(huán)條件由是否要產(chǎn)生脈沖信號決定,在循環(huán)體內(nèi)部,先調(diào)用高精度定時程序,定時程序結(jié)束后,再調(diào)用KP81一Output函數(shù)將數(shù)據(jù)采集/控制卡的開關(guān)量輸出通道Dout0取反。其程序流程如圖3所示。
脈沖起動和終止由主線程控制。當(dāng)脈沖起動時,主線程先將循環(huán)條件設(shè)置為“真”,再起動輔助線程,這時,輔助線程及While循環(huán)將一直運(yùn)行,數(shù)據(jù)采集/控制卡的Dour0通道將以預(yù)定的時間間隔(半個脈沖周期)交替出現(xiàn)高電平和低電平,從而輸出周期性脈沖信號。當(dāng)終止脈沖信號時,主線程將循環(huán)條件設(shè)置為“假”,While循環(huán)結(jié)束,輔助線程自然終止,脈沖停止。脈沖信號產(chǎn)生及控制代碼如下:
(1)產(chǎn)生脈沖的輔助線程函數(shù)