Czołg – ustawianie prędkości silników

W poprzednim poście o czołgu (zob. CZOŁG (ARDUINO + LM298 + BLUETOOTH) miałem problem z ustawianiem prędkości obrotowej silników. Moduł, który używam z Arduino, posiada 6 wejść sterujących:

  • IN1 i 2 – dla pierwszego silnika, włączające go, zatrzymujące i wymuszające kierunek,
  • IN3 i IN4 – dla drugiego silnika,
  • EN1 i EN2 sterujące prędkościami silników.

Problemy pojawiły się przy wykorzystaniu pinów EN1 i EN2. Dopóki były zwarte do płytki – wszystko było ok. Ale wtedy silniki obracały się z pełną szybkością. Wszelkie próby sterowania PWM kończyły się… dziwnym zachowaniem. Silniki nie obracały się, albo obracały się – ale bardzo nieregularnie.


Więcej o budowie czołgu?

Seria tekstów o budowie czołgu składa się z:

W teorii na piny EN1 i EN2 można podać sygnał PWN. Szybkość obracania się silników będzie zależała wtedy od stopnia wypełnienia sygnału (duty). W Ardunio UNO sygnał PWM generowany jest na piny:

  • 3, 9, 10, 11: 490 Hz
  • 5 i 6: 980 Hz

Niestety ani kombinacje częstotliwości ani inne czary nie działały.

Ale o co chodzi?!

Podłączyłem EN1 i EN2 do generatora sygnału (Siglent 810). I tu sytuacja się nie zmieniła – różne częstotliwości, czasy narastania przebiegów, wypełnienia – w żadnej kombinacji nie działało.

Dopóki…

Obniżyłem napięcie generowanych przebiegów do 3.3v. I nagle – wszystko zaczęło działać jak należy. Trochę zbity z tropu i zaskoczony zmierzyłem napięcie na pinie, do którego zwiera się EN1 i EN2 – i wyniosło… 3.8v. Ok, mimo że instrukcja mówi o tym, że moduł pracuje z Arduino i posługuje się logiką 5v – czyżby to nie była prawda?

Rozwiązanie

W końcu znalazłem dokumentację modułu:) Problem leżał w sposobie, w jaki zasiliłem układ. Silniki w wanience wytrzymują tylko 5v. Stąd ubec ustawiony na 5v. Tu pasuje. Ale lm298 ma osobny pin Vss zasilający logikę. W module podłączony jest do bloku 5v (wtedy należy usunąć jumper „5v enable”) lub z VCC (zasilanie silników) do regulatora 7805 – wtedy 5v jest wyjściem, nie wejściem (jumper włożony). 7805 'kradnie’ trochę napięcia – stąd 3.8v na logice gdy zasilam ją z 5v ubec. 3.8v to za mało do zasilenia logiki – lm298 wymaga 4.5 – do max 7v na pinie Vss. Co więcej, Arduino podawało logikę na poziomie 5v. I to niedopasowania mogło również sprawiać kłopoty.

Rozwiązanie? Wystarczy wyjąć jumper J8 (5v Enable) i podłączyć zasilanie z UBEC na port 5v oraz silników – oznaczony 12v. Logika i silniki zasilane są bezpośrednio z ubec.

Testy

No wreszcie silniki zaczęły pracować jak powinny:) 490HZ z pinów Arduino wystarcza w zupełności. Oczywiście wypełnienie PWM musi być odpowiednio dobrane – poniżej pewnego poziomu silniki nie ruszą. U mnie było to 160%, czyli:

100% oznacza maksymalną moc.

Wnioski?

Warto czytać dokumentację:)

Źródła

  • http://www.handsontec.com/dataspecs/L298N%20Motor%20Driver.pdf