- Componentes requeridos:
- Descripción:
- Diagrama de circuito y explicación de trabajo:
- Diseño de circuitos y PCB con EasyEDA:
- Cálculo y pedido de muestras de PCB en línea:
- Explicación de programación:
En este proyecto vamos a hacer un sistema de monitoreo de batería de automóvil basado en PIC en PCB. Aquí hemos diseñado un PCB utilizando el simulador y diseñador de PCB en línea EASYEDA. Este circuito de monitoreo de la batería del automóvil se utiliza para monitorear la energía de la batería del automóvil con solo conectarlo a la toma de corriente en el tablero de un automóvil. El PCB también tiene la opción de usarlo como herramienta de medición de voltaje o voltímetro sin usar un cargador de automóvil USB. Hemos adjuntado un bloque de terminales aquí para medir el voltaje de otras fuentes de energía, simplemente conectando dos cables desde la fuente de energía.
Componentes requeridos:
- Microcontrolador PIC PIC18F2520 -1
- Placa PCB fabricada -1
- Conector USB -1
- Conector de terminal de 2 pines (opcional) -1
- Pantalla de siete segmentos de ánodo común (4 en 1) -1
- Transistor -4 BC557
- Resistencia 1k -6
- Resistencia 2k -1
- Resistencia 100R -8
- Condensador 1000uF -1
- Condensador -1 de 10uF
- Base IC de 28 pines -1
- burgsticks femeninos -1
- 7805 Regulador de voltaje -1
- Cargador USB para coche -1
- LED -1
- Diodo Zener 5.1v -2
- Cable USB (tipo B o compatible con Arduino UNO) -1
- 20 MHz de cristal -1
- Condensador -2 de 33pF
Descripción:
En general, no es importante medir la potencia de la batería del automóvil cada vez, pero a menudo necesitamos conocer el voltaje de la batería durante la carga para verificar si se está cargando o no. Con esto, podemos proteger la falla de la batería debido al sistema de carga defectuoso. El voltaje de una batería de automóvil de 12 V durante la carga es de aproximadamente 13,7 V. Así podemos identificar si nuestra batería se está cargando bien o no y podemos investigar las causas de la falla de la batería. En este proyecto, vamos a implementar un medidor de voltaje para batería de automóvil utilizando un microcontrolador PIC. El encendedor de cigarrillos del automóvil o el cargador USB del automóvil se utilizan para llevar el voltaje de la batería al pin ADC del microcontrolador con la ayuda del circuito divisor de voltaje. Luego, una pantalla de siete segmentos de 4 dígitosse utiliza para mostrar el valor de voltaje de la batería. Este circuito puede medir el voltaje hasta 15v.
Cuando la batería de un automóvil se está cargando, entonces el voltaje en los terminales de la batería proviene del alternador / rectificador, por eso el sistema lee 13,7 voltios. Pero cuando la batería no se está cargando o el motor del automóvil no está ENCENDIDO, entonces el voltaje en el terminal de la batería es el voltaje real de la batería alrededor de 12v.
También podemos usar el mismo circuito para medir el voltaje de otras fuentes de energía hasta 15v. Para este propósito, hemos soldado el bloque de terminales (bloque de plástico de color verde) en PCB donde puede conectar dos cables de la fuente de alimentación y puede controlar el voltaje. Verifique el video al final, donde lo hemos demostrado midiendo el voltaje de una fuente de alimentación variable, un banco de energía USB y un adaptador de 12v AC-DC. Compruebe también el circuito del monitor de batería simple y el circuito del cargador de batería de 12v.
Diagrama de circuito y explicación de trabajo:
En este circuito de monitoreo de voltaje de la batería, hemos leído el voltaje de la batería del automóvil usando un pin analógico incorporado del microcontrolador PIC y aquí hemos seleccionado el pin AN0 (28) del microcontrolador a través de un circuito divisor de voltaje. También se usa un diodo Zener de 5.1v para protección.
La pantalla 4 en 1 de siete segmentos se utiliza para mostrar el valor instantáneo del voltaje de la batería del automóvil que está conectado en PORTB y PORTC del microcontrolador. Un regulador de voltaje de 5v, llamado LM7805, se utiliza para alimentar todo el circuito, incluidas las pantallas de siete segmentos. Se utiliza un oscilador de cristal de 20 MHz para sincronizar el microcontrolador. El circuito es alimentado por el cargador de coche USB mediante un LM7805. Hemos agregado un puerto USB en la PCB, por lo que podemos conectar directamente el cargador USB del automóvil al circuito.
El cargador USB para automóvil o el encendedor de cigarrillos proporciona un suministro regulado de 5v desde la toma de corriente de 12v del automóvil, pero necesitamos medir el voltaje real de la batería del automóvil, por lo que hemos ajustado el cargador del automóvil. Debe abrir el cargador USB del automóvil y luego encontrar los terminales de 5v (salida) y 12v (entrada) y luego quitar la conexión de 5v frotándola con papel de lija o con algo duro y cortocircuitar el terminal de salida USB a 12v directamente. Primero abra la conexión de 5v desde el puerto USB en el cargador USB del automóvil y luego conecte 12v al puerto USB donde se conectó 5v. Como se muestra en la siguiente figura, hemos cortado la conexión con un círculo rojo, puede diferir en el cargador de su automóvil.
Para configurar ADC aquí, hemos seleccionado el pin analógico AN0 con un voltaje de referencia interno de 5v y reloj f / 32 para la conversión ADC.
Para calcular el voltaje de la batería del automóvil a partir del valor ADC, hemos utilizado la fórmula dada:
Voltaje = (valor ADC / factor de resistencia) * Voltaje de referencia Donde: valor ADC = salida del divisor de voltaje (convertido a digital por microcontrolador) Factor de resistencia = 1023.0 / (R2 / R1 + R2) // 1023 es el valor máximo de ADC (10- bit) Voltaje de referencia = 5 voltios // referencia interna de 5v seleccionada
Cálculo del factor de resistencia:
En este proyecto, estamos leyendo el voltaje de la batería del automóvil que es (generalmente) alrededor de 12v-14v. Así que hemos hecho este proyecto asumiendo que un máximo de 15v significa que este sistema se puede leer como máximo hasta 15v.
Entonces, en el circuito hemos usado la resistencia R1 y R2 en la parte del divisor de voltaje y los valores son:
R1 = 2K
R2 = 1K
Factor de resistencia = 1023,0 * (1000/2000 + 1000)
Factor de resistencia = 1023.0 * (1/3)
Factor de resistencia = 341.0 para hasta 15 voltios
Entonces, la Fórmula final para el cálculo de voltaje será la siguiente, que hemos utilizado el Código, que se proporciona al final de este artículo:
Voltaje = (valor ADC / 341.0) * 5.0
Diseño de circuitos y PCB con EasyEDA:
Para diseñar un circuito para el monitor de voltaje de la batería del automóvil, hemos utilizado EasyEDA, que es una herramienta EDA en línea gratuita para crear circuitos y PCB de manera transparente. Anteriormente habíamos pedido algunas PCB a EasyEDA y seguimos utilizando sus servicios, ya que encontramos que todo el proceso, desde el dibujo de los circuitos hasta el pedido de las PCB, es más conveniente y eficiente en comparación con otros fabricantes de PCB. EasyEDA ofrece dibujo de circuitos, simulación, diseño de PCB de forma gratuita y también ofrece un servicio de PCB personalizado de alta calidad pero bajo precio. Consulte aquí el tutorial completo sobre cómo usar Easy EDA para hacer esquemas, diseños de PCB, simulación de circuitos, etc.
EasyEDA está mejorando día a día; han agregado muchas características nuevas y mejorado la experiencia general del usuario, lo que hace que EasyEDA sea más fácil y utilizable para diseñar circuitos. Pronto lanzarán su versión de escritorio, que se puede descargar e instalar en su computadora para uso sin conexión.
En EasyEDA, puede hacer públicos sus diseños de circuitos y PCB para que otros usuarios puedan copiarlos o editarlos y puedan beneficiarse de ellos, también hemos hecho públicos todos nuestros diseños de circuitos y PCB para este monitor de voltaje de batería de automóvil, consulte el siguiente enlace:
easyeda.com/circuitdigest/PIC_based_Car_Battery_Monitoring_System-63c2d5948eaa48c5bcbbd8db49a6c776
A continuación se muestra la instantánea de la capa superior del diseño de PCB de EasyEDA, puede ver cualquier capa (superior, inferior, seda superior, seda inferior, etc.) de la PCB seleccionando la capa de la ventana 'Capas'.
Cálculo y pedido de muestras de PCB en línea:
Después de completar el diseño de PCB, puede hacer clic en el icono de salida de fabricación , que lo llevará a la página de pedido de PCB. Aquí puede ver su PCB en Gerber Viewer o descargar archivos Gerber de su PCB y enviarlos a cualquier fabricante, también es mucho más fácil (y más económico) pedirlo directamente en EasyEDA. Aquí puede seleccionar la cantidad de PCB que desea pedir, cuántas capas de cobre necesita, el grosor de la PCB, el peso del cobre e incluso el color de la PCB. Una vez que haya seleccionado todas las opciones, haga clic en "Guardar en el carrito" y complete su pedido, luego recibirá sus PCB unos días después.
Puede solicitar este PCB directamente o descargar el archivo Gerber utilizando este enlace.
Después de unos días de ordenar PCB, obtuve las muestras de PCB
Después de obtener las placas de circuito impreso, he montado todos los componentes necesarios sobre la placa de circuito impreso, y finalmente tenemos listo nuestro sistema de monitoreo de batería de automóvil, verifique que este circuito funcione en el video que se muestra al final.
Explicación de programación:
El programa de este proyecto es un poco difícil para los principiantes. Para escribir este código necesitamos algunos archivos de encabezado. Aquí estamos usando MPLAB X IDE para codificar y compilador XC para construir y compilar el código. El código está escrito en lenguaje C.
En este código, hemos leído el voltaje de la batería usando un pin analógico y para controlar o enviar datos a la pantalla de siete segmentos de 4 dígitos, hemos utilizado la rutina del servidor de interrupción del temporizador en el microcontrolador PIC. Todo el cálculo para la medición de voltaje se realiza en la rutina del programa principal.
Primero, en el código hemos incluido un encabezado y luego configuramos el microcontrolador PIC usando Bits de configuración.
#incluir
Y luego las variables declaradas y los pines definidos para la visualización de siete segmentos
unsigned int counter2; posición de carácter sin signo = 0; unsigned char k = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int dígito1 = 0, dígito2 = 0, dígito3 = 0, dígito4 = 0; #define TRIS_seg1 TRISCbits.TRISC0 #define TRIS_seg2 TRISCbits.TRISC1 #define TRIS_seg3 TRISCbits.TRISC2 #define TRIS_seg4 TRISCbits.TRISC3 #define TRIS_led1 TRISAbits.TRISA2 #define TRIS_led2 TRISAbits.TRISA5 #define TRIS_led3 TRISAbits.TRISA0 #define TRIS_led4 TRISAbits.TRISA1 #define TRIS_led5 TRISAbits.TRISA………………
Ahora hemos creado una rutina de interrupción del temporizador para controlar la pantalla de siete segmentos:
nulo interrupción low_priority LowIsr (void) {if (TMR0IF == 1) {contador2 ++; if (contador2> = 1) {if (posición == 0) {seg1 = 0; seg2 = 1; seg3 = 1; seg4 = 1;………………
Ahora, en la función void main () , hemos inicializado el temporizador y la interrupción.
GIE = 1; // GLOBLE INTRRUPT ENABLE PEIE = 1; // bandera de intrupt periférico T0CON = 0b000000000; // valor del preescaler put TMR0IE = 1; // habilitación de interrupciones TMR0IP = 0; // prioridad de interrupción TMR0 = 55536; // iniciar el contador después de este valor TMR0ON = 1;
Y luego, en tiempo de bucle, leemos entrada analógica en el pin analógico y llamamos alguna función para los cálculos.
while (1) {adc_init (); para (i = 0; i <40; i ++) {Valor = adc_value (); adcValue + = Valor; } adcValue = (flotante) adcValue / 40.0; convertir (adcValue); retraso (100); }
La función adc_init () dada se usa para inicializar ADC
void adc_init () {ADCON0 = 0b00000011; // seleccione el canal adc ADCON1 = 0b00001110; // seleccionar i / p analógico y digital ADCON2 = 0b10001010; // tiempo de ecualización manteniendo el tiempo límite ADON = 1; }
La función adc_value dada se usa para leer la entrada del pin analógico y calcular el voltaje.
float adc_value (void) {float adc_data = 0; while (GO / DONE == 1); // valor adc de conversión de inicio de datos de bits más alto adc_data = (ADRESL) + (ADRESH << 8); // Almacenar salida de 10 bits adc_data = ((adc_data / 342.0) * 5.0); return adc_data; }
Y la función de conversión dada se utiliza para convertir el valor de voltaje en valores admitidos por segmentos.
void convert (float f) {int d = (f * 100); dígito1 = d% 10; d = d / 10; dígito2 = d% 10; d = d / 10; dígito3 = d% 10; dígito4 = d / 10; }
Verifique el código completo para este proyecto a continuación con un video de demostración.