Saudações, leitor.
Frequentemente, tenho a tarefa de desenvolver dispositivos portáteis alimentados por uma única bateria de íons de lítio. E, se isso geralmente não é uma preocupação para o cliente, então, como um engenheiro experiente, um arrepio percorre minhas costas quando vejo um TK assim. Isso se deve ao fato de que avaliar o nível da bateria, bem como a vida útil restante da bateria, é uma tarefa muito difícil, embora à primeira vista possa parecer diferente.

Existem várias opções de ação neste caso, falaremos sobre elas abaixo.
- A coisa mais simples é não fazer nada para determinar o nível de carga da bateria. O circuito de carga em uma memória linear simples (por exemplo, no TP4054) e um conversor de voltagem para alimentar o dispositivo. Desliga sem aviso e no momento mais inoportuno.
- Meça a voltagem da bateria. O resultado é aproximadamente o mesmo do parágrafo anterior, mas requer mais esforço. Esquema típico de medição:

De fato, este é um divisor de tensão para os resistores R19 e R21, conectados através de uma chave VT6. O transistor VT7 é necessário para eliminar a energia parasita do MK através do terminal EN.
VBAT - voltagem da bateria
VBAT_mes - voltagem chegando ao ADC
EN - sinal de controle do divisor (0 desligado, 1 ligado)
Agora sabemos a tensão da bateria, somos grandes companheiros. MAS dá quase nada !!! O fato é que uma curva de descarga típica de uma bateria de íon de lítio, para dizer o mínimo, não é linear e depende do consumo atual e da temperatura da própria bateria:

Olhando para esses gráficos, você pode dizer qual é a capacidade restante da bateria a uma voltagem de 3,5V? Acho que não ...
Esse método pode ser aprimorado um pouco usando o sensor de temperatura embutido no MC para obter uma estimativa aproximada da temperatura da bateria, ou você pode colocar um sensor para medir a corrente ou (se a corrente de consumo for aproximadamente constante) construir uma curva de descarga para um consumo típico de corrente. Isso permitirá pelo menos uma pequena justificativa dos custos de mão-de-obra, mas não se pode falar em precisão. Para indicar a carga em 3 LEDs - sim, será.
No caso de consumo de corrente constante, você pode tirar a vida útil da bateria e estimar a carga consumida e o tempo gasto no carregamento para avaliar a carga acumulada. Este método gera um erro cumulativo, uma vez que a calibração pode ser realizada apenas em dois pontos (carga total ou descarga total) e nem sempre são alcançados. Além disso, conforme a bateria se deteriora, o tempo máximo de operação deve ser ajustado, mas, em geral, o método tem direito à vida útil.
- Crie seu próprio sistema de monitoramento de carga da bateria (BMS). Para sua implementação, precisamos de sensores de corrente, temperatura e tensão da bateria. Acreditamos que o MK já existe no dispositivo e ainda é "apenas" escrever um software para ele, o que ao mesmo tempo levou um pouco menos de um ano.
- Pegue o chip Gas Gauge pronto (por exemplo, da TI ou Maxim Integrated), configure-o, calibre e trabalhe. Por exemplo, o diagrama para bq27220:

Existem várias nuances ao escolher esse conceito:
- Caso a bateria seja removível, você deve colocar o circuito para determinar a carga na própria bateria (caso contrário, ela será zerada quando desconectada) ou usar versões especiais do Gas Gauge que permitam a desconexão da bateria. No primeiro caso, a bateria do seu dispositivo se torna única e sua substituição é possível apenas com a sua participação, o que nem sempre é conveniente. No segundo caso, há o problema de colocar o sensor de temperatura na bateria.
- Solução de alto custo. Componentes principais: chip Gas Gauge, chip de proteção, transistores, termistor, resistor do sensor de corrente.
- Use opções mais simples para soluções chave na mão, como o CW2015:

