馬達控制
本篇為伺服馬達控制的學習筆記,共分為兩部分,第一部分為直接控制角度,第二部分以脈衝寬度控制。
控制角度:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <Servo.h>
Servo myservo; // 建立Servo物件,控制伺服馬達
void setup()
{
myservo.attach(9); // 連接數位腳位9,伺服馬達的訊號線
}
void loop()
{
for(int i = 0; i <= 180; i+=1){ // ( int i = 0; )表馬達初始角度為0度
//(i <= 180; )表馬達最終角度為180度
//(i+=1)表示馬達每次正轉1度
myservo.write(i); // 使用write,傳入角度,從0度轉到180度
delay(20); //馬達每0.02秒轉i+的角度
}
for(int i = 180; i >= 0; i-=1){ // ( int i = 180; )表馬達初始角度為180度
//(i >= 0 ; )表馬達最終角度為0度
//(i-=1)表示馬達每次逆轉1度
myservo.write(i);// 使用write,傳入角度,從180度轉到0度
delay(20); //馬達每0.02秒轉i-的角度
}
}
|
以脈衝寬度控制 :
馬達脈寬信號為500-1500-2500,對應的角度是-90度~+90度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <Servo.h>
Servo myservo;
void setup()
{
myservo.attach(9, 500, 2400); // 修正脈衝寬度範圍
myservo.write(90); // 一開始先置中90度
delay(3000);
}
void loop()
{
for(int i = 500; i <= 2500; i+=100){ // ( int i = 500; )表馬達初始訊號為500
//(i <= 2500; )表馬達最終訊號為2500
//(i+=100)表示馬達每次正轉訊號100所代表的角度
myservo.writeMicroseconds(i); // 直接以脈衝寬度控制
delay(300); //馬達每0.3秒轉i+=100所代表的角度
}
for(int i = 2500; i >= 500; i-=100){ // ( int i = 2500; )表馬達初始訊號為2500
//(i <= 500; )表馬達最終訊號為500
//(i-=100)表示馬達每次反轉訊號100所代表的角度
myservo.writeMicroseconds(i);
delay(300); //馬達每0.3秒轉i-=100所代表的角度
}
}
|
來源:
葉難: Arduino練習:伺服馬達以Tower Pro SG90為例
結語:
以控制角度的方法可修改i的數值控制馬達轉角,並可透過修改i+、i-與 delay的值控制馬達旋轉的速度。
以脈衝寬度控制的方法與控制角度的方法很相似,但每一個馬達的脈衝訊號寬度不一樣,還需要以馬達的條件來設定轉角及轉速。
Comments
comments powered by Disqus