舵機(jī)控制方法
舵機(jī)的伺服系統(tǒng)由可變寬度的脈沖來(lái)進(jìn)行控制,控制線是用來(lái)傳送脈沖的。脈沖的參數(shù)有最小值,最大值,和頻率。一般而言,舵機(jī)的基準(zhǔn)信號(hào)都是周期為20ms,寬度為1.5ms。這個(gè)基準(zhǔn)信號(hào)定義的位置為中間位置。舵機(jī)有最大轉(zhuǎn)動(dòng)角度,中間位置的定義就是從這個(gè)位置到最大角度與最小角度的量完全一樣。最重要的一點(diǎn)是,不同舵機(jī)的最大轉(zhuǎn)動(dòng)角度可能不相同,但是其中間位置的脈沖寬度是一定的,那就是1.5ms。如下圖:
角度是由來(lái)自控制線的持續(xù)的脈沖所產(chǎn)生。這種控制方法叫做脈沖調(diào)制。脈沖的長(zhǎng)短決定舵機(jī)轉(zhuǎn)動(dòng)多大角度。例如:1.5毫秒脈沖會(huì)到轉(zhuǎn)動(dòng)到中間位置(對(duì)于180°舵機(jī)來(lái)說(shuō),就是90°位置)。當(dāng)控制系統(tǒng)發(fā)出指令,讓舵機(jī)移動(dòng)到某一位置,并讓他保持這個(gè)角度,這時(shí)外力的影響不會(huì)讓他角度產(chǎn)生變化,但是這個(gè)是由上限的,上限就是他的最大扭力。除非控制系統(tǒng)不停的發(fā)出脈沖穩(wěn)定舵機(jī)的角度,舵機(jī)的角度不會(huì)一直不變。
當(dāng)舵機(jī)接收到一個(gè)小于1.5ms的脈沖,輸出軸會(huì)以中間位置為標(biāo)準(zhǔn),逆時(shí)針旋轉(zhuǎn)一定角度。接收到的脈沖大于1.5ms情況相反。不同品牌,甚至同一品牌的不同舵機(jī),都會(huì)有不同的最大值和最小值。一般而言,最小脈沖為1ms,最大脈沖為2ms。如下圖:
Arduino控制舵機(jī)的兩種方法
1、第一種是通過(guò)Arduino的普通數(shù)字傳感器接口產(chǎn)生占空比不同的方波,模擬產(chǎn)生PWM信號(hào)進(jìn)行舵機(jī)定位。
2、第二種是直接利用Arduino自帶的Servo函數(shù)進(jìn)行舵機(jī)的控制,這種控制方法的優(yōu)點(diǎn)在于程序編寫(xiě),缺點(diǎn)是只能控制2路舵機(jī),因?yàn)锳rduino自帶函數(shù)只能利用數(shù)字9、10接口。Arduino的驅(qū)動(dòng)能力有限,所以當(dāng)需要控制1個(gè)以上的舵機(jī)時(shí)需要外接電源。
arduino如何控制舵機(jī)及詳細(xì)步驟
工具/原料:
Arduino 實(shí)驗(yàn)套件(Arduino UNO控制器,面包板,跳線,USB數(shù)據(jù)線)
80度旋轉(zhuǎn)舵機(jī) * 1 個(gè)
雙頭等長(zhǎng)標(biāo)準(zhǔn) 2.54mm 排針 * 若干
方法/步驟:
1、準(zhǔn)備實(shí)驗(yàn)需要用到的硬件,如圖所示:
2、如下圖所示進(jìn)行硬件的連接,此步我們先不連接任何其他元件,只需將Arduino UNO控制器連接到電腦
3、如下圖所示,我們先不使用電位計(jì)控制,只是使用程序來(lái)控制一個(gè)舵機(jī),將下列程序復(fù)制到Arduino IDE中或者可以直接在最后一步中提供的百度網(wǎng)盤(pán)地址中直接下載代碼和 Fritzing 電路圖
#include 《Servo.h》
Servo myservo;
int pos = 0;
void setup()
{
myservo.attach(9);
}
void loop()
{
for(pos = 0; pos 《= 180; pos += 1)
{
myservo.write(pos);
delay(15);
}
for(pos = 180; pos》=0; pos-=1)
{
myservo.write(pos);
delay(15);
}
}
4、如圖所示,選擇正確的板卡型號(hào)和端口,將程序上傳到控制器中。
5、如圖所示,程序上傳無(wú)誤的情況下 Arduino IDE 軟件會(huì)顯示如下結(jié)果,在上傳過(guò)程中,Arduino 控制器板載的 TX RX 燈會(huì)頻閃
6、如下圖所示,使用舵盤(pán)連接螺絲,連接舵盤(pán)和舵機(jī)
7、按照下圖中的電路,進(jìn)行實(shí)驗(yàn)硬件的連接
注意:舵機(jī)線一種是:紅、黑、黃(紅色連接 Vcc、黑色連接 GND、黃色連接信號(hào) S)
還有較為常見(jiàn)的一種是:棕、紅、橙(棕色連接 GND、紅色連接 Vcc、橙色連接信號(hào) S)
8、實(shí)驗(yàn)效果如圖所示,舵機(jī)會(huì)自動(dòng)從 -90 度轉(zhuǎn)動(dòng)到 90 度,再?gòu)?90 度轉(zhuǎn)動(dòng)到 -90 度。注意當(dāng) Arduino UNO 控制器連接到電腦供電時(shí),舵機(jī)會(huì)自動(dòng)歸回中間位置
9、代碼回顧:
(1)#include《Servo.h》 載入 Servo.h 庫(kù)文件
(2)Servo myservo; 建立一個(gè)舵機(jī)對(duì)象,名稱為 myservo
(3)myservo.attach(9); 將引腳 9 上的舵機(jī)與舵機(jī)對(duì)象連接起來(lái)
attach 函數(shù)連接一個(gè)舵機(jī)對(duì)象到指定的引腳上,attch 函數(shù)可以有 1 或 3 個(gè)參數(shù)。如果使用 3 個(gè)函數(shù),第一個(gè)參數(shù)表示引腳,第二個(gè)參數(shù)表示最小角度(0度)的脈沖寬度,單位是微秒(默認(rèn)是 544),第三個(gè)參數(shù)表示最大角度(180度)的脈沖寬度,單位是微秒(默認(rèn)是2400)。通常情況下,只需要設(shè)置舵機(jī)引腳,忽略第二和第三個(gè)參數(shù)。
(4)myservo.write(pos); 寫(xiě)角度到舵機(jī)
代碼位置如下圖所示:
10、硬件回顧:
舵機(jī):包括一個(gè)直流點(diǎn)擊,一套裝在電機(jī)和輸出軸之間的齒輪系統(tǒng),一個(gè)位置傳感結(jié)構(gòu)和一個(gè)控制電路。位置傳感機(jī)構(gòu)檢測(cè)舵機(jī)的位置并提供給控制系統(tǒng),控制系統(tǒng)使用電機(jī)控制舵機(jī)臂運(yùn)動(dòng)到指定位置。有很多不同尺寸、速度、精度的舵機(jī),功率越大、精度越高的舵機(jī)相對(duì)價(jià)位也比較高。使用汽車、機(jī)器人、飛機(jī)時(shí),舵機(jī)是很常用的一種方式。通過(guò)PWM信號(hào)實(shí)現(xiàn)舵機(jī)位置的控制,一般來(lái)說(shuō)脈寬在 500 微秒到 2500 微秒之間,舵機(jī)從 -90 到 90 度。下圖所示為舵機(jī)的內(nèi)部結(jié)構(gòu)圖
11、下圖分別為(1)舵機(jī)控制原理(2)舵機(jī)扭矩計(jì)算方法(3)輸入脈沖寬度與舵機(jī)角度對(duì)應(yīng)關(guān)系圖,供大家參考
-
舵機(jī)
+關(guān)注
關(guān)注
17文章
268瀏覽量
41013 -
Arduino
+關(guān)注
關(guān)注
188文章
6468瀏覽量
186952
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論