2016年4月26日 星期二

Arduino UNO學習452.電機擴充板L293D



Arduino UNO學習452.電機擴充板L293D

硬體準備
UNO
電機擴充板L293D
DC直流馬達
5線或4線步進馬達
伺服舵機馬達
電源器7V~12V1A (電池電力可能不足)

Arduino輸出約只300mA左右,接電機超過需求則需另接外接電源,
此板搭配L293D及74HC595N晶片,腳位可直接插上UNO板,
無法單獨使用,像積木一樣和UNO堆疊插上,程式在UNO,電機在擴充板上,
可控制4個直流馬達或2個5線步進馬達,同時控制2個伺服舵機,
並可透過PWM控制直流馬達轉速,馬達電力超過0.5A,務必搭配外部電源使用↓

使用前需先下載安裝外部程式庫,以下擇一載點,
https://github.com/adafruit/Adafruit-Motor-Shield-library
https://github.com/adafruit/AccelStepper
解壓後將整個目錄放在Arduino目錄libraries之中,原始參考,
https://learn.adafruit.com/adafruit-motor-shield/library-install
預設位置為C:\Program Files\Arduino\libraries\AF_Motor

安裝後再開啟執行Arduino軟體,在範例中會多一個AFMotor,但在此不使用範例,
先將空迴圈上傳至UNO板上,以確認COM連線是正常的,

確認軟體後將UNO板移除連線,來安裝硬體電機擴充板到UNO板合體,
就像積木一樣往上堆疊,確認各接腳連接後安裝一個DC馬達到M3,
接座有5個口,中央為共GND,由於要控制馬達正反轉,故不安接GND,
共有M1/M2/M3/M4等的4組DC馬達接口,完成後與電腦連線,並接上外部電源
上傳以下程式後可開啟監控視窗,說明接腳座M3,頻率可設定為64K,8K,2K,1K,
PWM視馬達而定,約150~255控制轉速,讓馬達正轉2秒停2秒,再反轉2秒停2秒,
同時發送訊息到監控視窗↓

#include <AFMotor.h>
AF_DCMotor motor(3, MOTOR12_8KHZ); //接腳座及頻率

void setup() {
  Serial.begin(9600);
  Serial.println("Motor test!");
  motor.setSpeed(200);     //可調轉速約150~到255
}

void loop() {
  Serial.print("tick---");
  motor.run(FORWARD);      //正轉
  delay(2000);

  Serial.println("stop");
  motor.run(RELEASE);      //停止
  delay(2000);

  Serial.print("tock---");
  motor.run(BACKWARD);     //反轉
  delay(2000);

  Serial.println("stop");
  motor.run(RELEASE);      //停止
  delay(2000);
}

可試著調整到各M1~M4接口及轉速,或連結減速馬達裝上輪子,製成小車,
原文參考https://learn.adafruit.com/adafruit-motor-shield/using-dc-motors


輸出口M1~M4同時也是步進馬達的接口,5Pin*2組如圖,↓

建議先移除電腦連線,再接馬達後,以下為28BYJ-48步進馬達規格,步腳5.625度角,齒輪減速比63.68395:1,計算一圈360度/5.625=64,再64*64齒比=4096步,
注意原本馬達的排線位置為配合程式庫,故有做跳線注意安裝順序,
紅色接+5V,原橘粉為一組,黃藍為一組,擴充板上的GND為空↓
在上傳程式時建議先將空迴圈上傳至UNO板上,並確認AFMotor.h外掛已安裝,
下例為4096步轉一圈後再反轉,上傳程式後可開啟監控視窗,以了解轉動情形↓

#include <AFMotor.h>
AF_Stepper motor(48, 2);  //48步馬達接第2組接口

void setup() {
  Serial.begin(9600);
  Serial.println("Stepper test!");
  motor.setSpeed(300);  //轉速
}

void loop() {
  Serial.println("Interleave FORWARD");
  motor.step(4096, FORWARD, INTERLEAVE);  //正轉4096為360度一圈
  delay(500);

  Serial.println("Interleave BACKWARD");
  motor.step(4096, BACKWARD, INTERLEAVE);  //反轉4096為360度一圈
  delay(500);
}

試著安裝到Stepper1接口,並控制旋轉角度,注意轉速不要太快以至馬達無轉動,
原文參考https://learn.adafruit.com/adafruit-motor-shield/using-stepper-motors


輸出口SERVO_1/SERVO_2,為伺服馬達3線接口,如圖,↓
此接口較簡單,正負連結電力,SER1_S腳位與Arduino的~D10短路相通,
SER2_S腳位與Arduino的~D9短路相通,此2腳位有~PWM記號,
使用上和接在UNO板上的方式是一樣的,在ArduBlock也有對應的積木塊,
伺服馬達大多不轉360度,就讓馬達由0轉到180度,再轉回到0度位置,
可自行調整角度以了解伺服馬達的控制方式↓
#include <Servo.h>

Servo servo_pin_10;

void setup()
{
  servo_pin_10.attach(10);
}

void loop()
{
  servo_pin_10.write( 0 );
  delay( 1000 );
  servo_pin_10.write( 180 );
  delay( 1000 );
}


沒有留言:

張貼留言