Arduino 直流電機

2018-11-22 11:11 更新

在本章中,我們將使用Arduino板(UNO)連接不同類型的電機,并向你展示如何連接電機并從電路板上驅動它。

有三種不同類型的電機:

  • DC motor 直流電機
  • Servo motor 伺服電機
  • Stepper motor 步進電機

直流電機(DC—Direct Current motor)是最常見的電機類型。直流電動機通常只有兩個引線,一個正極和一個負極。如果將這兩根引線直接連接到電池,電機將旋轉。如果切換引線,電機將以相反的方向旋轉。

直流電機

警告 - 不要直接從Arduino板引腳驅動電機。這可能會損壞電路板。使用驅動電路或IC。

我們將本章分為三個部分:

  • 只讓你的電機旋轉
  • 控制電機速度
  • 控制直流電機的旋轉方向

必需的組件

你將需要以下組件:

  • 1x Arduino UNO 板
  • 1x PN2222 晶體管
  • 1x 小型6V直流電機
  • 1x 1N4001二極管
  • 1x 270Ω電阻

程序

按照電路圖進行連接,如下圖所示。

電路圖

預防措施

進行連接時,請采取以下預防措施:

  • 首先,確保晶體管以正確的方式連接。如圖所示,晶體管的扁平面應該面向Arduino板。

  • 其次,根據(jù)圖像中所示的排列,二極管的條紋端應朝向+5V電源線。

Arduino旋轉控制代碼

int motorPin = 3;

void setup() {

}

void loop() {
   digitalWrite(motorPin, HIGH);
}

代碼說明

晶體管就像一個開關,控制電機的功率。Arduino引腳3用于打開和關閉晶體管,并在草圖中命名為“motorPin”。

結果

當Arduino引腳3變?yōu)楦唠娖綍r,電機將全速旋轉。

電機速度控制

以下是連接到Arduino板的直流電機的原理圖。

直流電機的原理圖

Arduino代碼

int motorPin = 9;

void setup() {
   pinMode(motorPin, OUTPUT);
   Serial.begin(9600);
   while (! Serial);
   Serial.println("Speed 0 to 255");
}

void loop() {
   if (Serial.available()) {
      int speed = Serial.parseInt();
      if (speed >= 0 && speed <= 255) {
         analogWrite(motorPin, speed);
      }
   }
}

代碼說明

晶體管就像一個開關,控制電機的功率。Arduino引腳3用于打開和關閉晶體管,并在草圖中命名為“motorPin”。

當程序啟動時,它會提示你提供值以控制電機的速度。你需要在串口監(jiān)視器中輸入介于0和255之間的值。

Command Window

在“l(fā)oop”函數(shù)中,命令“Serial.parseInt”用于讀取在串口監(jiān)視器中作為文本輸入的數(shù)字,并將其轉換為“int”。你可以在此處輸入任何數(shù)字。如果數(shù)字在0到255之間,下一行中的“if”語句只使用此數(shù)字進行模擬寫入。

結果

直流電機將根據(jù)通過串口接收的值(0到250)以不同的速度旋轉。

旋轉方向控制

為了控制直流電機的旋轉方向,無需互換引線,可以使用稱為H橋的電路。H橋是可以雙向驅動電機的電子電路。H橋用于許多不同的應用中。最常見的應用之一是控制機器人中的電機。它被稱為H橋,是因為它使用四個晶體管連接,使示意圖看起來像一個“H”。

我們將在這里使用L298 H橋 IC。L298可以控制直流電機和步進電機的速度和方向,并可以同時控制兩個電機。每個電機的額定電流為2A。然而,在這些電流下,你將需要使用散熱片。

旋轉方向控制

必需的組件

你將需要以下組件:

  • 1 × L298橋式IC
  • 1 × 直流電機
  • 1 × Arduino UNO
  • 1 × 面包板
  • 10 × 跳線

程序

以下是Arduino Uno板的直流電機接口示意圖。

直流電機接口

上圖顯示了如何連接L298 IC控制兩個電機。每個電機有三個輸入引腳,Motor1的Input1(IN1),Input2(IN2)和Enable1(EN1);Motor2的Input3,Input4和Enable2。

由于在這個例子中我們只控制一個電機,因此我們將把Arduino連接到L298 IC的IN1(引腳5),IN2(引腳7)和Enable1(引腳6)。引腳5和7是數(shù)字的,即ON或OFF輸入,而引腳6需要脈沖寬度調制(PWM)信號來控制電機速度。

下表顯示了電機根據(jù)IN1和IN2的數(shù)字值轉動的方向。

IN1IN2電機行為
  制動
1 向前
 1向后
11制動

IC L298的引腳IN1連接到Arduino的引腳8,而IN2連接到引腳9。Arduino的這兩個數(shù)字引腳控制電機的方向。IC的EN A引腳連接到Arduino的PWM引腳2。這將控制電機的速度。

為了設置Arduino引腳8和9的值,我們使用了digitalWrite()函數(shù),而設置引腳2的值,我們必須使用analogWrite()函數(shù)。

連接步驟

  • 將IC的5V和接地分別連接到Arduino的5V和接地。
  • 將電機連接到IC的引腳2和3。
  • 將IC的IN1連接到Arduino的引腳8。
  • 將IC的IN2連接到Arduino的引腳9。
  • 將IC的EN1連接到Arduino的引腳2。
  • 將ICD的SENS A引腳接地。
  • 使用Arduino USB線連接Arduino,并使用Arduino IDE軟件將程序上傳到Arduino。
  • 使用電源,電池或USB線為Arduino板供電。

Arduino代碼

const int pwm = 2 ; //initializing pin 2 as pwm
const int in_1 = 8 ;
const int in_2 = 9 ;
//For providing logic to L298 IC to choose the direction of the DC motor

void setup() {
   pinMode(pwm,OUTPUT) ; //we have to set PWM pin as output
   pinMode(in_1,OUTPUT) ; //Logic pins are also set as output
   pinMode(in_2,OUTPUT) ;
}

void loop() {
   //For Clock wise motion , in_1 = High , in_2 = Low
   digitalWrite(in_1,HIGH) ;
   digitalWrite(in_2,LOW) ;
   analogWrite(pwm,255) ;
   /* setting pwm of the motor to 255 we can change the speed of rotation
   by changing pwm input but we are only using arduino so we are using highest
   value to driver the motor */
   //Clockwise for 3 secs
   delay(3000) ;
   //For brake
   digitalWrite(in_1,HIGH) ;
   digitalWrite(in_2,HIGH) ;
   delay(1000) ;
   //For Anti Clock-wise motion - IN_1 = LOW , IN_2 = HIGH
   digitalWrite(in_1,LOW) ;
   digitalWrite(in_2,HIGH) ;
   delay(3000) ;
   //For brake
   digitalWrite(in_1,HIGH) ;
   digitalWrite(in_2,HIGH) ;
   delay(1000) ;
}

結果

電機首先在順時針(CW)方向運行3秒,然后逆時針(CCW)運行3秒。


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號