Você está na página 1de 13

Pesquisar título ou conteúdo  PCBWay Obter Cotação Imediata Design PCB Conecte-se Inscrever-se

Projetos Questões Patrocínios Comentários Vídeos Blog Loja de presentes Pergunte Crie um projeto

Blog > Medição da capacidade da bateria usando Arduino [Lithium-NiMH-NiCd]


Enviar para publicação

Medição da capacidade da bateria usando Arduino [Lithium-NiMH-


HOT TAG
NiCd]
por: Anson Bao out 08,2019 13633 Visualizações 24 Comentários Postado em Tecnologia Placa de circuito impresso PCB

Capacidade de carga
Placa PCB Design PCB

Placa de circuito

Por Hesam Moshiri, Anson Bao Placas de circuito impresso

Layout PCB Indústria de PCB

Battery Capacity Tester, Identify a Fake Lithium ion Battery, Using Ard…
Ard… placas de circuito

placa de circuito impresso (pcb)

Produção de PCB Montagem PCB

Categorias

Tecnologia

SE VOCÊ PERDEU

1 Conversor USB para UART barato


Características: usando Microchip MCP2200

2 Perfuração posterior --- Uma


Identifique uma bateria de íon de lítio / polímero de lítio / NiCd / NiMH falsa
habilidade especial de perfuração de
profundidade de controle
Carga de corrente constante ajustável (também pode ser modificada pelo usuário)
3 Fonte de alimentação ajustável 30V-
Capaz de medir a capacidade de quase qualquer tipo de bateria (abaixo de 5V) 4A (CC-CV)

4 Você já viu essas almofadas?


Fácil de soldar, construir e usar, mesmo para iniciantes (todos os componentes são Dip)
5 O que Tg significa para placa FR-4?
Uma interface de usuário LCD 6 Por que alguns PCBs precisam de
chapeamento de borda?
Especificações:
7 Dicas para soldar --- Como soldar
Alimentação da placa: 7V a 9V (máx.) perfeitamente.

8 Um receptor FM digital com Arduino


Entrada da bateria: 0-5 V (máx.) - sem polaridade reversa (incluindo amplificador estéreo 3W +
3W classe D)
Carga de corrente constante: 37mA a 540mA (máx.) - 16 etapas - podem ser modificadas pelo usuário
9 7 Acabamento de Superfície em
PCBWay
A verdadeira medição da capacidade de uma bateria é essencial para muitos cenários. Um dispositivo de medição de
capacidade também pode resolver o problema de localização de baterias falsas. Hoje em dia, baterias falsas de lítio e
NiMH estão por toda parte e não atendem às suas capacidades anunciadas. Às vezes é difícil distinguir entre uma
bateria real e uma falsa. Esse problema existe no mercado de baterias sobressalentes, como baterias de telefones
celulares. Além disso, em muitos cenários, é essencial determinar a capacidade de uma bateria de segunda mão (por
exemplo, uma bateria de laptop). Neste artigo, aprenderemos a construir um circuito de medição da capacidade da
bateria usando a famosa placa Arduino-Nano. Eu projetei a placa PCB para componentes de mergulho. Assim, mesmo
os iniciantes podem soldar e usar o dispositivo.

1: Análise de Circuito

A Figura 1 mostra o diagrama esquemático do dispositivo. O núcleo do circuito é uma placa Arduino-Nano. 
figura 1

Diagrama esquemático do dispositivo de medição da capacidade da bateria 

IC1 é um chip LM358 [1] que contém dois amplificadores operacionais. R5 e C7 constroem um filtro passa-baixo que
converte o pulso PWM em uma tensão DC. A frequência do PWM é em torno de 500Hz. Usei um osciloscópio Siglent
SDS1104X-E para examinar o PWM e o comportamento do filtro. Liguei o CH1 à saída do PWM (Arduino-D10) e o CH2
à saída do filtro (Figura 2). Você pode até examinar a resposta de frequência do filtro e sua frequência de corte “na
prática” pelo gráfico de bode, que é um dos recursos interessantes introduzidos do SDS1104X-E.  

Figura 2

O sinal PWM (CH1: 2V / div) e o resultado após passar pelo filtro R5-C7 RC (CH2: 50mV / div)

