Pytanie:
Napięcie odniesienia Arduino ADC, jeśli jest zasilane z baterii
ryeager
2014-06-02 02:34:04 UTC
view on stackexchange narkive permalink

Chcę ewentualnie monitorować moc baterii do Arduino za pomocą jego ADC. Jest to dość proste i proste (szczególnie w przypadku korzystania z interfejsu API Arduino); jeśli jednak bateria zasila Arduino i nie jest regulowana zewnętrznie, czy napięcie odniesienia ADC nie będzie stale spadać wraz z baterią? Innymi słowy, czy wartość ADC nie wskazywałaby stale tej samej wartości (wartości maksymalnej), mimo że akumulator faktycznie zmniejszałby napięcie?

Jeśli tak jest, oba byłyby nieefektywne i bezcelowe jest mierzenie napięcia baterii.

Dwa odpowiedzi:
Ignacio Vazquez-Abrams
2014-06-02 03:43:02 UTC
view on stackexchange narkive permalink

... czy napięcie odniesienia ADC nie będzie stale spadać wraz z baterią?

Tak, dlatego zamiast tego używasz albo mierzysz wewnętrzne odniesienie pasma wzbronionego.

Użyj funkcji analogReference () , aby wybrać odniesienie odpowiednie dla używanej karty. Zauważ, że będziesz musiał użyć dzielnika napięcia, aby zmniejszyć napięcie akumulatora do wartości poniżej wybranej wartości odniesienia, jeśli chcesz go zmierzyć.

Aby zamiast tego zmierzyć napięcie pasma wzbronionego (używając AV CC jako odniesienie i działając „wstecz”) należy ustawić MUX [3: 0] w ADMUX na 0b1110, a następnie bezpośrednio wykonać odczyt ADC (ustaw ADSC w ADCSRA i poczekaj, aż się zresetuje, a następnie przeczytaj z ADC[H:L]).

Jak zawsze, zapoznaj się z arkuszem danych MCU, aby uzyskać szczegółowe informacje.

Świetna informacja, teraz myślę, że mogę działać samodzielnie. Miałem nadzieję, że można użyć jakiegoś wewnętrznego odniesienia. Jak zasugerowałeś, będę musiał podzielić napięcie zasilania poniżej AVccref, jednak staram się zmaksymalizować żywotność baterii we wszystkich możliwych aspektach, więc zamierzałem użyć dużej równoważnej rezystancji dla dzielnika, aby upewnić się, że mam mniej niż uA upływającego prądu. Czy widzisz z tym jakieś problemy?
Impedancja ADC wynosi tylko 100Mohm. Zamiast tego rozważ zmierzenie wewnętrznego odniesienia.
FYI Znalazłem ten niesamowity blog po odpowiedzi @Ignacio posted: [link] (http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/#comment-71836)
Dave X
2015-11-19 05:38:48 UTC
view on stackexchange narkive permalink

Link @ ryeager do http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/#comment-71836 zawiera ten kod do odczytu napięcia baterii Arduino:

  long readVcc () {// Odczytaj odniesienie 1,1 V względem AVcc // ustaw odniesienie na Vcc, a pomiar na wewnętrzne odniesienie 1,1 V #if zdefiniowane (__ AVR_ATmega32U4__) || zdefiniowane (__ AVR_ATmega1280__) || zdefiniowano (__ AVR_ATmega2560__) ADMUX = _BV (REFS0) | _BV (MUX4) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #elif zdefiniowany (__AVR_ATtiny24__) || zdefiniowane (__ AVR_ATtiny44__) || zdefiniowano (__ AVR_ATtiny84__) ADMUX = _BV (MUX5) | _BV (MUX0); #elif zdefiniowany (__AVR_ATtiny25__) || zdefiniowane (__ AVR_ATtiny45__) || zdefiniowano (__ AVR_ATtiny85__) ADMUX = _BV (MUX3) | _BV (MUX2); #else ADMUX = _BV (REFS0) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #endif opóźnienie (2); // Poczekaj, aż Vref rozliczy ADCSRA | = _BV (ADSC); // Rozpocznij konwersję podczas (bit_is_set (ADCSRA, ADSC)); // pomiar uint8_t low = ADCL; // musi najpierw odczytać ADCL - następnie blokuje ADCH uint8_t high = ADCH; // odblokowuje oba long result = (high<<8) | Niska; wynik = 1125300L / wynik; // Oblicz Vcc (w mV); 1125300 = 1,1 * 1023 * 1000 zwracany wynik; // Vcc w miliwoltach}  

Sztuczka polega na tym, że mierzy swoje wewnętrzne odniesienie 1,1 V za pomocą napięcia akumulatora, a następnie odwraca je, aby obliczyć nieznane napięcie odniesienia.

Magia ADMUX w tym kodzie może umożliwić inne interesujące odczyty ADC, takie jak pomiary różnicowe i pomiary różnicowe ADC ze wzmocnieniem, w zależności od komponentu i arkusza danych.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...