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

[Atmega 8]Wall follower - problem z zasilaniem

Arkadiusz G. 21 Gru 2011 23:00 2512 16
  • #1 21 Gru 2011 23:00
    Arkadiusz G.
    Poziom 8  

    Witam!
    Jednak uczelnia techniczna w końcu zmusiła mnie, abym przybył na to forum, więc oto i jestem ;) Dzień dobry.

    Z góry przepraszam, jeśli jest to jednak zły dział, ale uważam się za początkującego w mikrokontrolerach i generalnie w elektronice, więc wydawało mi się adekwatne wpisać się tutaj ;)

    Na zajęciach projektowych z kolegą postanowiliśmy skonstruować ambitny projekt w oparciu o mikrokontroler Atmega 8: Wall follower. Urządzenie które samodzielnie porusza się wzdłuż ściany i w razie zbytniego zbliżenia się ten się od niej oddala.

    Całość konstrukcji ostatecznie udało mi się zbudować w oparciu o 2 przerobione serwa Tower Pro 9g i jeden czujnik GP2Y0D810Z0F Sharp z płytką pololu pod ten czujnik.

    Odnośniki:
    czujnik
    Serwa z opisem przeróbki

    Całość śmiga i lata jak należy. Ale niestety Tylko i wyłącznie jeśli ma zasilanie przez programator USBasp. Gdy podłączam mu 4x1.5V paluszki AA szeregowe, lub jedną baterię 9V To w najlepszym wypadku (z tą 9V baterią) Daje radę kręcić mi się jedno serwo, ale nie na pełni mocy niestety.

    Problemem nie jest raczej sam stabilizator napięcia po wpięciu baterii na wyprowadzeniach do poszczególnych serw daje około 4,7V (swoją drogą dziwi mnie, czemu 4,7 a nie 5, skoro zasilanie przechodzi przez stabilizator 7805)

    Zamieszczam schemat mojego podłączenia. Prosiłbym o jakieś sugestie, dlaczego, co zrobić, żeby nie było tego problemu itp...
    [Atmega 8]Wall follower - problem z zasilaniem

    0 16
  • Arrow Multisolution Day
  • #2 21 Gru 2011 23:17
    biglolo94
    Poziom 16  

    A byś dał przy stabilizatorze przy wejściu kondensator 470uF i 100nF a przy wyjściu 220uF, 100uF i 100nF

    0
  • #3 21 Gru 2011 23:38
    Arkadiusz G.
    Poziom 8  

    Hmmm ;) Szybka odpowiedź... Na dniach wykonam to zalecenie.

    Mam tylko prośbę, mógłbym prosić o informację... skąd takie wartości? Ew jakiś odnośnik w którym jest informacja jak dojść do tego?

    0
  • Arrow Multisolution Day
  • #4 21 Gru 2011 23:48
    tmf
    Moderator Mikrokontrolery Projektowanie

    Kondensatory 100nF przy stabilizatorze warto dać, aczkolwiek nie rozwiąże to twojego problemu. Bierze się on stąd, że na stabilizatorze liniowym musi się odłożyć pewne minimalne napięcie, typowo wynoci ono ok. 2-3V, w efekcie z baterią 4,5V może działać neprawidłowo. Przy 9V powinno być ok, lecz pewnie jak silniki kręcą to napięcie mocno spada.

    0
  • #5 21 Gru 2011 23:51
    biglolo94
    Poziom 16  

    hmmm Kurcze gdzieś to czytałem, że takie kondki trzeba dawać, nawet 1000uF przed i 220uF za. .....

    Nie pamiętam gdzie to było. W datasheet są inne wartości, ale wiedza zdobyta podczas budowania robotów i różnych ukladów mówi mi, ze takie wartości jak zastasujesz to bd wszystko OK.

    Więc możesz tylko wieżyć mi na słowo. Mam nadzieje, że nie wprowadzam cię w błąd jesli chodzi o te kondki.

    Dodano po 1 [minuty]:

    TMF też może mieć racje. Ale też tak kiedyś miałem i kondki pomogły.

    Do robotów najlepiej stosować jakieś ogniwa, pakiety akumulatorów.

    0
  • #6 21 Gru 2011 23:53
    Arkadiusz G.
    Poziom 8  

    Nie podaję w żadnym wypadku 4,5V ;) Specjalnie do tego dałem 4x baterie AA 1.5V = 6V...

    Ale faktycznie, coś w tym jest, że napięcie spada - kiedy na 9V podłączam jedno serwo to wszystko działa tylko nie na pełnej mocy, niestety jak są dwa to już tak różowo nie jest.

    Pomijając kwestię kondensatorów - lepiej będzie jak założę np 2x9V ?

    0
  • #7 21 Gru 2011 23:54
    biglolo94
    Poziom 16  

    A może silniki pobierają za dużo prądu przez Atmege i może pomogłby L293D ??

    Dodano po 1 [minuty]:

    Możesz dać 2 baterie 9V, ale szeregowo

    0
  • #8 21 Gru 2011 23:55
    Arkadiusz G.
    Poziom 8  

    Te silniki steruję przez płytkę z serwomechanizmu, więc wykluczyłbym taką możliwość że to z Atmegi za dużo ciągną.

    Z atmegi jest pobierany tylko sygnał w którą stronę ma się kręcić, Zasilanie jest doprowadzane osobną linią -> tak jak na schemacie jest to narysowane

    Sposób 'przerobienia' podałem w linku w temacie (połączenie rezystorami dwóch wyprowadzeń z płytki sterującej silnikiem.

    Podłączyłem szeregowo 12 baterii 1.5V na tym obecnym układzie - dalej jest taki sam problem

    0
  • #9 22 Gru 2011 00:04
    dondu
    Moderator Mikrokontrolery Projektowanie

    Arkadiusz G. napisał:
    Mam tylko prośbę, mógłbym prosić o informację... skąd takie wartości? Ew jakiś odnośnik w którym jest informacja jak dojść do tego?

    Tutaj znajdziesz odpowiedź na ten temat: http://mikrokontrolery.blogspot.com/2011/04/zasilanie-mikrokontrolera.html

    A dla poszerzenia wiedzy, napięcie 2-3V o którym pisze tmf, to parametr o nazwie Dropuot Voltage, i dla tego regulatora wynosi około 2-2,5V. Oznacza to że by uzyskac napięcie 5V na wyjściu, musisz mieć co najmniej 7-7,5V na wejściu, + oczywiście kondensatory, o których piszą koledzy powyżej.

    Zamiast 7805 możesz zastosować tzw. regulator LDO gdzie dropout voltage jest znacznie niższy - np. 0,2-0,5V - patrz LF33 który ma max prąd 500mA: http://www.sos.sk/a_info/resource/c/pdf/LF33.pdf
    albo szukaj innych o większym prądzie.

    No i warto usypiać procek kiedy się da - zawsze to mniej mA i mW ucieka z baterii :)


    Arkadiusz G. napisał:
    Podłączyłem szeregowo 12 baterii 1.5V na tym obecnym układzie - dalej jest taki sam problem

    Zmierz prąd jaki z baterii jest pobierany w czasie jazdy i jakie jest wtedy napięcie na wejściu 7805.

    0
  • Pomocny post
    #10 22 Gru 2011 00:11
    biglolo94
    Poziom 16  

    Kurcze wszystko wygląda na OK. Chyba że może fusebity coś w atmedze szwankują lub winą jest przeróbka tych serw .....

    0
  • #11 22 Gru 2011 00:20
    dondu
    Moderator Mikrokontrolery Projektowanie

    biglolo94 napisał:
    Kurcze wszystko wygląda na OK.

    To znaczy co? Prąd i napięcie - jakie są wartości?

    biglolo94 napisał:
    Chyba że może fusebity coś w atmedze szwankują lub winą jest przeróbka tych serw .....

    Dodaj jeszcze filtrowanie pinów zasilania w mikrokontrolerze (po 100nF na VCC i AVcc) i AREF także. Możesz jeszcze na wszelki wypadek, dać takie kondensatory na zasilaniu każdego serwa.
    Potem wypróbuj i opisz dokładnie jak działa robot i może pokaż program?

    1
  • #12 22 Gru 2011 00:34
    Arkadiusz G.
    Poziom 8  

    Jestem w trakcie mierzenia - staram się jednocześnie nie zepsuć niczego, bo już jedno serwo sobie zniszczyłem ;) więc trochę to mi zajmie. Zwłaszcza że te serwa piszczą, jakby chciały a nie mogły, a następnie przestają w ogóle wydawać jakiś dźwięk - nie chcę ich spalić, bo jutro muszę zaprezentować na uczelni, że mój 'wynalazek' w ogóle działa.

    Zadziwia mnie jedynie, że przy napięciu z USB wszystko pięknie działa...

    Konstrukcja ma zachowywać się prosto: Domyślnym stanem jest obrót dwóch serw w tym samym czasie - z różnymi prędkościami, aby przemieszczenie miało miejsce po łuku. W wypadku zbytniego zbliżenia się do ściany Czujnik wysyła '0' i generowane jest przerwanie które obraca robota od ściany. I sytuacja się powtarza - dwa serwa na raz po łuku w kierunku ściany jadą

    Kod programu mogę wrzucić już teraz, choć program jest jeszcze w powijakach.
    Pisane w WinAVR w C

    Code:

    #define F_CPU 1000000L
    #include <avr/io.h>
    #include <util/delay.h>       
    #include <avr/interrupt.h>

    int x=0;

    ISR(INT0_vect, ISR_BLOCK)
    {
       for (x=0;x<15;x++)
       {
       PORTD = 0b01000000;
       _delay_us(2500);
       PORTD = 0b10000000;
       _delay_us(1000);
       PORTD = 0b00000000;
       _delay_us(20000);
       }
    }

    int main(void)
    {
       DDRD = 0b11000000;
       PORTD = 0b11111111;
       MCUCR = 0;
       GICR = (1<<INT0);
       sei();
        while(1)
        {
                PORTD = 0b10000000;
                _delay_us(2500);
                PORTD = 0b01000000;
                _delay_us(2100);
                PORTD = 0b00000000;
                _delay_us(20000);
       }
    }

    0
  • #13 22 Gru 2011 00:59
    dondu
    Moderator Mikrokontrolery Projektowanie

    Arkadiusz G. napisał:
    Jestem w trakcie mierzenia - staram się jednocześnie nie zepsuć niczego, bo już jedno serwo sobie zniszczyłem ;) więc trochę to mi zajmie. Zwłaszcza że te serwa piszczą, jakby chciały a nie mogły, a następnie przestają w ogóle wydawać jakiś dźwięk - nie chcę ich spalić, bo jutro muszę zaprezentować na uczelni, że mój 'wynalazek' w ogóle działa.

    Niestety muszę już zmykać, więc nie rzucę okiem na program, ale skoro serwa piszczą, to znaczy, że z PWM masz albo za dużą albo za małą częstotliwość - spróbuj znaleźć informacje bo nie pamiętam jakie są zalecane zakresy.

    No i podaj wszystkie pomiary jakie ustalisz dla baterii i USB.

    EDIT:
    Szybki rzut okiem na program: Oj! Delay w przerwaniach ?!!!: http://mikrokontrolery.blogspot.com/2011/04/problemy-c-przerwania.html

    Dodano po 22 [minuty]:


    Arkadiusz G. napisał:
    Tak, jak pisałem Program jest w powijakach, w planach mam szybkie przekierowanie z przerwania na inną funkcję w której przerwania będą zablokowane. Całość napisana, żeby pokazać 'że działa'.

    Pomiary dla baterii (18V - szeregowe 12x1.5V)
    Prąd zasilania 1 serwa 100mA
    Napięcie przed stabilizatorem 18V
    Napięcie za stabilizatorem: 2.5V (!)

    Pomiary dla zasilania z programatora:
    Prąd... Chyba coś chrzanię bo mi 3A wychodzą...
    Napięcie 4.9V wszędzie


    A czy ty czasem nie pomyliłeś w 7805 wejścia z wyjściem? Sprawdź i/lub pokaż zdjęcia.
    Teraz już uciekam na 100%, ale na pewno ktoś pomoże.

    0
  • #14 22 Gru 2011 01:04
    Arkadiusz G.
    Poziom 8  

    Przepraszam za pomiary wcześniejsze ;) Wyrzuciłem, bo później mnie oświeciło, że złe robiłem, a myślałem, że jeszcze nikt tego nie przeczytał ;)

    Co do Tego, czy dobrze podłączyłem stabilizator - raczej tak. Kiedy nie obciążam całego układu serwami, tylko diodami, na wyjściu jest ładne 4,7V (przy podawaniu 6V)

    Tak, jak pisałem Program jest w powijakach, w planach mam przekierowanie z przerwania na inną funkcję w której przerwania będą zablokowane. Całość napisana, żeby pokazać 'że działa' moim psorom praktycznie 'na kolanie'.

    Pomiary już na pewno poprawnie wykonane:

    Pomiary dla baterii (18V - szeregowe 12x1.5V)
    Prąd zasilania 1 serwa 100mA i spada z upływem czasu
    Napięcie przed stabilizatorem 18V
    Napięcie za stabilizatorem: 2.5V (!)

    Pomiary dla zasilania z programatora:
    Prąd... 1 serwa 150-190mA stałe
    Napięcie 4.9V wszędzie

    Ja się osobiście już tutaj gubię...

    Edit: Z ciekawości podłączyłęm te 12 baterii szeregowo-równolegle (3 rzędy po 4 baterie) I jedno serwo już bez problemu się kręci. Chyba kupię 2-3 baterie 9V i spróbuję je równolegle podłączyć... ciekawe co z tego wyjdzie wtedy ;)

    0
  • #15 22 Gru 2011 10:28
    sanwa
    Poziom 13  

    Witam

    Jeżeli możesz, to "odseparuj" stabilizator od reszty układu (przetnij ścieżkę pomiędzy jego wyjściem a resztą układu). Zmierz napięcie wyjściowe "bez niczego (może być dziwne, przy braku przepływu prądu, ale to nie problem). Następnie podłącz "zamiast reszty układu" (czyli pomiędzy wyjście stabilizatora a masę układu) opornik 10k i zmierz napięcie, potem zrób to dla opornika 5k, 1k5,0k5,0k22,0k1, i dla wartości odpowiadającej szacowanemu zapotrzebowaniu całego układu. Próba jest zgrubna (oporność omowa), ale na początek wystarczy.

    Pozdrawiam
    Sanwa

    Zmiana; mój błąd :):)

    0
  • #16 22 Gru 2011 12:04
    MichałKob
    Poziom 20  

    Gdy zasilasz układ z 6V, Twoje 4,7V na wyjściu wcale nie jest "ładne". Stabilizatory zazwyczaj trzymają tolerancję napięcia znacznie lepiej, a taka duża odchyłka świadczy o tym, że 7805 się "nie wyrabia" - nie jest w stanie pracować z tak małą różnicą napięcia na wejściu i wyjściu. Kiedy włączysz większe obciążenie, napięcie spada jeszcze bardziej, aż Atmega resetuje się. Do zasilania procesora polecam LP2951, a jeżeli 5V ma zasilać też serwa, to LP2954 w obudowie TO-220.
    Kiedy używasz baterii 9V, układ nie działa, bo żadna 9V bateria nie wytrzyma obciążenia kilkuset mA. Może użyć 4 akumulatorków AA (napięcie 4.8V, będzie się bardzo nieznacznie zmieniać pod obciążeniem) i pominąć stabilizator?
    Jak rozwiązałeś alternatywne zasilanie z programatora i baterii? Według schematu stabilizator dostaje napięcie na wyjście przy zerowym napięciu wejściowym, to są nieprawidłowe warunki pracy i stabilizator może paść. Trzeba go zabezpieczyć diodą włączoną zwrotnie między wejście a wyjście (anodą do wyjścia).

    0
  • #17 22 Gru 2011 13:13
    Arkadiusz G.
    Poziom 8  

    Witam!

    Z góry muszę wszystkich przeprosić... Wychodzi na to, że chciałem zrobić to 'za szybko' i pominąłem ważną kwestię: użycia odpowiedniego stabilizatora (w sklepie po prostu wziąłem na raz 78L05 który jednak daje max 100mA i 7805 będąc przekonany że to to samo...).

    Wylutowałem 78L05 który tam włożyłem myśląc, że to 7805, i wlutowałem na miejsce konstrukcji 7805 i wszystko działa tak jak należy ;) Zaraz zabieram się za mierzenie napięć żeby podjąć decyzję o tym, jaką baterią to zasilać.

    Gdyby nie wskazówka doktora z mojej uczelni na dzisiejszym spotkaniu projektowym, że to może być nie ten stabilizator, i przyjrzenie się na rachunku i datasheet układu który wmontowalem, to bym nie wpadł na to chyba... :)

    W każdym razie jeszcze raz wszystkim dziękuję i na pewno w końcowej konstrukcji uwzględnię wszystkie wyżej wspomniane wskazówki.

    0