Este é o análogo chinês do chip MAX17048. Um chip absolutamente simples, sem sensores de temperatura e corrente, com baixa precisão correspondente, mas ao mesmo tempo barato, fácil de usar e programar. Tem a capacidade de trabalhar na lateral do dispositivo, o que permite não modificar a própria bateria. O microcircuito foi encontrado nos espaços abertos da rede no processo de escrever material, não há experiência com ele, mas há um desejo de experimentá-lo, porque a opção é realmente interessante. Talvez no próximo artigo eu vou falar sobre esse chip em mais detalhes.
- E, finalmente, o último método que sei que quero dedicar ao artigo de hoje. Na minha opinião, esse método é o mais simples, mas fornece o melhor resultado. Consiste no fato de tirarmos a bateria do iPhone com medidor de gás e proteção embutidos, conectar via HDQ ou I2C, interrogar e trabalhar. Nesse caso, a bateria já está montada e calibrada. Abaixo está uma tabela com opções de bateria conhecidas por mim:

A tabela é parcialmente retirada dos sites
ripitapart.com e
www.macplus.ru . Por favor, preste atenção especial ao controlador desconhecido identificado como A1141. Este chip é fabricado pela
PowerFlash e esta é toda a informação que pode ser encontrada. O autor do
blog do qual eu levei a mesa não tinha certeza de que ele recebeu a bateria original do iPhone SE. Graças ao recall do
asterix_tyumen , que desmontou a bateria original do SE, verificou-se que custa sn27545. Abaixo seremos forçados a considerar o A1141 com mais detalhes. Mas, por enquanto, vejamos as baterias:

Como você pode ver, a bateria para todos os gostos e cores, com e sem maçã. Eles também podem ser conectados em paralelo para aumentar a capacidade, com pesquisas separadas. Entre as deficiências, vale ressaltar que a relação comprimento / largura é de cerca de 3: 1, o que nem sempre é conveniente, além de um conector exclusivo para conexão. Devido à popularidade dos telefones da Apple, essas baterias podem ser compradas com segurança em muitos lugares e em grandes quantidades (como se viu, isso não é totalmente verdade).
Ao desenvolver um
leitor RFID independente sem fio, seguimos por esse caminho.

Foi escolhida a bateria do iPhone 6, que nos convém em termos de capacidade e tamanho. Várias cópias foram adquiridas em vários locais para verificação:

O certo foi comprado na China, o restante em Moscou. O custo é de US $ 6 a 11. Quando eles são verificados, resultados bastante interessantes serão obtidos. Preste atenção especial à caixa com a inscrição "Orig", depois retornaremos a ela. A verificação foi realizada usando o próprio leitor RFID, o programador TI EV2300 e o Battery Management Studio.
O circuito da fonte de alimentação do leitor RFID é mostrado na figura:

Memória linear baseada em STC4054 (TP4054), corrente de carga 500 mA, comutador de força de seleção automática baseado no comutador reed SF1, capacitor C19, diodo VD4 e resistor R15, além de um conversor de pulso baseado no NCP1529.
O primeiro, conectei uma cópia da China por US $ 6:

A bateria responde, MAS a corrente não foi exibida durante o carregamento ou durante a descarga, a tensão não correspondia ao que foi realmente medido e o grau de carga não mudou. A bateria não respondeu aos comandos. Havia uma suposição de que essa instância é falsa, por isso removi uma fita protetora para ver o quadro:

É a vez ... Nem redesenhei o circuito - aqui está claro que existe um emulador bq27545 e um circuito para sobrecarga / sobrecarga. Imediatamente houve uma idéia de economizar tempo e abrir todas as baterias.

O vizinho à esquerda do colega chinês por US $ 8 é semelhante à diferença na marcação nas fichas. O resto se comporta da mesma maneira. Essas 2 cópias estão imediatamente no lixo. Infelizmente, eu não tinha o iPhone 6 em mãos para verificar essas baterias no dispositivo de destino, foi muito interessante ver como o telefone se comportaria ao trabalhar com essas baterias.

