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

Zasilanie ATMega 328P - stabilizator

lewarion 15 Sie 2014 05:44 4566 10
  • #1 15 Sie 2014 05:44
    lewarion
    Poziom 2  

    Od jakiegoś czasu konstruuję sobie układ - w zamierzeniu ma on sterować warunkami w terrarium, opierając się na wartościach temperatury i wilgotności z DHT11, a jednocześnie komunikując się z napisanym przeze mnie programem na komputerze. Zaczynałem uczyć się na Arduino, stopniowo przenosząc układ na płytkę stykową (całość oparta jest właśnie na ATMega 328P) - szło nieźle, aż do momentu, w którym chciałem całkowicie odciąć się od Arduino. Komunikację między układem a komputerem prowadzę przez konwerter USB-UART - czujniki wysyłają dane wilgotności i temperatury co minutę, a na żądanie ATMega wymienia się z programem ustawieniami, czasem itd.

    Chciałbym układ zasilać (ze względu na inne elementy) zasilaczem impulsowym 12V 1.5A, w związku z tym między nim a układem zamontowałem stabilizator 78L05 razem z kondensatorami jak na schemacie:

    Zasilanie ATMega 328P - stabilizator

    Na wyjściu stabilizatora otrzymałem równo 5V, w związku z czym podłączyłem układ do tego źródła zasilania i uruchomiłem komunikację z komputerem. Dane wilgotności i temperatury są dalej wysyłane bez zarzutu, natomiast w momencie, w którym chciałem pobrać z układu czas zegara, zamiast spodziewanej zmiennej t_time otrzymałem... krzaki. To samo działo się podczas wszystkich bardziej skomplikowanych operacji na układzie. Myśląc, że może coś spaliłem/rozłączyłem, podpiąłem zasilanie 5V z Arduino i okazało się, że układ znów wymienia dane w najlepszym porządku. Przebudowałem stabilizator od początku i problem się powtórzył - jeżeli zasilam układ 5V z komputera (np z USB czy arduino), wszystko działa dobrze, natomiast po zmianie źródła zasilania na stabilizowane z zasilacza 12V (wg powyższego schematu) ATMega wysyła do portu szeregowego głupoty.

    Wydawało mi się, że prawdopodobnie chodzi o tętnienia napięcia wychodzącego ze stabilizatora, więc podłączyłem jeszcze (równolegle do kondensatorów ceramicznych 0,33µF i 0,1µF na stabilizatorze) jeszcze po jednym kondensatorze elektrolitycznym 10µF, co przyniosło jako taki sukces - wysyłane "krzaki" się zmieniły, a jedna z prostszych operacji układu również zaczęła działać. Kierunek zmian jest dobry, natomiast skończyły mi się pomysły na dalszą stabilizację napięcia.

    Pomyślałem, że może zasilacz jest nieodpowiedni, ale na wejścia stabilizatora podłączyłem nową baterię 9V i... znowu otrzymałem krzaki (mimo napięcia 5V na wyjściu). Wymieniłem stabilizator na inny i efekt bez zmian.

    Czytałem trochę o filtrowaniu zasilania, ale nie wiem, jak to powinno wyglądać w praktyce. Wartości kondensatorów na stabilizatorze też wybieram "na czuja" w oparciu o wiedzę ze schematów i nie za bardzo jestem w stanie sprawdzić ich wpływ na tętnienia (marzę o oscyloskopie).

    Macie jakiś pomysł, co robię źle, albo jak - dodając jakiś filtr (?) lub zmieniając wartości kondensatorów - ustabilizować napięcie na dogodne dla ATMegi?

    0 10
  • #2 15 Sie 2014 07:14
    trymer01
    Moderator Projektowanie

    Kondensatory 0,33 i 0,1 muszą być zamontowane tuż przy nogach LM7895.
    Masz oscyloskop? - sprawdź częstotliwość tych "krzaków" - czy nie są to zakłócenia z zasilacza impulsowego? - jeśli tak to trudno będzie je usunąć.
    Sprawdź wydajność prądową tego zasilania - obciąż 5V odpowiednim opornikiem aby wymusić prąd i sprawdź stabilność napięcia 5V oraz charakter "krzaków".

    0
  • #3 15 Sie 2014 08:20
    shadow0013
    Poziom 34  

    Do sprawdzania używasz tego samego czujnika co w Arduino (długość kabli, rezystor podciągający). Masz na zasilaniu ATmegi (jak najbliżej nóżek) kondensatory filtrujące napięcie zasilania i jeśli używasz ADC odpowiednio zasilane nóżki ATmegi (dławik, kondensator). Najlepiej filtruj zasilanie ATmegi zgodnie z datasheet'em lub powiel filtrowanie z Arduino.

    0
  • #4 15 Sie 2014 08:27
    jarek_lnx
    Poziom 43  

    Kondensatory daj blisko stabilizatora (blisko to jest kilka mm) i oddzielny kondensator 0,1uF ceramiczny blisko ATmegi (procesor jest nie tylko ofiarą zakłóceń ale i źródłem ), popatrz też na sposób prowadzenia masy - żeby były krótkie polącznia.

    Sprawdź czy problemem nie jest właśnie masa, gdy podłączasz zasilanie z PC masa również jest inna.

    0
  • #5 15 Sie 2014 14:40
    lewarion
    Poziom 2  

    Kondensatory podłączone są zaraz przy nogach stabilizatora (jedno oczko na płytce stykowej). Napięcie mierzę multimetrem o określonych długościach przewodów i to wychodzące ze stabilizatora jest identyczne (5V) z komputerowym. Problem jest najwyraźniej w układzie stabilizatora, ponieważ podłączona poprzez niego bateria 9V powoduje podobny efekt, a nie słyszałem o tętnieniu napięcia w bateriach.

    Czy może zamiast kondensatorów ceramicznych na stabilizatorze mógłbym zamontować tantalowe?

    0
  • #6 15 Sie 2014 18:00
    shadow0013
    Poziom 34  

    A co z filtracją napięcia przy samym ATmega na płytce stykowej. Jak nie wierzysz to poszukaj na blogach są opisy wraz z przebiegami na oscyloskopie. Stara zasada cyfrówki, na jeden scalak jeden kondensator filtrujący 100nF (montowany jak najbliżej nóżek zasilania scalaka).

    0
  • #7 15 Sie 2014 18:19
    lewarion
    Poziom 2  

    Nie filtrowałem napięć przy scalaku, zamontuję je jak tylko będę miał możliwość. Według schematu:
    Zasilanie ATMega 328P - stabilizator
    zamontować kondensator ceramiczy 0,1uF równolegle do pinów 7 i 8 czy 20 i 22?

    0
  • #8 15 Sie 2014 22:47
    shadow0013
    Poziom 34  

    Tu masz artykuł z blogu (jednego z wielu) o prawidłowym zasilaniu.

    0
  • #9 18 Sie 2014 19:25
    lewarion
    Poziom 2  

    Problem rozwiązany - najwyraźniej mimo identycznego wskazania na mierniku, napięcia z konwertera UART-USB i mojego stabilizatora się różniły. Płytka działała bez zarzutu, ale z powodu tej różnicy konwerter i ATmega nie mogły się dogadać, w wyniku czego powstawały krzaki w porcie szeregowym.

    Wystarczyło do wyjścia 5V z konwertera podpiąć 5V ze stabilizatora i połączyć masy - komunikacja śmiga aż miło.

    Tak czy siak, dziękuję za rady!

    0
  • #10 17 Mar 2015 09:04
    trkmajor
    Poziom 10  

    Witam, sorry że dopisze się do tego wątku, mam podobny problem ze stabilizacją i nie chcę zakładac nowego wątku.

    Ja stosuję w układzie z Atmega328p inny układ, który wymaga 1.8V 30mA.
    Na płytce mam 3.3V bo taki jest układ z Atmegą (arduino uno 3.3V 8MHz).

    PROBLEM: nie mam na pcb napięcia 1.8V i mam pytanie czy mogę jedno z wyjść Atmegi
    tak wysterowac aby tam było 1.8V 30mA?

    0
  • #11 17 Mar 2015 09:27
    sp5nvx
    Poziom 1  

    Trzeba pamiętać że z jednego wyj. to tylko ok 25mA udaje się uzyskać, więc może 2 razem? Znajdź 2 piny PWM (ja tu zastosuję przykładowo: PD5 i PD6), program wysteruje napięcie PWM 1.8V, połącz potem razem 2 piny przez rezystory na jeden kondensator (są sterowane prawie równolegle, kolejnymi komendami) uzyskasz większy prąd, ale najpierw przetestuj na jednym z pinów bez łączenia. Napięcie jakie uzyskasz to niestety fala prostokątna i musisz to wygładzić. Zastosuj rezystor i za nim kondensator do masy (filtr: sim.okawa-denshi.jp/en/PWMtool.php ). Dla 2 pinów 2 rezystory na jeden kondensator wspólny.

    void setup()
    {
    pinMode(PD5, OUTPUT);
    //pinMode(PD6, OUTPUT);
    }
    void loop()
    {
    analogWrite(PD5, (255 * (1.8 / 5))); // lub 1.8 / 3.3 V
    //analogWrite(PD6, (255 * (1.8 / 5)));
    }

    Potem jak zadziała na jednym pinie sprawdź dwa razem, powinieneś też te 2 komendy kolejne połączyć w jedną (z maska bitową).

    0