Arduino 直流電機(jī)

2018-11-22 11:11 更新

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

有三種不同類型的電機(jī):

  • DC motor 直流電機(jī)
  • Servo motor 伺服電機(jī)
  • Stepper motor 步進(jìn)電機(jī)

直流電機(jī)(DC—Direct Current motor)是最常見(jiàn)的電機(jī)類型。直流電動(dòng)機(jī)通常只有兩個(gè)引線,一個(gè)正極和一個(gè)負(fù)極。如果將這兩根引線直接連接到電池,電機(jī)將旋轉(zhuǎn)。如果切換引線,電機(jī)將以相反的方向旋轉(zhuǎn)。

直流電機(jī)

警告 - 不要直接從Arduino板引腳驅(qū)動(dòng)電機(jī)。這可能會(huì)損壞電路板。使用驅(qū)動(dòng)電路或IC。

我們將本章分為三個(gè)部分:

  • 只讓你的電機(jī)旋轉(zhuǎn)
  • 控制電機(jī)速度
  • 控制直流電機(jī)的旋轉(zhuǎn)方向

必需的組件

你將需要以下組件:

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

程序

按照電路圖進(jìn)行連接,如下圖所示。

電路圖

預(yù)防措施

進(jìn)行連接時(shí),請(qǐng)采取以下預(yù)防措施:

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

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

Arduino旋轉(zhuǎn)控制代碼

int motorPin = 3;

void setup() {

}

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

代碼說(shuō)明

晶體管就像一個(gè)開(kāi)關(guān),控制電機(jī)的功率。Arduino引腳3用于打開(kāi)和關(guān)閉晶體管,并在草圖中命名為“motorPin”。

結(jié)果

當(dāng)Arduino引腳3變?yōu)楦唠娖綍r(shí),電機(jī)將全速旋轉(zhuǎn)。

電機(jī)速度控制

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

直流電機(jī)的原理圖

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);
      }
   }
}

代碼說(shuō)明

晶體管就像一個(gè)開(kāi)關(guān),控制電機(jī)的功率。Arduino引腳3用于打開(kāi)和關(guān)閉晶體管,并在草圖中命名為“motorPin”。

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

Command Window

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

結(jié)果

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

旋轉(zhuǎn)方向控制

為了控制直流電機(jī)的旋轉(zhuǎn)方向,無(wú)需互換引線,可以使用稱為H橋的電路。H橋是可以雙向驅(qū)動(dòng)電機(jī)的電子電路。H橋用于許多不同的應(yīng)用中。最常見(jiàn)的應(yīng)用之一是控制機(jī)器人中的電機(jī)。它被稱為H橋,是因?yàn)樗褂盟膫€(gè)晶體管連接,使示意圖看起來(lái)像一個(gè)“H”。

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

旋轉(zhuǎn)方向控制

必需的組件

你將需要以下組件:

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

程序

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

直流電機(jī)接口

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

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

下表顯示了電機(jī)根據(jù)IN1和IN2的數(shù)字值轉(zhuǎn)動(dòng)的方向。

IN1IN2電機(jī)行為
  制動(dòng)
1 向前
 1向后
11制動(dòng)

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

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

連接步驟

  • 將IC的5V和接地分別連接到Arduino的5V和接地。
  • 將電機(jī)連接到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) ;
}

結(jié)果

電機(jī)首先在順時(shí)針(CW)方向運(yùn)行3秒,然后逆時(shí)針(CCW)運(yùn)行3秒。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)