A verificação da tensão de backup em um RTC drena sua bateria de backup?

8

Estou trabalhando em um projeto ATMega que manterá o tempo e estou tentando fazê-lo para que você tenha uma opção de RTCs de tempo de software (baseado em millis ()), DS1307 ou DS3231 (ChronoDot).

No mais básico, o que eu gostaria de fazer é ter cabeçalhos para um ChronoDot disponíveis para solda e, de alguma forma, em software, detectar se o ChronoDot está conectado e mudar para usá-lo. Normalmente, seria fácil verificar se o DS1307 ou DS3231 está presente enquanto eles usam o mesmo registro I2C, mas após essa verificação inicial eles se desviam um pouco do outro e o último possui mais recursos. Então, eu ainda quero determinar qual está conectado. Em geral, pretendo ter um lugar diretamente a bordo para soldar no DS1307 como opção padrão e o suporte ao DS3231 seria com um ChronoDot completo apenas por meio de cabeçalhos duplos de 4 pinos. O ChronoDot caberia essencialmente sobre o local onde o DS1307 normalmente iria (não seria preenchido nesse caso). A principal razão pela qual estou focando o ChronoDot especificamente é que ele ' s popular, fácil de adquirir e não requer solda SMD para o usuário final (isso se for para um kit). Então, aqui está o que eu estou pensando ...

O DS1307 e o DS3231 têm uma linha Vbat no chip, mas não é realmente necessário para nada. No entanto, o ChronoDot possui um pino VBat real na placa de interrupção. Talvez eu pudesse conectar apenas o Vbat do cabeçalho do ChronoDot e não o DS1307 e conectá-lo a um pino de entrada digital no meu ATMega. Mas esse pino de entrada foi puxado para o chão por um resistor (não tenho muita certeza de qual valor ... talvez 4,7k?). Se minha teoria de EE estiver correta, posso ler esse pino e, se eu estiver baixo, não há cronodot, mas se eu estiver alto, sim.

Algo assim:

esquemático

simular este circuito - esquemático criado usando o CircuitLab

Minha principal pergunta aqui é se isso acabará esgotando a bateria de backup no RTC? Normalmente, não há corrente extraída da bateria de reserva enquanto a alimentação principal de 5V é fornecida, mas conectá-la a uma entrada digital faria com que ela consumisse energia da bateria o tempo todo? Ou, existe um modo em que eu precisaria colocar o pino depois de ler a fim de "desconectá-lo", por assim dizer? Eu sei que poderia alterá-lo para saída, mas acredito que, se estiver definido como saída e baixo, eu estaria basicamente aterrando a bateria.

Enfim, meus cursos de EE foram há muito tempo. Qualquer ajuda sobre a teoria aqui seria apreciada.

Adam Haile
fonte

Respostas:

8

Você certamente drenará a bateria através do resistor. A quantidade de corrente que você consumirá será regida pela lei de Ohm: I = V / R. Vamos dizer que a tensão da bateria é de 3V (isto é, o cronodot Vbat usual). Com um resistor de 4,7 kOhm, você desenhará 3/4700 = 638 microamps continuamente. Se você fizer disso um resistor de 1 MOhm, desenhará 3/1000000 = 3 microamp. E se você fizer disso um resistor de 10 MOhm, desenhará 3 / 1e7 = 300 nanoamp.

Quanto maior o resistor de valor escolhido, menor a corrente que você consumirá continuamente, mas mais tempo levará para o pino digital fazer a transição (pense na constante de tempo R * C governada pela resistência e pela capacitância dos pinos e traços). Desde que você espere o suficiente (ou verifique periodicamente) após a inicialização, você deve aceitar um resistor de 10 MOhm. Teoricamente, você também pode captar mais ruído com um valor maior (já que começa a parecer cada vez mais um circuito aberto), mas acho que você ficará bem. Eu poderia até considerar subir até 100 MOhm.

Um CR1632 típico possui 130 miliamperes-hora (mAh) de energia armazenada nele, e talvez 80% disso é vida útil, então vamos chamá-lo de 100 mAh para facilitar o cálculo. Uma estimativa aproximada da sua vida útil da bateria é então de miliamp-hora / miliampere.

  • Com o seu resistor de 4,7 kOhm, é 100 / .638 = 156 horas = 6,5 dias
  • Com um resistor de 1 MOhm, é 100 / 0,003 = 33333 horas = 3,8 anos
  • Com um resistor de 10 MOhm, é 100 / 0,0003 = 333333 horas = 38 anos

Esses são números de limite superior que assumem que o restante do seu sistema não consome energia. Eles representam a vida útil do seu sistema quando ele está desligado e a bateria é descarregada através da resistência. Também existem muitos efeitos de segunda ordem que não são levados em consideração (queda de tensão, química de vazamento interno da bateria, etc.). É improvável que o resistor seja seu maior problema, dependendo da vida útil que você espera alcançar.

