這種馬達除了電源的兩隻腳,只需要一根訊號就可以控制馬達,如下圖,但實際上根據以前使用的經驗,每個廠牌的馬達精準度上都有差異,還要根據每一顆馬達做微調,後來廠商為了製作人形機器人的需求,還做出了可以不控制馬達的情況下回傳當下位置的功能,或者是數位款的馬達,在控制上更精準。
實際實驗環境
接線方式
今天採用的是Arduino NANO + GWS 2BBMG的SERVO Motor
接線非常簡單,一共也才三條線,SERVO的訊號線有兩種顏色的格式,大致上是兩家不同遙控模型大廠的規範,另外在實驗環境中我插了一顆很大顆的電容,其實是由於馬達的訊號很髒,通常我們在設計系統的時候會將馬達的電源獨立出來,電子的電源一組,馬達的電源一組,在這裡採用USB5V的電源,其實通常電腦只供應(100mA),要看USB起始溝通的內容而定,不論USB 5V供應的電流多大,常常雜訊還是會把MCU打到當機,在沒有負載馬達的情況下,我加了一顆大電容,只是暫時可以控制,實際在設計電路時,還是必須將馬達的電獨立出來。
******************接線方式******************
NANO SERVO
D9------------------DATA(橘色或白)
+5V------------------VCC(紅色)
GND------------------GND(棕色或黑色)
********************************************
範例程式
本次採用的是內建的測試程式,可以控制伺服馬達左右來回擺動,有稍微調整程式
/* Sweep
by BARRAGAN <http://barraganstudio.com>
This example code is in the public domain.
modified 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Sweep
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(100); // waits 15ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(100); // waits 15ms for the servo to reach the position
}
}
實際測試影片
沒有留言:
張貼留言