Autor Tema: medicion de voltaje de bateria con pic  (Leído 3699 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado francpa

  • PIC10
  • *
  • Mensajes: 16
medicion de voltaje de bateria con pic
« en: 18 de Abril de 2013, 17:58:45 »
hola a todos

mi problema es el siguiente estoy midiendo voltaje de una batería de plomo ácido 12 v 7Ah con un Microcontrolador, lo que pasa es que necesito encender un led dependiendo del estado de carga de la batería, por ejemplo 13.8v  enciende un Led, pero la curva de carga de esta batería es como muestro en el dibujo. por lo que llega a un nivle de 13.8 pero despues llega  a  14.5 y despues baja hasta 13.8 de nuevo donde se mantiene definitivamente a ese valor y es ahi donde quiero que se encienda el led no antes. ojala me haya explicado bien
con el código que he hecho se prende el led en la etapa de transicion no de flotación como debe de ser
adjunto el codigo
Código: [Seleccionar]
#include <PRUEBA_RS232_2.h>


void main() {

   int iteracion=0;
   int16 medicion1=0, medicion2=0;
   float voltaje1=0, var_aux1=0, sumatoria=0, sumatoria2=0, volt=0, voltDS=0, voltaje2=0, var_aux2=0;
   setup_adc_ports(sAN2|sAN3);
   setup_adc(ADC_CLOCK_DIV_64);
   setup_timer_4(T4_DISABLED,0,1);
   setup_timer_6(T6_DISABLED,0,1);

   setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
   
while(TRUE){

   sumatoria=0;
   sumatoria2=0;
   iteracion=1;
   
 
         for(iteracion= 1; iteracion<=50; iteracion++)
      {
      set_adc_channel(3); 
      delay_us(20);
      medicion1 = read_adc();
      var_aux1=medicion1;
      voltaje1 = ((var_aux1/1023)*(15-5)*1/2)*2+5.16;
      sumatoria=voltaje1+sumatoria;
     
      set_adc_channel(2);
      delay_us(20);
      medicion2 = read_adc();
      var_aux2=medicion2;
      voltaje2=((var_aux2/1023)*5);
      sumatoria2=voltaje2+sumatoria2;
     
      }
      volt=sumatoria/50; //tensiones de entrada
      voltDS=sumatoria2/50; //tensiones de entrada 
     
      printf(/*lcd_putc,*/ "Promedio = %01.2fV\r\n", volt);
      printf("VDS = %01.2fV\r\n", voltDS);
     
      if((volt>=13.8)
      output_high(PIN_C5);
      delay_us(20);
      }
      else{
      output_low(PIN_C5);
      }
}
     

no se como hacerlo su ayuda seria de mucha ayuda
saludos y gracias de ante mano

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: medicion de voltaje de bateria con pic
« Respuesta #1 en: 18 de Abril de 2013, 18:46:06 »
Facil, con un contador. En la primera que llege a 13.8 (con una histerisis de 0.5 talvez), lo pones a 1 y cuando pase lo mismo, lo pones a 2. y ahi recien aactivas el led.

algo asi:
cont = 0; flag = 0;

while(1){
if (adc >= 13.8-0.5 && adc <= 13.8+0.5)
   {if (flag == 0) { cont++; flag = 1;}}
else flag = 0;

if cont >= 2
{led = 1;}
}

Desconectado PCCM

  • PIC16
  • ***
  • Mensajes: 109
Re: medicion de voltaje de bateria con pic
« Respuesta #2 en: 18 de Abril de 2013, 18:55:05 »
Podría ser como dice jeremy, pero ten en cuenta la velocidad de adquisición del ADC, ya que por lo que se ve en tu código es inmediato y leer con un contador sin darle un buen retardo hará que se confunda ya que el valor de 13.08 con histéresis de 0.5 lo cumplirá muchísimas veces en la primera llegada.


Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: medicion de voltaje de bateria con pic
« Respuesta #3 en: 18 de Abril de 2013, 19:51:03 »
Podría ser como dice jeremy, pero ten en cuenta la velocidad de adquisición del ADC, ya que por lo que se ve en tu código es inmediato y leer con un contador sin darle un buen retardo hará que se confunda ya que el valor de 13.08 con histéresis de 0.5 lo cumplirá muchísimas veces en la primera llegada.



una solución sería tomar cada valor y compararlo con el anterior, si el resultado es positivo, entonces el voltaje es decreciente, bastaría realizar esta comparación hasta que el voltaje medido= 13.8 (verificado varias veces también)

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado francpa

  • PIC10
  • *
  • Mensajes: 16
Re: medicion de voltaje de bateria con pic
« Respuesta #4 en: 19 de Abril de 2013, 18:04:48 »
muchas gracias por su respuestas ,  me funciono super bien lo de la bandera y el contador mencionado por jeremylf, pero como lo puedo hacer para poner otro nivel de voltaje por ejemplo 13 volt pero donde se encienda el led en subida y luego en bajadad despues de 13.8v  no quiero abusar de ustedes pero no me sale, cualquier ayuda muchas gracias
saludos


 

anything