元件:
arduino mega 2560、舵機、杜邦線
接線:
普通舵機有3根線:棕、紅、橙(棕色連接 GND、紅色連接 Vcc、橙色連接信號 S)
原理:
舵機的伺服系統由可變寬度的脈沖來進行控制,控制線是用來傳送脈沖的。脈沖的參數有最小值,最大值,和頻率。一般而言,舵機的基准信號都是周期為20ms,寬度為1.5ms。這個基准信號定義的位置為中間位置。舵機有最大轉動角度,中間位置的定義就是從這個位置到最大角度與最小角度的量完全一樣。最重要的一點是,不同舵機的最大轉動角度可能不相同,但是其中間位置的脈沖寬度是一定的,那就是1.5ms。如下圖:
角度是由來自控制線的持續的脈沖所產生。這種控制方法叫做脈沖調制。脈沖的長短決定舵機轉動多大角度。例如:1.5毫秒脈沖會到轉動到中間位置(對於180°舵機來說,就是90°位置)。當控制系統發出指令,讓舵機移動到某一位置,並讓他保持這個角度,這時外力的影響不會讓他角度產生變化,但是這個是由上限的,上限就是他的最大扭力。除非控制系統不停的發出脈沖穩定舵機的角度,舵機的角度不會一直不變。
當舵機接收到一個小於1.5ms的脈沖,輸出軸會以中間位置為標准,逆時針旋轉一定角度。接收到的脈沖大於1.5ms情況相反。不同品牌,甚至同一品牌的不同舵機,都會有不同的最大值和最小值。一般而言,最小脈沖為1ms,最大脈沖為2ms。如下圖:
arduino控制舵機的兩種方法:
1、第一種是通過Arduino的普通數字傳感器接口產生占空比不同的方波,模擬產生PWM信號進行舵機定位。
2、第二種是直接利用Arduino自帶的Servo函數進行舵機的控制,這種控制方法的優點在於程序編寫,缺點是只能控制2路舵機,因為Arduino自帶函數只能利用數字9、10接口。Arduino的驅動能力有限,所以當需要控制1個以上的舵機時需要外接電源。
代碼:
#include<Servo.h> Servo myservo; //建立一個舵機對象myservo int pos = 0; void setup() { myservo.attach(9); //將引腳9上的舵機與舵機對象連接起來 } void loop() { for(pos = 0;pos<180;pos += 1) //若要控制增大轉動速度,可將1改為更大的數值 { myservo.write(pos); //寫角度到舵機 delay(15); } for(pos = 180;pos>=1;pos-=1) { myservo.write(pos); delay(15); } }
參考博客:http://m.elecfans.com/article/675881.html