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

Drajwer, driver silników BLDC i DC (wersja edukacyjna do testów oprogramowania)

dondu 25 Mar 2014 10:02 33435 45
  • #31
    mirek_zaf
    Poziom 15  
    Po przeglądnięciu zagranicznych forum dyskusyjnych, ostatecznie wybór drivera mosfeta padł na TC4427 (nowsza wersja TC427) z dwom akanałami nieodwracającymi.

    Tak przeglądam jeszcze ten przykładowy kod programu, bo właśnie oprogramowuję swoją przetwornicę na mostku H i ta funkcja bezpiecznik w takiej formie jest chyba dużo bardziej przejrzysta.

    Cytat:
    void bezpiecznik(void){

    //Sprawdzamy, czy nie występuje konflikt sterowania, powodujący
    //jednoczene otwarcie tranzystora górnego i dolnego w tej samej fazie,
    //co oznacza wystąpienie zwarcia !!!

    //szczegóły oraz plik nagłówkowy z definicjami: http://mikrokontrolery.blogspot.com/2011/03/silnik-bldc-sterownik-bezpiecznik-test.html

    if( (U_TR_G_SPRAW_STAN && U_TR_D_SPRAW_STAN)
    || (V_TR_G_SPRAW_STAN && V_TR_D_SPRAW_STAN)
    || (W_TR_G_SPRAW_STAN && W_TR_D_SPRAW_STAN) ){

    //Faza U - oba tranzystory są włączone - sytuacja niedopuszczalna!!!
    //Faza V - oba tranzystory są włączone - sytuacja niedopuszczalna!!!
    //Faza W - oba tranzystory są włączone - sytuacja niedopuszczalna!!!

    bezpiecznik_stop();

    }
    }


    Natomiast w samej funkcji bezpiecznik_stop te makra WYLACZ_TRANZYSTORY i podobne
    Cytat:

    void bezpiecznik_stop(void){
    ....
    //natychmiast wyłącz tranzystory
    WYLACZ_TRANZYSTORY

    //i ustaw stany niskie na pinach sterujących
    U_TR_G_USTAW_DDR
    V_TR_G_USTAW_DDR
    W_TR_G_USTAW_DDR
    U_TR_D_USTAW_DDR
    ....
    zamiast czegoś w stylu:
    Cytat:

    ...
    WYLACZ_TRANZYSTORY();
    ...

    powoduje że niektóre edytory języka C będą głupieć i pokazywać- w sumie słusznie- błędy składniowe języka C, bo takie sztuczne konstrukcje, bez pokazania że tutaj jest jakieś wywołanie funkcji -zakończone ; - niepotrzebnie powodują, że program będzie trudniej później refaktorować np. w Eclipse.

    Nie ma potrzeby takiego pisania w C na AVR, bo zawsze można a nawet trzeba kod w assemblerze podglądnąć wygenerowany przez kompilator i warto zobaczyć co się faktycznie wykonuje na mikrokontrolerze, kod źódłowy robi się kiepsko zarządzalny ;)
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • Zasilacze UPS
  • #32
    bobek19926
    Poziom 7  
    Witam, jestem początkującym elektronikiem i chciałem się zapytać czy tak ułożone elementy nie będą generować jakichś zakłóceń czy temu podobnych(załącznik)? I jeszcze jedno pytanie mam silnik od hdd z 4 wyprowadzeniami po ustaleniu faz sprawdzałem krotności biegunów i wyszło mi tak (załącznik), czy sterownik będzie współgrać z tym silnikiem i czy bardzo trzeba zmienić program sterujący?
  • #33
    mirek_zaf
    Poziom 15  
    Tutaj Drive Hdd motor jest opisane co nieco jak rozkręcali do blisko 5000 RPM te silniki HDD ;)
    Też mam jakiś stary HDD do wyciągnięcia z niego silnika i może tego ramienia do pozycjonowania głowicy, bo podobno to jest bardzo szybkie.
  • Zasilacze UPS
  • #34
    wdogli
    Poziom 18  
    Witam sterownik wykonałem na bazie powyższego projektu po trosze go modyfikując. Zdjęcia poniżej. Teraz zabieram się do testów. Niestety nie posiadam silnika z czujnikami Halla więc będę testował zwykły silnik.
    Drajwer, driver silników BLDC i DC (wersja edukacyjna do testów oprogramowania)

    Drajwer, driver silników BLDC i DC (wersja edukacyjna do testów oprogramowania)

    Pozdrawiam
  • #35
    mirek_zaf
    Poziom 15  
    wdogli napisał:
    Zdjęcia poniżej.

    A to fotki sterownika czy... parkietu? :D Szybciej by się ładowały i więcej by było widać szczegółów gdyby je wrzucić do darmowego Gimpa i wyciąć tylko sam sterownik z tych fotek ;)

    Tak z ciekawości, do czego jeszcze służą te "bypassy" czerwone i niebieskie na dwustronnej płytce podczas gdy tyle miedzi jeszcze na niej zostało?
  • #36
    dondu
    Moderator Mikrokontrolery Projektowanie
    wdogli napisał:
    Witam sterownik wykonałem na bazie powyższego projektu po trosze go modyfikując. Zdjęcia poniżej.

    Drajwer, driver silników BLDC i DC (wersja edukacyjna do testów oprogramowania)


    Drajwer, driver silników BLDC i DC (wersja edukacyjna do testów oprogramowania)

    Pozdrawiam


    Poprawiłem zdjęcia ( w cytacie powyżej) kadrując je z wykorzystaniem możliwości jakie daje moduł dodawania zdjęć. Przeczytaj proszę instrukcję wklejania obrazków, która jest w każdym dziale tego forum.



    wdogli napisał:
    Teraz zabieram się do testów. Niestety nie posiadam silnika z czujnikami Halla więc będę testował zwykły silnik.

    Zwykły, ale BLDC?

    -------------------------------

    bobek19926 napisał:
    Witam, jestem początkującym elektronikiem i chciałem się zapytać czy tak ułożone elementy nie będą generować jakichś zakłóceń czy temu podobnych(załącznik)?

    Witam. Rozmieszczenie, które zaproponowałeś jest w miarę przyzwoite.
    Istotniejszy jest schemat - bo chyba masz w nim błędy.

    bobek19926 napisał:
    I jeszcze jedno pytanie mam silnik od hdd z 4 wyprowadzeniami po ustaleniu faz sprawdzałem krotności biegunów i wyszło mi tak (załącznik), czy sterownik będzie współgrać z tym silnikiem i czy bardzo trzeba zmienić program sterujący?

    Najprawdopodobniej masz silnik w wersji gwiazdy z wyprowadzonym punktem środkowym za pomocą czwartego przewodu. W Twoim przypadku przewód ten nie będzie wykorzystany.

    Z wyznaczaniem faz coś poszło nie tak. Na razie sobie to odpuść (tu chodzi tylko o to by program działał zgodnie z założeniami kręcąc silnikiem w prawo). Istotne jest natomiast, byś prawidłowo odróżnił przewody faz od czwartego przewodu, bo prawdopodobnie zrobiłeś to nieprawidłowo.

    Jeśli zrobisz to prawidłowo, drajwer i program powinny działać OK - jeśli wpadnie w moje ręce taki BLDC, to sprawdzę.

    -------------------------------

    mirek_zaf napisał:
    Tak przeglądam jeszcze ten przykładowy kod programu, bo właśnie oprogramowuję swoją przetwornicę na mostku H i ta funkcja bezpiecznik w takiej formie jest chyba dużo bardziej przejrzysta.

    Program jaki i drajwer są wersjami edukacyjnymi, co zaznaczyłem w tytule artykułu oraz na jego początku:

    dondu napisał:
    Dlatego też postanowiłem przygotować bardzo specyficzny (edukacyjny) moduł drajwera (ang. driver) silnika BLDC, by:
    1. ułatwić zrozumienie zasad sterowania silnika BLDC, ...

    i dlatego sposób pisania kodu i komentarzy w poszczególnych linijkach są bardzo istotne. Skomplikowane warunki często sprawiają początkującym dużą trudność w ich interpretacji. Ale oczywiście zapis zaproponowany przez Ciebie jest prawidłowy i pisząc kod na swoje potrzeby tak bym go zapisał.


    mirek_zaf napisał:
    Natomiast w samej funkcji bezpiecznik_stop te makra WYLACZ_TRANZYSTORY i podobne

    powoduje że niektóre edytory języka C będą głupieć i pokazywać- w sumie słusznie- błędy składniowe języka C, bo takie sztuczne konstrukcje, bez pokazania że tutaj jest jakieś wywołanie funkcji -zakończone ; - niepotrzebnie powodują, że program będzie trudniej później refaktorować np. w Eclipse.

    Używam oryginalnych narzędzi Atmela, dlatego też nie ma w nich takich problemów jak opisujesz, czyli nie ma żadnych błędów składniowych, czy ostrzeżeń:

    Cytat:
    AVR Memory Usage
    ----------------
    Device: atmega8

    Program: 1614 bytes (19.7% Full)
    (.text + .data + .bootloader)

    Data: 31 bytes (3.0% Full)
    (.data + .bss + .noinit)


    Build succeeded with 0 Warnings...



    mirek_zaf napisał:
    Nie ma potrzeby takiego pisania w C na AVR, bo zawsze można a nawet trzeba kod w assemblerze podglądnąć wygenerowany przez kompilator i warto zobaczyć co się faktycznie wykonuje na mikrokontrolerze, kod źódłowy robi się kiepsko zarządzalny ;)

    Jak już pisałem, kod ma charakter edukacyjny i ma być zrozumiały dla całkowicie początkującego, krok po kroku.

    Kod wygenerowany bezpiecznika:

    Kod: asm
    Zaloguj się, aby zobaczyć kod

    ... czyli prawidłowo.

    Ale dziękuję za zwrócenie uwagi - przy okazji sprawdzę w Eclipse.
  • #37
    mirek_zaf
    Poziom 15  
    dondu napisał:

    Używam oryginalnych narzędzi Atmela, dlatego też nie ma w nich takich problemów jak opisujesz, czyli nie ma żadnych błędów składniowych, czy ostrzeżeń

    Preprocesor C rozwinie to makro i podczas kompilacji nie będzie problemów, tylko dzwinie wygląda takie wywołanie funkcji w kodzie źródłowym, bo nie jest zakończone "();", czyli nie wygląda jak wywołanie funkcji i już formatowanie w jakiś programach do wydrukowania kodu źródłowego, które nie rozwiną tego makra się na tym prawdopodobnie wyłożą ;)
    Eclipse sobie z tym poradzi może, bo jest na tyle zaawansowany, że być może zrobi to rozwinięcie, ale prawdę mówiąc nigdy nie pisałem w taki sposób w C, bo zawsze można zdefiniować funkcję w C jako "inline" i ładnie rozwija się w miejscu wywołania, a co najwyżej stałe definiuję w ten sposób czasami-wtedy to wygląda normalnie, coś co mam dużymi literami napisane wiem że się nie zmienia w programie i zostanie wyliczone na etapie kompilacji.
  • #38
    dondu
    Moderator Mikrokontrolery Projektowanie
    mirek_zaf napisał:
    Eclipse sobie z tym poradzi może, bo jest na tyle zaawansowany, że być może zrobi to rozwinięcie,...

    Atmel Studio radzi sobie poprawnie w każdym tego typu przypadku także pod kątem sprawdzania poprawności składni programu (dodatek Naggy):

    Drajwer, driver silników BLDC i DC (wersja edukacyjna do testów oprogramowania)

    Nie ma więc problemów ani po stronie edytora, preprocesora, kompilatora, ani nawet podczas sprawdzania poprawności składni.

    Inline - tak oczywiście można - ponieważ podsyłasz mi linki do Wikipedii więc także podeślę jeden: Kurs C: Funkcje inline :)
  • #39
    mirek_zaf
    Poziom 15  
    dondu napisał:
    Nie ma więc problemów ani po stronie edytora, preprocesora, kompilatora, ani nawet podczas sprawdzania poprawności składni.

    Wystarczy przyzwoicie zadeklarować to makro i wtedy już sensownie to wygląda w kodzie źródłowym ;)
    Drajwer, driver silników BLDC i DC (wersja edukacyjna do testów oprogramowania)
    Inaczej beznadziejnie się czyta taki program-wyglądają wywołania tych funkcji jakby komuś wyłączyli prąd w trakcie pisania programu w C :D

    Błąd składniowy Eclipse pokazuje, bo nie miałem zdefiniowanych tych makr, natomiast po dodaniu "();" nie pokaże tego błędu, bo wtedy to jest poprawne składniowo, bo może być w innym module taka funkcja zdefiniowana ;)

    Chodzi o to, że to złe praktyki pisanie w taki sposób i mało edukacyjne, bo kompilator to łyknie jak wszystkie makra zostaną rozwiniete i uda się preprocesorowi to poskładać, tylko to bardzo nieczytelne i może nawyki z innych języków programowania, bo zwykle każdy w C uczy się programować z tej książki i jak się widzi taki program to wygląda bardzo dziwacznie i nie przypominają języka C te wywołania funkcji w ten sposób.
    Cytat:
    The C Programming Language, 2nd Edition
    Author(s) Brian W. Kernighan, Dennis M. Ritchie
  • #41
    dondu
    Moderator Mikrokontrolery Projektowanie
    mirek_zaf napisał:
    W "sieci" znalazłem schemat driver'a z początku z tego wątku, ale z usuniętym znakiem wodnym w załączniku.
    Dużo lepiej się drukuje, bo nie zaciemnia schematu :D

    Tak to jest, gdy udostępniam do pobrania pliki źródłowe Eagle, czy kody programów :)
    Gdzie go znalazłeś?

    Co do C - odpowiem wieczorkiem.
  • #42
    mirek_zaf
    Poziom 15  
    dondu napisał:
    Co do C - odpowiem wieczorkiem.

    Chyba nie ma co za wiele więcej w temacie stylu programowania w C się rozwodzić. Ja przynajmniej od dawna przyzwoicie programuję i zwykle programy od razu działają tak jak trzeba ;)

    Ciekawe czy taki driver mostka H w praktyce zadziała, bo w symylatorze wygląda to dobrze i na 2óch pinach mikrokontrolera klasyczny totem stosowany czasami do sterowania bramek mosfetów (czyli NPN u góry i PNP na dole) jak widać ładnie przełącza prądy ok. 60mA przy opornikach 2x25 Ohm.
    Drajwer, driver silników BLDC i DC (wersja edukacyjna do testów oprogramowania)
    Jak zamienię je na 2x10 Ohm to mam w pikach ok. 100mA, czyli tyle ile mnie interesuje, bo potrzebuję zasilić uzwojenie Tx prostego wykrywacza metali IB i tam ten oryginalny układ w okolicy 10mA przełącza te 70 zwojów, a chce na mostku H to zrobić (podnieść prąd) i wyrzucić z tąd ten podwójny 555 ;)
    Drajwer, driver silników BLDC i DC (wersja edukacyjna do testów oprogramowania)
    Tranzystory NPN i PNP mam na 800mA, a chwilowo nie mam mosfetów p-channel, zresztą chyba spory zapas jeszcze jak nawet 100mA przez nie popłynie....
  • #43
    bobek19926
    Poziom 7  
    Witam, silnik który mam tak jak pisałem wczesniej ma 4 wyprowadzenia Drajwer, driver silników BLDC i DC (wersja edukacyjna do testów oprogramowania) fazy określiłem za pomocą multimetru, między wyprowadzeniami 2, 3, 4 pokazało mi 4,3 ohm , a między 1 wyprowadzeniem , a reszta pokazywało 2,2ohm. Więc jeśli się nie mylę to 1 wspólny 2, 3, 4 to fazy. Nastepnie 2 wyprowadzenie obrałem jako fazę U, podłączyłem doniego (+) , a do 3 wyprowadzenia (-) silnik obrócił się trochę w prawo , następnie (+) znowu do 2 ,a (-) do 4 silnik obrócił się w prawo , czyli 2 to U, 3 to V , 4 to W. Natepne kroki robiłem tak jak przedstawia instrukcja na mikrokontrolery.blogspot i wyszło mi właśnie coś takiego.
  • #44
    Bart921
    Poziom 6  
    U mnie ten driver nie działa. Silnik tylko zadrga, zakręci się(pół obrotu?) po czym staje i drga coraz szybciej. Silnik jest dość cięzki, ale próbowałem zmieniać też parametry kroków pracy(w szczególności trzeciego, bo to na nim silnik staje(debug led)).
  • #45
    dondu
    Moderator Mikrokontrolery Projektowanie
    Korzystasz z załączonego programu bez zmian?
    Jeśli tak, to przyglądnij się i zmodyfikuj część programu rozkręcającą silnik.

    Należy także brać pod uwagę fakt, że jest to konstrukcja do celów szkoleniowych, a nie do używania z dużymi silnikami. Co to za silnik i czym porusza? Opisz dokładniej swój przypadek.
  • #46
    Bart921
    Poziom 6  
    Dlubalem przy tej części, ale niewiele to zmieniło. Udało mi się nieco wydłużyć moment zakręcenia, ale silnik i tak się zatrzymał I zaczął drgac.

    Ma wielkość małej pięści, ok 1200W I pracuje bez obciążenia. 3 uzwojenia(trójkąt), 12 zębów, nawijane na przemian. Model to emax GT 4020/09.