Inicialização com baixa energia não está funcionando

9

Eu tenho uma placa ATMega328 do Arduino personalizada que geralmente roda em 5V a 8MHz (usando o perfil e o carregador de inicialização do Arduino Pro 3.3V 8MHz). A principal razão pela qual estou usando essa configuração é para que eu possa colocar a placa no modo de suspensão quando a energia principal for desconectada e ela começar a ficar sem carga da bateria (3V de uma célula moeda). As fontes de 5V e 3V são diodos OR'ed juntos e a entrada de 5V é ligada ao INT0. No código, quando detecta que o INT0 caiu baixo, ele inicializa o modo de suspensão e tudo é desligado, com exceção do timer do watchdog que mantém um ciclo de 1Hz para manter uma contagem interna e verificar se o chip deve ser reativado. Isso funciona perfeitamente quando a energia de 5V é aplicada primeiro, depois a bateria é inserida e, em seguida ,5V está desconectado. Ele dorme e quando o 5V é trazido de volta, ele acorda e vejo que não perdeu a conta.

No entanto, o problema surge quando o 3V é aplicado primeiro . Sinceramente, não tenho certeza se está inicializando. Mas o que ele deve fazer é inicializar, verifique se INT0 (Digital 2) está baixo e, se houver, vá dormir. Observando o desenho atual, vejo que ele alimenta alguns mA por alguns segundos e depois cai para cerca de 0,3mA (ainda mais alto do que deveria estar no modo de suspensão). Mas quando eu reaplicar 5V, nada . O consumo de energia volta a funcionar, mas não responde (sobre a série FTDI).

Existe talvez algo que esteja faltando que não possa ser inicializado em 3V ... em teoria, ele deve funcionar muito bem.

Atualização: coloquei um LED no D13 e tentei o esboço piscante. Funciona bem ao iniciar a partir de 3V ou 5V. No entanto, quando executo o firmware e inicio em 3V, o LED começa a piscar descontroladamente. Não faço ideia do que está causando isso, pois nunca configurei o D13 como algo no meu código. Mas isso me faz pensar que é algo a ver com o gerenciador de inicialização ...

Adam Haile
fonte
11
Para que o BOD está definido e qual é o atual empate na inicialização?
Ignacio Vazquez-Abrams
Está definido para 2,7V. O consumo de corrente em 3V é de cerca de 4mA nos primeiros segundos, depois cai e o LED fica louco.
21714 Adam Haile
Você já tentou sem o gerenciador de inicialização, ou seja, via ISP?
Ignacio Vazquez-Abrams
Não, eu ainda não tentei isso. O que é estranho é que está tudo bem quando apenas correr o esboço piscar
Adam Haile
2
Você pode adicionar um diagrama para mostrar "exatamente" como sua fiação está conectada, incluindo todo e qualquer sensor ou carga na bateria. Que tipo de célula de moeda você está usando, é um íon de lítio (recarregável) ou alcalino?
Ron J.

Respostas:

6

Então ... o que estava acontecendo estava no código. Acontece que eu estava inicializando uma interrupção no INT0, quando estava baixa, no início do meu código. O problema era que, quando ele era inicializado com energia de backup de 3V, o INT0 estava sempre baixo porque o INT0 estava ligado à linha de 5V (é assim que ele sabe que vai dormir). Como o INT0 estava baixo e a interrupção estava sendo acionada em baixa, estava causando uma interrupção constante, nunca dando tempo ao restante do programa para execução. Mudei para ativar essa interrupção apenas depois que eu entrei no modo de vigília completa e agora funciona bem.

Adam Haile
fonte
4

Exatamente o que está acontecendo e por que não pode ser determinado com base na quantidade de informações fornecidas. No entanto, vejo pelo menos um problema em potencial que explicaria pelo menos parcialmente os sintomas descritos.

Você disse que está usando diodos para selecionar a fonte de tensão, e uma fonte é uma bateria de 3V. Se você estiver usando diodos padrão que caem ~ 0,6V, a tensão de alimentação do MCU é apenas ~ 2,4V. Se você estiver usando diodos Schottky com uma queda de tensão entre 0,15-0,45, a tensão de alimentação é potencialmente tão baixa quanto 2,5V. Você tem a voltagem BOD definida para 2,7 volts, portanto, em teoria, o MCU nunca inicializará com a bateria.

Quanto ao motivo pelo qual você pode iniciá-lo em 5v, reduza para 3v e recupere-o novamente - não tenho certeza. Você pode estar desativando o BOD no código ... talvez ... Não saiba por que ele funciona, mas provavelmente não está garantido que funcione.

Eu configurei um circuito de chave de diodo com 5v e 3.3v para ver como fica no meu osciloscópio quando as tensões mudam. Quando a 3.3v mudando para 5v, a tensão oscila bastante inicialmente. Isso pode causar alguns problemas quando o MCU tenta sair do sono. Colocar um limite entre VCC e GND suavizou muito bem o sinal. Ao mudar de 5v para 3,3v, realmente não houve oscilação, apenas uma gota limpa.

Com base nessas informações, parece que você deve diminuir o limite de DBO ou desativar o DBO e colocar um limite de desacoplamento entre o VCC e o GND. Você provavelmente também deve ter um resistor pull-down no INT0 e ler as seções de folha de dados do MCU que explicam os vários modos de suspensão, todas as considerações para dormir e acordar - está bastante envolvido. Felicidades

imjosh
fonte
2

Eu acho que o problema está no seu gerenciador de inicialização, mas não da maneira que você pensa.

Quando um Arduino é inicializado, um gerenciador de inicialização que realiza várias tarefas, como procurar um host serial ou carregar dados do programa a partir do flash, gasta muito mais energia do que um Arduino adormecido.

Eu acho que a razão pela qual o seu Arduino não será iniciado é porque o carregador de inicialização requer uma fonte de clock precisa, mas a aplicação de 3v irá atrapalhar esse relógio e talvez travar ou esperar que 3.3v seja aplicado para uma fonte estável.

Olhando para a folha de dados:

copyright ATMEL

Vemos que o consumo de corrente ao acordar (executando o gerenciador de inicialização) provavelmente será de cerca de 2mA, enquanto a corrente adormecida é de cerca de 0,8 microamperes . Isso certamente poderia levar a um blecaute na inicialização sem a corrente adequada.

Talvez você deva ligá-lo apenas com energia de 5V ou talvez precise de uma bateria de corrente mais alta e tensão mais alta.

O médico
fonte
Isso não significa que Blink também não funcionaria? Além disso, estou executando mais do que alguns Arduino em células de moedas sem problemas. Eles podem fornecer muita corrente por um curto período de tempo.
Cybergibbons
-5

Tente recarregar novamente o seu arduino, vá em Ferramentas> Gravar Bootloader

DesenvolvedorACE
fonte
11
Você pode adicionar mais detalhes sobre como fazer isso? Não é muito específico: o que você pode ter conectado ao Arduino? Existe algum risco? Obrigado!
Anonymous Penguin
Gostaria de desconectar tudo para ser seguro, mas não deve haver qualquer risco
DeveloperACE
Veja como gravar o gerenciador de inicialização: arduino.stackexchange.com/a/474/37 . Sua resposta não explica tudo de como fazê-lo.
O cara com o chapéu