E esta é uma bateria central, custando US $ 8. Ele ainda possui um sensor de corrente e algum tipo de microcircuito de 8 pinos com uma marcação modesta de 6G3. No Battery Management Studio, essa bateria finge ser o bq27545 com mais habilidade. O nível de carga, a voltagem correta, a corrente da bateria são exibidos. Mas se tudo isso fosse real, o falso não seria falso. Na realidade, a temperatura foi definida por uma constante, a corrente foi medida muito mal. A imagem mostra o consumo atual do leitor RFID, medido pela bateria com leitura constante do cartão.

Na realidade, é de ~ 55 mA para esse modo de operação e, como o campo do leitor está sempre ativado, não pode ser zero. Ao carregar (quando a corrente é constante por um longo período de tempo), o sensor de corrente funciona bem. Naturalmente, todos os outros parâmetros são calculados incorretamente (nível de carga, tempo de operação até a descarga total, etc.). A bandeira FC (carga total) está definida em 4,4V.

A bateria não responde aos comandos, os sinalizadores QEN e RUP_DIS não estão definidos. Em geral, esta é uma tentativa malsucedida dos chineses de escrever o truque bq27545 no MK (em qualquer caso, acho que sim). Também no lixo.
Lembre-se, pedi para prestar atenção especial à cópia na caixa com a inscrição "Orig"? Foi ele quem ficou o mais próximo possível do que estávamos procurando (e como não acreditar no anúncio agora?):

Seu custo foi de US $ 9. No centro, você pode ver claramente o chip rotulado SN27545 - é exatamente isso que estávamos procurando. Nesse caso, comecei a trabalhar mais de perto. Durante o ciclo de teste de descarga de carga, surgiram problemas. Não foi possível definir o sinalizador FC (carga total), o que significou o fim do processo de cobrança. A corrente de carga em uma voltagem da bateria próxima a 4,2 V tornou-se extremamente pequena (cerca de 20 mA) e o processo de carregamento ameaçou nunca terminar. Um dos motivos possíveis foi um cabo USB com uma grande queda de tensão (4,5V atingiu o chip de memória), substituí-lo por um melhor com queda de tensão menor. Os indicadores melhoraram, a bateria foi carregada para 4.2V, a corrente caiu para 0, mas o SOC (estado de carga - nível de carga) atingiu apenas 85, portanto a bandeira FC não foi ajustada.

Durante vários dias eu dirigi ciclos com a expectativa de que a bateria aprendesse, mas isso não ajudou. O problema acabou sendo comum, mas sua pesquisa levou 2 dias. Em algum momento, notei que a bateria é de 4,35V e essa foi a resposta para todas as perguntas. A memória é padrão em 4,2V e eu não percebi que a bateria está em 4,35V e há uma carga incompleta. Como as placas já foram fabricadas, a única maneira de sair da situação era procurar um substituto para o STC4054 com uma tensão de 4,35V. Acontece que esses microcircuitos existem, mas você não pode comprá-los em nosso grande país (aparentemente, eles são completamente impopulares por causa da palavra). Portanto, a versão do MCP73832T-3 foi solicitada com algumas semanas de espera.
Enquanto isso, nos passeios encomendados, faremos um patch agrícola coletivo para verificar o conceito. Para fazer isso, faça um "backup" de 0,15V para o chip de memória usando um diodo:

Devo admitir que a fazenda coletiva funcionou, a bandeira FC foi definida, tudo funciona, mas a tensão final da bateria é de 4,4V (a queda no diodo é maior que os 0,15V necessários).

É importante observar que é possível carregar até 4,2V com uma perda correspondente de ~ 15% da capacidade, mas ao mesmo tempo prolongar significativamente a vida útil da bateria. Concluímos a cópia do Orig - ele pode ser colocado em desenvolvimento com segurança.
A última cópia é deixada. Os mais caros (US $ 11), nas embalagens mais legais e exigindo mais tempo para si. Nós olhamos para dentro:

