Elektroda.pl
Elektroda.pl
X
Computer ControlsComputer Controls
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

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

09 Paź 2013 16:47 9621 38
  • Poziom 8  
    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:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Definicje funkcji:

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Computer ControlsComputer Controls
  • Poziom 8  
    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?
  • Computer ControlsComputer Controls
  • Moderator Mikrokontrolery Projektowanie
    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żę.
  • Poziom 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
  • Moderator Mikrokontrolery Projektowanie
    Piotrze popatrz na charakterystykę tego tranzystora, a zobaczysz, że spokojnie daje radę temu małemu silnikowi. Problem nie leży w tranzystorze, tylko w wykrywaniu BEMF.
  • Poziom 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.
  • Moderator Mikrokontrolery Projektowanie
    PiotrPitucha napisał:
    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 napisał:
    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 napisał:
    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.
  • Poziom 8  
    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.
  • Poziom 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
  • Moderator Mikrokontrolery Projektowanie
    Micho91 napisał:
    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 napisał:
    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 :)
  • Poziom 8  
    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
  • Poziom 35  
    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 .
  • Moderator Mikrokontrolery Projektowanie
    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 napisał:
    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.
  • Poziom 8  
    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ę.
  • Poziom 8  
    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??
  • Moderator Mikrokontrolery Projektowanie
    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 napisał:
    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.
  • Poziom 8  
    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:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    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???
  • Moderator Mikrokontrolery Projektowanie
    Nie było mnie parę dni, poradziłeś już sobie?
  • Poziom 8  
    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.
  • Poziom 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.
  • Moderator Mikrokontrolery Projektowanie
    Micho91 napisał:
    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 napisał:
    ...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ć.
  • Poziom 21  
    nie pomyliłeś faz w układzie sprzężenia od EMF (ADC0..2) ?
  • Poziom 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 :)
  • Moderator Mikrokontrolery Projektowanie
    Witaj.

    PiotrPitucha napisał:
    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:


    Link


    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ęć.
  • Poziom 9  
    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.
  • Poziom 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
  • Poziom 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.