Índice:

Mais um testador de capacidade da bateria: 6 etapas
Mais um testador de capacidade da bateria: 6 etapas

Vídeo: Mais um testador de capacidade da bateria: 6 etapas

Vídeo: Mais um testador de capacidade da bateria: 6 etapas
Vídeo: Bateria de Lítio FAKE VS ORIGINAL - Teste de Capacidade na Prática 2024, Julho
Anonim
Mais um testador de capacidade de bateria
Mais um testador de capacidade de bateria
Mais um testador de capacidade de bateria
Mais um testador de capacidade de bateria

Por que mais um testador de capacidade

Eu li várias instruções de construção de testador diferentes, mas nenhuma delas parece se adequar às minhas necessidades. Eu queria ser capaz de testar também mais do que células simples de NiCd / NiMH ou Lion. Eu queria ser capaz de testar a bateria de uma ferramenta elétrica sem precisar usá-la primeiro. Então, decidi examinar o assunto mais de perto e desenhar um por conta própria. Uma coisa leva a outra e finalmente decidi escrever um instrutível. Eu também decidi não entrar em todos os detalhes de como realmente construir o testador porque todos podem decidir sobre certas opções como o tamanho do resistor a ser usado ou se um PCB é necessário ou o Veroboard é suficiente e também há uma tonelada de instrutíveis como instalar o Eagle ou como fazer um PCB. Em outras palavras, vou me concentrar nos esquemas e no código e em como calibrar o testador.

Etapa 1: Histórico - Versão 1

História - Versão 1
História - Versão 1

Acima está a primeira versão com o suporte de entrada de mais de 10 V mencionado abaixo adicionado (R12 e R17 e Q11 e Q12).

A primeira versão foi mais ou menos tirada de um instructable por deba168 (infelizmente não consigo encontrar o instructable dele para fornecer um link). Apenas algumas pequenas alterações foram feitas. Nesta versão, eu tinha um resistor de carga de 10 ohms controlado por um mosfet. No entanto, isso trouxe alguns problemas. Ao testar uma célula de NiCd ou NiMH, o tempo necessário foi facilmente medido em horas, senão dias. Uma bateria de 1500mAh demorou mais de 12 horas (a corrente era de apenas 120mA). Por outro lado, a primeira versão pode testar apenas baterias abaixo de 10V. E uma bateria de 9,6 V totalmente carregada pode, na verdade, ter até 11,2 V, o que não pôde ser testado devido ao limite de 10 V. Algo precisava ser feito. Primeiro, adicionei apenas alguns mosfets e resistores para fazer com que os divisores de tensão possam permitir mais de 10V. Mas isso, por outro lado, trouxe outro problema. Uma bateria de 14,4 V totalmente carregada pode ter até 16,8 V, o que com um resistor de 10 ohms significa uma corrente de 1,68 A e, claro, uma dissipação de energia do resistor de carga de quase 30 W. Portanto, com baixa tensão, tempo de teste muito longo e com alta tensão, corrente muito alta. Claramente, não era uma solução adequada e era necessário mais desenvolvimento.

Etapa 2: Versão 2

Eu queria uma solução em que a corrente ficasse em certos limites, independentemente da voltagem da bateria. Uma solução teria sido usar PWM e apenas um resistor, mas eu preferia ter uma solução sem corrente pulsante ou ter a necessidade de dissipar o calor mosfet. Assim, criei uma solução com 10 slots de tensão, cada um com 2 V de largura, usando 10 resistores de 3,3ohm e um mosfet para cada resistor.

Etapa 3: foi assim que acabou

Foi assim que acabou
Foi assim que acabou

Comentários sobre o circuito Um poderia argumentar que a perda de tensão no mosfet é insignificante porque a resistência do mosfet é tão baixa, mas deixei a escolha do mosfet para o leitor e, portanto, a resistência pode ir até mais de 1 ohm onde começa a matéria. Na versão um, escolher o mosfet correto eliminaria a necessidade de medição de ponto inferior, mas na versão 2 decidi medir a tensão em um resistor apenas, o que torna importante ter realmente dois pontos de medição. E a razão por trás da escolha foi a simplicidade na fiação do Veroboard. Isso adiciona algum erro de precisão, pois a tensão medida em um resistor é significativamente menor do que a medição em todos os resistores. Na seleção de componentes decidi usar o que já tinha em mãos ou o que poderia obter facilmente. Isso levou ao seguinte BOM:

  • Arduino Pro Mini 5V! IMPORTANTE! Usei a versão 5V e tudo é baseado nela
  • Tela OLED 128x64 I2C
  • 10 x 5W 3,3 resistores Ohm
  • 3 x 2n7000 mosfets
  • 10 mosfets IRFZ34N
  • 6 x 10 resistores kOhm
  • 2 x 5 resistores kOhm
  • Capacitor 16V 680uF
  • 1 ventilador CPU antigo

