Cómo medir el voltaje de la batería desde un microcontrolador

Hoy tuve una entrevista, ahi me preguntaron, si le dan un microcontrolador y bateria entonces como se mide el nivel de voltaje. Escribe los pasos desde cero con pseudocódigo.

¿Cómo se puede hacer esto?

Respuestas (2)

Si buscaban el pseudocódigo, entonces esa era una mala pregunta; todo depende del microcontrolador. Probablemente le habría dado al candidato la hoja de datos del microcontrolador y observaría cómo se abre camino a través de ese documento de 300 páginas.

De todos modos, conecta la batería a una entrada ADC (suposiciones: el microcontrolador tiene ADC a bordo y el voltaje de la batería es menor que el voltaje de suministro del microcontrolador).

  1. Establezca el modo pin para ese pin en ADC
  2. Seleccione esta entrada ADC si hay múltiples entradas ADC
  3. Iniciar conversión ADC
  4. Espere a que finalice la bandera de conversión
  5. leer registro ADC
  6. calcular Vbat = Vcc x (lectura ADC)/(2^resolución ADC)
Esta es una gran ayuda. ¿Podría sugerir algunos enlaces web donde pueda estudiar el hardware y el software en paralelo en el microcontrolador?
No es una mala pregunta. El entrevistador probablemente lo estaba buscando para hacerle preguntas sobre el hardware y sugerir varios enfoques.
@Toby: si yo fuera el entrevistador y ese fuera mi propósito, no pediría el pseudocódigo.
@TobyJaffey: Creo que tienes razón
Seleccione la referencia de brecha de banda interna cuando esté disponible; o) Si la batería y el voltaje de suministro son iguales, entonces debe conectarse a través de un divisor de voltaje.
Entrevistador: "Cuénteme un poco más acerca de las referencias a la brecha entre bandas". :-)
+1 para la "parte de la hoja de datos de 300 páginas". Pediría una laptop y una versión electrónica del documento ;o)
"el voltaje de la batería es menor que el voltaje de suministro del microcontrolador"... Creo que es exactamente lo contrario de la suposición que debería estar haciendo, así que solo use un divisor de voltaje.
@Ben: si el entrevistador no especifica que puedo hacer cualquier suposición que desee. Es una suposición perfectamente razonable para NiMH o pilas alcalinas y un microcontrolador de 3,3 V o 5 V. Si quiere escuchar sobre el divisor de voltaje, debe responder "Oh, por cierto, es una batería de automóvil de 12 V".
@stevenvh: Creo que la respuesta más probable es: "Su microcontrolador se mantiene reiniciado para siempre porque el voltaje de la batería no es suficiente para encenderlo; no pudo elegir un microcontrolador apropiado para usar en este sistema".
Antes de eso, fui CIO y gerente de TI. Hubiera esperado no solo algunas preguntas que aclararan lo que quería y cuáles eran los parámetros, sino también algún pseudocódigo. No esperaría un pseudocódigo perfecto, sino que quiero ver cómo la persona entrevistada abordó el problema.

Creo que el problema aquí es que los microcontroladores necesitan una referencia externa para su A/D. La referencia por defecto es la fuente de alimentación. Puede usar una referencia externa y dividir el voltaje de la batería a algo por debajo de esa referencia, pero eso agota constantemente la batería, lo que podría no ser una buena idea.

Mi respuesta sería: obtenga una referencia de tipo derivación para un voltaje que sea más bajo que el rango de interés de la batería. Supongamos una batería de ~5V y un TL431 o similar como referencia de 2,5V. Ahora mida el voltaje del TL431, usando la batería como referencia. Suponga un A/D de 10 bits (el más común), que dice N. Ahora sabe que

N * (Battery / 1023) = 2.5

por lo tanto

Battery = 2.5 * 1023 / N

Si la corriente consumida por la referencia es un problema, cambiaría su alimentación desde un pin de salida: no se consume energía a menos que queramos realizar la medición (que será un período muy corto).

=========================================

Ahora algo de tarea como preparación para la próxima entrevista: Tienes un gadet de 5V alimentado por USB, que tiene un microcontrolador y un sensor de temperatura LM35. ¿Cómo determinarías la temperatura? Sugerencias: qué salida tiene el LM35 y verifique el rango de voltaje de una toma USB. (Hay una respuesta alternativa: ¿por qué $&^*^& no usa un sensor de temperatura digital en primer lugar?).

¡Y luego preguntas si hay razones para no hacerlo de esta manera (batería como Vref)! Como que la resolución no es constante porque la función es hiperbólica en lugar de lineal. A 5 V un LSB = 10 mV, a 3,33 V un LSB = 4,3 mV.
Muy inteligente por cierto. ¿Es una referencia de brecha de banda diferente de su 'referencia de tipo zener', o estamos hablando del mismo tipo de dispositivo aquí? No me di cuenta de que una referencia en realidad consumiría menos energía que un divisor de voltaje de alta impedancia.
Eso depende mucho del contexto. Asumí un sistema de bajo costo, donde conocer el voltaje de la batería solo es interesante para un 5 o 10%. Una lectura de alta precisión probablemente no usaría el uC A/D en absoluto.
Sí, esa también era mi suposición. Más como un circuito de apagón... que, por supuesto, no requiere mucho pseudocódigo en absoluto...
El tipo Zener era una redacción incorrecta, me refería al regulador de derivación (en contraste con el regulador en serie). Editaré mi texto. Es probable que la referencia consuma la misma corriente, pero se puede encender y apagar a voluntad . Tenga en cuenta que, en general, el divisor no puede ser de alta impedancia: las entradas uC A/D no son de alta impedancia. Por lo general, requieren una impedancia de fuente en el rango de 1 a 10 k.
@stevenvh: Pero por lo general te preocupas más por la resolución ya que la batería se agota de todos modos. ¡Esta respuesta es brillante!
@Ben: de acuerdo, pero para su informe tendrá que calcular el error absoluto (+ y -) nuevamente para cada resultado.