logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] Atmega328 3.3V ADC: Nieprawidłowe wartości na pinie 23 przy projekcie mieszadła

woodyboy 20 Mar 2018 17:09 1320 7
REKLAMA
  • #1 17116525
    woodyboy
    Poziom 2  
    Posty: 4
    Witam wszystkich.

    Jestem początkującym elektronikiem i właśnie buduje mieszadło magnetyczne z wyświetlaczem obrotów. Obrotami silnika steruje napięciowo i chcę za pomocą Atmegi 328 przeliczyć napięcie na aktualne obroty silnika i wyświetlić je na wyświetlaczu 7-segmentowym. Problem polega na tym, że gdy odczytuje napięcie na pinie analogowym (pin 23) to zwraca mi wartości około 0 lub 1023 (czasami wyświetli jakąś losową wartość z tego przedziału). Mierzyłem miernikiem bezpośrednio napięcie na nóżce i wszystko się zgadza ( napięcie z przedziału 0v - 3.3v +/-). Atmege programuje za pomocą Arduino UNO, a na sam mikrokontroler wgrany jest bootloader Atmega328 8Mhz zgodnie z instrukcją na stronie Arduino. Atmege zasilam napięciem 3.3V. Dodam jeszcze że jeżeli podepnę Atmege do płytki Arduino UNO i badam napięcie wszystko jest ok (podpinałem napiecie 3.3v oraz 0v do pinu A0).

    Z góry dziękuje za pomoc.

    Kod źródłowy:
    Spoiler:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod




    Schemat:

    Atmega328 3.3V ADC: Nieprawidłowe wartości na pinie 23 przy projekcie mieszadła
  • REKLAMA
  • #2 17116530
    marci4
    Poziom 31  
    Posty: 1290
    Pomógł: 169
    Ocena: 176
    Na pin 21 (AREF) musisz podać napięcie referencyjne (w Twoim przypadku domyślam się, że to będzie 3V3).
  • REKLAMA
  • #3 17116557
    Sareph
    Poziom 24  
    Posty: 638
    Pomógł: 65
    Ocena: 378
    marci4 napisał:
    Na pin 21 (AREF) musisz podać napięcie referencyjne (w Twoim przypadku domyślam się, że to będzie 3V3).
    No nie bardzo. Po pierwsze w ADMUX można wybrać AVCC jako napięcie odniesienia, po drugie jak podłączysz VCC do AREF i wybierzesz wewnętrzne napięcie odniesienia to możne być źle, bo zewrzesz je wtedy do VCC.
  • REKLAMA
  • #4 17116937
    dasej
    Poziom 32  
    Posty: 1905
    Pomógł: 165
    Ocena: 265
    Witam.

    R1+R5 TU pomiar R6 daje 3.4V przekraczasz parametry pomiarowe procesora.

    To niema prawa poprawnie działać.

    A to co jest?

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Informujesz algorytm że układ jest zasilany z 5V.
  • REKLAMA
  • #5 17116942
    woodyboy
    Poziom 2  
    Posty: 4
    Zamieniłem napięcie referencyjne na Avcc dodając taka linijkę do kodu:

    ADMUX = (1<<6);

    i nie pomogło
  • Pomocny post
    #6 17120535
    kaamil1984
    Poziom 13  
    Posty: 76
    Pomógł: 6
    Ocena: 12
    Nie podoba mi się bezpośrednie połączenie wejścia ADC do napięcia mierzonego.

    Mógłbyś zastosować tam jakiś prosty filtr RC. A co, jeżeli jest tam sygnał prostokątny albo podobny? Będziesz miał wyniki pomiarów raz 0, raz 100%, a czasami jakąś przypadkową wartość jeżeli pomiar wypada w momencie narastania lub opadania zbocza. Czas próbkowania przetwornika ADC jest krótki.

    Muszę zaznaczyć, że mogę się mylić w tej kwestii, bo nie jestem elektronikiem i nie wiem jak działa NE555 w takim układzie jak u Ciebie i nie wiem jakiego sygnału można się tam spodziewać.

    ---

    Jeszcze jedna uwaga - dobrze jest unikać zmiennoprzecinkowych danych (np. typu `float`) na mikrokontrolerze takim jak ATmega.

    Mógłbyś te dane przechowywać w postaci 16-bitowego inta i posługiwać się miliwoltami.

    W prostym programie jak w Twoim przypadku nie ma to znaczenia, ale dobrze jest mieć taki nawyk.
  • #7 17120581
    woodyboy
    Poziom 2  
    Posty: 4
    Spróbuje dołożyć tam filtr RC, zobaczymy może coś pomoże, ale możliwe że masz racje gdyż silnik sterowany jest sygnałem PWM. Co do samego dzielnika rezystorowego spróbuje jeszcze ograniczyć tam napięcie, leczy gdy mierzyłem miernikiem to na największych obrotach miałem tam napięcie 3,3v, ale wiadomo trzeba brać poprawkę na błąd pomiarowy miernika.
    Jeszcze raz dzięki za rady.
    Peace
  • #8 17124402
    woodyboy
    Poziom 2  
    Posty: 4
    Miałeś racje wystarczyło dodać filtr RC i wszystko działa jak należy :D
    Dziękuje wszystkim za pomoc i pozdrawiam

Podsumowanie tematu

✨ Użytkownik buduje mieszadło magnetyczne z wyświetlaczem obrotów, wykorzystując mikrokontroler Atmega328 do pomiaru napięcia na pinie analogowym (pin 23). Napotkał problem z odczytem wartości, które oscylują między 0 a 1023, mimo że napięcie na pinie jest prawidłowe (0V - 3.3V). Użytkownicy zasugerowali, aby podać napięcie referencyjne na pin 21 (AREF) oraz zwrócili uwagę na możliwość błędów w pomiarach spowodowanych bezpośrednim podłączeniem do napięcia. Zastosowanie filtru RC zostało polecone jako rozwiązanie problemu, co ostatecznie przyniosło pozytywne rezultaty.
Wygenerowane przez model językowy.
REKLAMA