LinkedIn YouTube Facebook
Szukaj

Wstecz
SoM / SBC

[ARDUINO, EAGLE i TY] Biblioteki Arduino dla sterownika H silnika elektrycznego

W artykule opisałem sposób przygotowania płytki drukowanej integrującej moduły: sterownika silników oraz Arduino Nano. W tym artykule skupię się na prezentacji przygotowania oprogramowania w środowisku Arduino, testy zostaną przeprowadzone na robocie NesPiDi który startował w tegorocznych zawodach Robomaticon.

Aby rozpocząć pracę nad programem powinniśmy zaopatrzyć się następujące podzespoły:

Poprzedzając pisanie programu powinniśmy wykonać połączenia zgodnie z rysunkiem 1.

 

Rys. 1. Schemat połączeń elektrycznych niezbędnych do przetestowania tworzonych bibliotek

 

Do sterowania pracą silnika wykorzystamy następujące porty:

  • sterowanie prędkościami silników: pwmA port 3 oraz pwmB port 5,
  • sterowanie kierunkiem pracy silników: silnik A porty 6 i 7 oraz silnik B porty 8 i 9.

Sygnał PWM jest sygnałem z regulowaną wartością wypełnienia. Dla przykładu na rysunku 2 pokazano kilka charakterystycznych wartości.

 

Rys. 2. Sygnały PWM o różnych wartościach współczynnika wypełnienia

Po podłączeniu poniższego układu rozpoczynamy programowanie. W nagłówku programu umieszczamy adresy wszystkich portów, z których będziemy korzystać podczas dalszej części. Sygnały PWM zostały podłączone do portów cyforwych c oraz 5. Ta informacja w kodzie będzie wyglądać w sposób następujący:

int pwmA=3; //pin portu pwm sterującego prędkością silnika A
int pwmB=5; //pin portu pwm sterującego prędkością silnika B
 

Sterowanie kierunkami pracy silników odbywać się będzie przy wykorzystaniu portów cyfrowych, 6 i 7 dla silnika A oraz 8 i 9 dla silnika B. W związku z uproszczeniem kodu oraz możliwości modyfikacji adresu portów zostały one zapisane w postaci tablicy.

Zapis w kodzie:

int sterowanie_silnikami[4]={6,7,8,9};
//sterowanie_silnikami[1]i[2] przypisane do silnika A
//sterowanie_silnikami[3]i[4] przypisane do silnika B

Kolejnym etapem jest ustawienie opisanych portów jako wyjścia. Do tego celu wykorzystamy funkcję pinMode.

void setup()
{
    pinMode(sterowanie_silnikami[0],OUTPUT);
    pinMode(sterowanie_silnikami[1],OUTPUT);
    pinMode(sterowanie_silnikami[2],OUTPUT);
    pinMode(sterowanie_silnikami[3],OUTPUT);
    pinMode(pwmA,OUTPUT);
    pinMode(pwmB,OUTPUT);
//ustawienie wszystkich portów sterujących jako wyjścia

}

Tab. 1. Tabela prawdy działania sterownika silników

 

Przy pierwszych projektach najważniejszymi nastawami będą oznaczone kolorem zielonym na rysunku trzecim. Kierunek do przodu oraz kierunek przeciwny uzyskamy wykorzystując następujący kod:

void loop()
{
digitalWrite(sterowanie_silnikami[0],LOW);
digitalWrite(sterowanie_silnikami[1],HIGH);
//dla silnika A
digitalWrite(sterowanie_silnikami[2],LOW);
digitalWrite(sterowanie_silnikami[3],HIGH);
//dla silnika B
   delay(10);
}

Powyższy kod umożliwia jedynie ustawienie kierunku pracy silnika. Nie nadaje mu jednak prędkości. Aby silniki poruszały się z odpowiednią prędkością należy na port pwm podać wartość z przedziału (0;255). Dokonamy tego w następujący sposób:

void loop()
{
int predkosc; 
digitalWrite(sterowanie_silnikami[0],LOW);
digitalWrite(sterowanie_silnikami[1],HIGH);
analogWrite(pwmA, predkosc);
//dla silnika A
digitalWrite(sterowanie_silnikami[2],LOW);
digitalWrite(sterowanie_silnikami[3],HIGH);
analogWrite(pwmB, predkosc);
//dla silnika B
   delay(10);
}