czwartek, 14 kwietnia 2011

Silnik DC


Autor: Dondu

Zapewne wiesz, że silnik DC, to silnik prądu stałego, którego kierunek obrotów zależy od tego, na które wejście podasz  plus, a na które minus.

Sterowanie takim silnikiem jest proste, ale nie może on być podpięty bezpośrednio do mikrokontrolera, ponieważ prąd płynący przez silnik jest zbyt duży i uszkodzi mikrokontroler. Dlatego stosuje się tzw. mostek H (ang. H-bridge).





Mostek możesz zbudować z 4 tranzystorów, ale ja preferuję gotowe scalaki zawierające taki mostek, jak np.

Sam mostek działa według zasady pokazanej na poniższych animacjach.

Diody - do czego służą?
Silnik DC generuje zakłócenia w postaci tzw. szpilek które mogą mieć napięcie znacznie wyższe od Vcc. Dlatego do tranzystorów dołączane są diody Schottky w sposób pokazany na schemacie po prawej, a ich zadaniem jest eliminowanie powstających szpilek. Więcej na ten temat dowiesz się tutaj: Szpilki jak eliminować?


Nie wszystkie układy scalone zawierają w/w diody, dlatego powinieneś uważnie czytać ich dokumentację.

Co się stanie jeżeli nie zastosuję diod?
  • prawie pewna jest nieprawidłowa praca mikrokontrolera (losowe objawy),
  • w najgorszym przypadku możesz uszkodzić mikrokontroler i/lub mostek H.

Przekonało się o tym wiele osób, a w komentarzach poniżej napisał o także Dominik więc pozwolę sobie zacytować fragment:

Dominik
Dopóki nie podniosłem wypełnienia do momentu aż silnik się uruchomił wszystko git. Ale gdy przekroczyłem tą granicę mikrokontroler zaczął się restartować. Więc wbijam na blog, szukam i jest! Znalazłem gdzieś w odzysku diodę shottky, podłączam i ave :D Silnik śmiga jak ta lala :D

W urządzeniach z silnikami, przekaźnikami, itp. (elementy indukcyjne) warto dodać kondensator na pinie RESET. Ale może to spowodować problemy z zaprogramowaniem mikrokontrolera, więc razem z kondensatorem warto dodać jumper ze zworką, by móc go odłączyć na czas programowania. Więcej na ten temat: RESET vs kondensator



Kierunek obrotów

Mostek H pozwala na prostą klontrolę nad kierunkiem obrotów silnika DC.





Mostek H można wykonać na setki sposobów. Oto kilka wariantów:







Prędkość obrotowa

Prędkość obrotową można sterować za pomocą tzw. PWM, który obrazowo pisząc reguluje średnią ilość prądu, który przepływa przez silnik. Prąd ten reguluje się tzw. "Duty cycle" czyli wypełnieniem. To bardzo prosta technika, a odpowiednie peryferia są prawie w każdym mikrokontrolerze.

O PWM szczyptę wiedzy znajdziesz tutaj: PWM - co to takiego?


PWM + mostek H = Pełna kontrola silnika DC


Przykładowe projekty

Projekty z silnikami DC znajdziesz tutaj: Ciekawe projekty - Silnik DC



Zanim rozpoczniesz zabawę z silnikiem DC, przeczytaj:


28 komentarzy:

  1. Przyglądam się animacjom na mostku i coś i tu nie pasuje. Zakładając że 1 na bazach tranzystorów = napięcie Vcc, tranzystory górne pnp przy 1 na bazie będą zatkane, czyli inaczej niż na rysunku.

    OdpowiedzUsuń
  2. Aby nie było wątpliwości zmieniłem animację na przedstawiającą koncepcję mostka H i dodałem kilka przykładowych rozwiązań. Dzięki za zwrócenie uwagi.

    OdpowiedzUsuń
  3. Oczywiście to zależy od tego jakiego mostka użyjesz. Są scalone mostki które mają nawet 9,6A: NCV7729BPPR2G
    albo np. 5A: MC33886VW

    W ostateczności zawsze można zrobić mostek na tranzystorach mocy.

    OdpowiedzUsuń
  4. To już zależy od zastosowanego mostka, bo jak napisałem w artykule, niektóre z nich mają diody, a niektóre nie. Ustalić to musisz w dokumentacji mostka. Jeżeli diod nie ma, musisz zastosować zewnętrzne.

    OdpowiedzUsuń
  5. Zewnętrzne diody mają jeszcze jedno zadanie - odbierają część energii, w efekcie struktura scalona się mniej grzeje i można ją bardziej obciążyć.

    OdpowiedzUsuń
  6. Linki do mostków nie działają niestety

    OdpowiedzUsuń
  7. Dziękuję za informację. Już poprawione.

    OdpowiedzUsuń
  8. Proszę podać w jakim programie mogę zrobić taką symulacje ?

    OdpowiedzUsuń
  9. O jaką symulację pytasz?

    OdpowiedzUsuń
  10. Dondu, jesteś mistrzem :D Twój blog po raz kolejny uratował mój projekt :D Tym razem kontroler silnika DC - potrzebowałem tylko, żeby się kręcił w jedną stronę, więc podłączyłem tranzystor NPN w układzie włącznika do wyjścia PWM przez rezystor 10k i włączam.. Dopóki nie podniosłem wypełnienia do momentu aż silnik się uruchomił wszystko git. Ale gdy przekroczyłem tą granicę mikrokontroler zaczął się restartować. Więc wbijam na blog, szukam i jest! Znalazłem gdzieś w odzysku diodę shottky, podłączam i ave :D Silnik śmiga jak ta lala :D

    OdpowiedzUsuń
  11. Fajnie, że artykuł się przydał. Pozwoliłem sobie zacytować fragment Twojej wypowiedzi :-)
    Dopisałem także czerwonym tekstem, że w takich urządzeniach warto dodać kondensator na pinie RESET z pewnym zastrzeżeniem.

    OdpowiedzUsuń
  12. Witam pytanie może i banalne ale ciągle mnie dręczy chodzi o sterowanie silnikiem krokowym przez L293D z pokładu atmega32. Powiedzmy ze PWM albo jest z Atmega albo tyle co VCC, czyli wyprowadzenia 1,16,9 +5V z osobnego źródła zasilania co mikroprocesor.
    VCC1 na 12V z zasilacza komputerowego i masy do zasilacza komputerowego czy takie podłączenie mas jest poprawne. 2,7,15, 10 sterowanie A,A1,B,B1 cewek. 3,6,14,11 podłączenie wyprowadzeń silników.

    OdpowiedzUsuń
  13. Prośba - narysuj schemat, wrzuć np. na imageschack.com i załącz link tutaj. W ten sposób oszczędzisz nasz czas na zaglądanie do datasheet.

    OdpowiedzUsuń
  14. Mam pytanie z gatunku banalnych. Prędkość obrotowa w silniku prądu stałego niemal liniowo zależy od napięcia zasilania. Dlaczego zatem tak często stosuje się sterowanie PWM zamiast zmiany napięcia zasilania?
    A konkretnie - przy budowie gramofonów dużą wagę przywiązuje się do stabilności obrotów talerza. Czy nie prościej byłoby dać dwa prostowniki na dwa napięcia (co zapewniłoby dwie prędkości obrotowe) zamiast stosować układy impulsowe? Czy sterowanie przez PWM nie wymusza niejako lekko "skokowej" pracy silnika? Domyślam, że do tego dochodzą różne zjawiska nieco "wygładzające" tą pracę (np. moment pędu wirnika) - ale czy to wszystko?

    Pozdrawiam
    J.

    OdpowiedzUsuń
    Odpowiedzi
    1. Bardzo dobre pytanie. Zacznę od końca - skokowego sterowania nie będzie, bo rotor ma swoją bezwładność i inercja załatwi sprawę. Te impulsy są bardzo któtkie. A dlaczego PWM? Powodem jest moment obrotowy silnika, który zależy od indukcji, a ta od prądu. Jeśli do sterowania wykorzystywanoby co raz niższe napięcie to malałby też prąd a co za tym idzie malałby moment. W efekcie silnik byłby "słaby", kręciłby się wolniej, ale jakiekolwiek obciążenie by go całkowicie zatrzymało. W przypadku sterowania PWM w dużym zakresie moment obrotowy silnika się nie zmienia, dzięki czemu kręci się wolniej, ale ciągle jest "silny".

      Usuń
    2. Dzięki, za szybką odpowiedź.
      Ja rozumiem, że moment zależy od prądu - ale czy w momencie gdy obciążymy silnik (przy stałym napięciu zasilania) to czasem nie wzrośnie prąd obciążenia, a tym samym moment?

      Pytam bo akurat mam stary gramofon w którym stabilizacja obrotów kompletnie się rozsypała. Mam schemat elektroniczny i wiem, że dla przeciętnego elektronika jest on do ogarnięcia, ale elektronikiem nie jestem więc pomyślałem, że będzie to fajny temat, żeby w końcu wykorzystać kreatywnie wykorzystać moje Raspberry Pi - czyli stabilizować obroty gramofonu. Jeśli algorytm będzie OK zabiorę się za jakiś rasowy mikrokontroler, pewnie któryś z tych małych Cortex M0 w obudowie 8DIP lub coś w tym guście.

      Pozdrawiam
      J.

      Usuń
  15. Witam, chciałem zadać 3 nurtujące mnie pytania:
    1. Najprostsze, ale niekoniecznie oczywiste:
    Czy maksymalną prędkość silnika uzyskamy podłączając mu "ciągły" stan wysoki (np. 5V, lub 12V)?
    A PWMa użyjemy wyłącznie, kiedy będziemy chcieli silnik "zwolnić" (Zmniejszając wypełnienie)?

    Czy może są silniki DC które muszą być sterowane PWMem i nie tolerują ciągłego stanu wysokiego? (Pomijam teraz serwa i inne tego typu rzeczy - mam na myśli szybkoobrotowe silniki DC).

    2. Jeszcze odnośnie szybkooborotowych silników DC - czy jedyną możliwością "monitorowania" jego obciążenia przez uC jest użycie układu typu L298N ?

    3. I ostatnie - czy takowy silnik DC 12 V (2 A) można zasilić z taniego zasilacza impulsowego? Czy obowiązkowo musi tutaj być transformator? Głównie chodzi o minimalizację rozmiaru urządzenia z silnikiem i sterownikiem...

    Pozdrawiam!

    OdpowiedzUsuń
    Odpowiedzi
    1. Witaj.

      1. Tak. Silniki są przystosowane do pracy ciągłej z danym napięciem i wtedy osiągają największą prędkość obrotową.

      2. Nie. Można zrobić układ sterujący we własnym zakresie z uwzględnieniem pomiaru prądu (spadku napięcia na rezystorze - patrz jak to jest rozwiązane w L298).

      3. Może być zasilacz impulsowy, ale musi mieć oczywiście (podobnie jak transformator) odpowiednią wydolność prądową.

      Usuń
    2. Dziękuję za odpowiedzi!

      Właśnie zabieram się za zabawę w sterowanie takiego silniczka z uC. Póki co zrobiłem mini stroboskop do pomiaru prędkości obrotowej. Zobaczymy co dalej uda się zdziałać :)

      Pozdrawiam serdecznie!

      Usuń
  16. Witam ponownie!

    Jestem już po pierwszych próbach i testach sterownika silniczka. Procek, którego użyłem to STM32F103C8T6, sterownik L293 (wersja z Sensem była nieopłacalnie droga). L293 zmostkowałem, aby móc uzyskać trochę większy prądy.
    Wszystko działa pięknie (sterowanie kierunkiem, pomiar obciążenia), o ile nie zacznę używać PWMa. Moc silnika naprawdę spada wtedy dramatycznie, a żeby obniżyć prędkość obrotową dwukrotnie, wypełnienie PWMa musi być góra 5%. Przy takim wypełnieniu silnik zatrzymuje się po leciutkim dotknięciu go palcem... Czy to normalne? Czy da się obniżyć prędkość obrotową silnika bez tak ogromnej utraty mocy (szacuję, że moc spada 10 - 20x)?

    Silnik którym steruję, to stary niemiecki VEB, zasilany nominalnie przez 12V. Przy takim napięciu, bez obciążenia osiąga około 3800 rpm (prąd wtedy wynosi 0.06A). Silnik zasilany bezpośrednio z zasilacza, przy pełnym zablokowaniu wirnika, pobiera około 2.1 A.

    Kiedy steruję nim ze zmostkowanego L293, spadek napięcia wynosi ok 1.5V (na silniku jest 10,5V), a prąd przy pełnej blokadzie wynosi około 1.3A (to jeszcze jest w pełni akceptowalne).
    Kiedy załączam PWMa (np. 400 Hz), wypełnienie 50% bardzo nieznacznie zmienia prędkość obrotową (spada do ok 3500 rpm), ale poważnie obniża moc - pełna blokada silnika to już tylko 0.5A.
    Przy niższym wypełnieniu (25%) prędkość znów spada bardzo nieznacznie, wciąż jest powyżej 3000 rpm, ale mocy nie ma zupełnie (przy blokadzie - to 0.12A). Aby osiągnąć prędkość obrotową 2x mniejszą niż nominalną, wypełnienie musi być rzędu kilku procent, ale wtedy silnik ma nawet problemy z wystartowaniem, nie mówiąc już o uciągnięciu czegokolwiek...
    Częstotliwość PWMa testowałem w różnych wariantach od 300 Hz, przez 500Hz, 1 kHz, 10 kHz. Zawsze moc spadała ogromnie, a prędkość obrotowa bardzo nieznacznie. Przy wyższych częstotliwościach spadek prędkości obrotowej był większy (np. przy 10 kHz, wypełnienie 50% powodowało prędkość 2700 rpm), ale moc cały czas była żałosna.

    Jak w takim razie sterować prędkością samochodzika, skoro przy najniższych prędkościach nie jest on w stanie nawet ruszyć z miejsca? Może ten PWM musi być jakiś szczególny? A może spadek napięcia na L293 jest zbyt duży, lub L293 jest zbyt wolny albo ja używam za szybkiego PWMa?
    Jakie macie doświadczenia w tej kwestii i co robicie, żeby silnik nie był zupełnie pozbawiony mocy przy niższych prędkościach? Ja nie bardzo mogę użyć silnika z przekładnią, ponieważ potrzebuję tej nominalnej prędkości obrotowej (ok. 4000 rpm). Którą muszę obniżać i z powrotem podnosić bez wielkiej utraty mocy.

    Pozdrawiam!

    OdpowiedzUsuń
  17. I jeszcze jedna (być może istotna) informacja: Jako, że STM32 pracuje w logice 3.3V, a L293 w logice 5V, L293 jest sterowany z wyjścia Open-Drain procesora (podciągniętego rezystorem 22 k do 5V. Wyjście procka oczyście 5V-tolerant).
    To w każdym razie powoduje, że prostokątny przebieg PWMa jest trochę "zaokrąglony" przy narastaniu, na kształt funkcji logarytmicznej. Przy częstotliwościach powyżej 10 kHz, prostokąt bardziej przypomina piłę, więc nie testowałem częstotliwości wyższych niż 10 kHz. Dla niskich częstotliwości (rządu 400 Hz) to stopniowe narastanie na oscyloskopie nie jest w ogóle zauważalne.
    G.

    OdpowiedzUsuń
    Odpowiedzi
    1. Częstotliwość PWM w napędach wynosi ok 20kHz (chroni uszy). Silniki przewoltowuje się kilkakrotnie do PWM. Zrobiłeś filtr doloprzepustowy RC o czestotliwości załamania 1/(22k razy pojemność połączenia). Jesli zmniejszysz rezystancję podciągu zwiększysz częstotliwość załamania mimowolnego filtru RC. I dalej będzie to rozwiązanie kiepskie. Sugerowałbym sprzężenie szybkim transoptorem i separację galwaniczną. Wystarczy 6N136 lub 6N137. Mikrokontroler przeżyje wybuch mostka przy kolejnej próbie zatrzymania silnika pod napięciem. Poza tym zredukujesz zakłócenia od mostka, z którymi raczej sobie nie poradzisz przy wspólnych potencjałach. Poza tym powinieneś sprecyzować problem do rozwiązania. Prawdopodobnie chcesz zrobić napęd DC w którym możesz sterować momentem, prędkością lub położeniem. W twoim przypadku (samochodzik) najkorzystniejsze jest sterowanie prędkością. Niestety w tym celu musisz zrobić zamknięty układ regulacji w którym sygnałami zwrotnym będzie najprościej back EMF(przeciwnapięcie) twojego silnika (prędkość obrotowa) i prąd silnika (moment obrotowy). Wystarczy algorytm PI, typowa stała czasowa 1 ms. Prąd zdejmiesz mierząc napięcie na ułamkowym rezystorze między masą a "dołem mostka" wzmocnione kilkakrotnie i wyfiltrowane RC ok 1 ms. Przeciwnapięcie dwoma kanałami AC z dzielników od zacisków silnika w momencie wyłączenia kluczy. Gotowiec po angielsku powinieneś znaleźć na stronach dla modelarzy. Proponuję poczytać o maszynach prądu stałego z magnesem, o sposobach sterowania mostkiem przy jeżdzie, przy hamowaniu łagodnym (prądnicowym) , przy hamowaniu gwałtownym (na zwarcie twornika) i po co naprawdę są te diody na tranzystorach mostka. Nie są one ze względu cytuję "na tzw zakłócenia szpilkowe". Płynie przez nie realny prąd wirnika kiedy conajmniej jeden z tranzystorów po przekątnej jest wyłączony przy sterowaniu PWM. Powodzenia. Jacek.

      Usuń
  18. Witam, Jest możliwość wysterowania silnika który pobiera 14 A za pomocą mikrokontrolera?

    OdpowiedzUsuń
    Odpowiedzi
    1. Bezpośrednio? Oczywiście nie. Musisz dodać driver silnika, chociażby najprostszy.

      Usuń
  19. Odnośnie schematu mostka H mam pewne zastrzeżenie. Otóż zastanawiając się jak wysterować silniczek DC małej mocy aby obracał się w obie strony a nie posiadając doświadczenia z elektroniką wymyśliłem mostek H ;D. Co prawda schemat przypomina raczej mostek[X]; niż H ale to już inna inszość..

    do rzeczy: Nie wziąłem pod uwagę zakłóceń powodowanych przez silnik więc dzięki za info o diodach :) ale nie o tym chciałem ;P

    do rzeczy_2: Z mojego doświadczenia wynika, że tranzystory pracują wydajniej kiedy są podłączone odwrotnie niż na powyższym schemacie tzn. NPN od strony Vcc a PNP od strony masy. Prąd pobierany wówczas przez bazy tranzystorów jest wielokrotnie mniejszy a przecież bazy zasilane są z portów uC więc przy większym obciążeniu jak mniemam może mieć to znaczenie tak dla procesora jak i tranzystorów;)

    Mógłby mi ktoś wyjaśnić co jest tego przyczyną? Nadmienię, że poza wyższym poborem prądu przez tranzystory układ pracuje poprawnie co najmniej kilka minut.

    Zastosowane tranzystory to BC237, BC557 itp. podłączone do uC przez rezystor a silnik pochodzi z walkmana.

    OdpowiedzUsuń
    Odpowiedzi
    1. Gwoli ścisłości - chodziło o zaoszczędzenie pinu a efekt miał być taki: pin_1 - PWM; pin_2 - (0) lewo, (1) prawo.
      Niestety z wyżej podanej przyczyny nie jestem pewny czy takie rozwiązanie można bezpiecznie zaimplementować do projektu :/

      Usuń
  20. a jak bedzie sie sprawowal silnik DC podlaczony do baterii slonecznej na krotko napedzajacy wentylator czy trzeba by bylo taki mostek H oraz PWM stosowac?

    OdpowiedzUsuń
    Odpowiedzi
    1. Uwazam ze takie bezposrednie wpiecie pod panel nie jest dobre poniewaz wydajnosc ogniwa jest zalezna od naslonecznienia. Mysle ze to zrodlo zasilania mialoby sens w momenciw pobierania energi z akumulatora gdzie napiecie i prad masz o stalej wartosci.

      Usuń