R5 é um resistor de 1M que limita enormemente a corrente, no entanto, a saída do filtro passa por um opamp (o
segundo opamp de IC1), em uma configuração de seguidor de tensão. O primeiro opamp do IC1, R7 e Q2 constrói um
circuito de carga de corrente constante. Até agora, construímos uma carga de corrente constante controlável por
PWM.

Um LCD 2 * 16 é usado como uma interface de usuário que torna o controle / ajustes fáceis. O potenciômetro R4
define o contraste do LCD. R6 limita a corrente de luz de fundo. P2 é um conector Molex de 2 pinos usado para
conectar uma campainha de 5V. R1 e R2 são resistores pull-up para os interruptores táteis. C3 e C4 são usados para
eliminar os botões de pressão. C1 e C1 são usados para filtrar a tensão de alimentação do circuito. C5 e C6 são
usados para filtrar os ruídos do circuito de carga de corrente constante para não degradar o desempenho de
conversão do ADC. R7 atua como uma carga para o Q2 MOSFET.

1-1: O que é uma carga CC de corrente constante?


Uma carga de corrente constante é um circuito que sempre consome uma quantidade constante de corrente, mesmo
que a tensão de entrada aplicada varie. Por exemplo, se conectarmos a carga de corrente constante a uma fonte de
alimentação e definirmos a corrente em 250mA, o consumo de corrente não mudará mesmo se a tensão de entrada
for 5 V ou 12 V ou qualquer outra. Este recurso do circuito de carga de corrente constante nos permite construir o
dispositivo de medição da capacidade da bateria. Se usarmos um resistor simples como carga para medir a
capacidade da bateria, conforme a tensão da bateria diminui, a corrente também diminui, o que torna os cálculos
complexos e imprecisos.

2: Placa PCB

A Figura 3 mostra o layout PCB projetado do circuito. Ambos os lados da placa são usados para montar os
componentes.

 Quando pretendo projetar um Esquemático / PCB, sempre uso as bibliotecas de componentes SamacSys, pois essas
bibliotecas seguem os padrões industriais do IPC e todas são gratuitas. Usei essas bibliotecas para IC1 [2], Q2 [3], e
até mesmo consegui encontrar a biblioteca Arduino-Nano (AR1) [4] que economizou muito na hora de projetar. Eu uso
o software CAD Altium Designer, então usei o plugin Altium para instalar as bibliotecas de componentes [5]. A Figura 4
mostra os componentes selecionados. 

Figura 3

A placa PCB do circuito de medição da capacidade da bateria

 Quando pretendo projetar um Esquemático / PCB, sempre uso as bibliotecas de componentes SamacSys, pois essas
bibliotecas seguem os padrões industriais do IPC e todas são gratuitas. Usei essas bibliotecas para IC1 [2], Q2 [3], e
até mesmo consegui encontrar a biblioteca Arduino-Nano (AR1) [4] que economizou muito na hora de projetar. Eu uso
o software CAD Altium Designer, então usei o plugin Altium para instalar as bibliotecas de componentes [5]. A Figura 4
mostra os componentes selecionados. 

Figura 4

Componentes instalados do plugin SamacSys Altium 

A placa PCB é ligeiramente maior do que um LCD 2 * 16 para caber nos três botões táteis. As Figuras 5, 6 e 7 mostram
vistas 3D da placa. 
Figura 5

Uma visão 3D da placa PCB montada (PARTE SUPERIOR)

Figura 6

Uma visão 3D da placa PCB montada (lateral) 

Figura 7

Uma visão 3D da placa PCB montada (parte inferior)

3: Montagem e Teste

Usei uma placa PCB semi-caseira para construir um protótipo rápido e testar o circuito. A Figura 8 mostra uma foto da
placa. Você não precisa me seguir, apenas peça o PCB para uma empresa profissional de fabricação de PCB e
construa o dispositivo. Você deve usar um potenciômetro tipo pé para o R4, que permite ajustar o contraste do LCD na
lateral da placa.
Figura 8

Uma foto do primeiro protótipo, em uma placa de PCB semi-caseira

Depois de soldar os componentes e preparar as condições de teste, estamos prontos para testar nosso circuito. Não
se esqueça de montar um dissipador de calor grande no MOSFET (Q2).

