時(shí)間:2018-08-01 11:07:26來(lái)源:網(wǎng)絡(luò)轉(zhuǎn)載
機(jī)器人的伺服電機(jī)是用來(lái)將機(jī)器人大腦發(fā)出的運(yùn)動(dòng)指令轉(zhuǎn)換為運(yùn)動(dòng)動(dòng)作的部件,相當(dāng)于人的肌肉的作用。本講教你如何連接、調(diào)整以及測(cè)試機(jī)器人伺服電機(jī)。為此,你需要理解和掌握控制伺服電機(jī)方向、速度和運(yùn)行時(shí)間的相關(guān)PBASIC指令及其編程技術(shù)。由于精確地控制伺服電機(jī)是決定機(jī)器人性能的關(guān)鍵,所以,在把伺服電機(jī)安裝到機(jī)器人底盤之前先熟悉這些內(nèi)容是非常重要而且必需的。
連續(xù)旋轉(zhuǎn)伺服電機(jī)簡(jiǎn)介
機(jī)器人伺服電機(jī)有很多種,本講要介紹的主要是能夠使你的輪式機(jī)器人兩個(gè)輪子不停旋轉(zhuǎn)的連續(xù)旋轉(zhuǎn)伺服電機(jī),如圖2-1所示。圖中指出了該伺服電機(jī)的外部配件,這些配件將在本講或后續(xù)章節(jié)中用到。
任務(wù)1:將伺服電機(jī)連接到教學(xué)板
在本任務(wù)中首先將伺服電機(jī)連接到電源和BASICStamp模塊的I/O口,然后搭建一個(gè)LED電路來(lái)監(jiān)視BASICStamp模塊發(fā)送到伺服電機(jī)的運(yùn)動(dòng)控制信號(hào)。
連接伺服電機(jī)所需的零部件帕拉斯公司生產(chǎn)的連續(xù)旋轉(zhuǎn)伺服電機(jī)2個(gè);搭建LED電路所需的零配件(LED和470歐姆電阻)2套連接伺服電機(jī)到教學(xué)底板
把三位開關(guān)撥至0位切斷教學(xué)底板的電源(圖2?2)。
圖2-3顯示的是教學(xué)板上伺服電機(jī)接線端子。你可以用板上的跳線來(lái)選擇伺服電機(jī)的供電電源是來(lái)自機(jī)器人套件中的電池盒Vin還是來(lái)自外接直流電源Vdd。要移動(dòng)跳線帽,你必須向上把跳線帽從原來(lái)短接的2個(gè)腳上拔下來(lái),然后把跳線帽壓進(jìn)你想短接的2個(gè)腳上去。
如果使用6V電池組,將兩個(gè)伺服電機(jī)接線端子之間的跳線帽接Vin,參照?qǐng)D2-3(左圖)所示。
如果使用7.5V、1000mA的直流電源,將跳線帽接Vdd,參照?qǐng)D2-3(右圖)所示。
本書中所有的示例和說(shuō)明都是用電池組供電。圖2-4是你將要搭建的電路的示意圖,跳線設(shè)定接Vin。
注意:每個(gè)伺服電機(jī)的控制電纜有三根線,其中白色的線用來(lái)傳送電機(jī)的控制信號(hào),紅色用來(lái)接到電源上,而黑色的則是地線。這些線的顏色的定義在伺服電機(jī)出廠時(shí)就已經(jīng)定義好。以后你將會(huì)在工程上看到,許多電氣元件都是通過線的顏色來(lái)標(biāo)記電線所承擔(dān)的功能。
連接完成后,搭建好的系統(tǒng)如圖2?5圖所示(不含LED監(jiān)視電路)。
LED監(jiān)視電路如圖2-6所示。左邊是電氣原如果使用的是套件中的電池組,選擇Vin。如果使用的是AC-DC直流電源,選擇Vdd。理圖,右邊是在面包板上的接線圖。該電路能夠監(jiān)視控制伺服電機(jī)的信號(hào)。為什么呢?
從圖2-4的伺服電機(jī)連線圖可知,兩個(gè)伺服電機(jī)的控制信號(hào)線(白色)分別接到了微控制器的P12和P13口,即由微控制器的P12和P13口輸出的控制信號(hào)控制兩個(gè)伺服電機(jī)的運(yùn)動(dòng);圖2-6所示的LED監(jiān)控指示電路正好也是指示的P12和P13口的信號(hào),所以圖2-6的LED電路可以監(jiān)控伺服電機(jī)的控制信號(hào)。
任務(wù)2:伺服電機(jī)調(diào)零
所謂伺服電機(jī)調(diào)零是指,當(dāng)發(fā)送一個(gè)特定的控制信號(hào)(零點(diǎn)標(biāo)定信號(hào))給伺服電機(jī)時(shí),讓電機(jī)保持靜止的過程。由于伺服電機(jī)在工廠沒有預(yù)先調(diào)整,它們?cè)诮邮盏皆摿泓c(diǎn)標(biāo)定信號(hào)時(shí)可能會(huì)轉(zhuǎn)動(dòng)。因此你要用螺絲刀調(diào)節(jié)伺服電機(jī)模塊內(nèi)的調(diào)節(jié)電阻讓伺服電機(jī)保持靜止。這就是伺服電機(jī)調(diào)零過程。調(diào)整完成之后,你要測(cè)試伺服電機(jī),驗(yàn)證其功能是否正常。測(cè)試程序?qū)l(fā)送控制信號(hào)讓伺服電機(jī)順時(shí)針和逆時(shí)針以不同的速度旋轉(zhuǎn)。
調(diào)零工具
機(jī)器人套件中提供的螺絲起子是唯一在本任務(wù)中需要的額外的工具。
發(fā)送零點(diǎn)標(biāo)定信號(hào)
圖2-7顯示的信號(hào)是發(fā)送到與P12連接的伺服電機(jī)的零點(diǎn)校準(zhǔn)信號(hào),稱為零點(diǎn)標(biāo)定信號(hào)。即如果伺服電機(jī)零點(diǎn)已經(jīng)調(diào)節(jié)好,發(fā)送這個(gè)信號(hào)給電機(jī)就可以讓電機(jī)保持靜止不動(dòng)。這是一個(gè)脈沖時(shí)間間隔為20ms,脈沖寬度為1.5ms的脈沖序列信號(hào)。
要讓機(jī)器人的大腦即BS2微控制器能夠產(chǎn)生圖2-7所示的零點(diǎn)標(biāo)定信號(hào),必須用到幾個(gè)新的PABSIC指令:PULSOUT指令、PAUSE指令,和DO…LOOP循環(huán)語(yǔ)句。
PULSOUT指令用來(lái)讓微控制器產(chǎn)生一個(gè)5V電平脈沖,其指令格式和指令參數(shù)如下:
PULSOUTPin,Duration指令參數(shù)Pin用來(lái)確定是給微控制器的哪個(gè)I/O腳輸出脈沖,而Duration則是用來(lái)確定脈沖的寬度的時(shí)間單位數(shù),其時(shí)間單位是2微秒。因此,要給P12引腳產(chǎn)生圖2-7所示的1.5ms的高電平脈沖信號(hào),需要輸入如下的指令行:
PULSOUT12,750
顯然,如果知道脈沖要持續(xù)多長(zhǎng)時(shí)間,你就可以方便地計(jì)算出PULSOUT指令的參數(shù)Duration的值:Duration變量=脈沖持續(xù)時(shí)間/2微秒。按照此公式,零點(diǎn)標(biāo)定脈沖的寬度變量:
Duration=0.0015s/0.000002s=750。
PULSOUT指令只產(chǎn)生脈沖,要控制脈沖之間的間隔必須用到PBASIC語(yǔ)言的PAUSE指令。
PAUSE指令的使用格式如下:
PAUSEDurationDuration是PAUSE指令的參數(shù),它的值告訴BASICStamp微控制器在執(zhí)行下一條指令之前要等待多久。Duration的單位是千分之一秒,即毫秒。假如你想等待1秒,可以給Duration賦值為1000。
指令表示如下:
PAUSE1000
如果想要等待2秒,表示如下:
PAUSE2000因此,要實(shí)現(xiàn)圖2-7所示的零點(diǎn)標(biāo)定信號(hào),必須在PULSOUT指令后添加如下語(yǔ)句:
PAUSE20
要持續(xù)不斷地產(chǎn)生圖2-7所示的脈沖序列信號(hào),還必須將PULSOUT語(yǔ)句和PASUSE語(yǔ)句放到DO…LOOP循環(huán)中。對(duì)于計(jì)算機(jī)或者微控制器而言,它們作為機(jī)器人的大腦,與人類或者其它生物的大腦相比,具有一個(gè)最大的優(yōu)勢(shì)就是,它們可以毫不怨言地不斷重復(fù)做同一件事情。如果你要你的微控制器不斷重復(fù)同樣的操作,只需將相關(guān)的指令放到指令關(guān)鍵詞DO和LOOP之間。因此,你要讓微控制器不斷產(chǎn)生零點(diǎn)標(biāo)定信號(hào),只需將PULSOUT語(yǔ)句和PAUSE語(yǔ)句放到DO和LOOP之間。最后能夠產(chǎn)生圖2-7零點(diǎn)標(biāo)定信號(hào)的程序模塊如下:
例程:CenterServoP12.bs2
'CenterServoP12.bs2
'Thisprogramsends1.5mspulsestotheservoconnectedto
'P12formanualcentering.
'{$STAMPBS2}
'{$PBASIC2.5}
DEBUG"ProgramRunning!"
DO
PULSOUT12,750
PAUSE20
LOOP
注意:以上程序一旦執(zhí)行,將永遠(yuǎn)執(zhí)行下去,直到你關(guān)斷微控制器的電源為止,下一個(gè)任務(wù)將指導(dǎo)你如何控制重復(fù)執(zhí)行的次數(shù)。
最好每次只對(duì)一只電機(jī)做標(biāo)定,因?yàn)檫@樣的話,在你調(diào)節(jié)電機(jī)時(shí)你就可以聽到(為何用聽到,而不用看到?)什么時(shí)候電機(jī)停止。上面的程序只發(fā)送零點(diǎn)標(biāo)定信號(hào)到P12,下面的步驟將指導(dǎo)你從如何調(diào)整電機(jī),使其保持靜止?fàn)顟B(tài)。在調(diào)節(jié)完連接到P12上的伺服電機(jī)后,用同樣的方法調(diào)節(jié)連接到P13口的電機(jī)。
將教學(xué)底板三位開關(guān)撥到“2”,打開電源。
輸入、保存并運(yùn)行程序CenterServoP12.bs2。
如果電機(jī)沒有進(jìn)行零點(diǎn)標(biāo)定,它的連接喉就會(huì)轉(zhuǎn)動(dòng),而且你也能聽到里面馬達(dá)轉(zhuǎn)動(dòng)的響聲。
如果電機(jī)還沒有進(jìn)行零點(diǎn)標(biāo)定,按照?qǐng)D2-8所示的步驟,用螺絲刀輕輕調(diào)節(jié)伺服電機(jī)上的電位器,直到電機(jī)停止轉(zhuǎn)動(dòng)。(仔細(xì)傾聽電機(jī)的聲音,確信電機(jī)已經(jīng)停止轉(zhuǎn)動(dòng))
驗(yàn)證連接到P12的信號(hào)監(jiān)視電路的LED燈是否發(fā)光,如果發(fā)光,表明零點(diǎn)標(biāo)定脈沖已經(jīng)發(fā)送給連接到P12口上的電機(jī)了。
如果電機(jī)已經(jīng)完成了零點(diǎn)調(diào)節(jié),它不會(huì)轉(zhuǎn)動(dòng)。但是損壞了或有故障的電機(jī)有時(shí)也不轉(zhuǎn)動(dòng)。任務(wù)4將在電機(jī)安裝到機(jī)器人底盤之前排除這種可能。
如果電機(jī)確實(shí)不再轉(zhuǎn)動(dòng),下面你可以自己對(duì)連接到P13的伺服電機(jī)進(jìn)行測(cè)試并做零點(diǎn)標(biāo)定。
該你了對(duì)連接到P13的伺服電機(jī)做零點(diǎn)調(diào)整
利用下面程序?qū)B接到P13的伺服電機(jī)重復(fù)上述過程:
程序示例:CenterServoP13.bs2
'CenterServoP13.bs2
'Thisprogramsends1.5mspulsestotheservoconnectedto
'P13formanualcentering.
'{$STAMPBS2}
'{$PBASIC2.5}
DEBUG"ProgramRunning!"
DO
PULSOUT13,750
PAUSE20
LOOP
注意:如果上述任務(wù)完成后,不再進(jìn)行后面的任務(wù),一定要記得將教學(xué)板的電源斷開。
任務(wù)3:如何保存數(shù)值和計(jì)數(shù)
在任務(wù)2中,你已經(jīng)知道如何使用循環(huán)語(yǔ)句讓微控制器不斷產(chǎn)生零點(diǎn)標(biāo)定信號(hào)。當(dāng)然,你在編寫某個(gè)程序時(shí),肯定并不總是需要機(jī)器人永遠(yuǎn)執(zhí)行同一個(gè)操作或者說(shuō)任務(wù),而只希望它執(zhí)行一段指定的時(shí)間或者執(zhí)行一些固定的次數(shù)。這時(shí),你就要在PBASIC程序中用于到變量。
變量用來(lái)保存數(shù)值。后面的機(jī)器人程序很大程度上都要依賴使用變量。用變量保存數(shù)值的最主要的作用就是程序能用這些變量來(lái)計(jì)數(shù)。一旦你的程序能計(jì)數(shù),你就能控制和跟蹤事件發(fā)生的次數(shù)。
用變量存儲(chǔ)數(shù)值,數(shù)學(xué)運(yùn)算和計(jì)數(shù)變量可以用來(lái)儲(chǔ)存數(shù)值。PBASIC語(yǔ)言在使用一個(gè)變量之前,要先給該變量起一個(gè)名字,并說(shuō)明該變量的大小類型。這叫聲明一個(gè)變量。聲明一個(gè)變量的PBASIC語(yǔ)法如下:
variableNameVARSize
實(shí)際聲明變量時(shí),你用你自己起的名字代替variableName,Size用來(lái)說(shuō)明變量的大小類型,PBASIC程序中可以聲明的變量類型如下:
Bit—存儲(chǔ)0或者1;
Bib—用來(lái)存儲(chǔ)0到15之間的任意數(shù)值;
Byte—用來(lái)存儲(chǔ)0到255之間的任意數(shù)值;
Word—用來(lái)存儲(chǔ)0到65535之間的任意數(shù)值,或者-32768到32767之間的任意數(shù)值。
注意:為何有上述特定的變量類型大小呢?請(qǐng)參考二進(jìn)制的說(shuō)明。
下面的例程包含兩個(gè)“word”大小的變量:
valueVARWord
anotherValueVARWord
在聲明變量之后,你也可以對(duì)它初始化,即給它一個(gè)初始值。
value=500
anotherValue=2000
在“value=500”中,符號(hào)“=”是個(gè)運(yùn)算符。你可以利用其它一些運(yùn)算符和變量進(jìn)行數(shù)學(xué)運(yùn)算。在這里有兩個(gè)乘法運(yùn)算的例子:
value=10*value
anotherValue=2*value
程序示例:VariablesAndSimpleMath.bs2
這個(gè)例程演示了如何對(duì)變量進(jìn)行聲明、初始化和運(yùn)算。
在運(yùn)行程序之前,對(duì)DEBUG指令要顯示的內(nèi)容進(jìn)行預(yù)測(cè)。
輸入、保存并運(yùn)行程序VariablesAndSimpleMath.bs2。
和你的預(yù)測(cè)進(jìn)行對(duì)比,解釋所有的不相同的原因。
'VariablesAndSimpleMath.bs2
'Declarevariablesandusethemtosolveafewarithmeticproblems.
'{$STAMPBS2}
'{$PBASIC2.5}
valueVARWord'Declarevariables
anotherValueVARWord
value=500'Initializevariables
anotherValue=2000
DEBUG?value'Displayvalues
DEBUG?anotherValue
value=10*anotherValue'Performoperations
DEBUG?value'Displayvaluesagain
DEBUG?anotherValue
END
程序VariablesAndSimpleMath.bs2是如何工作的
下面的代碼定義了兩個(gè)字變量:value和anotherValue。
valueVARWord'Declarevariables
anotherValueVARWord
然后,初始化變量,即給剛剛聲明的變量賦上你決定的初始值。這兩條指令執(zhí)行后,value的值是500,anotherValue的值是2000。
value=500'Initializevariables
anotherValue=2000
隨后的DEBUG指令幫助你了解初始化變量后每個(gè)變量存儲(chǔ)的數(shù)值,因?yàn)榻ovalue賦值是500,
anotherValue賦值2000,因此DEBUG指令向調(diào)試終端發(fā)送信息:“value=500”和“anotherValue
=2000”并顯示。
DEBUG?value'Displayvalues
DEBUG?anotherValue
這里又新引入了一個(gè)DEBUG指令的格式說(shuō)明字符“?”,該格式說(shuō)明字符用在一個(gè)變量名之前,使DEBUG終端顯示其名稱,以及存儲(chǔ)在該變量中的數(shù)值,然后回車。這樣對(duì)于查詢一個(gè)變量的內(nèi)容非常方便。
下面三行的疑問是:調(diào)試終端將顯示什么?答案是value的值是anotherValue的10倍,因?yàn)閍notherValue的值是2000,那么value就是20000,而變量anotherValue不變。.
value=10*anotherValue'Performoperations
DEBUG?value'Displayvaluesagain
DEBUG?anotherValue
該你了――用負(fù)數(shù)計(jì)算
如果你想做一些包含負(fù)數(shù)的計(jì)算,你可以使用DEBUG指令的SDEC格式說(shuō)明來(lái)顯示。下面的例子能通過修改程序VariablesAndSimpleMath.bs2得到。
刪除程序VariablesAndSimpleMath.bs2的下面部分:
value=10*anotherValue'Performoperations
DEBUG?value'Displayvaluesagain
改成如下代碼:
value=value-anotherValue'Answer=-1500
DEBUG"value=",SDECvalue,CR'Displayvaluesagain
運(yùn)行更改后的程序并驗(yàn)證value的值是否由500變?yōu)?1500。
計(jì)數(shù)并控制循環(huán)次數(shù)最方便的控制一段代碼執(zhí)行次數(shù)的方法是利用FOR…NEXT循環(huán),語(yǔ)法如下:
FORCounter=StartValueTOEndValue{STEPStepValue}…NEXT省略號(hào)“…”表示你可以在FOR和NEXT之間放一條或多條的程序指令。使用前面的循環(huán)前要確保先聲明一個(gè)變量替代參數(shù)Counter。參數(shù)StartValue和EndValue可以是數(shù)值也可以是變量。語(yǔ)法描述中位于大括號(hào){}之間的東西,表示是可選參數(shù)。換句話說(shuō),沒有它FOR…NEXT仍將工作,但是你可以將之用于一些特殊目的。
你沒有必要一定要將變量命名為“counter”,例如,你可以用“myCounter”
myCounterVARWord
下面是一個(gè)用myCounter來(lái)計(jì)數(shù)的FOR…NEXT循環(huán)例程。每執(zhí)行一次循環(huán),它會(huì)顯示
myCounter的值。
例程:CountToTen.bs2
輸入、保存并運(yùn)行程序CountToTen.bs2。
'CountToTen.bs2
'UseavariableinaFOR...NEXTloop.
'{$STAMPBS2}
'{$PBASIC2.5}
myCounterVARWord
FORmyCounter=1TO10
DEBUG?myCounter
PAUSE500
NEXT
DEBUGCR,"Alldone!"
END
該你了――不同的初始值和終值以及計(jì)數(shù)步長(zhǎng)
你可以給變量StartValue和EndValue賦不同的值
修改FOR…NEXT循環(huán)如下:
FORmyCounter=21TO9
DEBUG?myCounter
PAUSE500
NEXT
運(yùn)行修改后的程序。BASICStamp往下計(jì)數(shù)代替了往上計(jì)數(shù),你注意到了嗎?只要StartValue的值大于EndValue,程序就會(huì)這樣運(yùn)行。
還記得可選參數(shù){STEPStepValue}嗎?你可以用它來(lái)使myCounter以不同步長(zhǎng)計(jì)數(shù),而不是按9,10,11…這樣每次增1來(lái)計(jì)數(shù)。例如,你可以讓它每次增加2(9,11,13…)或增加5(10,15,20…)或任何你給出的StepValue,遞增或遞減都可以。下面的例子是以3為步長(zhǎng)向下計(jì)數(shù)。
增加STEP3到FOR…NEXT循環(huán),如下所示:
FORmyCounter=21TO9STEP3
DEBUG?myCounter
PAUSE500
NEXT
運(yùn)行更改后的程序,驗(yàn)證是否以3為步長(zhǎng)遞減。
任務(wù)4:測(cè)試伺服電機(jī)
在裝配機(jī)器人之前還有最后一件事要做,那就是測(cè)試伺服電機(jī)。在本任務(wù)中,你將運(yùn)行程序,使電機(jī)以不同速度和方向旋轉(zhuǎn)。通過測(cè)試,可以確保在裝配之前電機(jī)工作是正常的。
這是一個(gè)子系統(tǒng)測(cè)試的例子。對(duì)子系統(tǒng)進(jìn)行測(cè)試是開發(fā)過程的好習(xí)慣,它不僅僅是讓你拆開機(jī)器人,而是在組裝之前盡可能修補(bǔ)可能出現(xiàn)的一些問題。
所謂子系統(tǒng)測(cè)試是在將一些分立的部件組裝成一個(gè)更大的設(shè)備之前先對(duì)各分立的部件進(jìn)行測(cè)試的過程。在進(jìn)行機(jī)器人競(jìng)賽時(shí),這對(duì)于你贏得比賽很有幫助。對(duì)于工程師而言,無(wú)論是開發(fā)玩具、汽車和視頻游戲,還是開發(fā)航天飛機(jī)和火星機(jī)器人,這都是一個(gè)最為基本的技能。特別是在非常復(fù)雜的設(shè)備中,如果沒有事先對(duì)子系統(tǒng)進(jìn)行測(cè)試,要找出存在的問題幾乎不可能。例如,在太空項(xiàng)目中,如果要拆開一個(gè)原形設(shè)備以進(jìn)行維修,將耗費(fèi)數(shù)百萬(wàn)美元。因此,在這樣的項(xiàng)目中,必須對(duì)所有子系統(tǒng)進(jìn)行徹底而嚴(yán)格的測(cè)試。
脈寬控制電機(jī)的速度和方向
回憶前面的電機(jī)零點(diǎn)標(biāo)定,脈寬為1.5ms的控制信號(hào)使電機(jī)保持不動(dòng),這是通過給PULSOUT指令參數(shù)Duration賦值為750來(lái)實(shí)現(xiàn)的。那么如果控制信號(hào)的脈沖寬度(簡(jiǎn)稱脈寬)不是1.5ms,結(jié)果會(huì)是怎樣呢?
現(xiàn)在編程發(fā)送了一系列1.3ms的脈沖給伺服電機(jī),你仔細(xì)研究一下這一系列脈沖,看它怎樣控制電機(jī)。圖2-9所示是連續(xù)旋轉(zhuǎn)電機(jī)將以全速順時(shí)針旋轉(zhuǎn),全速的范圍大約是每分鐘50到60轉(zhuǎn)(RPM),即約每秒種轉(zhuǎn)一圈。
你可以用下面的程序
ServoP13Clockwise.bs2將這些脈沖
序列發(fā)送給端口P13。
例程:ServoP13Clockwise.bs2
輸入、保存并運(yùn)行程序ServoP13Clockwise.bs2。
驗(yàn)證電機(jī)的輸出軸是否順時(shí)針旋轉(zhuǎn),并且速度在50到60RPM之間。
'ServoP13Clockwise.bs2
'RuntheservoconnectedtoP13atfullspeedclockwise.
'{$STAMPBS2}
'{$PBASIC2.5}
DEBUG"ProgramRunning!"
DO
PULSOUT13,650
PAUSE20
LOOP
注意:1.3ms的脈沖需要PULSOUT指令的參數(shù)Duration的值為650,是一個(gè)小于750的數(shù)。所有的脈寬都小于1.5ms,即PULSOUT指令的Duration參數(shù)要小于750,才能使電機(jī)順時(shí)針旋轉(zhuǎn)。
當(dāng)然,在進(jìn)行上述驗(yàn)證時(shí),一定要將伺服電機(jī)連接到控制端口上,并接上電源。
例程:ServoP12Clockwise.bs2將PULSOUT指令的參數(shù)PIN的值由13改為12,就可以使連接到P12的電機(jī)以全速順時(shí)針旋轉(zhuǎn)。
把程序ServoP13Clockwise.bs2另存為ServoP12Clockwise.bs2.
把PULSOUT指令的參數(shù)PIN的值由13改為12,更新注釋。
運(yùn)行程序驗(yàn)證連接P12的電機(jī)是否順時(shí)針旋轉(zhuǎn),并且速度在50到60RPM之間。
'ServoP12Clockwise.bs2
'RuntheservoconnectedtoP12atfullspeedclockwise.
'{$STAMPBS2}
'{$PBASIC2.5}
DEBUG"ProgramRunning!"
DO
PULSOUT12,650
PAUSE20
LOOP
例程:ServoP12Counterclockwise.bs2
你可能已經(jīng)猜到將PULSOUT指令的參數(shù)Duration設(shè)置為大于750的數(shù)
會(huì)使伺服電機(jī)逆時(shí)針旋轉(zhuǎn)。
Duration的值為850可以發(fā)出1.7ms寬度的脈沖,如圖2-10所示,這將使伺服電機(jī)全速逆時(shí)針旋轉(zhuǎn)。
將程序ServoP12Clockwise.bs2另存為ServoP12Counterclockwise.bs2把PULSOUT指令的參數(shù)Duration改為850。
運(yùn)行程序,驗(yàn)證連接P12的電機(jī)是否逆時(shí)針旋轉(zhuǎn),并且速度在50到60RPM之間。
'ServoP12Counterclockwise.bs2
'RuntheservoconnectedtoP12atfullspeedcounterclockwise.
'{$STAMPBS2}
'{$PBASIC2.5}
DEBUG"ProgramRunning!"
DO
PULSOUT12,850
PAUSE20
LOOP
該你了
修改上述例程中PULSOUT指令的參數(shù)PIN,使連接P13的電機(jī)逆時(shí)針轉(zhuǎn)動(dòng)
例程:ServosP13CcwP12Cw.bs2
你可以使用兩個(gè)PULSOUT指令使兩個(gè)伺服電機(jī)同時(shí)旋轉(zhuǎn),你也可以使它們向相互相反的方向旋轉(zhuǎn)。
輸入、保存并運(yùn)行程序下面的程序ServosP13CcwP12Cw.bs2。
運(yùn)行程序,驗(yàn)證連接到P13的電機(jī)是否全速逆時(shí)針旋轉(zhuǎn),而連接到P12的電機(jī)全速順時(shí)針旋轉(zhuǎn)。
'ServosP13CcwP12Cw.bs2
'RuntheservoconnectedtoP13atfullspeedcounterclockwise
'andtheservoconnectedtoP12atfullspeedclockwise.
'{$STAMPBS2}
'{$PBASIC2.5}
DEBUG"ProgramRunning!"
DO
PULSOUT13,850
PULSOUT12,650
PAUSE20
LOOP
下面的理解非常重要。想一想:當(dāng)電機(jī)安裝在機(jī)器人底盤的兩側(cè),一個(gè)順時(shí)針旋轉(zhuǎn)而另一個(gè)逆時(shí)針旋轉(zhuǎn),將使機(jī)器人沿直線運(yùn)動(dòng)。聽起來(lái)是否有些古怪?如果你無(wú)法理解,試試這樣:
l?把兩個(gè)電機(jī)背靠背放在一起重新運(yùn)行程序。
該你了――調(diào)整速度和方向
兩個(gè)電機(jī)全速轉(zhuǎn)動(dòng)時(shí),兩個(gè)PULSOUT指令的參數(shù)Duration有四種不同的組合,在后面的章節(jié)中編寫機(jī)器人運(yùn)動(dòng)的程序時(shí),這些組合經(jīng)常會(huì)被用到。程序ServosP13CcwP12Cw.bs2發(fā)送了這些組合中的一種,850給P13,650給P12。通過測(cè)試不同的運(yùn)動(dòng)組合,并填寫表2-1的運(yùn)動(dòng)描述欄,你將慢慢熟悉這些組合并為你自己建立一個(gè)參考。當(dāng)機(jī)器人安裝完成后,嘗試一下這些運(yùn)動(dòng)組合,填寫下表的運(yùn)動(dòng)行為欄,你就會(huì)看到每種數(shù)據(jù)組合使它怎樣運(yùn)動(dòng)。
l?試試下面的PULSOUTDuration組合,將結(jié)果填寫到描述列。
FOR…NEXT循環(huán)控制電機(jī)的運(yùn)行時(shí)間
到目前為止,你已經(jīng)完全理解了脈沖寬度控制連續(xù)旋轉(zhuǎn)電機(jī)速度和方向的原理??刂齐姍C(jī)速度和方向的方法是非常簡(jiǎn)單的,當(dāng)然也有一個(gè)簡(jiǎn)單的方法來(lái)控制電機(jī)運(yùn)行的時(shí)間,那就是用
FOR…NEXT循環(huán)。
下面是FOR…NEXT循環(huán)的例子,它會(huì)使電機(jī)運(yùn)行幾秒鐘。
FORCOUNTER=1TO100
PULSOUT13,850
PAUSE20
NEXT
你計(jì)算一下這段代碼能使電機(jī)轉(zhuǎn)動(dòng)的確切時(shí)間。每執(zhí)行循環(huán)一次,PULSOUT指令將持續(xù)1.7ms,PAUSE指令持續(xù)20ms,執(zhí)行一次循環(huán)大概額外需要1.3ms,那么FOR…NEXT循環(huán)整體執(zhí)行一次的時(shí)間是:1.7ms+20ms+1.3ms=23.0ms,本循環(huán)執(zhí)行100次,即就是23.0ms乘以100,時(shí)間=100*23.0毫秒=100*0.023秒=2.3秒。
假如你要讓電機(jī)運(yùn)行4.6秒,F(xiàn)OR…NEXT循環(huán)必須執(zhí)行上面兩倍的次數(shù)。FORcounter=1TO200
PULSOUT13,850
PAUSE20
NEXT
例程:ControlServoRunTimes.bs2
輸入、保存并運(yùn)行程序ControlServoRunTimes.bs2.
驗(yàn)證是否與P13連接的電機(jī)首先逆時(shí)針旋轉(zhuǎn)2.3秒,然后與P12連接的電機(jī)旋轉(zhuǎn)4.6秒。
'ControlServoRunTimes.bs2
'RuntheP13servoatfullspeedcounterclockwisefor2.3s,then
'runtheP12servofortwiceaslong.
'{$STAMPBS2}
'{$PBASIC2.5}
DEBUG"ProgramRunning!"
counterVARByte
FORcounter=1TO100
PULSOUT13,850
PAUSE20
NEXT
FORcounter=1TO200
PULSOUT12,850
PAUSE20
NEXT
END
假如你想讓兩個(gè)電機(jī)同時(shí)都運(yùn)行,給與P13連接的電機(jī)發(fā)出850的脈寬,給與P12連接的電機(jī)發(fā)
出650的脈寬,現(xiàn)在執(zhí)行一次循環(huán)要用的時(shí)間是:
1.7ms–與P13連接的電機(jī)
1.3ms–與P12連接的電機(jī)
20ms–中斷持續(xù)時(shí)間
1.6ms–代碼執(zhí)行時(shí)間
---------------------------------------
一共是24.6ms
如果你想使電機(jī)運(yùn)行一段確定的時(shí)間,可以計(jì)算出需要循環(huán)的次數(shù)(或者說(shuō)需要發(fā)出的脈沖數(shù)
量)如下:
脈沖數(shù)量=時(shí)間/0.0246秒=時(shí)間/0.0246
假如你想讓電機(jī)運(yùn)行3秒,計(jì)算如下:
脈沖數(shù)量=3/0.0246=122
現(xiàn)在,你可以將FOR…NEXT循環(huán)中EndValue的值設(shè)為122,程序如下:
FORcounter=1TO122
PULSOUT13,850
PULSOUT12,650
PAUSE20
NEXT
例程:BothServosThreeSeconds.bs2
下面的程序是讓兩個(gè)電機(jī)先向一個(gè)方向旋轉(zhuǎn)3秒,然后反向旋轉(zhuǎn)3秒鐘的例子。
l?輸入、保存并運(yùn)行程序BothServosThreeSeconds.bs2。
'BothServosThreeSeconds.bs2
'Runbothservosinoppositedirectionsforthreeseconds,thenreverse
'thedirectionofbothservosandrunanotherthreeseconds.
'{$STAMPBS2}
'{$PBASIC2.5}
DEBUG"ProgramRunning!"
counterVARByte
FORcounter=1TO122
PULSOUT13,850
PULSOUT12,650
PAUSE20
NEXT
FORcounter=1TO122
PULSOUT13,650
PULSOUT12,850
PAUSE20
NEXT
END
驗(yàn)證一下每個(gè)電機(jī)是否沿一個(gè)方向運(yùn)行3秒然后反方向運(yùn)行3秒。你是否注意到當(dāng)電機(jī)同時(shí)反向的時(shí)候,它們總是保持以相反的方向運(yùn)行?這將有什么作用呢?
該你了–預(yù)計(jì)電機(jī)運(yùn)行時(shí)間,設(shè)定一個(gè)你想讓電機(jī)運(yùn)行的時(shí)間。用0.024除時(shí)間所得到的結(jié)果就是你需要執(zhí)行的循環(huán)次數(shù)。更改程序BothServosThreeSeconds.bs2使兩個(gè)電機(jī)都運(yùn)行你所設(shè)定的時(shí)間。比較預(yù)計(jì)的時(shí)間與實(shí)際運(yùn)行的時(shí)間。記住當(dāng)做完實(shí)驗(yàn)后斷開系統(tǒng)的電源。工程素質(zhì)和技能歸納帕拉斯伺服電機(jī)的接線圖和接線;伺服電機(jī)控制信號(hào)的監(jiān)控電路和電路搭建;伺服電機(jī)的零點(diǎn)校準(zhǔn)和PULSOUT、PAUSE和循環(huán)的使用;PABSIC變量的使用和循環(huán)次數(shù)的控制;電機(jī)測(cè)試和子系統(tǒng)測(cè)試;兩個(gè)電機(jī)的同時(shí)運(yùn)動(dòng)以及運(yùn)動(dòng)時(shí)間的控制等。
標(biāo)簽:
中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(m.u63ivq3.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。
產(chǎn)品新聞
更多>以簡(jiǎn)驅(qū)繁,精準(zhǔn)智控 | 維智S1系列新一代...
2024-11-01
新品發(fā)布:CD300系列總線型伺服驅(qū)動(dòng)器
2024-10-31
2024-10-31
2024-10-31
新勢(shì)能 新期待|維智B1L直線伺服驅(qū)動(dòng)器
2024-10-31
纖薄之間,化繁為簡(jiǎn)|合信全新simple系...
2024-10-29
推薦專題
更多>