Successfully reported this slideshow.

Arduino 習作工坊 - Lesson 2 動力之夜

10

Share

Loading in …3
×
1 of 40
1 of 40

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

Related Audiobooks

Free with a 14 day trial from Scribd

See all

Arduino 習作工坊 - Lesson 2 動力之夜

  1. 1. #2 馬達
  2. 2. 馬達的種類 • 直流馬達 DC Motors • 交流馬達 AC Motors • 步進馬達 Step Motors • 伺服馬達 RC Servo Motors • 線性馬達 Linear Motors
  3. 3. SERVO 伺服機
  4. 4. http://pcbheaven.com/
  5. 5. 1. 控制器(即控制電路)會將輸入的PWM訊號轉換成相對的參考電壓(解 碼,decoding),不同的參考電壓會對應到伺服馬達轉軸的不同位置。 2. 控制器藉由量測電位計的分壓得知目前伺服馬達轉軸的位置。 3. 控制器比較此兩電壓的差異(也就是位置的差異),並開始轉動,直到輸 入的參考電壓與實際的電位計分壓相同為止。 4. 因此,伺服馬達只要通電就會鎖死,無法由外力轉動,因為其會不斷地比 較位置變化(當然會有一個初始值),並嘗試修正到目標位置。
  6. 6. RC 伺服機
  7. 7. 數位輸出? 類比輸出?
  8. 8. Pulse Width Modulation (PWM) 脈衝寬度調變 • 數位輸出可以控制訊號的開和關,開和關同 時意味著通電與斷電 • 如果我們可以進一步控制通電的時間比例, 就能讓輸出的訊號產生變化,例如LED燈通 電時間為50%,就可以控制LED燈只有50% 的亮度
  9. 9. • 以數位訊號模擬類比訊號的技術
  10. 10. PWM 使用方法 • IDE code 為 analogWrite() • 格式:analogWrite(pin, value) • 在uno板子中只有pin 3,5,9,10,11腳位為PWM 腳位 • Value: duty cycle,介於0-255,0為0%,127 為50%,255為100%
  11. 11. 伺服機(Servo)範例 (File >> Example >> Servo >> Sweep)
  12. 12. 程式 - Sweep #include <Servo.h> Servo myservo; // create servo object to control a servo // a maximum of eight servo objects can be created 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(15); // waits 15ms for the servo to reach the position } for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees { myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } }
  13. 13. 伺服機(Servo)範例 (File >> Example >> Servo >> Knob)
  14. 14. 程式-Knob #include <Servo.h> Servo myservo; int potpin = 0; int val; void setup() { myservo.attach(9); } 呼叫Servo函式庫 創立myservo物件 使用Pin9控制servo
  15. 15. 程式-Knob void loop() { val = analogRead(potpin); val = map(val, 0, 1023, 0, 179); myservo.write(val); delay(15); } 轉換範圍從0~1023→0~179
  16. 16. 程式-Knob void setup() { myservo.attach(9); // attaches the servo on pin 9 to the servo object Serial.begin(9600); } void loop() { val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023) val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180) println(val); myservo.write(val); // sets the servo position according to the scaled value delay(15); // waits for the servo to get there }
  17. 17. DC MOTOR 直流馬達
  18. 18. DC直流馬達
  19. 19. 如何控制?
  20. 20. H 橋電路 一個典型的 H 橋 IC 主要是由四個電晶體組成,透過電晶體 的開關控制電流流動的方向,因此可以用於馬達正反轉的控 制上
  21. 21. 原理說明
  22. 22. L293D 直流馬達驅動晶片 3 6 14 11 1 以凹槽朝上,開始逆時針編號 8 9 4, 5, 12, 13 與電池負 極共接地 16: Arduino 5V 2 15 7 10
  23. 23. 馬達電路- 橘色線用來控制轉速 3,6 14,11 Arduino Direction IC pin# 3 2 5 7 6 10 9 15 MOTOR IC pin# MR+ 3 MR- 6 ML+ 11 ML- 14 Arduino PWM IC pin# 10 1 11 9電源正極 IC pin# 沒電池就用Arduino 5V 8 Arduino 5V 16
  24. 24. 控制馬達轉動方向 int input1 = 3; int input2 = 9; void setup() { pinMode(input1, OUTPUT); pinMode(input2, OUTPUT); } void loop() { digitalWrite(input1, HIGH); digitalWrite(input2, LOW); delay(1000); digitalWrite(input1, LOW); digitalWrite(input2, HIGH); delay(1000); }
  25. 25. 控制馬達轉速 Arduino #10 接到 IC pin 1 //透過 IC 的 EN腳位來 //控制馬達轉速 int input1 = 3; int input2 = 9; void setup() { pinMode(input1, OUTPUT); pinMode(input2, OUTPUT); pinMode(10, OUTPUT); } void loop() { analogWrite(10, 128); digitalWrite(input1, HIGH); digitalWrite(input2, LOW); delay(1000); digitalWrite(input1, LOW); digitalWrite(input2, HIGH); delay(1000); }
  26. 26. 步進馬達
  27. 27. STEPPER 步進馬達
  28. 28. 外側為電磁鐵的定子,內為NS交互磁化的永磁轉子(無齒型) 依轉子的構造來分
  29. 29. http://www.engineersgarage.com/
  30. 30. http://ming-shian.blogspot.tw/2013/05/blog-post_8.html 雙極就是驅動馬達的電流是雙向的,驅動控制時,需要改變電流方向。 而單極的馬達,其電流就只需提供一個方向就好,改變提供的順序就可以達到驅動控制。
  31. 31. 激磁方式
  32. 32. 四相單極性步進馬達(五線) http://robocraft.ru/
  33. 33. ULN2003APG http://forum.allaboutcircuits.com/
  34. 34. http://www.instructables.com/
  35. 35. Stepper(int steps, pin1, pin2, pin3, pin4) 建立一個步進馬達的物件。其中step是指轉一圈所需的步數,假使馬達定義 每步的角度,用360去除,就會得到步數。 例如:Stepper myStepper(100, 8, 9, 10, 11); 表示每一步為3.6度,轉一圈總共100步。 Stepper.setSpeed(long rpms) 設定步進馬達每分鐘轉速 (RPMs) ,需為正數。這個函式並不會讓馬達轉動, 只是設定好轉速,當呼叫Step()函式時才會開始轉動。 Stepper.step(int steps) 啟動馬達行進steps步數。setSpeed()定義速度,正的表示一個方向, 負數 表示反方向。 http://atceiling.blogspot.tw/ <Stepper.h>
  36. 36. 程式:Stepmotor_step #include <Stepper.h>// initialize the stepper library on pins 8 through 11: Stepper myStepper(200, 8,9,10,11); //表示每一步為1.8度,轉一圈總共200步。 void setup() { // nothing to do inside the setup } void loop() { myStepper.setSpeed(50); //轉速為50rpm(revolution per minutes每分鐘可以轉50圈) myStepper.step(1); //一次走一步 }
  37. 37. 程式:Stepmotor2_control #include <Stepper.h> const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution // for your motor // initialize the stepper library on pins 8 through 11: Stepper myStepper(stepsPerRevolution, 8,9,10,11); int stepCount = 0; // number of steps the motor has taken void setup() { // nothing to do inside the setup } void loop() { // read the sensor value: int sensorReading = analogRead(A0); // map it to a range from 0 to 100: int motorSpeed = map(sensorReading, 0, 1023, 0, 100); // set the motor speed: if (motorSpeed > 0) { myStepper.setSpeed(motorSpeed); // step 1/100 of a revolution: myStepper.step(stepsPerRevolution/100); } }
  38. 38. 補充資料 • http://gcyrobot.blogspot.tw/2011/05/arduino -h-bridgel293d.html

Editor's Notes

  • 電動機(Electric motor),又稱為馬達、摩打或電動馬達,是一種將電能轉化成機械能,並可再使用機械能產生動能
  • 裝置內含位置回授裝置,如光電編碼器(optical encoder)或是解角器(resolver)。 一個傳統伺服機構系統的組成,伺服驅動器主要包含功率放大器與伺服控制器。
  • 在類比電路中,類比信號的值可以連續進行變化,在時間和值的幅度上都幾乎沒有限制,基本上可以取任何實數值,輸入與輸出也呈線性變化。所以在類比電路中,電壓和電流可直接用來進行控制對象,例如家用電器設備中的音量開關控制、採用鹵素燈泡燈具的亮度控制等等。但類比電路有諸多的問題:例如控制信號容易隨時間漂移,難以調節;功耗大;易受雜訊和環境干擾等等。與類比電路不同,數位電路是在預先確定的範圍內取值,在任何時刻,其輸出只可能為ON和OFF兩種狀態,所以電壓或電流會通/斷方式的重複脈衝序列載入到類比負載。

  • 使用永久磁鐵或電磁鐵、電刷、整流子等元件,電刷和整流子將外部所供應的直流電源,持續地供應給轉子的線圈,並適時地改變電流的方向,使轉子能依同一方向持續旋轉。
  • 四相四拍運行方式即AB-BC-CD-DA-AB,
    四相八拍運行方式即 A-AB-B-BC-C-CD-D-DA-A.

    四拍運行時步距角為θ=360度/(50*4)=1.8度(俗稱整步),
    八拍運行時步距角為θ=360度/(50*8)=0.9度(俗稱半步)。
  • 要分辨何者為共接點,何者為輸入點以及正、反轉的激磁順序,可以先用三用電表之歐姆檔量測線圈之電阻值,理論上各相的電阻值應相等,
  • ×