摘要:本文介紹舵機(jī)的使用方法
在前面介紹TT馬達(dá)的時(shí)候,提到過舵機(jī)。舵機(jī)是一種精密控制類電動(dòng)機(jī),也是電動(dòng)機(jī)的一種,它的主要作用是旋轉(zhuǎn)到某一指定位置,在機(jī)器人領(lǐng)域使用得相當(dāng)?shù)膹V泛,用來實(shí)現(xiàn)各種機(jī)械臂和機(jī)器人關(guān)節(jié)的運(yùn)動(dòng)。
下面就來了解一下舵機(jī)的工作原理。在前面知道TT馬達(dá)是由電動(dòng)機(jī)和減速箱組成,而舵機(jī)為了精確控制電機(jī)的旋轉(zhuǎn)角度,因此,在普通馬達(dá)和減速箱的基礎(chǔ)上增加了用于測量角度的角度傳感器以及控制電機(jī)旋轉(zhuǎn)的控制電路。這樣,控制電路在電機(jī)旋轉(zhuǎn)的過程中,通過角度傳感器來得到當(dāng)前電機(jī)已經(jīng)旋轉(zhuǎn)的角度,從而保證其可以在指定的位置停止。這個(gè)角度傳感器最簡單的就是使用一個(gè)可調(diào)電位器來實(shí)現(xiàn),通過接入電路的電阻來計(jì)算出電位器滑片所在的位置。舵機(jī)的原理圖如下所示:
下圖為目前在玩具、航模中最經(jīng)常使用的小型舵機(jī)。不同的舵機(jī)之間的差別主要體現(xiàn)在齒輪材質(zhì)、旋轉(zhuǎn)扭矩和旋轉(zhuǎn)角度的不同。
舵機(jī)齒輪的材質(zhì)通常有塑料和金屬兩種,很明顯,金屬的舵機(jī)齒輪不易磨損、精準(zhǔn)度更高一些,成本也略高,缺點(diǎn)是重量略重。舵機(jī)的旋轉(zhuǎn)角度是指它能旋轉(zhuǎn)的最大范圍,通常有90度版,180度版和360度版,其中無限位器的360度版舵機(jī)是可以連續(xù)旋轉(zhuǎn)的。
下面來了解一下是如何控制舵機(jī)工作的??刂贫鏅C(jī)旋轉(zhuǎn)需要一個(gè)20毫秒的脈沖信號,該信號的高電平部分決定著舵機(jī)旋轉(zhuǎn)到哪個(gè)位置。對于180度的舵機(jī)而言,要求該脈沖信號的高電平的時(shí)長為0.5ms~2.5ms之間,對應(yīng)舵機(jī)度盤的角度為0~180度,兩者之間呈線性關(guān)系。也就是說,當(dāng)舵機(jī)收到某個(gè)范圍內(nèi)的脈沖信號后,會(huì)依據(jù)該脈沖的寬度,轉(zhuǎn)到相應(yīng)的位置。直到下一個(gè)控制脈沖來臨之前,該舵機(jī)的位置均不會(huì)發(fā)生改變。
下面,將可旋轉(zhuǎn)范圍的中間位置設(shè)置為0度,那么180度舵機(jī)的旋轉(zhuǎn)范圍就是正負(fù)90度,輸入的控制脈寬與舵機(jī)的角度之間的關(guān)系如下圖所示:
對于360度舵機(jī)而言,通常是無限位器的,那么360度舵機(jī)是可以連續(xù)旋轉(zhuǎn)的,因此不能用一個(gè)脈沖來指定360度舵機(jī)運(yùn)動(dòng)到指定的位置。此時(shí)的舵機(jī)更像是一個(gè)具有閉環(huán)控制,速度穩(wěn)定的減速電機(jī)。360度舵機(jī)的控制也是通過20ms的脈沖來進(jìn)行控制(高電平寬度不大于2.5ms),只不過脈沖寬度的含義不同。當(dāng)脈沖高電平寬度在1.5ms附近時(shí),360度舵機(jī)停止運(yùn)動(dòng),當(dāng)脈沖高電平寬度大于1.5ms時(shí),舵機(jī)為正轉(zhuǎn)狀態(tài),高電平時(shí)長越長,電機(jī)轉(zhuǎn)速越快。當(dāng)脈沖高電平時(shí)長小于1.5ms時(shí),舵機(jī)為反向轉(zhuǎn)動(dòng)狀態(tài),高電平時(shí)間越短,電機(jī)轉(zhuǎn)速越快。
下面來看一個(gè)常見的SG90型號的舵機(jī)的電器參數(shù):
尺寸: |
21.5mmX11.8mmX22.7mm |
重量: |
9克 |
無負(fù)載速度: |
0.12秒/60度(4.8V) 0.002s/度 |
堵轉(zhuǎn)扭矩: |
1.2-1.4公斤/厘米(4.8V) |
使用溫度: |
-30~~+60攝氏度 |
死區(qū)設(shè)定: |
7us (7MHZ) |
工作電壓: |
4.8V-6V |
轉(zhuǎn)動(dòng)角度: |
180度(左90,右90) |
結(jié)構(gòu)材料: |
塑料齒 |
位置等級: |
1024級 |
脈沖控制精度: |
2us |
舵機(jī)模塊有三個(gè)引腳,分別是電源+、電源GND和信號線。如下圖所示:
線纜的顏色也可能是:紅色(正極)、棕色(地線)和橙色(信號線),不同生產(chǎn)廠家使用線纜的顏色不同。
下面就把舵機(jī)接到ESP32芯片的開發(fā)板上,用程序來驅(qū)動(dòng)舵機(jī)轉(zhuǎn)起來。舵機(jī)的供電可以使用ESP開發(fā)板上的5V輸出,信號線我接到了P23引腳。打開Mixly,選擇“Audrino ESP32”,舵機(jī)功能位于Mixly的“執(zhí)行器”功能模塊組中。第一個(gè)程序來實(shí)現(xiàn)將舵機(jī)轉(zhuǎn)動(dòng)到30度的位置。設(shè)置好后如下圖所示:
接下來就可以上傳運(yùn)行了,看看是不是可以將舵機(jī)控制到指定位置了?注意,設(shè)置一個(gè)舵機(jī)動(dòng)作之后,一定要留一段時(shí)間的延時(shí),讓舵機(jī)有一個(gè)動(dòng)作的時(shí)間。如果,舵機(jī)連續(xù)收到指令而來不及動(dòng)作,就有可能在原地?cái)[動(dòng),或者不動(dòng)。
下面來實(shí)現(xiàn)一個(gè)更復(fù)雜的功能,讓舵機(jī)在0~180度的范圍內(nèi)連續(xù)擺動(dòng)。這樣,如果將來把超聲波測距傳感器裝到舵機(jī)上,就可以實(shí)現(xiàn)在180度的范圍內(nèi),連續(xù)測量周邊障礙物的距離,為實(shí)現(xiàn)避障小車打下了基礎(chǔ)。
首先聲明兩個(gè)全局變量,一個(gè)是degree,表示需要舵機(jī)轉(zhuǎn)到哪個(gè)角度,初始為90度,也就是在中間位置。另一個(gè)是step,表示每次舵機(jī)轉(zhuǎn)動(dòng)幾度,默認(rèn)step為5。
然后是編寫初始化功能,初始化功能的任務(wù)就是讓舵機(jī)恢復(fù)到初始90度的位置。如下圖所示:
接下來就是主功能函數(shù)了,它要實(shí)現(xiàn)的功能是讓舵機(jī)在0~180度內(nèi)一次旋轉(zhuǎn),主要需要完成以下工作。
- 將舵機(jī)轉(zhuǎn)到degree指定的位置。
- 計(jì)算下一步應(yīng)該轉(zhuǎn)到的位置,令degree編程degree+step。
- 判斷是不是馬上到一端終點(diǎn)了,如果到終點(diǎn)了,就讓step變成其相反數(shù),這樣degree就會(huì)朝著相反的方向變動(dòng)了。
實(shí)現(xiàn)后的程序如下所示:
這樣,就可以實(shí)現(xiàn)舵機(jī)以5度為步長,在0~180度內(nèi)來回旋轉(zhuǎn)了。最后看一下Mixly生成的源代碼。
#include <ESP32_Servo.h> volatile int degree; volatile int step; Servo servo_23; void setup(){ ??degree = 90; ??step = 5; ??servo_23.attach(23,500,2500); ??servo_23.write(90); ??delay(1000); } void loop(){ ??servo_23.write(degree); ??delay(100); ??degree = step + degree; ??if (degree >= 180 || degree <= 0) { ????step = 0 - step; ??} } |
通過代碼可以看到,Arduino將舵機(jī)的操作封裝成了Servo對象。Servo對象使用attach()方法初始化輸出舵機(jī)控制脈沖的引腳和0度以及180度脈沖對應(yīng)的高電平時(shí)長。然后調(diào)用其write()方法就可以將舵機(jī)旋轉(zhuǎn)到指定的角度了。
下面來看一下在MicroPython中是如何使用舵機(jī)的。在MicroPython中,明確將舵機(jī)分成了180度和360度兩種,180度的舵機(jī)可以指定旋轉(zhuǎn)的角度而360度舵機(jī)則可以指定旋轉(zhuǎn)的速度。這比C語言的控件要考慮得更周全些。具體使用方法如下:
生成的代碼如下:
import servo servo.servo180_angle(26,100) |
只是簡簡單單的一行程序就實(shí)現(xiàn)了控制舵機(jī)轉(zhuǎn)動(dòng)到指定位置的功能。
在這里,再介紹一個(gè)Mixly的功能,這個(gè)功能是Python環(huán)境所特有的,就是可以隨時(shí)輸入Python程序并執(zhí)行。這主要是因?yàn)镻ython是一種解釋語言,不需要編譯,在執(zhí)行的時(shí)候,就是邊執(zhí)行,邊解釋。具體的使用方法是在COM輸出窗口中的“>>>”提示符后面直接輸入要執(zhí)行的Python代碼,回車之后,該代碼就被自動(dòng)的執(zhí)行了。如下圖所示:
文章來源:http://www.zghlxwxcb.cn/news/detail-833822.html
有了這個(gè)功能,就讓我們在執(zhí)行Python程序的時(shí)候,可以隨時(shí)的分步執(zhí)行,隨時(shí)的輸出各種調(diào)試信息和狀態(tài)信息,是非常非常方便的一個(gè)功能。文章來源地址http://www.zghlxwxcb.cn/news/detail-833822.html
到了這里,關(guān)于一起玩兒物聯(lián)網(wǎng)人工智能小車(ESP32)——26. 舵機(jī)的使用方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!