搜尋程式碼

Arduino 代碼,用於 L9110 雙直流電機控制器模組

Arduino 代碼,用於 L9110 雙直流電機控制器模組

喺呢個教學入面,我哋會探討點樣用Arduino同L9110雙摩打控制器模組嚟控制兩個直流摩打。呢個項目會令你可以管理每個摩打嘅方向同速度,適合用喺機械人同自動化等各種應用。完成呢個指南之後,你就會清楚明白點樣接線同寫必要嘅程式碼,令你嘅摩打順暢運行。如果你需要澄清,記得睇吓條片(片入面00:00位置)。

硬件解說

L9110雙直流摩打控制器模組可以同時控制兩個摩打。佢有兩個H橋電路,可以反轉摩打電壓嘅極性。即係話,你可以透過切換控制引腳嚟輕鬆改變每個摩打嘅方向。 呢個模組有四個主要引腳:每個摩打有兩個嚟控制旋轉方向。當你將一個引腳設為高電平、另一個設為低電平,摩打就會向一個方向轉;反轉引腳狀態就會令佢向相反方向轉。呢種靈活性對機械人等應用好重要,因為你需要精確控制摩打嘅動作。

數據手冊細節

製造商STMicroelectronics
零件編號L9110
邏輯/IO電壓2.5–5.5 V
供電電壓2.5–12 V
輸出電流(每通道)1 A
峰值電流(每通道)2 A
PWM頻率建議10 kHz
輸入邏輯閾值0.8 V(低),2.0 V(高)
電壓降 / RDS(on) / 飽和0.3 V @ 1 A
熱限制150 °C
封裝DIP-16
備註 / 變體常用於小型機械人項目。

  • 確保連續運行時有適當嘅散熱。
  • 保持PWM信號低於10 kHz以獲得最佳性能。
  • 喺電源連接附近使用去耦電容以減少噪音。
  • 小心極性接反;咁會損壞模組。
  • 時刻檢查額定電流限制,避免過熱。

接線說明

要將L9110雙直流摩打控制器模組同Arduino接線,首先連接電源引腳。將L9110上嘅VCC引腳連接到Arduino嘅5V輸出,然後將GND引腳連接到Arduino嘅其中一個接地引腳。 跟住,對於摩打A,將A1A引腳連接到Arduino嘅數位引腳2,將A1B引腳連接到數位引腳3。然後,對於摩打B,將B1A引腳連接到數位引腳8,將B1B引腳連接到數位引腳9。確保摩打正確連接到L9110模組上各自嘅輸出。
Arduino-wirign-for-L9110-motor-driver

程式碼示例同解說

喺setup函數入面,我哋需要將控制引腳定義為輸出。呢個對Arduino有效控制摩打方向好重要:
void setup() {
  pinMode(B1A,OUTPUT);// 將引腳定義為輸出
  pinMode(B1B,OUTPUT);
  
  pinMode(A1A,OUTPUT);
  pinMode(A1B,OUTPUT);    
  delay(3000);
}
呢段程式碼設定咗摩打控制引腳,確保Arduino可以向L9110模組發送信號。 程式嘅主循環透過調用`motorA`同`motorB`函數並傳遞唔同參數嚟控制摩打方向:
void loop() {
  motorA('R');// 將摩打A轉向右
  delay(2000);
  motorA('L');// 將摩打A轉向左
  delay(2000);   
  motorA('O');// 將摩打A關閉
  delay(2000); 
  ...
}
喺呢段摘錄入面,摩打被設定為左右轉動,中間有延遲嚟觀察方向變化。 `motorA`函數係用嚟根據輸入方向控制摩打A:
void motorA(char d) {
  if(d =='R'){
    digitalWrite(A1A,LOW);
    digitalWrite(A1B,HIGH); 
  } else if (d =='L'){
    digitalWrite(A1A,HIGH);
    digitalWrite(A1B,LOW);    
  } else {
    digitalWrite(A1A,LOW);
    digitalWrite(A1B,LOW);    
  }
}
呢個函數會檢查提供嘅方向,然後相應設定控制引腳,令摩打向想要嘅方向轉動或者關閉。

