Skocz do zawartości

Mierzenie poziomu naładowania LiPola. Problem


Pomocna odpowiedź

Napisano

Witam,
Mam kolejny problem, z którym walczę od dłuższej chwili 😃,

Problem związany z monitorowaniem stanu naładowania akumulatora.

Robot zasilany jest z jednego źródła (Lipol 7.2V). Arduino zasilane jest z lipola poprzez przetwornicę 5V 2.5 A. Z akumulatora prowadzę także przewód na dzielnik napięcia, a napięcie między rezystorami idzie na wejście ADC w Arduino. Przy maksymalnym naladowaniu akumulatora napięcie z dzielnika to około 4,95 V. Za każdym razem, gdy podłączam zasilanie na LCD wyświetla mi się 5V zmierzonego napięcia na ADC niezależnie od stanu naładowania akumulatora. Zawsze widzi 1023 działki. Czy taka metoda jest poprawna? Czy da się tak zmierzyć napięcie ?

Z góry dzięki

Da się, ale przetwornik ADC mierzy napięcie wejściowe odniesione do swojego napięcia referencyjnego. W procesorze w Arduino możesz to zmieniać. Jeśli chcesz mierzyć od 0 do 5V to musisz mierzyć względem 5V i to musisz ustawić w odpowiednim rejestrze przetwornika (ADMUX o ile pamiętam) ustawiając bity REFS1 i REFS0 na 01. Być może domyślnie jest ustawione napięcie odniesienia = 1.1V więc wszystko powyżej tego będzie mierzone jako 1023.

Albo zmień dzielnik tak, by przy maksymalnym teoretycznym napięciu akumulatora (8.4V) dawał nie więcej niż aktualne napięcie odniesienia albo zmień to napięcie.

int odczytanaWartosc = 0;

float napiecie = 0;

float napiecie2 = 0;

#include

#include

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

void setup() {

analogReference(DEFAULT);

lcd.begin(16,2);

lcd.backlight();

}

void loop() {

odczytanaWartosc = analogRead(A2);

napiecie = odczytanaWartosc * (5.0/1023.0);

napiecie2 = napiecie * (8/4.7);

delay(200);

lcd.setCursor(0,0);

lcd.print(napiecie);

delay(500);

lcd.setCursor(0,1);

lcd.print(napiecie2);

}

[ Dodano: 13-01-2016, 20:13 ]

marek1707,

Czy mógłby przybliżyć, jak zmienić te bity?

__________

Komentarz dodany przez: Treker

Kod, dla lepszej czytelności, należy umieszczać w tagach .

Proszę to poprawić.

Jakim wyjściu? Jakiego pinu? Przecież linie przetwornika to wejścia. Weź daj jakiś schemat połączenia tych oporników i Arduino. Z resztą wynik 1023 dla 5V przy VREF=5V to chyba dobrze?

Tak połączyłem.

Maksymalny prąd wchodzący do ADC to 4,95, więc 1023 działki odczytane to problem.

A napięcie 5V, o którym wspomniałem mam na pinach I/O.

Nie jest ważne co masz na pinach. Ważne jakie jest rzeczywiste napięcie zasilania procesora, bo to ono jest teraz napięciem odniesienia przetwornika - zmierz to. No i dlaczego zasilasz Arduino przez przetwornicę, skoro ma ono własny stabilizator i to na Vin powinieneś podać napięcie wprost z akumulatora.

Poza tym biorąc pod uwagę błędy samego przetwornika i pomiarów napięć, 4.95V zupełnie spokojnie może być widziane przez ADC jako 1023 przy VREF w okolicach 5V. Nie możesz podać tam mniejszego napięcia? Zmienić dzielnik? Od razu wyjaśni się jak głębokie jest to przekroczenie zakresu: o 1 bit czy może o 200.

EDIT: Może niepotrzebnie piszemy razem, bo musisz rozmawiać z dwoma osobami na raz. Ja odpuszczam, poradzicie sobie 🙂

No i dlaczego zasilasz Arduino przez przetwornicę, skoro ma ono własny stabilizator i to na Vin powinieneś podać napięcie wprost z akumulatora.

Tylko że ten jego własny stabilizator to liniowy jest, więc w zależności od obciążenia na pinach może nie być optymalny. Szczególnie przy zasilaniu z baterii.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...