Selecionei R7 para ser um resistor de 3 ohms. Isso nos permite gerar correntes constantes de até 750mA, mas no
código, eu configurei a corrente máxima para algo em torno de 500mA, o que é suficiente para nosso propósito.
Abaixar o valor do resistor (para por exemplo 1,5 ohm) pode gerar correntes mais altas, entretanto, você deve usar um
resistor mais poderoso e modificar o código do Arduino. A Figura 9 mostra a placa e suas fiações externas.

Figura 9

Fiação do dispositivo de medição de capacidade da bateria

Prepare uma tensão de algo em torno de 7 V a 9 V para a entrada de alimentação. Usei o regulador da placa Arduino
para fazer o trilho de + 5V. Portanto, nunca aplique uma tensão superior a 9 V na entrada de alimentação, caso
contrário, você pode danificar o chip regulador.

A placa será ligada e você deverá ver um texto no LCD, o mesmo da figura 10. Se você usar uma luz de fundo azul 2 *
16 LCD, o circuito consumirá cerca de 75mA. 
Figura 10

Indicação correta de inicialização do circuito no LCD

Após cerca de 3 segundos, o texto será limpo e na próxima tela, você pode ajustar o valor da corrente constante pelos
botões de pressão para cima / para baixo (Figura 11).

Figura 11

O ajuste de carga atual constante pelos botões de pressão para cima / para baixo

Antes de conectar uma bateria ao dispositivo e medir sua capacidade, você pode examinar o circuito usando uma
fonte de alimentação. Para isso, deve-se conectar o conector P3 à fonte de alimentação.

Importante: Nunca aplique tensão superior a 5 V, ou em polaridade reversa, à entrada da bateria, caso contrário, você
danificará permanentemente o pino digital para conversor do Arduino.

Defina o limite de corrente desejado (por exemplo, 100mA) e brinque com a tensão da fonte de alimentação (fique
abaixo de 5 V). Como você pode ver com qualquer tensão de entrada, o fluxo de corrente permanece intacto. Isso é
exatamente o que queremos! (Figura 12). 
Figura 12

O fluxo de corrente permanece constante mesmo em frente às variações de tensão (testado com entradas de 4,3 V e
2,4 V)

O terceiro botão é Reset. Isso significa que simplesmente reinicia a placa. É útil quando você planeja reiniciar o
procedimento para testar uma manteiga diferente. 

Enfim, agora você tem certeza que seu aparelho funciona perfeitamente. Você pode desconectar a fonte de
alimentação e conectar a bateria à entrada da bateria e definir o limite de corrente desejado.

Para iniciar meu próprio teste, selecionei uma bateria de íons de lítio nova em folha para 8.800 mA (Figura 13). Parece
uma taxa fantástica, não é ?! Mas eu não posso acreditar nisso de alguma forma :-), então vamos testar. 

Figura 13

Uma bateria de íon de lítio com classificação de 8.800mA, real ou falsa ?!

Antes de conectar a bateria de lítio à placa, devemos carregá-la, portanto, prepare um 4,20 V fixo (limite de 500mA CC
ou inferior) com sua fonte de alimentação (por exemplo, usando a fonte de alimentação de comutação variável no
artigo anterior) e carregue a bateria até que o fluxo de corrente atinja um nível baixo. Não carregue uma bateria
desconhecida com altas correntes, porque não temos certeza sobre sua capacidade real! Altas correntes de carga
podem explodir a bateria! Tome cuidado. Como resultado, segui este procedimento e nossa bateria de 8.800 mA está
pronta para medição de capacidade.

Usei um suporte de bateria para conectar a bateria à placa. Certifique-se de usar fios grossos e curtos que
apresentam baixa resistência porque a dissipação de energia nos fios causa queda de tensão e imprecisão.

Vamos definir a corrente para 500mA e manter pressionado o botão “PARA CIMA”. Em seguida, você deve ouvir um
bipe e o procedimento é iniciado (Figura 14). Eu configurei a tensão de corte (limite de bateria fraca) para 3.2V. Você
pode modificar esse limite no código, se desejar.
Figura 14

Procedimento de cálculo da capacidade da bateria

