Search Code

Proiect: RJMD-R2101 Driver de motor MOSFET H-Bridge

Proiect: RJMD-R2101 Driver de motor MOSFET H-Bridge

În acest tutorial, vom explora cum să controlăm un motor DC folosind driverul de motor RJMD-R2101 H-Bridge MOSFET. Acest proiect va demonstra cum să utilizăm eficient MOSFET-urile IRFZ44N împreună cu driverii de poartă IR2101 pentru a controla viteza și direcția motorului. La sfârșitul acestui ghid, veți avea un sistem de control al motorului funcțional care poate accelera, frâna și opri motorul în mod lin.

RJMD-R2101 H-Bridge MOSFET Motor Driver 0

Pe măsură ce avansăm, vom acoperi componentele hardware necesare, instrucțiunile de cablare și exemple de cod pentru a clarifica modul în care totul funcționează împreună. Pentru o reprezentare mai vizuală, recomand să vizionați videoclipul asociat (în videoclip la :15).

RJMD-R2101 H-Bridge MOSFET Motor Driver 3

Hardware explicat

Componentele principale ale acestui proiect sunt driverul de poartă IR2101 și MOSFET-urile IRFZ44N. IR2101 este un driver de mare viteză conceput pentru a conduce MOSFET-uri N-channel într-o configurație de jumătate de punte. Acesta permite comutarea eficientă și controlul MOSFET-urilor, permițând motorului să funcționeze lin.

MOSFET-urile IRFZ44N acționează ca elemente de comutare care controlează puterea livrată motorului. Când sunt activate de IR2101, aceste MOSFET-uri pot gestiona curenți mari, oferind puterea necesară pentru a alimenta motorul. Împreună, aceste componente permit un control precis asupra direcției și vitezei motorului.

Detalii fișă tehnică

ProducătorRectificator Internațional
Număr de parteIRFZ44N
Tensiune logică/IO10 V (VGS)
Tensiune de alimentare55 V (VDS)
Curent de ieșire (pe canal)49 A (max)
Curent de vârf (pe canal)120 A (max)
Ghid pentru frecvența PWMpână la 100 kHz
Praguri logici de intrare2.0 V (VGS(th))
Cădere de tensiune / RDS(on)/ saturație0,025 Ω (max)
Limite termice175 °C (max)
PachetTO-220
Note / varianteUtilizat frecvent în configurații H-Bridge

  • Asigurați-vă că există un sistem adecvat de disipare a căldurii pentru MOSFET-uri pentru a preveni supraîncălzirea.
  • Utilizați PWM pentru controlul vitezei pentru a obține o funcționare lină a motorului.
  • Verificați că tensiunea sursei de alimentare nu depășește valorile nominale ale MOSFET-ului.
  • Asigurați-vă că polaritatea este corectă atunci când conectați motorul pentru a evita deteriorarea.
  • Utilizați condensatoare de decuplare aproape de sursa de alimentare pentru a stabiliza tensiunea.

Instrucțiuni de cablare

Arduino wiring for H-bridge IR2101 with IRFZ44N
Arduino wiring for H-bridge IR2101 with IRFZ44N

Pentru a conecta driverul de motor RJMD-R2101, începe prin a conecta sursa de alimentare. Conectează pinul VCC al driverului la o sursă de alimentare de 5V. Pinul GND ar trebui să fie conectat la masa sursei de alimentare. Apoi, conectează pinii de control: semnalul PWM pentru primul MOSFET ar trebui să meargă la pin.PWM1_HIN1_PIN(pin 9), iar pinul de activare pentru primul MOSFET ar trebui să se conecteze laEN1_LIN1_PIN(pin 8). Pentru al doilea MOSFET, conectați semnalul PWM laPWM2_HIN2_PIN(pin 3) și pinul de activare pentruEN2_LIN2_PIN(pin 2).

RJMD-R2101 H-Bridge MOSFET Motor Driver 5

Asigurați-vă că conectați terminalele motorului la ieșirile corespunzătoare ale H-Bridge-ului. Dacă folosiți Arduino, conectați pinurile PWM la pinurile desemnate de pe placa Arduino. De exemplu, conectațiPWM1_HIN1_PINla pin 9,EN1_LIN1_PINla pin 8 și așa mai departe. Această configurație îți va permite să controlezi motorul eficient.

Exemple de cod și ghiduri

Secțiunea de cod include funcții pentru a controla viteza și direcția motorului folosind pini definiți. Mai jos este un extras din schița de control al motorului:

const int PWM1_HIN1_PIN= 9; // PWM pin for first MOSFET
const int EN1_LIN1_PIN= 8; // Enable pin for first MOSFET

În această parte, definim pini utilizați pentru controlul primului MOSFET.PWM1_HIN1_PINeste folosit pentru controlul vitezei, în timp ceEN1_LIN1_PINactivează driverul motorului.

void Motor(boolean direction, int speed=0) {
    int speedPWM = map(speed, 0, 100, 0, 255);
    // Control motor direction and speed here
}

Această funcție primește undirectionparametru pentru a determina dacă motorul ar trebui să se rotească în sensul acelor de ceasornic sau în sens invers. Motorulspeedparametrul este mapat la o valoare PWM, permițând un control lin asupra vitezei motorului.

void stop() {
    digitalWrite(EN1_LIN1_PIN, LOW); // Disable first MOSFET
}

Thestopfuncția dezactivează motorul prin setarea pinului de activare la nivel scăzut, oprind efectiv orice flux de curent prin motor. Acest lucru asigură o oprire rapidă fără a deteriora componentele.

Pentru codul complet, vă rugăm să consultați programul complet încărcat mai jos de articol.

