舵機是什么?
伺服電機通常被稱為舵機,它是一種帶有輸出軸的小裝置。當我們向伺服器發送一個控制信號時,輸出軸就可以轉到特定的位置。只要控制信號持續不變,伺服機構就會保持軸的角度位置不改變。如果控制信號發生變化,輸出軸的位置也會相應發生變化。日常生活中,舵機常被用于遙控飛機、遙控汽車、機器人等領域。
舵機在機器人領域非常有用。因為舵機有內置的控制電路,它們的尺寸雖然很小,但輸出力夠大。像Futaba S-148這樣的標準舵機能提供 0.3牛/米的扭矩,相對于它的外形大小來說這已經足夠強大了。同時,舵機消耗的能量與機械負荷成正比。因此,一個輕載的舵機系統不會消耗太多的能量。
舵機的內部結構
舵機的內部結構如上圖所示。你可以看到控制電路,馬達,一組齒輪和外殼。
當然還包括電源線(+5V,紅色),地線(GND黑色)和PWM控制線(黃色或白色)。
舵機的工作原理
舵機內部的控制電路,電位計(可變電阻器)和電機均被連接到電路板上,如內部結構圖的右邊部分。控制電路通過電位計可監控舵機的當前角度。
如果軸的位置與控制信號相符,那么電機就會關閉。如果控制電路發現這個角度不正確,它就會控制馬達轉動,直到它達到指定的角度。舵機角度根據制造商的不同而有所不同。比如,一個180度的舵機,它可以在0度至180度之間運動。由于限位裝置被安裝在主輸出裝置上,超出這個范圍機械結構就不能再轉動了。
舵機的輸出功率與它所需要轉動的距離成正比。如果輸出軸需要轉動很長的距離,馬達就會全速運轉,如果它只需要短距離轉動,馬達就會以較慢的速度運行,這叫做速度比例控制。
如何讓舵機轉到指定角度?
控制線用于傳輸角度控制信號。這個角度是由控制信號脈沖的持續時間決定的,這叫做脈沖編碼調制(PCM)。舵機的控制一般需要一個20ms左右的時基脈沖,該脈沖的高電平部分一般為0.5ms-2.5ms范圍,總間隔為2ms。脈沖的寬度將決定馬達轉動的距離。例如:1.5毫秒的脈沖,電機將轉向90度的位置(通常稱為中立位置,對于180°舵機來說,就是90°位置)。如果脈沖寬度小于1.5毫秒,那么電機軸向朝向0度方向。如果脈沖寬度大于1.5毫秒,軸向就朝向180度方向。以180度舵機為例,對應的控制關系是這樣的:
0.5ms————-0度;
1.0ms————45度;
1.5ms————90度;
2.0ms———–135度;
2.5ms———–180度;
用Arduino UNO 控制舵機
測試的硬件條件:
• 1 × Arduino UNO.
• 1 × 舵機.
• 1 × ULN2003 驅動IC(用于防止直接通過Arduino驅動舵機造成問題.)
• 1 × 10 KΩ 電阻.
按照下圖所示進行連接,如圖所示:
打開Arduino IDE,新建一個文件。
/* 使用可變電位計控制舵機轉動 */ #include Servo myservo; // 創建一個 servo object int potpin = 0; // analog pin 用來連接電位計 int val; // val存儲analog pin的值 void setup() { myservo.attach(9); // 連接舵機控制信號(黃或白)至 pin 9 } void loop() { val = analogRead(potpin); // 讀出可變電位計的值 (范圍 0 - 1023) val = map(val, 0, 1023, 0, 180); // 按舵機角度進行設置 (范圍 0 - 180) myservo.write(val); //根據val值設置舵機位置 delay(15); }
連線注意:舵機有三個引腳(電源、GND和信號)。電源線通常是紅色的,應該連接到Arduino控制板上的5V針腳;GND地線通常是黑色或棕色的,應該連接到ULN2003 IC上10-16針的任意一個;信號線通常是黃色或白色的,應該連接到Arduino 9號引腳。
可變電位計
可變電位計是一個分壓器,它可以根據可變電阻的值來調整電路的輸出電壓,電阻是通過旋鈕來控制的。它有三個引腳:GND,信號, +5 V,如下圖所示
以上工作就緒并上傳代碼后,正常情況下當我們旋轉可變電位計,舵機將對應改變其角度位置。