Basicamente, devemos calcular a “vida útil” da bateria antes que sua tensão atinja o limite de nível baixo. A Figura 15
mostra o momento em que o dispositivo desconecta a carga CC da bateria (3,2 V) e os cálculos são feitos. O
dispositivo também gera dois bipes longos para indicar o fim do procedimento. Como você pode ver na tela LCD, a
verdadeira capacidade da bateria é de 1.190 mAh, que está longe da capacidade declarada! Você pode seguir o
mesmo procedimento para testar qualquer bateria (inferior a 5 V).

Figura 15

A verdadeira capacidade calculada da bateria de íon-lítio com classificação de 8.800mA

A Figura 16 mostra a lista de materiais para este circuito.


Figura 16

Lista de materiais

Se você deseja construir este dispositivo, você pode baixar os arquivos Gerber ou solicitar diretamente que o PCB seja
fabricado para você com a mais alta qualidade.

Referências

[1]: https://www.onsemi.com/pub/Collateral/LM358-D.PDF

[2]: https://componentsearchengine.com/part.php?partID=671517

[3]: https://componentsearchengine.com/part.php?partID=617283

[4]: https://componentsearchengine.com/part.php?partID=368895

[5]: https://www.samacsys.com/altium-designer-library-instructions

#include <LiquidCrystal.h>
#include <JC_Button.h>

const float Low_BAT_level = 3.2 ;

// Passos atuais com uma carga 3R (R7)


const int Current [] = { 0 , 37 , 70 , 103 , 136 , 169 , 202 , 235 ,
268 , 301 , 334 , 367 , 400 , 440 , 470 , 500 , 540 };

byte const RS = 2 , EN = 3 , D4 = 4 , D5 = 5 , D6 = 6 , D7 = 7 ;
byte const PWM_Pin = 10 ;
Const byte Alto-falante = 12 ;
const int BAT_Pin = A0;
int PWM_Value = 0 ;
Capacidade longa sem sinal = 0 ;
int ADC_Value = 0 ;
float BAT_Voltage = 0 ;
byte Hora = 0 , Minuto = 0 , Segundo = 0 ;
bool calc = false , Done = false ;

LiquidCrystal lcd (RS, EN, D4, D5, D6, D7) ;

Botão UP_Button ( 16 , 25 , falso , verdadeiro ) ;


Botão Down_Button ( 15 , 25 , falso , verdadeiro ) ;