Eu não adicionei o seguinte nos esquemas

  • resistores pullup em linhas I2C, que percebi tornaram a tela mais estável
  • linhas de energia
  • capacitor em linha 5V que também estabilizou o display

Durante o teste, percebi que os resistores de carga esquentavam bastante, especialmente se estivessem todos em uso. A temperatura subiu para mais de 100 graus Celsius (o que é mais de 212 graus Fahrenheit) e se todo o sistema for fechado em uma caixa, deve haver algum tipo de resfriamento fornecido. Os resistores que usei são 3,3 ohm / 5W e a corrente máxima deve ocorrer com cerca de 2V por resistor, dando 2V / 3,3 = 0,61A, o que resulta em 1,21W. Acabei adicionando um leque simples na caixa. Principalmente porque aconteceu de eu ter uma velha ventoinha de CPU por perto.

Funcionalidade esquemática

É bastante simples e autoexplicativo. A bateria a ser testada é conectada à série de resistores e aterramento. Os pontos de medição de tensão são a conexão da bateria e o primeiro resistor. Os divisores de tensão são usados para reduzir a tensão a um nível que se adapte melhor ao Arduino. Uma saída digital é usada para selecionar a faixa de 10 V ou 20 V dos divisores. Cada resistor na carga pode ser aterrado individualmente usando os mosfets, que são acionados diretamente pelo Arduino. E, finalmente, o display é conectado aos pinos I2C do Arduino. Não há muito a dizer sobre o esquema J

Etapa 4: O Código

O código
O código

Acima pode ser vista a funcionalidade aproximada do código. Vamos dar uma olhada no código então (os arquivos arduino ino estão anexados). Existem várias funções e, em seguida, o loop principal.

Loop principal

Quando a medição está pronta, os resultados são mostrados e a execução termina aí. Se a medição ainda não foi feita, primeiro é verificado qual tipo de bateria está selecionado e, em seguida, a tensão na entrada. Se a tensão exceder 0,1 V, deve haver pelo menos algum tipo de bateria conectada. Nesse caso, uma sub-rotina é chamada para tentar descobrir quantas células há na bateria para decidir como testar. O número de células é mais ou menos uma informação que poderia ser melhor aproveitada mas, nesta versão, é reportada apenas pela interface serial. Se tudo estiver bem, o processo de descarga é iniciado e em cada rodada do loop principal a capacidade da bateria é calculada. No final do loop principal, o display é preenchido com valores conhecidos.

Procedimento para mostrar resultados

A função showResults simplesmente configura as linhas a serem mostradas no display e também a string a ser enviada à interface serial.

Procedimento para medir tensões

No início da função é medido o Vcc do Arduino. É necessário ser capaz de calcular as tensões medidas usando entradas analógicas. Em seguida, a tensão da bateria é medida usando a faixa de 20 V para poder decidir qual faixa usar. Em seguida, a tensão da bateria e a tensão do resistor são calculadas. As medições de tensão da bateria aproveitam a classe DividerInput, que possui métodos de leitura e tensão para fornecer a leitura bruta ou a tensão calculada da entrada analógica em questão.

Procedimento para selecionar os valores usados

Na função selectUsedValues, o número de células é adivinhado e os limites superior e inferior da bateria são definidos para serem usados com o procedimento de descarga. Além disso, a medição é marcada como iniciada. Os limites para este procedimento são definidos no início das variáveis globais. Embora eles possam ser constantes, eles também podem ser definidos dentro do procedimento, uma vez que não são usados globalmente. Mas hey, sempre há algo para melhorar:)

Procedimento para calcular a capacidade da bateria

A função de descarga se encarrega de realmente contar a capacidade da bateria. Ele obtém os limites inferior e superior das tensões da bateria em teste como parâmetros. O valor alto não é usado nesta versão, mas o valor baixo é usado para decidir quando parar o teste. No início da função, o número de resistores a serem usados é descoberto usando uma função criada para esse fim. A função retorna o número do resistor e ao mesmo tempo inicia a descarga e zera o contador. Em seguida, as tensões são medidas e usadas junto com o valor do resistor conhecido para calcular a corrente. Agora que sabemos a tensão e a corrente, e o tempo decorrido desde a última medição, podemos calcular a capacidade. No final do processo de descarga, a tensão da bateria é comparada ao limite inferior e se ela tiver caído abaixo do limite, a fase de descarga para, os mosfets são fechados e a medição é marcada como pronta.

