L289N Motor Driver z Arduino

Moduł sterownika silników na układzie L298N  – patrz fotki poniżej. Jest to popularny i chyba jeden z najtańszych, gotowych takich układów jakie można dosyć łatwo kupić (również na Allegro). Sterownik ten, może wysterować niezależnie dwa silniki prądu stałego (kierunek, i prędkość – PWM) lub jeden silnik krokowy. W poniższym przykładzie użyłem 2 silników z mechanizmu przewijania filmu, ze starych (analogowych) aparatów fotograficznych – spokojnie działają przy zasilaniu 5V i mają zintegrowaną przekładnię. Shield na płytce Arduino, w moim układzie, to ten sam Shield LCD, który wykorzystuję w poprzednich projektach (zdjęty wyświetlacz), a z którego tutaj wykorzystuję tylko mikroswitch`e  – do sterowania kierunkiem obrotu silników. Switche (SW1-SW4) podpięte są do portów I/O  – 0,1,2,3. Przy tych miniaturowych silnikach całość działa na zasilaniu dostarczonym z komputera po USB.

Podstawowe parametry sterownika :

  • układ –  L298N Dual H Bridge DC Motor Driver
  • zakres napęcia sterującego silniki +5 V ~ +35 V
  • max. prąd sterujący silnik – 2 A
  • zasilanie części logicznej Vss: +5 V ~ +7 V
  • max. pobór mocy : 20 W (przy temp. T = 75 ℃)
  • wymiary : 55mm * 60mm * 30mm

Podłączenie sterownika do Arduino, oraz sposób podpięcia silników :


//******** przypisanie portow ************************

int ENA = 5; // Enable A - port 5 (PWM)
int ENB = 6; // Enable B - port 6 (PWM)
int IN1 = 10; // port 10 - kierunek - motor A - LED1
int IN2 = 11; // port 11 - kierunek - motor A - LED2
int IN3 = 12; // port 12 - kierunek - motor B - LED3
int IN4 = 13; // port 13 - kierunek - motor B - LED4
int SW1 = 0; // switch 0 - port 0
int SW2 = 1; // switch 1 - port 1
int SW3 = 2; // switch 2 - port 2
int SW4 = 3; // switch 3 - port 3

//******** zmienne przechowujace stan przyciskow ****

int SWITCH1;
int SWITCH2;
int SWITCH3;
int SWITCH4;

//******** definicja funkcji portow *****************
void setup()
{
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(SW1, INPUT);
pinMode(SW2, INPUT);
pinMode(SW3, INPUT);
pinMode(SW4, INPUT);

//******* ustalenie stanu portow z przyciskami ******
//******* HIGH rezystory podciagajace wlaczone ******

digitalWrite(SW1, HIGH);
digitalWrite(SW2, HIGH);
digitalWrite(SW3, HIGH);
digitalWrite(SW4, HIGH);

}
//******* glowna petla programu ********************

void loop()
{
//*** odczyt stanow portow z przyciskami *********
SWITCH1 = digitalRead(SW1);
SWITCH2 = digitalRead(SW2);
SWITCH3 = digitalRead(SW3);
SWITCH4 = digitalRead(SW4);

//*** podjecie decyzji w zaleznosci od stanu portu
if (SWITCH1 == LOW)
{
Motor_A_Lewo();
}
else if (SWITCH2 == LOW)
{
Motor_A_Prawo();
}
else if (SWITCH3 == LOW)
{
Motor_B_Lewo();
}
else if (SWITCH4 == LOW)
{
Motor_B_Prawo();
}
else
{
Zatrzymaj();
}

}

//**************************************************

void Motor_A_Lewo()

{
digitalWrite(ENA, HIGH);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
}

//**************************************************

void Motor_A_Prawo()
{
digitalWrite(ENA, HIGH);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
}

//*************************************************

void Motor_B_Lewo()

{
digitalWrite(ENB, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}

//**************************************************

void Motor_B_Prawo()
{
digitalWrite(ENB, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}

//***************************************************
void Zatrzymaj()
{
digitalWrite(ENA, LOW);
digitalWrite(ENB, LOW);
}

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

dziesięć − pięć =