vicatcu
fonte
Duh ... não acredito que deixei de notar o fato de que estava aterrando a bateria diretamente: P Alguma sugestão de uma maneira diferente de fazer isso?
Adam Haile
Eu acho que sua abordagem é boa, dado que um resistor grande o suficiente, a corrente de fuga não afetará significativamente a vida da bateria, atualizarei com um pouco mais de matemática.
vicatcu
1
Upvote: Respondendo à pergunta principal. @AdamHaile uma técnica que você pode achar útil: os voltímetros digitais usam um FET que apresenta um dreno equivalente insignificante de um resistor em pedidos ou MOhms.
shimofuri
1
@AdamHaile uma coisa rápida ... Notei seu comentário de que seu sistema é de 5V em outro comentário. Cuidado com que seu Tensão de entrada digital de alta limite é alto o suficiente para registrar com uma bateria descarregada (provavelmente para cerca de 2V por um CR1632) - verificar ficha técnica do seu microcontrolador
vicatcu
1

Praticamente qualquer um desses esquemas de medição que envolvam resistores, se permanentemente conectados, causará consumo de corrente inaceitável e redução da vida útil da pequena bateria de lítio que alimenta esses dispositivos.

A solução, então, é fazer com que o circuito de medição consuma corrente durante breves momentos em intervalos pouco frequentes, quando você estiver realmente fazendo uma medição.

Para um teste digital, isso pode ser tão fácil quanto usar um pulldown interno configurável por software e configurá-lo apenas como um pulldown por um breve período em torno do teste. No entanto, você precisará examinar possíveis complicações de ter tensão no pino quando o MCU que estiver fazendo a medição não estiver ligado / no modo de suspensão.

Uma medição analógica seria mais complicada, mas idéias semelhantes poderiam ser aplicadas. Por exemplo, você pode conectar o resistor mais baixo de um divisor de tensão (alta impedância em relação às E / Ss) a um pino de saída e reduzi-lo apenas por um tempo em torno da medição. Ou você pode até construir um circuito RC com um pequeno capacitor de baixo vazamento e um único pino de E / S que você pode gerar baixo como uma saída, configurar como entrada analógica e medir a tensão após algum período de tempo. Se a tensão limite digital do dispositivo for consistente (cuidado com a temperatura!), Você pode fazer uma medição analógica com uma entrada digital dessa maneira, medindo o tempo que o capacitor leva para carregar na tensão limite.

Chris Stratton
fonte
Hmmm ... eu gostaria de poder fazer o pull-down interno, mas infelizmente existem apenas resistores pull-up internos. Eu posso estar tentando complicar demais as coisas. Uma almofada de solda que precisa ser conectada para usar um ou outro modo provavelmente seria aceitável.
Adam Haile
Você pode fazer seu próprio pulldown configurável por software com um resistor para outro pino de E / S. Ou você pode usar a idéia do circuito de circuito RC, acionando o mesmo pino que você reconfigurará como uma entrada para medir.
Chris Stratton
Na verdade, usar uma lista suspensa interna é uma péssima idéia. Os pinos de E / S geralmente são conectados ao Vdd e ao GND com diodos para impedir que a tensão do pino se desvie para fora da tensão de alimentação. Quando o chip não é alimentado, o pino será basicamente ligado ao GND com dois diodos paralelos e a aplicação de qualquer tensão acima da tensão limite dos diodos resultará em um fluxo de corrente muito grande. Uma idéia melhor seria usar um transistor PMOS em série cuja porta é controlada por um transistor NMOS para aterrar. Isso minimizará o vazamento quando o microcontrolador não estiver ligado.
alex.forencich
1

O DS3231 possui temperatura interna que você pode ler. Você pode emitir um comando sobre I2C para ler a temperatura; se você receber uma resposta, terá o DS3231; caso contrário, o DS1307.

Scott Goldthwaite
fonte
1
Eu não acho que isso responda a pergunta de forma alguma.
shimofuri
Eu acho que sim. Adam no OP quer determinar se um DS3231 ou DS1307 está conectado ao seu circuito. Ele estava pensando em tentar fazer isso com o pino vbat. Estou sugerindo que ele faça isso, verificando se o dispositivo retornará a temperatura. Parece-me que deve funcionar muito bem.
Scott Goldthwaite
Eu acho que isso aborda a questão: não a pergunta que foi feita, mas a declaração do problema subjacente. Interessante. Seria meu voto positivo se aprofundado um pouco, e com referências adicionadas.
Anindo Ghosh #
Na planilha de dados Maxim, consulte a Figura 1 na página 11. Ele mostra os registros (11 e 12) da temperatura interna.
9788 Scott-Gththiteite