Demonstrație / Ce să aștepți

Când configurarea este completă, ar trebui să observați motorul răspunzând la comenzile trimise de Arduino. Motorul se va roti în direcția specificată, iar viteza poate fi ajustată folosind semnale PWM. Problemele comune de care să fiți atent includ conexiuni cu polaritate inversată, care pot face ca motorul să funcționeze în direcția opusă, și intrări flotante care ar putea duce la un comportament eratic.

În timpul testării, s-ar putea să observați că viteza motorului se schimbă în funcție de valorile PWM trimise. Asigurați-vă că toate conexiunile sunt sigure pentru a evita întreruperile în fluxul de energie, care ar putea afecta performanța (în video la 05:45).

Marcaje temporal video

  • 00:00- Introducere în proiect
  • 02:15- Prezentare generală a componentelor hardware
  • 05:45- Demonstrarea controlului motor
  • 08:30- Prezentare și explicație a codului

Imagini

RJMD-R2101 H-Bridge MOSFET Motor Driver 0
RJMD-R2101 H-Bridge MOSFET Motor Driver 0
RJMD-R2101 H-Bridge MOSFET Motor Driver 1
RJMD-R2101 H-Bridge MOSFET Motor Driver 1
RJMD-R2101 H-Bridge MOSFET Motor Driver 2
RJMD-R2101 H-Bridge MOSFET Motor Driver 2
RJMD-R2101 H-Bridge MOSFET Motor Driver 3
RJMD-R2101 H-Bridge MOSFET Motor Driver 3
RJMD-R2101 H-Bridge MOSFET Motor Driver 4
RJMD-R2101 H-Bridge MOSFET Motor Driver 4
RJMD-R2101 H-Bridge MOSFET Motor Driver 5
RJMD-R2101 H-Bridge MOSFET Motor Driver 5
Arduino wiring for H-bridge IR2101 with IRFZ44N
Arduino wiring for H-bridge IR2101 with IRFZ44N
796-Arduino H-Bridge code to control IRFZ44N Mosfets using IR2101 gate drivers
Limba: C++
/*
 * Schita de control al motorului IR2101
 * Controlează motorul DC cu viteză, frână și oprire
 * Mosfeturile IRF44ZN sunt utilizate pentru partea superioară și partea inferioară.
 * Driverul de poartă IR2101 este folosit pentru a conduce MOSFET-urile.
 * poți obține codul, fișierul gerber pentru PCB pentru a produce și diagrama de cablare
 * de la http://robojax.com/RJT390
 * 
 * scris de Ahmad Shamshiri pe 19 noiembrie 2024
 * www.Robojax.com https://youTube.com/@robojax
 */
const int PWM1_HIN1_PIN= 9; // trebuie să fie o halbă cu ~
const int EN1_LIN1_PIN= 8;

const int PWM2_HIN2_PIN= 3; // trebuie să fie o halbă cu ~
const int EN2_LIN2_PIN= 2;

const boolean CW =1;
const boolean CCW =0;


void Motor(boolean, int); // prototip
void brake(); // prototip
void stop(); // prototip

void setup() {
  Serial.begin(9600);
  pinMode(PWM1_HIN1_PIN, OUTPUT);
  pinMode(EN1_LIN1_PIN, OUTPUT);

  pinMode(PWM2_HIN2_PIN, OUTPUT);
  pinMode(EN2_LIN2_PIN, OUTPUT);

}

void loop() {
  Motor(CW, 100);
  delay(5000);

  brake();
  delay(3000);

  Motor(CCW, 100);
  delay(5000);

  stop();
  delay(3000);

  Motor(CCW, 50); // în CW la 50% viteză
  delay(5000);

  brake();
  delay(3000);
  for(int i=0; i<=100; i++)
  {
    Motor(CCW, i);
    delay(100);
  }
  delay(3000);
  for(int i=100; i>=0; i--)
  {
    Motor(CCW, i);
    delay(100);
  }
  brake();
  delay(3000);
}


void stop()
{
    Serial.println ("=== Stop");
    digitalWrite(EN1_LIN1_PIN, LOW);
    digitalWrite(PWM1_HIN1_PIN, LOW);
    digitalWrite(EN2_LIN2_PIN, LOW);
    digitalWrite(PWM2_HIN2_PIN, LOW);
}
void brake()
{
    Serial.println ("=== Brake");
    digitalWrite(PWM1_HIN1_PIN, HIGH);
    digitalWrite(EN1_LIN1_PIN, LOW);
    digitalWrite(PWM2_HIN2_PIN, HIGH);
    digitalWrite(EN2_LIN2_PIN, LOW);
}


void Motor(boolean direction, int speed=0)
{
  int speedPWM = map(speed, 0, 100, 0, 255);
  Serial.print("Speed: "); Serial.print (speedPWM);
  Serial.print("(");Serial.print(speed);Serial.print("%)");


  if(direction){
   Serial.print(" dir: ");Serial.println ("CW");

    analogWrite(PWM1_HIN1_PIN, speedPWM);
    digitalWrite(EN1_LIN1_PIN, HIGH);

    digitalWrite(PWM2_HIN2_PIN, LOW);
    digitalWrite(EN2_LIN2_PIN, LOW);

  }else{
    Serial.print(" dir: ");Serial.println ("CCW");

    digitalWrite(PWM1_HIN1_PIN, LOW);
    digitalWrite(EN1_LIN1_PIN, LOW);

    analogWrite(PWM2_HIN2_PIN, speedPWM);
    digitalWrite(EN2_LIN2_PIN, HIGH);
  }

}




Resurse și referințe

Fișiere📁

Gerber files