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

[Atmega16][C] Sterowanie napędem rotora, PWM

Ziomal04 17 Sie 2011 18:57 8137 55
  • Pomocny post
    #31
    gaskoin
    Poziom 38  
    Jeżeli chodzi o Twój enkoder, to z dokumentacji wynika, że możesz użyć wyjść A i B (oraz mechanicznego zera np) podłączając je bezpośrednio do uC. Jak wiesz jak działa enkoder inkrementalny (kwadraturowy - znajdziesz w necie) to sobie poradzisz z implementacją. Jako ciekawostkę podam, że niektóre uC mają wbudowane interfejsy takich enkoderów, wystarczy się podpiąć, przeczytać 3 strony dokumentacji i działa.
  • Licencja Pulsonix
  • #32
    Ziomal04
    Poziom 9  
    @gaskoin: dziękuję za naprowadzenie w kwestii enkodera. jak tylko uporam się z częścią "silnikową" zabiorę się za studiowanie materiałow na ten temat.


    Co do układu- zdecydowałem się zasilić silnik zasilaczem komputerowym poprzez wyjście MOLEX 5V. Docelowo zamieniłem układ L293D na układ L298 i tak jak poradził kolega Dondu sparowałem wyjścia i wejścia celem zwiększenia maksymalnej wartości prądu.

    Poniżej zamieszczam nowy schemat i proszę o ewentualny komentarz:

    [Atmega16][C] Sterowanie napędem rotora, PWM

    Wyjścia +5V i GND przy L298 to wyprowadzenia do zasilacza poprzez złącze MOLEX. Pozostałem wyjścia +5V odnoszą się do drugiej płytki i zasilacza sieciowego.

    Póki co enkoder AS5040 zostawiam niepodłączony.

    Dodałem zabezpieczenie przy wyjściu na silnik: diody to 1N4007. Czy będą odpowiednie?

    Jeśli chodzi o zasilanie to układ Atmegi zasilany będzie nadal +5V z zasilacza sieciowego, natomiast płytka, na której znajdzie się L298 z zasilacza komputerowego.

    Czy ścieżki na płytce mogą być "standardowe", czy przy tak dużym prądzie powinny być grubsze? L298 oczywiście będzie posiadał całkiem spory radiator.


    EDIT: zrobiło się jakoś cicho... skąd nagle spadek zainteresowania osób śledzących wątek? Nie ukrywam, że deadlinei tak jest wydłużony ale nadal liczę na możliwie szybką pomoc.

    EDIT2: dopiero teraz zauważyłem moją "gafę". Oczywiście pobór prądu będzie zależny od silnika. W jakis sposób mogę wykonać zabezpieczenie procesora?
  • #33
    dondu
    Moderator Mikrokontrolery Projektowanie
    Uwagi do schematu:

    1. AS5040 nie sprawdzam bo nie znam.

    2. RESET - brak co najmniej rezystora: http://mikrokontrolery.blogspot.com/2011/04/minimalne-podlaczanie-pinow.html

    3. L298 - GND nie podłączone.

    4. L298 - SENS_A i SENS_B muszą iść do masy, jeżeli nie wstawiasz tam rezystora do pomiaru prądu (patrz rys. z linku poniżej).

    5. L298 - reszta prawidłowo zgodnie z rysunkiem Figure 67: http://www.datasheetcatalog.org/datasheet2/2/052daje928cw7pc0uqs1ipyryppy.pdf


    R2-R6 - rezystory niepotrzebne, bo są wewnątrz mikrokontrolera (tzw. Pull-up) i wystarczy je włączyć programowo.

    Diody 1N4007 - spokojnie.

    Ścieżki - oczywiście sporo grubsze ponieważ duży prąd (jaki nie wiem - możesz zmierzyć bo masz ten silnik).

    Zabezpieczenie procesora:
    Ponieważ zmieniłeś koncepcję i chcesz zasilać Atmegę z osobnego zasilacza, stąd zależy to od tego co to za zasilacz? napisz coś więcej o nim.
  • #34
    Ziomal04
    Poziom 9  
    1. ok

    2. reset przy Atmega ma rezystor, płytk ARE0061- nie dodawałem na schemacie.

    3. racja, mój błąd

    4. ok, myślałem, że mogą zostać niepodłączone

    Co do zasilaczy:

    Atmega i cała płytka Are0061 zasilona zwykłym zasilaczem sieciowym 12V (na płytce stabilizacja na 5V i 3.3V). Natomiast płytka, na której znajdzie się układ L298 zasilona zasilaczem komputerowym (według obudowy: SP model 300xa) z 4 pinowej wtyczki molex +5V. Według obudowy zasilacza wtyczką dostarczany jest prąd +5V/30A.
  • #35
    dondu
    Moderator Mikrokontrolery Projektowanie
    Skoro płytka Are0061 to zasilacz na niej masz dobrze filtrowany.

    Pamiętaj, że masa z płytki ARE0061 musi być połączona z masą zasilacza 5V zasilającego L298. Nie może to być połączenie mas obu zasilaczy, ponieważ z tego co widzę na schemacie płytki ARE0061 jest tam mostek Gretz-a.
  • #36
    Ziomal04
    Poziom 9  
    Odrobinę się zgubiłem.. masa obu musi być połączona lecz nie może być to połączenie mas obu zasilaczy?

    A czy potrzebna jest filtracja przy zasilaczu komputerowym na drugiej płytce?
  • Licencja Pulsonix
  • #37
    dondu
    Moderator Mikrokontrolery Projektowanie
    Innymi słowami:
    1. Nie wolno połączyć Ci mas obu zasilaczy.
    2. Łączysz masę z płytki ARE061 z masą zasilacza komputerowego zasilającego L298.

    Wszystko przez to, że na płytce ARE061 jest mostek Gretza w części zasilającej płytkę.

    Filtracja na zasilaczu komputerowym niepotrzebna - masz kondensatory na L298.
    Być może trzeba będzie dodać kondensatory na samym silniku.
    Niektóre z firm modelarskich sprzedają gotowe zestawy trzech kondensatorów: 2x100nF i 1x47nF.
    Sugerują podłączenie 100nF z masy (obudowy silnika) po jednym do każdego bieguna zasilania silnika, a 47nF wpięty pomiędzy bieguny zasilania silnika.
  • #38
    Ziomal04
    Poziom 9  
    silnik, który kupiłem posiada kondensatory w obudowie więc dodatkowe nie będą potrzebne.

    jutro powinienem mieć wszystko zmontowane.

    napisałem pierwszy program, obsługujący PWM i pokazujący jego działanie na diodzie.

    Pytanie: sygnał generujący PWM w Atmega 16 wychodzi z portu PD4 (OC1B) lub PD5 (OC1A). W takim razie mój schemat jest błędny, bo według niego wyjścia na L298 znajdują się na porcie C?

    Skoro konieczne będzie wysłanie PWM z powiedzmy PD5- to podłączam ten pin do portu ENABLED w L298, natomiast w porcie input 1 ustawiam zawsze stan wysoki, dzięki czemu silnik będzie się kręcił w prawo. Port enabled niejako odblokowuje działanie układu, więc będzie odblokowywał na czas zadany przez PWM. mam rację?
  • #39
    dondu
    Moderator Mikrokontrolery Projektowanie
    Ziomal04 napisał:
    Pytanie: sygnał generujący PWM w Atmega 16 wychodzi z portu PD4 (OC1B) lub PD5 (OC1A). W takim razie mój schemat jest błędny, bo według niego wyjścia na L298 znajdują się na porcie C?

    Tak, sorry nie zauważyłem tego sprawdzając schemat.


    Ziomal04 napisał:
    Skoro konieczne będzie wysłanie PWM z powiedzmy PD5- to podłączam ten pin do portu ENABLED w L298, natomiast w porcie input 1 ustawiam zawsze stan wysoki, dzięki czemu silnik będzie się kręcił w prawo. Port enabled niejako odblokowuje działanie układu, więc będzie odblokowywał na czas zadany przez PWM. mam rację?

    Tak.
    Nie używaj nazw PD5 tylko OC1A bo taką jego funkcję będziesz wykorzystywał.
  • #40
    emarcus
    Poziom 35  
    [quote="dondu"]
    Ziomal04 napisał:



    Ziomal04 napisał:
    Skoro konieczne będzie wysłanie PWM z powiedzmy PD5- to podłączam ten pin do portu ENABLED w L298, natomiast w porcie input 1 ustawiam zawsze stan wysoki, dzięki czemu silnik będzie się kręcił w prawo. Port enabled niejako odblokowuje działanie układu, więc będzie odblokowywał na czas zadany przez PWM. mam rację?

    Tak.


    Akurat w pewnym sensie na odwrót. W normalnym układzie 'Enable' służy do "manipulowania" kierunkiem obrotów, natomiast zmienność obrotów jest regulowana przez sygnał PWM podłączony do Input.

    e marcus
  • #41
    dondu
    Moderator Mikrokontrolery Projektowanie
    emarcus napisał:
    Akurat w pewnym sensie na odwrót. W normalnym układzie 'Enable' służy do "manipulowania" kierunkiem obrotów, natomiast zmienność obrotów jest regulowana przez sygnał PWM podłączony do Input.

    Ja się spotkałem z innymi rozwiązaniami - hmm, trzeba sprawdzić.
  • #42
    Ziomal04
    Poziom 9  
    @emarcus:

    z dokumentacji L298 wynika, że podanie stanu wysokiego na "Enable A" odblokowuje cały jeden mostek, czyli zarówno wyjście 1 jak i 2. W jaki sposób zatem poprzez ten pin sterować zmianą kierunku? Z tego co wyczytałem kierunek zmienia się podając stan wysoki lub niski na pin input 1 i input2 właśnie.
  • #44
    emarcus
    Poziom 35  
    dondu napisał:


    A tu jest gotowy układ:
    http://www.ikalogic.com/shm_hb_l298.php
    więcej info na forum tej strony.

    Albo inny przykład (dla uC PIC):
    http://www.pyroelectro.com/tutorials/l298_control/hardware.html

    Wszystkie te układy są rozbudowane i wykorzystują cały mostak lub cały IC bo przewiduja dwukierunkową pracę silnika el., lub ew. 2 silników.

    Zachodzi pytanie: Jaką część z mostka H (lub w ogóle) jest wymagana aby wysterować jeden silnik do pracy w jednym tylko kierunku?
    Czy wymagane będzie hamowanie silnika?
    Czy wykorzystamy tam wszystkie 8 tranzystorów, czy tylko 4, a może tylko 2 ?


    e marcus
  • #45
    dondu
    Moderator Mikrokontrolery Projektowanie
    emarcus napisał:
    Czy wymagane będzie hamowanie silnika?

    Oczywiście autor odpowie zapewne sam, ale sądzę, że nie ma potrzeby, ani zmiany kierunku, ani hamowania. Pierwsze załatwi grawitacja, drugie opór powietrza.

    emarcus napisał:
    Czy wykorzystamy tam wszystkie 8 tranzystorów, czy tylko 4, a może tylko 2 ?

    To jest pokazane na schemacie, opisane i wyjaśnione w dyskusji dlaczego tak a nie inaczej.

    No chyba, że nie zrozumiałem o co dokładnie Ci chodzi.
  • #46
    Ziomal04
    Poziom 9  
    układ został w całości zmontowany.

    niestety po uruchomieniu jest cicho i głucho.

    próbowałem uruchomić poniższy program z PWM (na diodach działał):

    Kod: c
    Zaloguj się, aby zobaczyć kod



    port OCR1a podlaczony do ENABLED.
    port PD4 podlaczony do INPUT1 i podany stan wysoki.
    port PD6 podlaczony do INPUT2 i podany stan niski.

    sprawdzalem zasilanie na plytce i jest napiecie- podpinalem silnik bezposrednio i wted dziala, gdy zepne caly uklad lacznie z Atmega i L298 wtedy nic sie nie dzieje.

    sugestie?
  • #47
    dondu
    Moderator Mikrokontrolery Projektowanie
    Tak, aktualny schemat całości :)
  • #48
    Ziomal04
    Poziom 9  
    schemat:

    [Atmega16][C] Sterowanie napędem rotora, PWM

    nie ukrywam, że o ile oczy mam nadal sprawne, tak ręce niekoniecznie- stąd sposób w jaki te mikroskopijne rzeczy są polutowane niektórzy zakwalifikowaliby pewnie jako "tragedię". może w tym tkwi przyczyna...
  • #49
    dondu
    Moderator Mikrokontrolery Projektowanie
    A możesz pokazać zdjęcia? Tylko o dużej rozdzielczości.
  • #50
    Ziomal04
    Poziom 9  
    zdjęcia zrobiłem najlepsze jakie mogę.

    całość robiona na płytce uniwersalnej, wejścia i wyjścia L298 zwierałem przy pomocy dolutowanych kabli, bo nie było miejsca. Wiem, że całość wygląda chaotycznie, dlatego zastanawiam się, czy nie zacząć od nowa i nie nauczyć się projektować i wytrawiać płytek, co zwiększy estetykę całości i może sprawi, że będzie działać.

    zdjęcie 1:

    całość płytki z góry

    [Atmega16][C] Sterowanie napędem rotora, PWM

    zdjecie2:

    lutowanie MOLEX, wyjścia na silnik, pinów masy oraz zasilania

    [Atmega16][C] Sterowanie napędem rotora, PWM

    zdjecie3:

    lutowanie samego L298

    [Atmega16][C] Sterowanie napędem rotora, PWM

    zdjecie4:

    poglad na cala konstrukcje

    [Atmega16][C] Sterowanie napędem rotora, PWM
  • #51
    dondu
    Moderator Mikrokontrolery Projektowanie
    1. Prototyp całkiem całkiem :)

    2. W Twoim przypadku (początkujący w programowaniu), prototyp należałoby uruchamiać sukcesywnie. Czyli na przykład: najpierw LED i przyciski, później L298 z LED-em zamiast silnika, później silnik, a na końcu wyświetlacz. To znacznie ułatwia.

    3. Do programu także parę uwag by było, ale najpierw powinieneś sprawę elektroniki sprawdzić. Na płytce widać łączenia które mogą być zimnymi lutami. Więcej kalafonii. Zakładam, że wszystkie połączenia sprawdziłeś?

    4. Trawienie płytek do prototypu w pierwszej fazie odradzam. Bo za chwilę będziesz musiał robić następną z poprawkami :) Stosuj uniwersalne (np. takie jak masz) i/lub stykowe:
    http://mikrokontrolery.blogspot.com/2011/04/plytka-stykowa-zasady.html
    Mam nadzieję, że kolega usilnie zwalczający płytki stykowe tym razem sobie odpuści.
  • #52
    Ziomal04
    Poziom 9  
    AD.1
    dzięki, ramię wykonane przez jednego z moich podopiecznych :)

    AD. 2

    praktycznei tak robiłem- pisałem najpierw programy dla diód, potem diody+ klawiatura, potem sam wuświetlacz itp. program który jest teraz napisany to obsługa diód, klawiatury i L298 z silnikiem, wyświetlacz jest tylko podłączony. Program działa cały czas na samych diodach, lecz po podłączeniu L298 już nie.

    AD. 3

    sprawdziłem woltomierzem napięcie na poszczególnych nóżkach L298 zwierając do masy. Wszędzie gdzie powinno występuje napięcie +5V, tylko nóżki OUTPUT 1 i OUTPUT 2 nie generują napięcia. Czyżby spalony układ?

    AD. 4

    Racja, powinienem mimo wszystko zaopatrzyć się w płytkę stykową, gdyż jak sam zauważyłeś, moje lutowanie do najlepszych nie należy.

    EDIT:

    pytanie może głupie, ale.. człowiek całe życie się uczy ;)

    jeżeli na pinie powiedzmy ENABLE1 mam stan wysoki (pin 6) i jest on sparowany z pinem ENABLE2 (pin 11) to woltomierz powinien pokazywać mi +5V zarówno na jedny jak i na drugim?

    Już w miejscu łączenia jest tak, żę na jedyn jest napięcie, a na wyprowadzeniu drugiego jedno "oczko" dalej na tej samej ścieżce nie ma. Z drugim sparowanym kabelkiem mam to samo.
  • #53
    dondu
    Moderator Mikrokontrolery Projektowanie
    ok, to może po kolei małymi kroczkami jeszcze raz.
    Najpierw pytania i uwagi do programu:

    1. w jakim środowisku pracujesz?
    2. gdzie definiujesz zegar bo w kodzie nie widzę?
    3. by zrozumieć Twój program powinieneś w prawie każdej linii opisać co ona robi. Wtedy łatwo zrozumieć, co chciałeś zrobić i łatwo znaleźć błąd lub podpowiedzieć inne rozwiązanie.
    4. uwag do programu jest znacznie więcej - ale najpierw zrób pkt 3 i wklej program na nowo.

    Dzisiaj jestem dostępny do północy, więc z chęcią Ci pomogę.

    Na razie proponowałbym odłączyć L298 od procesora i zasilania.
  • #54
    Overclocker
    Poziom 13  
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Wg. schematu przyciski masz na PORTB.

    Zrób eliminację drgań styków (sprawdzenie stanu, jeżeli niski poczekaj 20ms, jeżeli dalej niski - wykonaj)

    A na początek w pętli zrób załączanie i wyłączanie silnika bez obsługi przycisków
    Kod: c
    Zaloguj się, aby zobaczyć kod


    funkcja delay jest mało profesjonalna, ale do testów można ją jak najbardziej wykorzystać ;)
    żeby jej użyć dodaj:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    edit:
    Możesz też sprawdzić jak sobie radzi z załączaniem samego l298 na razie bez PWM (małe kroczki)
    Kod: c
    Zaloguj się, aby zobaczyć kod


    przy okazji biblioteka delay.h wymaga definicji F_CPU ale o tym już pisał dondu :)
  • #55
    Ziomal04
    Poziom 9  
    póki co z przyczyn zawodowych muszę (na około tydzień) lekko odstąpić od projektu. Co nie znaczy, że nie będę go robił wogóle- jedynie z mniejszą częstotliwością.

    Prosiłbym Was o odpowiedź na moje ostatnie pytanie z poprzedniego postu dotyczące sparowanych wejść i napięć na nich.

    Co do samego programu- póki nie działa sama elektronika, wydaje mi się, że poprawianie programu mija się z celem, lecz za rady oczywiście dziękuję ( również koledze Overclocker, który włączył się do dyskusji).

    Może najpierw dopracować układ, żeby mieć pewność co działa a co nie? Wydaje mi się, że nie działa L298 lub coś zwiera/ nie styka przy nim.

    Gdy wszystko będzie działać to programy, które zaproponował Overclocker będą miały jak największy sens.

    Kolego dondu, co do Twoich pytań:

    AD. 1: program winAVR, programator Usbasp

    AD. 2: zapomniałem- oczywiście poprzez funcję F_CPU

    AD. 3: jak najbardizej opiszę program, dodam też eliminację drgań, lecz myślę, że póki co lepiej (?) zająć się schematem i dojściem do tego co nie działa, gdyż jak wspominałem wcześniej nie będzie nawet jak załączać programowo silnika, czy L298 gdy nie działają.
  • #56
    Overclocker
    Poziom 13  
    Ziomal04 napisał:

    Prosiłbym Was o odpowiedź na moje ostatnie pytanie z poprzedniego postu dotyczące sparowanych wejść i napięć na nich.

    Nigdy nie mierzyłem napięcia na wejściach(niepodłączonych) układu, ponieważ uważałem, że mija się to z celem (Jest to wejście, więc mogą się tam pojawić stany nieustalone). Oczywiście to tylko moje zdanie ;)

    Jeżeli nie jesteś pewien połączeń, to sprawdź je ohmomierzem (od wyprowadzenia l298 do końca "kabelka").
    Podaj na wejścia IN1 + i na IN2 - , oraz na ENABLE +, i powinno coś się kręcić ;)
    Tak przy okazji. Nie lepiej było by zastosować jednego MOS-FET'a który nie kosztuje dużo ( mniej niż 3 zł ), a max. prąd do twoich zastosowań ma nieporównywalnie lepszy np. IRFZ44N - Id 49A, Vds 55V, Rdson 17.5mOhm. ;) Zdaję sobie sprawę, że kilka osób Ci już to proponowało, ale jak dla mnie to bardzo fajne rozwiązanie :) W każdym bądź razie układ już masz, więc szkoda pchać się w dodatkowe koszta, więc to była tylko taka późna sugestia :)