步進(jìn)電機(jī)的定位控制
plc輸出的集成脈沖可通過步進(jìn)電機(jī)進(jìn)行定位控制。關(guān)于定位控制,調(diào)節(jié)和控制操作之間存在一些區(qū)別。步進(jìn)電機(jī)不需要連續(xù)的位置控制,而在控制操作中得到應(yīng)用。在以下的程序例子中,借助于cpu214所產(chǎn)生的集成脈沖輸出,通過步進(jìn)電機(jī)來實(shí)現(xiàn)相對(duì)的位置控制。雖然這種類型的定位控制不需要參考點(diǎn),本例還是粗略地描述了確定參考點(diǎn)的簡(jiǎn)單步驟。因?yàn)閷?shí)際上它總是相對(duì)一根軸確定一個(gè)固定的參考點(diǎn),因此,用戶借助于一個(gè)輸入字節(jié)的對(duì)偶碼(dual coding)給cpu指定定位角度。用戶程序根據(jù)該碼計(jì)算出所需的定位步數(shù),再由cpu輸出相關(guān)個(gè)數(shù)的控制脈沖。
1、 系統(tǒng)結(jié)構(gòu)
如圖1所示:
圖1 系統(tǒng)結(jié)構(gòu)
2、 硬件配置
如表1所示:
3、軟件結(jié)構(gòu)
3.1 plc的輸入信號(hào)與輸出信號(hào)
plc的部分輸入信號(hào)與輸出信號(hào),以及標(biāo)志位如表2所示。
3.2 系統(tǒng)軟件設(shè)計(jì)
plc的程序框圖如圖2所示。
3.3 初始化
在程序的第一個(gè)掃描周期(sm0.1=1),初始化重要參數(shù)。選擇旋轉(zhuǎn)方向和解除聯(lián)鎖。
3.4 設(shè)置和取消參考點(diǎn)
如果還沒有確定參考點(diǎn),那么參考點(diǎn)曲線應(yīng)從按“start”按扭(i1.0)開始。cpu有可能輸出最大數(shù)量的控制脈沖。在所需的參考點(diǎn),按“設(shè)置/取消參考點(diǎn)”開關(guān)(i1.4)后,首先調(diào)用停止電機(jī)的子程序。然后,將參考點(diǎn)標(biāo)志位m0.3置成1,再把新的操作模式“定位控制激活”顯示在輸出端q1.0。
如果i1.4的開關(guān)已激活,而且“定位控制”也被激活(m0.3=1),則切換到“參考點(diǎn)曲線”參考點(diǎn)曲線。在子程序1中,將m0.3置成0,并取消“定位控制激活”的顯示(q1.0=0)。此外,控制還為輸出最大數(shù)量的控制脈沖做準(zhǔn)備。當(dāng)再次激活i1.4開關(guān),便在兩個(gè)模式之間切換。如果此信號(hào)產(chǎn)生,同時(shí)電機(jī)在運(yùn)轉(zhuǎn),那么電機(jī)就自動(dòng)停止。
實(shí)際上,一個(gè)與驅(qū)動(dòng)器連接的參考點(diǎn)開關(guān)將代替手動(dòng)操作切換開關(guān)的使用,所以,參考點(diǎn)標(biāo)志能解決模式切換。
3.5 定位控制
如果確定了一個(gè)參考點(diǎn)(m0.3=1)而且沒有聯(lián)鎖,那么就執(zhí)行相對(duì)的定位控制。在子程序2中,控制器從輸入字節(jié)ibo讀出對(duì)偶碼方式的定位角度后,再存入字節(jié)mb11。與此角度有關(guān)的脈沖數(shù),根據(jù)下面的公式計(jì)算:
n=φ/360°×s
式中:n-控制脈沖數(shù)
φ-旋轉(zhuǎn)角度
s-每轉(zhuǎn)所需的步數(shù)
該程序所使用的步進(jìn)電機(jī)采用半步操作方式(s=1000)。在子程序3中循環(huán)計(jì)算步數(shù),如果現(xiàn)在按“start”按鈕(i1.0),cpu將從輸出端q0.0輸出所計(jì)算的控制脈沖個(gè)數(shù),而且電機(jī)將根據(jù)相應(yīng)的步數(shù)來轉(zhuǎn)動(dòng),并在內(nèi)部將“電機(jī)轉(zhuǎn)動(dòng)”的標(biāo)志位m0.1置成1。 在完整的脈沖輸出之后,執(zhí)行中斷程序0,此程序?qū)0.1置成0,以便能夠再次起動(dòng)電機(jī)。
3.6 停止電機(jī)
按“stop”(停止)按扭(i1.1),可在任何時(shí)候停止電機(jī)。執(zhí)行子程序0中與此有關(guān)的指令。
4、 程序和注釋
//標(biāo)題:用脈沖輸出進(jìn)行定位控制
//主程序
ld sm0.1 //僅首次掃描周期sm0.1才為1。
r m0.0,128 //md0至md12復(fù)位
atch 0,19 //把中斷程序0分配給中斷事件19(脈沖串終止)
eni //允許中斷
//脈沖輸出功能的初始化
movw 500,smw68 //脈沖周期t=500us
movw 0,smw70 //脈沖寬度為0(脈沖調(diào)制)
movd 429496700,smd72 //為參考點(diǎn)設(shè)定的最大脈沖數(shù)
//設(shè)置逆時(shí)針旋轉(zhuǎn)
ldn m0.1 //若電機(jī)停止
a i1.5 //且旋轉(zhuǎn)方向開關(guān)=1
s q0.2,1 //則逆時(shí)針旋轉(zhuǎn)(q0.2=1)
//設(shè)置順時(shí)針旋轉(zhuǎn)
ldn m0.1 //若電機(jī)停止
an i1.5 //且旋轉(zhuǎn)方向開關(guān)=0
r q0.2,1 //則逆時(shí)針旋轉(zhuǎn)(q0.2=0)
//聯(lián)鎖
ld i1.1 //若按“stop”(停止)按鈕
s m0.2,1 //則激活聯(lián)鎖(m0.2=1)
//解除聯(lián)鎖
ldn i1.1 //若“start”(啟動(dòng))按鈕松開
an i1.0 //且“stop”(停止)按鈕松開
r m0.2,1 //則解除聯(lián)鎖(m0.2=0)
//確定操作模式(參考點(diǎn)定位控制)
ld i1.4 //若按“設(shè)置/取消參考點(diǎn)”按鈕
eu //上升沿
call 1 //則調(diào)用子程序1
//啟動(dòng)電機(jī)
ld i1.0 //若按“start”(啟動(dòng))按鈕
eu //上升沿
an m0.1 //且電機(jī)停止
an m0.2 //且無聯(lián)鎖
ad≥ smd72,1 //且步數(shù)≥1,則
movb 16#85,smb67 //置脈沖輸出功能(pto)的控制位
pls 0 //啟動(dòng)脈沖輸出(q0.0)
s m0.1,1 //“電機(jī)運(yùn)行”標(biāo)志位置位(m0.1=1)
//定位控制
ld m0.3 //若已激活“定位控制” 操作模式
an m0.1 //且電機(jī)停止
call 2 //則調(diào)用子程序2
//停止電機(jī)
ld i1.1 //若按“stop”(停止)按鈕
eu //上升沿
a m0.1 //且電機(jī)運(yùn)行,則
call 0 //則調(diào)用子程序0
mend //主程序結(jié)束
//子程序1
sbr 0 //子程序0停止電機(jī)
movb 16#cb,smb67 //激活脈寬調(diào)制
pls 0 //停止輸出脈沖到q0.0
r m0.1,1 //“電機(jī)運(yùn)行”標(biāo)志位復(fù)位(m0.1=0)
ret //子程序0結(jié)束
sbr1 //子程序1,“確定操作模式”
ld m0.1 //若電機(jī)運(yùn)行
call 0 //則調(diào)用子程序0,停止電機(jī)
//申請(qǐng)“參考點(diǎn)曲線”
ld m0.3 //若已激活“定位控制”,則
r m0.3,1 //參考點(diǎn)標(biāo)志位;復(fù)位(m0.3=0)
r q1.0,1 //取消“定位控制激活”信息(q1.0=0)
movd 429496700,smd72 //為新的“參考點(diǎn)曲線”設(shè)定最大的脈沖數(shù)。
cret //條件返回到主程序。
//申請(qǐng)“定位控制”
ldn m0.3 //若未設(shè)置參考點(diǎn)(m0.3=0),則
s m0.3,1 //參考點(diǎn)標(biāo)志位置位(m0.3=1)
s q1.0,1 //輸出“定位控制激活”信息(q1.0=1)
ret //子程序1結(jié)束
//子程序2
sbr2 //子程序2,“定位控制”
movb ib0,mb11 //把定位角度從ibo拷到md8的最低有效字節(jié)mb11。
r m8.0,24 //mb8至mb10清零
div 9,md8 //角度/9=q1+r1
movw mw8,mw14 //把r1存入md12
mul 25,md8 //q1×25→md8
mul 25,md12
div 9,md12 // r1×25/9= q2+r2
call 3
//在子程序3中循環(huán)步數(shù)
movw 0,mw12 //刪除r2
+d md12,md8 //把步數(shù)寫入md8
movd md8,smd72 //把步數(shù)傳到smd72
ret //子程序2結(jié)束
//子程序3
sbr3 //子程序3,“循環(huán)步數(shù)”
ldw≥mw12,5 //如果r2≥5/9,則
incw mw14 //步數(shù)增加1。
ret
//子程序3結(jié)束
//中斷程序0,“脈沖輸出終止”
int0 //中斷程序0
r m0.1,1 //“電機(jī)運(yùn)行”標(biāo)志位復(fù)位(m0.1=0)
ret //子程序0結(jié)束