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).
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
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:
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ń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ńOczywiście to zależy od tego jakiego mostka użyjesz. Są scalone mostki które mają nawet 9,6A: NCV7729BPPR2G
OdpowiedzUsuńalbo np. 5A: MC33886VW
W ostateczności zawsze można zrobić mostek na tranzystorach mocy.
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ń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ńLinki do mostków nie działają niestety
OdpowiedzUsuńDziękuję za informację. Już poprawione.
OdpowiedzUsuńProszę podać w jakim programie mogę zrobić taką symulacje ?
OdpowiedzUsuńO jaką symulację pytasz?
OdpowiedzUsuń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ńFajnie, że artykuł się przydał. Pozwoliłem sobie zacytować fragment Twojej wypowiedzi :-)
OdpowiedzUsuńDopisałem także czerwonym tekstem, że w takich urządzeniach warto dodać kondensator na pinie RESET z pewnym zastrzeżeniem.
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.
OdpowiedzUsuń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.
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ń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?
OdpowiedzUsuń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.
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ńDzięki, za szybką odpowiedź.
Usuń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.
Witam, chciałem zadać 3 nurtujące mnie pytania:
OdpowiedzUsuń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!
Witaj.
Usuń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ą.
Dziękuję za odpowiedzi!
Usuń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!
Witam ponownie!
OdpowiedzUsuń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!
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).
OdpowiedzUsuń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.
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ńWitam, Jest możliwość wysterowania silnika który pobiera 14 A za pomocą mikrokontrolera?
OdpowiedzUsuńBezpośrednio? Oczywiście nie. Musisz dodać driver silnika, chociażby najprostszy.
Usuń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ść..
OdpowiedzUsuń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.
Gwoli ścisłości - chodziło o zaoszczędzenie pinu a efekt miał być taki: pin_1 - PWM; pin_2 - (0) lewo, (1) prawo.
UsuńNiestety z wyżej podanej przyczyny nie jestem pewny czy takie rozwiązanie można bezpiecznie zaimplementować do projektu :/
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ń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ń