Aqui está um chip A1141 desconhecido para o qual não há documentação além
da página do fabricante . Conexão forçada como bq27545 no Battery Management Studio, vemos a seguinte imagem:

Lixo cheio. Ao tentar carregar com uma corrente de ~ 500 mA, ele mostra 125 mA, enquanto, ao descarregar com uma corrente de ~ 25 mA, mostra 214 mA. É claro que, se o A1141 tiver endereços de parâmetros diferentes ou um formato diferente para armazenar dados que o bq27545, nada brilha sem a documentação desta bateria. Portanto, ele foi deixado de lado, mas ao final da redação do material, decidi conectá-lo novamente. Peguei a tabela de comandos do chip bq27545:

E eu li os registros de tensão (0x08 e 0x09) no menu Advanced Comm:

Obter 0x10 << 8 | 0x38 = 4152 ou 4.152V, que corresponde a uma tensão de 4.15V medida por um multímetro. Então, se os dados estão corretos, por que 57mV é exibido no programa ??? Percebemos que 57mV é exatamente 0x38, ou seja, o valor é 0x08 registrador. Com uma voltagem de 4.152V na bateria, o nível de carga de 96% parece bastante adequado; você pode obtê-lo lendo os registros 0x2c e 0x2d. Leia 0x2c = 0x60, 0x2d = 0 (no caso do parâmetro SOC, o registro mais alto é sempre zero). Havia uma suposição de que o programa ou o EV2300 não pode ler (ou a bateria não responde) o byte alto na solicitação ou um byte com um endereço estranho. Para testar essa teoria, a bateria foi conectada diretamente ao leitor RFID e a bateria foi pesquisada através do MK. A interface HDQ foi implementada de acordo com um
documento da TI . O chip bq27545 usa o protocolo HDQ de fio único para se comunicar com o controlador de controle, que no STM32 é convenientemente implementado com base em um UART de fio único, graças ao suporte ao modo Half Duplex.
Porque nosso leitor RFID funciona no MicroPython, finalizamos o trabalho com o HDQ em uma classe e conseguimos o trabalho com o controlador de carregamento da seguinte forma:
de hdq import HDQ
bat = HDQ (pyb.UART (1))
bat.charge () # charge
registro arbitrário bat.read_u16 (0x14) #
De fato, o A1141 não responde a uma solicitação de leitura de bytes com endereços ímpares.

A forma de onda mostra que há uma solicitação, mas nenhuma resposta. Quando eles adicionaram uma reinicialização da lógica da troca de dados (Break) antes de cada solicitação - a cada duas vezes, mas o microcircuito começou a responder corretamente.

Em seguida, comparamos a taxa de câmbio do EV2300 e o RFID do leitor e verificamos que o EV2300 usa uma velocidade de 10 a 15% menor do que os conjuntos de TI:

Depois de abrandar o HDQ e concluir o Break, a bateria funcionava normalmente com todos os pedidos! Os principais parâmetros da bateria foram lidos:

Vitória completa! De fato, o A1141 acabou sendo um clone de alta qualidade do bq27545 com pequenas falhas. Resta falar sobre as nuances de trabalhar com a bateria do lado do software (usando modos de suspensão, corrente de ativação etc.), mas isso dobrará a quantidade de gravação e, talvez, eu a escreva outra vez.
Conclusões
Como você pode ver, existem muitas opções para o desenvolvimento de dispositivos alimentados por baterias de íon de lítio. Honestamente, foi originalmente planejado escrever material no estilo de "vi, vi, ganhei", mas no processo surgiram muitas nuances (a luta com o A1141 é especialmente boa) e o material acabou sendo muito interessante e extenso. Das 5 baterias, apenas 2 de fato podem ser usadas normalmente. Portanto, a escolha do fornecedor neste caso é muito relevante. Se você viu a bateria de outros dispositivos que contêm BMS, escreva o modelo nos comentários. Obrigado a todos pela atenção!