void setup () {

pinMode (PWM_Pin, OUTPUT);


pinMode (alto-falante, OUTPUT);

analogWrite (PWM_Pin, PWM_Value);

UP_Button.begin ();
Down_Button.begin ();

lcd.setCursor ( 0 , 0 );
lcd.begin ( 16 , 2 );
lcd.print ( "Capacidade da bateria" );
lcd.setCursor ( 0 , 1 );
lcd.print ( "Medição v1.0" );
atraso ( 3000 );
lcd.clear ();
lcd.print ( "Carregar ajuste : PARA CIMA / PARA BAIXO" );
lcd.setCursor ( 0 , 1 );
lcd.print ( "0" );

void loop () {
UP_Button.read ();
Down_Button.read ();

if (UP_Button.wasReleased () && PWM_Value < 80 && calc == false )


{
PWM_Value = PWM_Value + 5 ;
analogWrite (PWM_Pin, PWM_Value);
lcd.setCursor ( 0 , 1 );
lcd.print ( "" );
lcd.setCursor ( 0 , 1 );
lcd.print (String (atual [PWM_Value / 5 ]) + "mA" );
}
if (Down_Button.wasReleased () && PWM_Value> 1 && calc == false )
{
PWM_Value = PWM_Value - 5 ;
analogWrite (PWM_Pin, PWM_Value);
lcd.setCursor ( 0 , 1 );
lcd.print ( "" );
lcd.setCursor ( 0 , 1 );
lcd.print (String (atual [PWM_Value / 5 ]) + "mA" );
}
if (UP_Button.pressedFor ( 1000 ) && calc == false )
{
digitalWrite (alto-falante, HIGH);
atraso ( 100 );
digitalWrite (alto-falante, BAIXO);
lcd.clear ();
timerInterrupt ();
}

void timerInterrupt () {
calc = true ;
while (Done == false ) {
Second ++;
if (Second == 60 ) {
Segundo = 0 ;
Minuto ++;
lcd.clear ();
}
if (Minuto == 60 ) {
Minuto = 0 ;
Hora ++;
}
lcd.setCursor ( 0 , 0 );
lcd.print (String (Hour) + ":" + String (Minuto) + ":" + String
(Second));
lcd.setCursor ( 9 , 0 );
ADC_Value = analogRead (BAT_Pin);
BAT_Voltage = ADC_Value * ( 5,0 / 1024 );
lcd.print ( "V:" + String (BAT_Voltage));
lcd.setCursor ( 0 , 1 );
lcd.print ( "BAT-C: Espere! ..." );

if (BAT_Voltage <Low_BAT_level)
{
lcd.setCursor ( 0 , 1 );
lcd.print ( "" );
lcd.setCursor ( 0 , 1 );
Capacidade = (hora * 3600 ) + (minuto * 60 ) + segundo;
Capacity = (Capacity * Current [PWM_Value / 5 ]) / 3600 ;
lcd.print ( "BAT-C:" + String (Capacidade) + "mAh" );
Concluído = verdadeiro ;
PWM_Value = 0 ;
analogWrite (PWM_Pin, PWM_Value);
digitalWrite (alto-falante, HIGH);
atraso ( 100 );
digitalWrite (alto-falante, BAIXO);
atraso ( 100 );
digitalWrite (alto-falante, HIGH);
atraso ( 100 );
digitalWrite (alto-falante, BAIXO);
}

atraso ( 1000 );
}
}

Deixe um comentário ( 24 ) Compartilhar com:

Anterior : Como colocar a indutância da fonte de alimenta… Próximo : Pontos-chave de sete tipos de interface comum…

Artigos relacionados
Medição da capacidade da bateria usando Arduino [Lithium-…

Comentários ( 24 )

Faça login para postar comentários.

Carregar uma foto: Navegar Você só pode fazer upload de 1 arquivo no total. Cada arquivo não pode exceder 2 MB. Suporta JPG, JPEG, GIF,
PNG, BMP

Postar Comentário

Borko Fruhwirth (Orhanovic) Responder

Olá, tenho uma observação sobre o código: A contagem de tempo é realizada com atraso (1000); comando.
Isso não conta o tempo para executar o resto do código de loop. Não sei quão grande pode ser o erro, mas
definitivamente há um erro. Em dois projetos diferentes percebi isso de duas maneiras: - interromper -
observando o contador do relógio do sistema A segunda coisa é que você não precisa imprimir tudo o
tempo todo. A impressão é demorada e este tipo de lcd é lento e você pode ver os números mudando ... :)
Com base na minha experiência, mais rápido é imprimir apenas o que foi alterado. A configuração atual
começa enquanto você está configurando a atual. Isso é bom se você quiser testar a corrente máxima
possível (com amperímetro adicional), mas para teste de capacidade e porque não há medição de corrente,
sugiro começar com o teste de capacidade quando tudo estiver configurado. Seria excelente ter medição
de corrente e possibilidade de testar a corrente máxima. Por favor, tente implementá-lo no PCB existente
(eu tenho 4 sobressalentes :)). Cumprimentos

Feb 10,2020 5 Comments

Hesam Moshiri 2020-02-17 15:28:16 Reply


This is not a product, you have the circuit and code. This is under no commercial license. Free for personal use.
You can change where you like for your own purpose. Setting the current starts from zero and does not take more
than a few seconds, so no real change in measurement. You can change the timing with interrupts. it's up to you.

Borko Fruhwirth (Orhanovic) 2020-02-24 20:42:51 Reply


Reply@ Hesam Moshiri:
I understand and made some modifications in code but also in schematics diagram. I realised timing via milis()
function, added current measurement via R7 voltage and current/voltage testing. Still I have issue with higher
mAmps. With specified MOSFER I managed around 120 mA and with one alternative 444 mA (mosfet threshold
voltage cca 2.3V, Arduino voltage regulator is cca 4.9 V). First question would be how you managed 750 mA with
specified mosfet? Second: Why you used RC on PWM and not using analog output? Third: Why not using current
regulation by arduino? Fourth: How you calculated RC filter for input in LM385? And an the end Do you agree that
I post made modifications and code? I will mention that original is made by you.

Hesam Moshiri 2020-02-24 23:45:44 Reply


Arduino-nano board does not have analog output or DA!! It is not necessary to measure current because once
you calibrate the CC section, then the current draw does not change. That's why I insisted to use good wires
because in higher currents and voltage drop of the wires also matter. so use thick good quality wires.
Furthermore it gets hard to measure like this because components have tolerances and we have to use
potentiometer and calibration devices. it is not necessary. for the RC filter you don't need to calculate although
you can by math or simulation software, you can examine this also by an oscilloscope as I showed in the video.
You are free to post a related-work in your own blog and mention this as a reference. they are many people did
this. of course no design can satisfy everyone.

Hesam Moshiri 2020-02-24 23:47:23 Responder


se você quiser atingir correntes mais altas, pode diminuir o resistor de potência para um valor menor, por
exemplo, 2 ohms. então você tem que ter cuidado com seu poder. Então você vai recalcular a matriz atual que
mencionei.

Hesam Moshiri 2020-02-24 23:48:20 Responder


Resistência de potência que quis dizer R7

Cancelar Resposta ao post

Engenheiro Responder

como modificar a corrente máxima de 12v e 6500mh ?? plzzz me ajude

06 de fevereiro de 2020 3 comentários

Hesam Moshiri 2020-02-17 15:23:01 Responder


A bateria de 12 V não pode ser testada usando este circuito

Engenheiro 2020-02-22 00:15:46 Responder


você pode me ajudar? como modificar ??

Hesam Moshiri 2020-02-22 01:55:35 Responder


Você quer que eu o desenhe como um projeto para você?
Cancelar Resposta ao post

cheow beng tan Reply

I do all the soldering on the PCB and when I try to test, it is not working.
I got no current at load.
May I know what voltage is at LM358 pin 1(op-amp 1 out) when current is set at 500ma?

Dec 27,2019 1 Comments

Hesam Moshiri 2019-12-31 00:00:23 Reply


I replied to you on YouTube. hope your problem solved now

Cancel Post reply

Jaromir Kulakowski Reply

please link to gerber files

Nov 25,2019 1 Comments

Hesam Moshiri 2019-11-25 23:18:00 Reply


The CAD software, I mean Altium, only handles a CAM file. You can simply order the PCB.

Cancel Post reply

Jaromir Kulakowski Reply

the .cam file is not gerber

Nov 25,2019 0 Comments

cheow beng tan Reply

when I want to order the PCB, I do not know to input the size of the PCB.

Oct 18,2019 1 Comments

Hesam Moshiri 2019-10-18 18:32:25 Reply


Enter this: 97.15mm * 40.13mm

Cancel Post reply

Carlos Gramaglia Reply

Muy bueno, felicitaciones..!

Oct 16,2019 1 Comments

Hesam Moshiri 2019-10-18 18:31:09 Reply


You're welcome

Cancel Post reply

Engineer Reply

Can you provide a version of code that can be copied easily? Thank you

Oct 09,2019 2 Comments

PCBWay Official 2019-10-10 17:09:17 Reply


Yes,our engineering is fixing the bug

PCBWay Official 2019-10-14 11:56:14 Reply


Now the code can be copied

Cancel Post reply


Debasish Dutta Responder

How you derived the current steps values 0, 37,70...so on ?

Oct 10,2019 1 Comments

Hesam Moshiri 2019-10-10 17:14:09 Reply


Bem, é muito fácil, como você pode ver, pressionando os botões o valor de PWM muda. Portanto, o fluxo atual
muda. Portanto, basta conectar um medidor de AMP para ver o fluxo de corrente ou conectá-lo à alimentação
com um display de consumo de corrente. Para cada etapa, escreva a corrente nesse array. se você olhar o vídeo,
é claro.

Cancelar Resposta ao post

O PCB WAY QUE RECONHECE O TALENTO E ESFORÇO DOS MELHORES DESIGNERS DE ELETRÔNICA DO MUNDO.

© COPYRIGHT 2019 SOBRE NÓS CONTATE-NOS

Você também pode gostar