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