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

[atmega32][C] - kalibracja ACS712 - błędne odczyty

margas4542 09 Sie 2014 14:03 2169 9
REKLAMA
  • #1 13863942
    margas4542
    Poziom 16  
    Witam. Mam problem z kalibracją 2x ACS712 [wersja 30A] podłączonych do wejść ADC ATMEGI mających dokonywać pomiaru prądu płynącego z zasilacza oraz prądu pobieranego przez odbiorniki przy napięciu instalacji 12V. Pomiar dwu napięć w tej instalacji jest poprawny.
    Zmiana pola magnetycznego na ACS powoduje spadek napięcia na jego wyjściu które nominalnie wynosi 2.36V. Napięcie referencyjne ATMEGA ADC 2.54V.
    Kombinuje jak to ugryźć ale bez pomocy nie dam rady.
    Odczyt ADC realizuje w ten kod;
    Kod: C#
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 13864217
    szczywronek
    Poziom 28  
    Chyba zapomniałeś napisać na czym konkretnie polega problem ;)

    Poza tym:
    - w ten sposób nie obliczysz napięcia na wejściu ADC:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    - to jest trochę bez sensu:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    ADC to już jest cały rejestr z wynikiem, który składa się z dwóch "połówek" ADCH i ADCL. Podsumowując, można napisać po prostu:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #3 13864290
    margas4542
    Poziom 16  
    Nie wiem co jeszcze napisać. ADC na rym kodzie działa dobrze a chyba jasno określiłem w tytule o co chodzi i zaznaczyłem w kodzie niewłaściwy sposób "wyzerowania" "wyskalowania" pomiaru aby pokazywał faktyczną wartość przepływającego prądu a nie cuda niewidy.
    Pre-definicja ADC
    Kod: C#
    Zaloguj się, aby zobaczyć kod
  • #4 13864301
    tadzik85
    Poziom 38  
    margas4542 napisał:
    Nie wiem co jeszcze napisać. ADC na rym kodzie działa dobrze a chyba jasno określiłem w tytule o co chodzi i zaznaczyłem w kodzie niewłaściwy sposób "wyzerowania" "wyskalowania" pomiaru aby pokazywał faktyczną wartość przepływającego prądu a nie cuda niewidy.


    Skoro działa dobrze to po co ten wątek?
    Skoro wiesz lepiej, radź sobie sam. Kolega wyżej przedstawił poprawne wnioski.
    A z takiego wycinku kodu niewiele więcej można doradzić.
    Brak definicji zmiennych.
    Zły odczyt rejestr danych przetwornika.
    Pojęcie promocji typów też najwidoczniej nieznane...
    Gratuluje....
    Same błędy.
  • REKLAMA
  • Pomocny post
    #5 13864396
    szczywronek
    Poziom 28  
    Kolego margas4542, pomiar napięcia nie może działać poprawnie - chyba, że coś dalej kombinujesz czego nie widać na tym kawałku kodu. Prosty test: przetwornik jest 10bitowy - czyli wynik może przyjmować wartości od 0 do 1023. Napięcie odniesienia 2,54V. Jeżeli na wejściu przetwornika będzie napięcie 2,54V to, w wyniku konwersji, rejestr ADC powinien zawierać max. możliwą wartość (1023). Podstawiam więc do Twojego wzoru:
    ADC / 2.54 / 1024 = 1023 / 2.54 / 1024 = ~1/2.54V = 0,39V
    Wyszła odwrotność tego co powinno wyjść ;) Ale tak jak wspomniałem, być może dalej obrabiasz ten wynik i stąd na końcu wartość jest dobra.

    Z tego co rozumiem, z tym pomiarem prądu, chodzi o przeliczenie wartości z ADC "na ampery", tak? Sprawa jest generalnie prosta. ACS dla zerowego prądu ma na wyjściu napięcie w okolicach połowy zasilania (u Ciebie jest to 2,36V). W zależności od kierunku przepływu prądu, napięcie to zmienia się (w górę bądź w dół) proporcjonalnie do natężenia. Z tego co pamiętam (ale lepiej jeszcze sprawdź), czułość wynosi 66mV/A. Musisz, więc: policzyć różnicę między napięciem wyjściowym (ACS'a) dla I=0 (możesz założyć, że jest równe 2,36V albo mierzyć przez ADC) i napięciem wyjściowym dla mierzonego natężenia. Tą różnicę dzielisz przez 66mV/A i masz gotowy wynik w A.

    Twoich obliczeń za bardzo nie rozumiem ;) W szczególności mieszania "a_in" i "a_out" w jednym wzorze.
  • #6 13864941
    margas4542
    Poziom 16  
    Bez urazy... zamiast gratulacji za błędy bo orłem nie jestem to wolałbym wiedzieć ja zrobić to dobrze ale widać lepiej wychodzi krytyka.

    Mogę dać cały kod programu ale czy komuś się będzie chciało go analizować?
    Nie jest to jakaś specyfika ... napisałem jak umiałem .... więc na pewno będą krytyczne uwagi ale czy tylko?.
    Jeden program którego nie potrafię skończyć a chciałbym a potem odłożę C do szuflady .. za stary na to już jestem..
  • REKLAMA
  • #7 13864957
    tadzik85
    Poziom 38  
    Uwagi zostały wymienione.
    Ja dodam ze skoro już stosujesz zmiennoprzecinkowe zmienne pamiętaj o rzutowaniu argumenty nie wyniku.

    Bo obliczenia które stosujesz nie dość ze są blednę, to przez promocje typu ich wynik będzie całkowicie zły.
  • #8 13865003
    margas4542
    Poziom 16  
    Wszystko ładnie pięknie .. w teorii. Zapoznałem się z propozycjami za które dziękuje i spróbuje jakoś je zastosować. Obawiam się jednak że szybko z tym się nie uporam i narobię jeszcze więcej "błędów" wiec zapytam ile może kosztować napisanie programu dla mojego sterownika bo męczę się z tym długo a efekty nadal mierne.
  • Pomocny post
    #9 13865033
    tadzik85
    Poziom 38  
    To pytanie na inne forum....
  • #10 13866169
    margas4542
    Poziom 16  
    No cóż zapytać nie zaszkodziło.
    Dziękuje za wszystkie posty i informuje że zdecydowałem się zlecić napisanie tego programu a to oznacza że sterownik będzie działał zgodnie z założeniami projektu a ja nie osiwieję do reszty. Pozdrawiam i życzę wszystkim powodzenia w oswajaniu C.
REKLAMA