python如何控制伺服驱动_用 pyboard 控制 hobby 伺服电机
在 pyboard 板上有4個用于連接業(yè)余hobby伺服電機(jī)的專用連接點(diǎn)。這些電機(jī)有3條線:地線、電源線和信號線。您可在板上將三條線連接在右下角,信號引腳在最右邊。引腳X1、X2、X3和X4是4個專用伺服信號引腳。
這張圖片中呈現(xiàn)了將伺服電機(jī)用公對公杜邦線連接到pyboard。
伺服上的地線通常是深色的,可能為黑色或深棕色。電源線最有可能是紅色。
伺服的電源引腳(標(biāo)為VIN)直接連接到pyboard的輸入電源。當(dāng)通過USB供電時,VIN由5V的USB電源線通過二極管供電。 連接到USB,pyboard可以驅(qū)動至少4個小到中型的伺服電機(jī)。
若您使用電池為pyboard供電并運(yùn)行伺服電機(jī),請確保電壓不大于6V,6V為大多數(shù)伺服電機(jī)可承受的最大電壓。(有些電機(jī)最高僅支持4.8V,所以請仔細(xì)查看您所使用的電機(jī)類型)。
創(chuàng)建Servo對象
將一個伺服插入位置1(帶有引腳X1的位置)并使用以下代碼創(chuàng)建一個伺服對象:
>>> servo1 = pyb.Servo(1)
使用?angle?方法更改伺服的角度:
>>> servo1.angle(45)
>>> servo1.angle(-60)
此處的角度以度為單位,且其值介于-90至90間,該值取決于電機(jī)。調(diào)用無參數(shù)的?angle?將返回當(dāng)前角度:
>>> servo1.angle()
-60
注意:對于某些角度而言,返回的角度并非與您所設(shè)定的角度相同,這是設(shè)置脈寬的舍入誤差造成的。
您可將第二個參數(shù)傳遞給?angle?方法,此參數(shù)指定到達(dá)預(yù)設(shè)角度所花費(fèi)的時間(以毫秒為單位)。 例如,花費(fèi)1秒(1000毫秒)從當(dāng)前位置到達(dá)50度,使用:
>>> servo1.angle(50, 1000)
此指令將直接返回,而伺服將繼續(xù)移動到預(yù)設(shè)角度,并在到達(dá)該角度后停止。 您可將此特性用作速度控制,或同步2個或更多的伺服電機(jī)。 若我們還有另外的伺服電機(jī) (servo2 = pyb.Servo(2)) ,則我們可 :
>>> servo1.angle(-45, 2000); servo2.angle(60, 2000)
此代碼將同時移動伺服,使二者在耗時2秒后到達(dá)各自的最終角度。
注意:上述兩表達(dá)式中的使用分號使在您點(diǎn)擊Enter鍵后可一個接一個地執(zhí)行。在腳本中您無需使用分號,您只需在一行結(jié)束后在下一行寫入。
連續(xù)旋轉(zhuǎn)伺服
目前我們已在使用移動到特定角度后停留在該角度的標(biāo)準(zhǔn)伺服。這些伺服電機(jī)可用于創(chuàng)建機(jī)器人的關(guān)節(jié), 或諸如平面-傾斜機(jī)制等。在其內(nèi)部,電機(jī)有一個可變電阻器(電位計), 其作用為測量當(dāng)前角度和向電機(jī)施加與其到達(dá)預(yù)設(shè)角度的距離成正比的功率。 此預(yù)設(shè)角度由在伺服信號線上的高脈沖的寬度設(shè)定。1500微秒的脈寬對應(yīng)中心位置(0度)。 脈沖以50Hz頻率發(fā)送,即每秒50脈沖。
您也可獲取順/逆時針旋轉(zhuǎn)的連續(xù)旋轉(zhuǎn)伺服電機(jī)。旋轉(zhuǎn)的角度和速度由信號線上的脈寬設(shè)定。 1500微秒的脈寬對應(yīng)停止的電機(jī)。大于或小于此角度的脈寬即代表以給定速度順/逆時針旋轉(zhuǎn)。
在pyboard上,連續(xù)旋轉(zhuǎn)電機(jī)的Servo對象與前無異。實(shí)際上,您可使用?angle?來設(shè)置速度。 但是,為方便大家理解,此處我們提供另外一種設(shè)置速度的方法,稱為?speed?:
>>> servo1.speed(30)
speed?與?angle?功能相同:您可獲取并設(shè)置速度,并設(shè)置到達(dá)最終速度所需時間。:
>>> servo1.speed()
30
>>> servo1.speed(-20)
>>> servo1.speed(0, 2000)
上述的最后一條指令將電機(jī)設(shè)置為停止,但需耗時2秒使其停止。這實(shí)際是對連續(xù)伺服加速度的控制。
通常認(rèn)為,伺服速度100(或-100)即為最大速度,但實(shí)際上您可取比其略大的數(shù)值,具體情況取決于特定電機(jī)。
angle?和?speed?方法的唯一區(qū)別(除名稱外)在于輸入數(shù)字(角度或速度)轉(zhuǎn)換為脈寬。
校準(zhǔn)
從角度/速度到脈寬的轉(zhuǎn)換是由伺服對象使用其校準(zhǔn)值完成的。使用以下代碼獲取當(dāng)前校準(zhǔn):
>>> servo1.calibration()
(640, 2420, 1500, 2470, 2200)
此處有5個數(shù)字,其意為:
最小脈寬;伺服接受的最小脈寬。
最大脈寬;伺服接受的最大脈寬。
中心脈寬;使伺服處于0度或0速度的脈寬。
與90度對應(yīng)的脈寬。這就設(shè)置了角度的 angle 方法到脈寬的轉(zhuǎn)換。
與速度100相對應(yīng)的脈寬。這就設(shè)置了速度的 speed 方法與脈寬的轉(zhuǎn)換。
您可使用以下代碼重新校正伺服(更改其默認(rèn)值):
>>> servo1.calibration(700, 2400, 1510, 2500, 2000)
當(dāng)然,您可根據(jù)特定伺服電機(jī)更改上述值。
總結(jié)
以上是生活随笔為你收集整理的python如何控制伺服驱动_用 pyboard 控制 hobby 伺服电机的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 九种查找算法-哈希查找
- 下一篇: scroll-view 自制横向滚动条