示範 / 預期效果

當你運行呢段程式碼,你應該會見到摩打交替向左同向右轉動。延遲令你可以清楚觀察方向變化。要小心常見嘅錯誤,例如接線反轉,咁可能會導致意外行為或者損壞元件。另外,確保你嘅電源足夠供應所用嘅摩打(片入面00:00位置)。

圖片

L9110_motor_driver_module-1
L9110_motor_driver_module-1
L9110_motor_driver_module-12
L9110_motor_driver_module-12
L9110_motor_driver_module-3
L9110_motor_driver_module-3
Arduino-wirign-for-L9110-motor-driver
Arduino-wirign-for-L9110-motor-driver
107-Arduino code for an L9110 dual DC motor controller module
語言: C++
/*
 * Display number on a seven-segment display with Arduino
 * Written by Ahmad Shamshiri for Robojax.com
Date modified: Jun 11, 2018 at 17:20 in Ajax, Ontario, Canada
Watch video instructions for this code: https://youtu.be/-g6Q9lSHDzg

Code is provided for free AS IS without warranty. 
You can share this code as long as you keep the above note intact.
 */

const int A1A = 2;//define pin 2 for A1A
const int A1B = 3;//define pin 3 for A1B

const int B1A = 8;//define pin 8 for B1A
const int B1B = 9;//define pin 9 for B1B




void setup() {
  pinMode(B1A,OUTPUT);// define pin as output
  pinMode(B1B,OUTPUT);
  
  pinMode(A1A,OUTPUT);
  pinMode(A1B,OUTPUT);    
  delay(3000);
}

void loop() {

  motorA('R');// Turn motor A to RIGHT
  delay(2000);
   motorA('L');// Turn motor A to LEFT
  delay(2000);   
  motorA('O');// Turn motor A OFF
  delay(2000); 
    
  motorB('R');// Turn motor B to RIGHT
  delay(2000);
   motorB('L');// Turn motor B to LEFT
  delay(2000); 
  motorB('O');// Turn motor B OFF
  delay(2000); 
   
  motorA('R');// Turn motor A to RIGHT
  motorB('R'); // Turn motor A to RIGHT 
  delay(2000);
  motorA('L');// Turn motor A to LEFT
  motorB('L');// Turn motor B to LEFT     
  delay(3000);
  motorA('O');// Turn motor A OFF
  motorB('O');// Turn motor B OFF
  delay(5000);
   
}

/*
 * @motorA
 * Activation rotation of motor A
 * d is the direction
 * R = Right
 * L = Left
 */
void motorA(char d)
{
  if(d =='R'){
    digitalWrite(A1A,LOW);
    digitalWrite(A1B,HIGH); 
  }else if (d =='L'){
    digitalWrite(A1A,HIGH);
    digitalWrite(A1B,LOW);    
  }else{
    //Robojax.com L9110 Motor Tutorial
    // Turn motor OFF
    digitalWrite(A1A,LOW);
    digitalWrite(A1B,LOW);    
  }
}// motorA end


/*
 * @motorB
 * Activation rotation of motor B
 * d is the direction
 * R = Right
 * L = Left
 */
void motorB(char d)
{

    if(d =='R'){
      digitalWrite(B1A,LOW);
      digitalWrite(B1B,HIGH); 
    }else if(d =='L'){
      digitalWrite(B1A,HIGH);
      digitalWrite(B1B,LOW);    
    }else{
    //Robojax.com L9110 Motor Tutorial
    // Turn motor OFF      
      digitalWrite(B1A,LOW);
      digitalWrite(B1B,LOW);     
    }

}// motorB end

你可能需要嘅嘢

資源與參考資料

暫時冇資源。

文件📁

数据表 (pdf)

  • L9110 Motor driver module datasheet
    L9110 motor driver module datasheet covering pinout, specifications, and application circuit for driving DC motors.
    robojax_L9110_datasheet.pdf 0.20 MB

Fritzing 文件