Arduino ADC参考电压(如果由电池供电)


9

我正在寻找可能使用其ADC监控Arduino的电池电量的方法。这非常简单明了(尤其是在使用Arduino API的情况下);但是,如果电池为Arduino供电并且外部不受控制,那么ADC参考电压是否会随电池不断下降?换句话说,即使电池电压实际上降低了,ADC值也不会始终读取相同的值(最大值)吗?

在这种情况下,测量电池电压既低效又毫无意义。

Answers:


4

... ADC参考电压不会随着电池不断下降吗?

是的,这就是为什么您使用或测量内部带隙基准的原因。

使用该analogReference()功能选择适合所用电路板的参考。请注意,如果要测量,则需要使用分压器将电池电压降低到所选参考电压以下的值。

为了测量带隙电压,而不是(AV使用CC作为参考和工作“向后”),你将需要设置MUX[3:0]ADMUX到0b1110,然后执行ADC直接读取(设置ADSCADCSRA和等待,直到它重置,然后读取ADC[H:L])。

与往常一样,有关详细信息,请参见MCU数据表。


重要信息,现在我想我可以自己进行。我希望可以使用某种内部参考。正如您所建议的,我需要将电源电压分压至低于AVccref,但是,我希望在所有可能的方面都最大限度地延长电池寿命,因此我将对分压器使用较大的等效电阻,以确保分压电阻小于漏电流的uA。您看到与此有关的任何问题吗?
ryeager 2014年

1
ADC阻抗仅为100Mohm。考虑改为测量内部基准。
伊格纳西奥·巴斯克斯

1
仅供参考,我在答案@Ignacio发布后发现了这个很棒的博客: 链接
ryeager 2014年

1

@ryeager的http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/#comment-71836链接具有用于读取Arduino电池电压的以下代码:

long readVcc() {
  // Read 1.1V reference against AVcc
  // set the reference to Vcc and the measurement to the internal 1.1V reference
  #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
    ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
    ADMUX = _BV(MUX5) | _BV(MUX0);
  #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
    ADMUX = _BV(MUX3) | _BV(MUX2);
  #else
    ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #endif  

  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Start conversion
  while (bit_is_set(ADCSRA,ADSC)); // measuring

  uint8_t low  = ADCL; // must read ADCL first - it then locks ADCH  
  uint8_t high = ADCH; // unlocks both

  long result = (high<<8) | low;

  result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
  return result; // Vcc in millivolts
}

这里的技巧是使用电池电压测量其内部基准电压为1.1V,然后对其进行反相以计算未知基准电压。

该代码中的ADMUX魔术可以启用其他有趣的ADC读数,例如差分测量和带增益的差分ADC测量,具体取决于组件和数据手册。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.