技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動(dòng)網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 機(jī)器人編程之機(jī)器人的伺服電機(jī)

機(jī)器人編程之機(jī)器人的伺服電機(jī)

時(shí)間:2018-08-01 11:07:26來源:網(wǎng)絡(luò)轉(zhuǎn)載

導(dǎo)語:?機(jī)器人的伺服電機(jī)是用來將機(jī)器人大腦發(fā)出的運(yùn)動(dòng)指令轉(zhuǎn)換為運(yùn)動(dòng)動(dòng)作的部件,相當(dāng)于人的肌肉的作用。

機(jī)器人的伺服電機(jī)是用來將機(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電路來監(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ī)接線端子。你可以用板上的跳線來選擇伺服電機(jī)的供電電源是來自機(jī)器人套件中的電池盒Vin還是來自外接直流電源Vdd。要移動(dòng)跳線帽,你必須向上把跳線帽從原來短接的2個(gè)腳上拔下來,然后把跳線帽壓進(jìn)你想短接的2個(gè)腳上去。

如果使用6V電池組,將兩個(gè)伺服電機(jī)接線端子之間的跳線帽接Vin,參照?qǐng)D2-3(左圖)所示。

如果使用7.5V、1000mA的直流電源,將跳線帽接Vdd,參照?qǐng)D2-3(右圖)所示。

本書中所有的示例和說明都是用電池組供電。圖2-4是你將要搭建的電路的示意圖,跳線設(shè)定接Vin。

注意:每個(gè)伺服電機(jī)的控制電纜有三根線,其中白色的線用來傳送電機(jī)的控制信號(hào),紅色用來接到電源上,而黑色的則是地線。這些線的顏色的定義在伺服電機(jī)出廠時(shí)就已經(jīng)定義好。以后你將會(huì)在工程上看到,許多電氣元件都是通過線的顏色來標(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)語句。

PULSOUT指令用來讓微控制器產(chǎn)生一個(gè)5V電平脈沖,其指令格式和指令參數(shù)如下:

PULSOUTPin,Duration指令參數(shù)Pin用來確定是給微控制器的哪個(gè)I/O腳輸出脈沖,而Duration則是用來確定脈沖的寬度的時(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語言的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指令后添加如下語句:

PAUSE20

要持續(xù)不斷地產(chǎn)生圖2-7所示的脈沖序列信號(hào),還必須將PULSOUT語句和PASUSE語句放到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語句和PAUSE語句放到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)語句讓微控制器不斷產(chǎn)生零點(diǎn)標(biāo)定信號(hào)。當(dāng)然,你在編寫某個(gè)程序時(shí),肯定并不總是需要機(jī)器人永遠(yuǎn)執(zhí)行同一個(gè)操作或者說任務(wù),而只希望它執(zhí)行一段指定的時(shí)間或者執(zhí)行一些固定的次數(shù)。這時(shí),你就要在PBASIC程序中用于到變量。

變量用來保存數(shù)值。后面的機(jī)器人程序很大程度上都要依賴使用變量。用變量保存數(shù)值的最主要的作用就是程序能用這些變量來計(jì)數(shù)。一旦你的程序能計(jì)數(shù),你就能控制和跟蹤事件發(fā)生的次數(shù)。

用變量存儲(chǔ)數(shù)值,數(shù)學(xué)運(yùn)算和計(jì)數(shù)變量可以用來儲(chǔ)存數(shù)值。PBASIC語言在使用一個(gè)變量之前,要先給該變量起一個(gè)名字,并說明該變量的大小類型。這叫聲明一個(gè)變量。聲明一個(gè)變量的PBASIC語法如下:

variableNameVARSize

實(shí)際聲明變量時(shí),你用你自己起的名字代替variableName,Size用來說明變量的大小類型,PBASIC程序中可以聲明的變量類型如下:

Bit—存儲(chǔ)0或者1;

Bib—用來存儲(chǔ)0到15之間的任意數(shù)值;

Byte—用來存儲(chǔ)0到255之間的任意數(shù)值;

Word—用來存儲(chǔ)0到65535之間的任意數(shù)值,或者-32768到32767之間的任意數(shù)值。

注意:為何有上述特定的變量類型大小呢?請(qǐng)參考二進(jìn)制的說明。

下面的例程包含兩個(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指令的格式說明字符“?”,該格式說明字符用在一個(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格式說明來顯示。下面的例子能通過修改程序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),語法如下:

FORCounter=StartValueTOEndValue{STEPStepValue}…NEXT省略號(hào)“…”表示你可以在FOR和NEXT之間放一條或多條的程序指令。使用前面的循環(huán)前要確保先聲明一個(gè)變量替代參數(shù)Counter。參數(shù)StartValue和EndValue可以是數(shù)值也可以是變量。語法描述中位于大括號(hào){}之間的東西,表示是可選參數(shù)。換句話說,沒有它FOR…NEXT仍將工作,但是你可以將之用于一些特殊目的。

你沒有必要一定要將變量命名為“counter”,例如,你可以用“myCounter”

myCounterVARWord

下面是一個(gè)用myCounter來計(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}嗎?你可以用它來使myCounter以不同步長(zhǎng)計(jì)數(shù),而不是按9,10,11…這樣每次增1來計(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ì)于工程師而言,無論是開發(fā)玩具、汽車和視頻游戲,還是開發(fā)航天飛機(jī)和火星機(jī)器人,這都是一個(gè)最為基本的技能。特別是在非常復(fù)雜的設(shè)備中,如果沒有事先對(duì)子系統(tǒng)進(jìn)行測(cè)試,要找出存在的問題幾乎不可能。例如,在太空項(xiàng)目中,如果要拆開一個(gè)原形設(shè)備以進(jìn)行維修,將耗費(fèi)數(shù)百萬美元。因此,在這樣的項(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來實(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?把兩個(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)單的方法來控制電機(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ù)(或者說需要發(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)簽:

點(diǎn)贊

分享到:

上一篇:一文了解電機(jī)五類工作系統(tǒng),...

下一篇:伺服電機(jī)中的編碼器怎么安裝...

中國傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動(dòng)網(wǎng)(www.treenowplaneincome.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來源“中國傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡(jiǎn)介|會(huì)員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

中國傳動(dòng)網(wǎng)-工業(yè)自動(dòng)化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺(tái)

網(wǎng)站客服服務(wù)咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號(hào) | 營業(yè)執(zhí)照證書 | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號(hào)