Procedimento para encontrar o número de resistores a serem usados

Na função selectNumOfResistors, uma comparação simples da tensão com os valores predefinidos é feita e, após o resultado, o número de resistores a serem usados é decidido. O mosfet apropriado é aberto para pular alguns dos resistores. Os slots de tensão são selecionados de forma que a corrente máxima a qualquer momento durante a descarga fique um pouco acima de 600mA (2V / 3,3Ohm = 606mA). A função retorna o número de resistores usados. Como o ventilador é acionado da mesma linha do primeiro mosfet, ele deve estar sempre aberto quando a descarga estiver acontecendo.

Etapa 5: Calibrando o Medidor

Calibrando o medidor
Calibrando o medidor

Para calibrar o medidor, criei outro aplicativo (anexo). Ele usa o mesmo hardware. No início, os valores do divisor de correção são todos configurados para 1000.

const int divCorrectionB10V = 1000; // multiplicador de correção do divisor no intervalo 10V const int divCorrectionR10V = 1000; // multiplicador de correção do divisor na faixa 10V const int divCorrectionB20V = 1000; // multiplicador de correção do divisor na faixa 20V const int divCorrectionR20V = 1000; // multiplicador de correção do divisor na faixa 20V

na função readVcc (), a tensão Vcc resultante depende da configuração do valor na última linha da função antes do retorno. Normalmente você encontra na internet um valor de 1126400L para ser utilizado no cálculo. Percebi que o resultado não estava correto.

Processo de calibração:

  1. Carregue o aplicativo de medição no Arduino.
  2. Você pode ver no Arduino (e na saída serial e se o ventilador está girando) se a carga está ligada. Se estiver, gire a chave de seleção do tipo de bateria.
  3. Ajuste o valor em readuVCC () para obter o resultado correto. Pegue o valor que a função fornece (que está em milivolts) e divida o valor longo com ele. Você obterá o valor bruto da referência interna. Agora meça a tensão de alimentação real em milivolts com um multímetro e multiplique-a pelo valor calculado anteriormente e você obterá o novo valor longo corrigido. No meu caso, a função retornou 5288mV quando o Vcc real era de 5,14V. Calculando 1126400/5288 * 5140 = 1094874 que eu ajustei por tentativa. Coloque o novo valor no código e carregue-o novamente no Arduino.
  4. O ajuste dos valores de correção do divisor do resistor de entrada analógica ocorre usando uma fonte de alimentação ajustável que é usada para alimentar a entrada do medidor. O mais simples é usar tensões de 1 V a 20 V com etapas de 1 V e registrar os resultados em uma planilha. Na planilha, a média é tirada. Os valores corrigidos são calculados com a seguinte fórmula: “raw_value * range * Vcc / Vin” onde raw_value é o valor em 10VdivB, 10VdivR, 20VdivB ou 20VdivR dependendo de qual correção deve ser calculada.

Veja na planilha como ficou para mim. As médias são calculadas apenas a partir dos valores que devem estar na faixa e esses valores são então configurados no aplicativo do medidor real.

Assim

const int divCorrectionB10V = 998; // divisor de correção do divisor no intervalo 10V const int divCorrectionR10V = 1022; // divisor de correção do divisor no intervalo 10V const int divCorrectionB20V = 1044; // divisor de correção do divisor no intervalo 20V const int divCorrectionR20V = 1045; // divisor de correção do divisor na faixa 20V

O ajuste do valor do resistor pode ser feito fornecendo alguma voltagem para a entrada (ou seja, 2V), alternando a chave do tipo morcego (para obter carga) e medindo a corrente que entra e a voltagem através do primeiro resistor e dividindo a voltagem com a corrente. Para mim, 2V deu 607mA, que dá 2 / 0,607 = 3,2948 ohms, que arredondou para 3,295 ohms. Portanto, agora a calibração está concluída.

Etapa 6: Última NOTA

Uma observação importante aqui. É imperativo que todas as conexões estejam em perfeitas condições, desde a bateria até os resistores. Eu tinha uma conexão ruim e queria saber por que eu obtive 0,3 V menos volts na grade do resistor do que na bateria. Isso significa que o processo de medição terminou quase imediatamente com células de NiCd de 1,2 V porque o limite inferior de 0,95 V foi atingido rapidamente.

Recomendado: