• 沒有找到結果。

Lecture 11/28 – Servo Motor

N/A
N/A
Protected

Academic year: 2022

Share "Lecture 11/28 – Servo Motor"

Copied!
21
0
0

加載中.... (立即查看全文)

全文

(1)

Lecture 11/28 – Servo Motor

FC Tien, YP Liu

Dept. IE&M, Taipei Tech

(2)

What is Servo Motor?

Structure of Servo Motors

伺服馬達(Servomotor)是對用於使用伺服 機構的馬達(電動機)總稱。伺服(Servo)

一詞來自拉丁文"Servus",本為奴隸(Slave)

之意,此指依照命令動作的意義。所謂伺服 系統,就是依照指示命令動作所構成的控制 裝置,應用於馬達的伺服控制,將感測器裝 在馬達與控制對象機器上,偵測結果會返回 伺服放大器與指令值做比較。由此可知,因 為伺服馬達是以回饋訊號控制,與藉由輸入 脈波訊號控制的步進馬達有所區別

(3)

What is Servo Motor?

(4)

What is Servo Motor?

 本實驗介紹一顆簡單的伺服馬達,它只需要很少或根本不需要外加的電路,就能 夠輕易的被微處理器所控制,而且已經有現成的輸出端可以連接需要驅動的物件

 具有位置控制或速度控制兩種

 內部回傳線路幫助控制位置或 速度

 簡易三線(式)PWM 5V介面

(5)

Types of Servo Motor

 除了本實驗使用的伺服馬達外,市 面上也有許多同樣是三線式的伺服 馬達,從手指大小的伺服馬達到汽 車用的大型伺服馬達都充斥著三線 式伺服馬達的蹤影。

 右圖為另外兩種三線式的伺服馬

(6)

三線式伺服馬達

 三線式伺服馬達的三條線各自用途如下圖所 示

 紅色和黑色線連結至電源供應處,而黃色線 則為訊號線

 三線式的伺服馬達控制方式為PWM訊號控制,

經由控制PWM訊號HIGH的時間來控制馬達 的轉速或位置

 PWM 頻率為 50 Hz (i.e. every 20 millisecs)

 脈波寬度範圍 介於 1 到 2 millisecs

1 millisec(1000μs) = 完全反轉的位置

 2 millisec(2000 μs)= 完全正轉位置

(7)

三線式伺服馬達

 下圖為伺服馬達 轉動角度 與其PWM中HIGH的 時間長短 (Duty大小)關係圖

要使用PWM訊號控制伺服馬達需注 意以下數點:

轉動的角度會依據不同的脈波

了保持同樣位置,脈波必須不斷傳送 因為伺服馬達轉動需要時間,所以

脈波傳送過快的話會沒反應

(8)

Servo Motor + Arduino 接線

 以P9 來控制馬達之位置

 以輸入之時間來控制馬達旋 轉之角度

 或以 Lib 直接控制角度

(9)

Practice

 請練習調整脈波的持續時間(PWM 訊號中HIGH的時間)來得知伺服馬達角度將如何

變化

(10)

Arduino 程式

 先確認執行此程式是否可以將馬達回到 中立點

 建立伺服馬達的函式

 修改程式: 將伺服馬達定位在最小角度

 修改程式: 伺服馬達定位在最大角度

//伺服馬達歸零(移至中立點)

int servoPin=9; //設定伺服馬達由9腳位控制

