Projeto de um Indicador de Bateria com LM339

Neste post vamos ver em detalhes o projeto de um indicador de bateria com LM339, com capacidade para fazer a leitura de 4 níveis de tensão.

Para o nosso projeto vamos utilizar um circuito integrado LM339, que possuí internamente 4 circuitos comparadores de tensão, na figura abaixo é mostrado um bloco do circuito comparador de tensão.

O circuito possuí três terminais, dois de entrada e um de saída. O terminal positivo faz a leitura da tensão, enquanto que no terminal negativo definimos a tensão de setpoint. Quando a tensão do terminal positivo for maior que a tensão do terminal negativo, o transistor de saída interno do comparador de tensão é cortado.

Para que o circuito comparador de tensão funcione corretamente é necessário o uso de um resistor de pullup na saída do comparador de tensão.

Também é interessante o uso de drivers de saída para os comparadores de tensão, dependendo da corrente da carga que os mesmos devem acionar.

No vídeo a seguir são mostrados detalhes do projeto:

Diagrama esquemático do indicador de bateria

No arquivo abaixo é mostrado o diagrama esquemático do circuito indicador de bateria com lm339.

O funcionamento é mesmo para um comparador de tensão, mas neste caso são utilizados 4 comparadores de tensão para formar o monitor de bateria.

No circuito foram utilizados 5 resistores em série, para formar uma rede resistiva que defini os valores das tensões de setpoint dos comparadores de tensão.

Para calcular os valores dos resistores foi utilizado um código em linguagem C.

Código em linguagem C para definição dos valores dos resistores de setpoint

A seguir é apresentado o código utilizado para definição dos valores das tensões de setpoint para o projeto de um indicador de bateria com LM339:

#include <stdio.h>


int main() {
	float tensaoFonte = 0;
	float correnteFonte = 0;
	int qtdTensao = 0;
	float memoria = 0;
	
	printf ("Entre com o valor da tensão da fonte de alimentação:\n");
	scanf ("%f", &tensaoFonte);
	
	printf ("Entre com o valor da corrente da fonte de alimentação:\n");
	scanf ("%f", &correnteFonte);
	
	printf ("Entre com a quantidade de valores de tensão:\n");
	scanf ("%d", &qtdTensao);
	
	float valores[qtdTensao];
	float resistores[qtdTensao + 1];
	
	printf ("Entre com os valores de tensão na ordem crescente: \n");
	
	for (int i = 0; i < qtdTensao; i++) {
		printf ("Entre com o valor de tensão número %d:\n", i);
		scanf ("%f", &memoria);
		valores[i] = memoria;
	}
	
	for (int i = 0; i <= qtdTensao; i++) {
		if (i == 0) {
			resistores[i] = valores[0] / correnteFonte;
			printf ("Resistor %d = %f\n", (i + 1), resistores[i]);
		}
		else if (i == qtdTensao) {
			resistores[i] = (tensaoFonte - valores[qtdTensao - 1]) / correnteFonte;
			printf ("Resistor %d = %f\n", (i + 1), resistores[i]);
		}
		else {
			resistores[i] = (valores[i] - valores[i-1]) / correnteFonte;
			printf ("Resistor %d = %f\n", (i + 1), resistores[i]);	
		}
	}
	
	return 0;	
}

O código pode ser adaptado para outras linguagens de programação, como Python ou Java.

Simulação

Para verificar o funcionamento do código em linguagem C foi feito uma simulação com os seguinte valores:

Código em linguagem C com os valores

Abaixo é apresentado o circuito da rede resistiva, com os valores das tensões de saída obtidos no LTSpice.

Simulação no LTSpice

Conclusão

Neste post vimos como fazer o projeto de um indicador de bateria com LM339, utilizando todos os comparadores de tensão interno do CI.

Confirma outros posts no blog Wantronics, e até o próximo post!