Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Atmega8+silnik BLDC - niewłaściwy rozruch silnika

Micho91 09 Oct 2013 16:47 10155 38
IGE-XAO
  • #1
    Micho91
    Level 9  
    Witam, próbuje zrobić sterownik silnika BLDC z wykorzystaniem uC Atmega8. Schemat i program zaczerpnąłem ze strony mikrokontrolery.blogspot. Układ został złożony zgodnie ze schematem:
    Atmega8+silnik BLDC - niewłaściwy rozruch silnika
    Jedyną różnice stanowią dolne tranzystory, ja użyłem IRFZ44N oraz zamiast dławika 10uH użyłem rezystor 10ohm. Ponad to zmodyfikowałem trochę program wydłużając czas rozruchu silnika. Problem polega na tym, że silnik startuje zgodnie z założonym algorytmem ale nie przechodzi z fazy startu (praca bez znajomości położenia wirnika) do fazy normalnej pracy (praca ze znajomością położenia wirnika). Warunkiem przejścia do trybu normalnej pracy jest wymagana liczba przerwań z komparatora. Wnioskuję, że skoro sterownik nie przechodzi do tej fazy to komparator nie generuje przerwań. Czy ktoś doświadczony w tym temacie mógłby powiedzieć co jest przyczyną takiego zachowania sterownika? Jakie mogą być inne przyczyny nie prawidłowej pracy sterownika? Wszelkie uwagi będą dla mnie cenne. Poniżej zamieszczam kod programu a filmik prezentujący pracę silnika dodaję w załączniku.

    Główna funkcja programu:
    Code: c
    Log in, to see the code


    Definicje funkcji:

    Code: c
    Log in, to see the code
    [28-30.06.2022, targi] PowerUP EXPO 2022 - zasilanie w elektronice. Zarejestruj się za darmo
  • IGE-XAO
  • #3
    Micho91
    Level 9  
    Niestety nie mam dostępu do oscyloskopu. A jakie mogą być przyczyny braku przerwań. Może są jakieś błędy w kodzie albo niewłaściwa konfiguracja komparatora?
  • IGE-XAO
  • #4
    dondu
    Moderator on vacation ...
    W takim razie skoro masz ten sam mikrokontroler oraz ten sam schemat, to wgraj najpierw dokładnie ten program, który tam przedstawiłem. Tylko ustaw ATmegę na 8MHz. Wtedy będziemy wiedzieli, czy to problem programu, czy Twojego układu. Jeżeli nadal nie będzie działać, to wrzuć sporo zdjęć Twojej płytki - może coś zauważę.
  • #5
    PiotrPitucha
    Level 33  
    Witam
    Na moje oko to wyrzuć te IRFZ44 bo się do tego nie nadają, jak widać na schemacie to są podpięte prosto pod procesor, a manual mówi że Ugs dla tego tranzystora i sensownego prądu to 10V i to by było na tyle.
    Piotr
  • #7
    PiotrPitucha
    Level 33  
    Witam
    Właśnie patrzyłem na na charakterystykę i dla 25° i Ugs=4V prąd jest praktycznie równy zero.
    Nie znam układu i częstotliwości PWM, ale ten tranzystor ma też znaczną pojemność bramki, 1,9nF i myślę że dla częstotliwości stosowanej w silnikach bezszczotkowych Ugs może nie przekroczyć tych 4V na bramce, myślę że wstawienie tam tranzystora przeznaczonego do sterowania poziomami logicznym załatwi sprawę.
    Tranzystor który tam jest oryginalnie też nie jest najlepszy do tego celu, ale ma przynajmniej małą pojemność bramki ( 0,33nF ).
    Pojęcie mały silnik BLDC jest bardzo względne, niepozorne z wyglądu silniki potrafią pociągnąć kilkadziesiąt amper jeśli są obciążone niewielkim śmigłem.
    Pozdrawiam
    EDIT
    Jeśli silnik mały ( < 15A ) to IRF7455 jest godny polecenia, coprawda duża pojemność bramki ale już dla 2,5V na bramce praktycznie się zamyka.
  • #8
    dondu
    Moderator on vacation ...
    PiotrPitucha wrote:
    Właśnie patrzyłem na na charakterystykę i dla 25° i Ugs=4V prąd jest praktycznie równy zero.

    Z którego wykresu wyciągasz takie wnioski? Zaznacz proszę ten punkt na wykresie i pokaż go.
    http://www.irf.com/product-info/datasheets/data/irfz44n.pdf


    PiotrPitucha wrote:
    Nie znam układu i częstotliwości PWM, ale ten tranzystor ma też znaczną pojemność bramki, 1,9nF i myślę że dla częstotliwości stosowanej w silnikach bezszczotkowych Ugs może nie przekroczyć tych 4V na bramce,...

    Na razie to on kręci się z prędkością okołu kilkuset obrotów na minutę, więc pojemność bramki nie ma najmniejszego znaczenia, a napięcie na bramce na pewno dochodzi do 5V.

    PiotrPitucha wrote:
    Pojęcie mały silnik BLDC jest bardzo względne, niepozorne z wyglądu silniki potrafią pociągnąć kilkadziesiąt amper jeśli są obciążone niewielkim śmigłem.

    Na razie nie ma żadnego obciążenia. Patrzyłeś na filmik?

    Dlatego powtórzę jeszcze raz: Problemem nie jest tranzystor, tylko brak reakcji układu na BEMF.
  • #9
    Micho91
    Level 9  
    Wgrałem orginalny program i silnik zachowuje sie identycznie. Atmega jest ustawiona na 8Mhz, jeszcze jedna rzeczą którą różni układ od orginału jest brak kondensatorów pomiędzy 12V a GND ale to chyba nie wplywa tak znacząco na układ. Zdjęć nie moge narazie wstawic ponieważ układ jest zmontowany na płytce stykowej i nic nie widać oprócz sterty kabli. Postaram się jakoś to uporządkować w weekend tak żeby było coś widać. A mogloby być tak że sam komparator jest uszkodzony albo w jakiś sposób zablokowany (Atmega którą posiadam jest dosyć wiekowa i wiele przeszła). Silnik jest z dysku twardego.
  • #10
    PiotrPitucha
    Level 33  
    Witam
    Film widziałem, silnik gabarytowo zbliżony do silnika z napędu CD.
    Nie wiem co ma pod maską :) bo może być oryginalny lub przewijany, jak przewijany to bez obciążenia może pociągnąć dość dużo prądu.
    Twoje charakterystyki wyglądają nie najgorzej, ale moje już nie tak fajnie, podpierałem się trzecim rysunkiem tylko że moje rysunki pochodzą z firmy Vishay i różnią się w zakresie niskich napięć na bramce od tego co Ty zaproponowałeś.
    Może masz rację co do generowania BEMF, z daleka trudno to wyczuć.
    Jeśli problem jest z tranzystorami to bardzo łatwo to sprawdzić, lekko obciążyć silnik i po kilkunastu sekundach sprawdzić czy tranzystory się grzeją.
    Jeśli wszystko jest OK to nie mają powodu być nawet letnie i szukamy dalej :)
    Pozdrawiam
  • #11
    dondu
    Moderator on vacation ...
    Micho91 wrote:
    Zdjęć nie moge narazie wstawic ponieważ układ jest zmontowany na płytce stykowej i nic nie widać oprócz sterty kabli. Postaram się jakoś to uporządkować w weekend tak żeby było coś widać.

    Właśnie dla tego, że na stykówce, to zdjęcia mogą być istotne. Jutro będę raczej nieuchwytny, ale w sobotę powinienem być dostępny.

    Micho91 wrote:
    A mogloby być tak że sam komparator jest uszkodzony albo w jakiś sposób zablokowany (Atmega którą posiadam jest dosyć wiekowa i wiele przeszła). Silnik jest z dysku twardego.

    To łatwo sprawdzić za pomocą dwóch potencjometrów: http://mikrokontrolery.blogspot.com/2011/03/avr-komparator-analogowy.html
    link na wszelki wypadek. Tylko będziesz musiał sprawdzić wszystkie 3 wejścia ADC pod kątem ich przełączania na wejście odwracające komparatora.

    @Piotr
    OK - na razie sprawdzić trzeba BEMF :)
  • #13
    Micho91
    Level 9  
    Tak jak prosiłeś dodaję zdjęcia płytki.

    Atmega8+silnik BLDC - niewłaściwy rozruch silnika Atmega8+silnik BLDC - niewłaściwy rozruch silnika
  • #14
    kamyczek
    Level 38  
    Te silniki mają bardzo słabe magnesy i dlatego mogą indukować bardzo niewielki prąd w uzwojeniach który jest niewystarczający aby prawidłowo zadziałał układ z komparatorami . Proponuje do testów użyć silniczka modelarskiego typu "dzwonek" np. E-MAX 2205 lub podobny .
  • #15
    dondu
    Moderator on vacation ...
    Niestety miałeś rację, że ciężko to sprawdzić w takim stanie na podstawie zdjęć.
    Czy zrobiłeś to co sugerowałem w moim poprzednim poście?

    kamyczek wrote:
    te silniki mają bardzo słabe magnesy i dlatego mogą indukować bardzo niewielki prąd w uzwojeniach który jest niewystarczający aby prawidłowo zadziałał układ z komparatorami.

    Oj, to chyba zbyt daleko idący wniosek :)
    Najpierw musimy się upewnić, że mikrokontroler nie jest uszkodzonym, co sugerował właściciel.
  • #16
    Micho91
    Level 9  
    Sprawdziłem komparator (wszystkie trzy wejscia ADC) i wszystko jest z nim ok. Zauważyłem że dolne tranzystory się grzeją. Może tutaj jednak leży przyczyna? Chociaż pomimo to, że się grzeją silnik w fazie START pracuje dobrze... Dla pewności zamówiłem już tranzystory IRFU120 (takie jak użyte były w projekcie). Zobaczymy co się będzie działo jak ich użyję.
  • #17
    Micho91
    Level 9  
    Zamontowałem w układzie tranzystory IRFU120N takie jak były w orginalnym projekcie ale niestety problem się powtarza. Zauważyłem też że dolne tranzystory mocno się grzeją a górne prawie w ogóle. Udało mi się rozpędzić silnik do dość wysokiej prędkości obrotowej także myśle że sygnały BEMF są już na wystarczającym poziomie... Ma ktoś pomysł co tu może być jeszcze źle??
  • #18
    dondu
    Moderator on vacation ...
    Tak jak pisałem wcześniej, tranzystor nie ma znaczenia dla BEMF. W przypadku opisanym w artykule (schemat + program + silnik z HDD) tranzystory były zimne jak otoczenie nawet przy 5500rpm. Problem grzania się tranzystorów w Twoim przypadku wynika bezpośrednio z faktu, że algorytm nie przeskakuje na tryb pracy z BEMF.

    Problem musi leżeć w Twoim układzie lub zmianach w programie, ponieważ Twój silnik nie wygląda na odbiegający od przeciętnego silnika z HDD.

    Dobrze byłoby byś dorwał jakiś oscyloskop i sprawdził przebiegi na sygnałach BEMF. Wtedy będziemy mogli stwierdzić co dociera do mikrokontrolera i na tej podstawie określić przyczynę Twoich problemów.

    W przypadku braku oscyloskopu możesz wykorzystać ten z karty dźwiękowej: http://mikrokontrolery.blogspot.com/2011/04/darmowy-oscyloskop-i-analizator.html
    ale nie zapomnij zastosować dzielnika rezystorowego. Pasmo przenoszenia powinno spokojnie wystarczyć do analizy BEMF.

    Micho91 wrote:
    Sprawdziłem komparator (wszystkie trzy wejscia ADC) i wszystko jest z nim ok.

    Opisz także, jak to sprawdziłeś.

    EDIT.
    Zmierz proszę multimetrem rezystancję uzwojeń silnika.
  • #19
    Micho91
    Level 9  
    Rezystancja uzwojeń wynosi 6 ohm. Komparator sprawdzałem według poleconego sposobu Link. Do oscyloskopu nie mam niestety dostępu. Jutro kupię nowy uC dla pewności i zobaczę co się będzie działo...
    ..........................
    Dondu wymieniełem atmege na nową i problem przejścia na stan PRACA się chyba rozwiązał:) Dla pewności pod PD0 podłączyłem diodę LED i zmodyfikowałem program tak żeby sygnalizowała ona ze procesor przeszedł w tryb pracy:
    Code: c
    Log in, to see the code


    I rzeczywiście silnik się rozkręca, dioda się zapala ale silnik staje... Ale jak ruszam wirnikiem to czuć że prąd płynie przez cewki bo ciężko go przekręcić. Jaka może być tego przyczyna? I jeszcze dodam że podczas tych testów spaliłem jeden tranzystor IRFU120N, i zastąpiłem go IRFZ44N ma to jakieś znaczenie???
  • #21
    Micho91
    Level 9  
    Nie do końca:) tak jak pisałem wcześniej wymieniłem uC na nowy egzemplarz i sterownik przechodzi w stan Pracy czyli wykrywa przerwania ale po przejściu silnik staje... Jak ruszam wirnikiem to stawia opór czyli prąd przez cewki płynie, spaliłem przy tym trochę tranzystorów:) spróbuję zmontować układ na normalnej płytce PCB może to coś pomoże, bo tak to wszystko jest prawie jak w orginalnym projekcie.
  • #22
    PiotrPitucha
    Level 33  
    Witam
    Nie da się spalić w takim układzie tranzystora jeśli jest prawidłowo wysterowany, przy tej rezystancji uzwojeń prąd jest na tyle mizerny że prawidłowo wysterowany tranzystor nie ma nawet prawa się zagrzać.
    Któryś z kolegów radził Ci zastosować tranzystory sterowane poziomem logicznym, moim pierwszym typem był brak wysterowania tranzystorów w masie i nadal wydaje mi się to być przyczyną kłopotów.
  • #23
    dondu
    Moderator on vacation ...
    Micho91 wrote:
    tak jak pisałem wcześniej wymieniłem uC na nowy egzemplarz i sterownik przechodzi w stan Pracy czyli wykrywa przerwania ale po przejściu silnik staje...

    Stawanie silnika oznacza jedno - brak synchronizacji spowodowany brakiem prawidłowej reakcji na sygnał BEMF.

    PiotrPitucha wrote:
    ...i nadal wydaje mi się to być przyczyną kłopotów.

    Brak synchronizacji powoduje nieprawidłowe włączanie tranzystorów w konsekwencji ich grzanie się. Dlatego będę uparcie twierdził, że tranzystory nie są problemem.

    Problemem jest Twój układ lub zmiany w kodzie. Niestety na podstawie zdjęć nie jestem w stanie sprawdzić połączeń, a od tego należy zacząć, tym bardziej, że nie masz dostępu do oscyloskopu, a z karty dźwiękowej nie chcesz skorzystać.
  • #24
    Piotr Piechota
    Level 21  
    nie pomyliłeś faz w układzie sprzężenia od EMF (ADC0..2) ?
  • #25
    PiotrPitucha
    Level 33  
    Witam
    dondu nie neguję Twoich rozważań, ale jeśli pytający spalił tranzystor i to nie jeden przy rezystancji cewki 6Ω to coś jest nie tak, 2A nie stanowi problemu dla takiego tranzystora, rezystancja kanału jest tak mała że bez radiatora powinien być on zimny.
    Moim zdaniem ubić tranzystor można tylko w wypadku gdy tranzystory z kanałem P i N są włączone równocześnie, lub jest on nie w pełni wysterowany, ale wtedy destrukcja będzie powolna i poprzedzona mocnym grzaniem.
    Brak synchronizacji nigdy nie powinien skutkować równoczesnym włączeniem tranzystorów w jednej gałęzi, chyba że program jest pisany byle jak.
    Czytałem o jakimś chińskim komercyjnym regulatorze który w czasie aktualizacji oprogramowania pobierał ponad 70A z baterii :)
    Sam poczyniłem swego czasu mostek z nieprzemyślanym rozłożeniem sterowania i przypaliłem palce przy programowaniu :)
  • #26
    dondu
    Moderator on vacation ...
    Witaj.

    PiotrPitucha wrote:
    Czytałem o jakimś chińskim komercyjnym regulatorze który w czasie aktualizacji oprogramowania pobierał ponad 70A z baterii :)
    Sam poczyniłem swego czasu mostek z nieprzemyślanym rozłożeniem sterowania i przypaliłem palce przy programowaniu :)

    Jeżeli autor wykonał sterownik zgodnie ze schematem, to zauważ, że wszystkie tranzystory sterujące silnikiem, mają rezystory zamykające je w przypadku gdy piny mikrokontrolera są w stanie wysokiej impedancji, a tak się dzieje, gdy jest w trybie programowania.

    Wyjątkiem jest tylko tranzystor Q4, który jest podłączony do MOSI i w trakcie programowania jest włączany w takt tego sygnału. Jednakże, pozostałe są wyłączone, stąd nie ma żadnego przepływu prądu przez żaden tranzystor MOSFET.

    Widocznie chińczyk pożałował 8 rezystorów (albo miał braki wiedzy) i skutek był taki jak piszesz :)

    Dla początkujących: Chodzi o rezystory np. R4 i R3 w FAZA U. W pozostałych fazach adekwatne.
    I filmik do tego:



    Co do włączenia rezystorów tranzystora górnego i dolnego w tym samym momencie w czasie pracy silnika, nie jest to możliwe, ponieważ autor wykorzystał moją funkcję bezpiecznika: bldc_bezpiecznik_stop().

    Dla początkujących: Opis problemu i rozwiązania oraz funkcji: http://mikrokontrolery.blogspot.com/2011/03/silnik-bldc-sterownik-bezpiecznik-test.html

    Musimy poczekać, aż autor zmontuje to tak, by można było sprawdzić za pomocą zdjęć.
  • #27
    Marcinooos
    Level 10  
    Witam,

    nie chcę zakładać nowego wątku. Mam bardzo podobny kłopot, jak omówiony w tym temacie.
    Na podstawie strony mikrokontrolery.blogspot.com/2011/03/silnik-bldc-spis-tresci
    napisałem program sterownika silnika BLDC na zestaw (ATMega644p oraz mostek STM L6234).
    Kłopot polega na tym, że raz silnik kręci się tak jak powinien z wykorzystaniem przerwań od komparatora(dodałem diodę LED), czasami mimo włączenia diody LED silnik stoi, a czasami silnik już po rozpędzeniu staje(komparator nie załącza się)(staje przy
    "// 4. SEM rozpedzenie tak by pomiar byl mozliwy

    ACSR |= (1<<ACIE);"
    )
    Jestem pewny, że popełniłem gdzieś mały błąd.. niestety nie mogę dotrzeć gdzie... Bardzo proszę o podpowiedz/pomoc.
    W każdej chwili mogę udostępnić wszelkie niezbędne zdjęcia itp.
  • #28
    apollo1412
    Level 11  
    Podbijam temat.
    Ja również mam problem z trybem praca w silniku. Mam dokładnie taki sam układ jak z przykładów, te same tranzystory itd. Ja również podłączyłem diodę sygnalizującą przejście do trybu praca. Co ciekawe zapala się ona, nawet jak silnik NIE JEST PODŁĄCZONY. W takim razie zmienna bldc_komp_licznikn chyba jednak nie zlicza odpowiednich przerwań.
    Dorzucam zdjęcia i filmik
    https://www.youtube.com/watch?v=uJs0rt0OPho&feature=youtu.be
  • #29
    dondu
    Moderator on vacation ...
    Nie podejmę się sprawdzenia tych połączeń :)
    Możesz wykonać płytkę PCB?
    Jeżeli tak, to zrób sobie tę z artykułu: http://mikrokontrolery.blogspot.com/2011/03/S...k-BLDC-driver-drajwer-schemat-plytka-pcb.html
    lub przerób ją na elementy THT, które masz. Pliki Eagle są tam do pobrania.

    Specjalnie ją zaprojektowałem do ćwiczenia z silnikami BLDC.
  • #30
    apollo1412
    Level 11  
    Połącznie są dobre, sprawdzałem kilka razy przez kilka dni. Jak widać nie jestem pierwszy któremu nie działa, a który zrobił wszystko zgodnie z artykułem. Może tam się jakiś błąd, albo w programie - jest dość skomplikowany jak dla mnie.

    Ale program zlicza bldc_komp_licznikn czyli przejścia faz przez zero, nawet na niepodłączonym silniku.