void setup(){

pinMode(servoPin,OUTPUT); //設定9腳位為輸出 }

void loop(){ //輸出PWM訊號使伺服馬達移動到中立點 digitalWrite(servoPin,HIGH);

delayMicroseconds(1500); //脈波寬度為1.5ms digitalWrite(servoPin,LOW);

delay(20);

}

(11)

Arduino 程式 – 反覆震盪

//伺服馬達反覆擺盪

int servoPin=9; //設定servoMotor由9腳位控制

void setup(){

pinMode(servoPin,OUTPUT); //設定9腳位為輸出 }void loop(){

for (int i=0;i<=40;i++) { //伺服馬達定位在最小角度 digitalWrite(servoPin,HIGH);

delayMicroseconds(1000);

digitalWrite(servoPin,LOW);

delay(20);

for (int i=0;i<=40;i++){} //伺服馬達定位在最大角度 digitalWrite(servoPin,HIGH);

delayMicroseconds(2000);

digitalWrite(servoPin,LOW);

delay(20);

} }

(12)

Arduino 程式 using Lib <Servo.h>

#include <Servo.h> // 引用 Servo Library Servo myservo; // 建立一個 Servo 物件 int value = 0; // 旋轉角度

void setup(){

myservo.attach(9); // Servo 接在 pin 9 }

void loop(){

if (value == 0){

value = 180; //myservo.write(180) 是叫 Servo 旋轉到 最大角度的位置 }else{

value = 0; //myservo.write(0) 是叫 Servo 旋轉到 最小角度的位置 }

myservo.write(value);

delay(1500);

}

 經由引入 Lib 控制 servo motor

 指令

Servo myservo; 宣告一個instance

Servo.attach(pin); 連接控制之腳位

Servo.write(value); 旋轉角度

Servo.detach(); 結束控制

(13)

程式 #1 --

RC 伺服馬達(Radio Controlled Servo Motor) 大部份是透過 PWM (Pulse Width Modulation, 脈波寬度調變)來控制,

Arduino 裏內建了 Servo Library 讓事情變得很簡單,可以 很輕鬆地控制伺服馬達

Command:

#include <Servo.h> // servo motor lib

MyServo.attach(9); //Define Servo motor Signal Pin MyServo.write(Turn_Angle); // Turn servo motor

#include <Servo.h>

Servo MyServo; // build a servo object int Turn_Angle =0;

int potpin = 0;

void setup() {

MyServo.attach(9); // Servo 接在 p9 Serial.begin(9600);

}

void loop() {

if (Turn_Angle == 0) Turn_Angle = 180;

elseTurn_Angle = 0;

Serial.println(Turn_Angle);

MyServo.write(Turn_Angle);

delay(1500);

}

(14)

Practice 2: 另一接法

• 把伺服馬達紅線接到 +5v

• 黑線接到 GND,訊號線接到 pin 9 ,

• 可變電阻中間腳位接到類比輸入(Analog Input) pin 0,

• 剩下的兩支腳位,一支接到 5V,另外一

支接到 GND

(15)

程式 #2 --可變電阻來控制RC Servo motor

運用可變電阻來控制RC Servo motor之角度 Command:

Turn_Angle = analogRead(potpin); // 讀取可 變電阻(數值介於 0 到 1023)

Turn_Angle = map(Turn_Angle, 0, 1024, 0, 179); // scale the value

#include <Servo.h>

// build a servo object Servo MyServo;

int Turn_Angle =0;

int potpin = 0;

void setup() {

MyServo.attach(9); // Servo 接在 p9 Serial.begin(9600);

}

void loop() {

Turn_Angle = analogRead(potpin); // 讀取可變電阻(數值介於 0 到 1023)

// put your main code here, to run repeatedly:

Turn_Angle = map(Turn_Angle, 0, 1024, 0, 179); // scale the value

Serial.println(Turn_Angle);

MyServo.write(Turn_Angle);

delay(15);

}

(16)

Parallax Continuous Rotation Servo

• Bidirectional continuous rotation

• 0 to 50 RPM

(17)

Parallax Continuous Rotation Servo 接線方式

• 白 訊號

• 紅 +5V

• 黑 GND

(18)

Parallax Continuous Rotation Servo 驅動方式 1/2

• PWM 1300 us 順時針轉動

• PWM 1500 us 停止

• PWM 1700 us 逆時針轉動

• 停止校正

#include <Servo.h>

Servo servoLeft;

int servoPin = 12;

void setup() {

servoLeft.attach(servoPin);

}

void loop() {

servoLeft.writeMicroseconds(1500);

delay(30000);

servoLeft.detach();

}

+5V GND

P12 Servo

(19)

Parallax Continuous Rotation Servo 驅動方式 2/2

#include <Servo.h>

Servo servoLeft;

int servoPin = 12;

void setup() {

servoLeft.attach(servoPin);

}

void loop() {

servoLeft.writeMicroseconds(1300);

delay(3000);

servoLeft.writeMicroseconds(1500);

delay(3000);

servoLeft.writeMicroseconds(1700);

delay(3000);

servoLeft.detach();

}

+5V GND

P12 Servo

(20)

實驗 – 透過藍牙傳輸控制伺服馬達

+3.3V GND P8 P9 +5V GND

P12 Servo

(21)

實驗 – 透過藍牙傳輸控制伺服馬達

// 引用程式庫

#include <SoftwareSerial.h>

#include <Servo.h>

Servo servoLeft;

int servoPin = 12;

// 接收腳, 傳送腳

SoftwareSerial BT(8, 9);

char val; // 儲存接收資料的變數 void setup() {

// 設定藍牙模組的連線速率 BT.begin(9600);

servoLeft.attach(servoPin);

servoLeft.writeMicroseconds(1500);

}

void loop() {

if (BT.available()) { val = BT.read();

switch(val) { case '1':

BT.print(val);

servoLeft.writeMicroseconds(1300);

break;

case '2':

BT.print(val);

servoLeft.writeMicroseconds(1500);

break;

case '3':

BT.print(val);

servoLeft.writeMicroseconds(1700);

break;

case '4':

BT.print(val);

servoLeft.detach();

break;

} } }

參考文獻

相關文件

一、訓練目標:充分了解在自動化 機械領域中應用 Arduino 控制,進 而能自行分析、設計與裝配各種控

2.熟 悉 Microsoft Windows Server 作 業 系 統 、 Microsoft SQL Server 資料庫伺服器及網 頁伺服器等環境。. 3.具撰寫 JAVA

entende-se por &#34;conjunto&#34; um jogo de peças de vestuário (excepto os artefactos das posições 62.07 ou 62.08), compreendendo várias peças confeccionadas com o mesmo

數位計算機可用作回授控制系統中的補償器或控制

最後特別提出說明,本研究用戶端作業系統為 Win 2000 Professional,伺服 器端作業系統為 Windows 2000 Server 並啟動 Active Directory

此行文字的特別意義,是讓 MATLAB 藉由 lookfor 指令 搜尋並顯示此函式用途。.. 語法:

™ 不過, 如果 DHCP 用戶端不接受 DHCP 伺服器 所提供的參數, 就會廣播一個 DHCP Decline (拒絕) 封包, 告知伺服器不接受所建議的 IP位 址 (或租用期限…等)。然後回到第一階段, 再度

 可利用 HTML 控制項 中的 Table 控制項進 行排版動作.  (最好將 Table