Questões:
- A conversão do ADC conta em tensão depende da tensão real do pino de +5 V?
- Se sim, qual é o método aceito para obter essa tensão da placa?
Histórico / Detalhe:
Eu tenho um circuito no qual tenho um Arduino Nano (clone) sendo executado a partir de um conector USB (de um hub). O trabalho do Arduino é medir a tensão em uma bateria que acionará um segundo circuito ligado / desligado pelo Nano. Para referência, é um testador de bateria.
Há uma tela do Nokia 5110 que exibe a tensão do desenho muito simples abaixo.
void setup() {
Serial.begin(9600);
display.begin();
// Init done
// You can change the contrast around to adapt the display
// for the best viewing!
display.setContrast(50);
// Text display tests
display.setTextSize(1);
display.setTextColor(BLACK);
}
void loop() {
display.clearDisplay(); // Clears the screen and buffer
display.setCursor(0,0);
display.print("Vin=");
int rawVIN = analogRead(VIN);
float floatVin = (rawVIN*4.75)/1023.0;
display.println(floatVin);
Serial.println(rawVIN);
display.display();
delay(1000);
}
- Eu medi a tensão da bateria usando um DVM e ele é de 4,13 V, mas o Nano informa 4,35 V.
- Eu tenho um terreno comum entre a bateria e o Arduino.
- Como a conexão para testar a tensão pode flutuar, eu tenho um resistor de pulldown para interromper flutuações violentas (> 10 kΩ)
Após alguma investigação, descobri que o +5 V estava realmente emitindo 4,75 V e mudei meu esboço de
float v = (rawVIN*5.0)/1024.0;
para
float v = (rawVIN*4.75)/1024.0;
e a leitura de tensão no Arduino agora estava correta. Fiz isso não porque entendi o que fiz, porque fiz um palpite de que poderia mudar o valor para o correto.
Respostas:
O ADC dentro do Arduino não mede a voltagem, mas uma relação de voltagem . Nomeadamente, a razão entre a tensão na entrada analógica e a tensão no pino Vref.
Na configuração padrão, o pino Vref é vinculado internamente à linha de +5 V. Você pode optar por usar uma referência interna como Vref :
Essa referência é de cerca de 1,1 V e é bastante imune a flutuações nos +5 V. O problema é que você não pode medir tensões maiores que a referência.
Para o seu testador de bateria, se você quiser algum tipo de medição "absoluta", use a referência interna e um divisor de tensão para garantir que a tensão medida esteja abaixo de 1,1 V.
Editar : Uma outra opção que não necessita de um divisor de tensão é a utilização de Vcc como uma referência para medir tanto a entrada analógica e a 1,1 V de referência “banda proibida” interno. Medir 1,1 V contra Vcc é uma maneira indireta de medir Vcc. Isso não é suportado pela biblioteca principal do Arduino, mas você pode fazer isso programando diretamente os registros de controle do ADC:
Cuidado que a primeira leitura após a inicialização pode ser falsa.
fonte
Um Arduino Nano alimentado por USB terá uma referência de voltagem ADC que não pode ser usada devido à tolerância de +/- 5% da voltagem USB de entrada. Além disso, o Nano possui um diodo Schottky MBR0520 (D1) que cai entre 0,1 e 0,5 V, dependendo de suas próprias tolerâncias de fabricação, temperatura e consumo atual de sua placa.
O que você pode fazer sobre isso?
O MCU a bordo do Arduino Nano é um ATmega328P. O ADC do Nano pode dimensionar suas leituras de tensão analógica de acordo com várias referências disponíveis (e você pode escolher a que melhor lhe convier). Você pode fazer isso através da
analogReference (type)
função e escolher entre as seguintes referênciastype
:Fonte: analogReference
Este é o esquema da ADC para o conteúdo do ATmega328, para que você possa ver o que está acontecendo lá:
Fonte: Folha de dados do ATmega328
Portanto, a solução direta é criar um divisor de tensão fraco para obter a tensão que você deseja medir abaixo da referência INTERNAL de 1,1 V e, em seguida, configurar de
analogReference
acordo.O divisor de tensão precisa ser fraco (altos valores de R) para que você não extraia muita corrente da bateria, mas não muito fraco para ser carregado pela impedância de entrada do ADC.
Bônus
No entanto, se você precisar de uma referência de tensão maior que a referência interna de 1,1 V do ATmega328, ainda estará sem sorte. Uma opção seria usar a saída do regulador LDO de 3,3 V do FT232RL on-board, disponível no pino 14 do cabeçalho, mas também não acho que seja confiável. A folha de dados do FT232RL a especifica em 3,0 - 3,6 V (3,3 V nominais)
Portanto, uma solução universal seria criar uma referência de tensão externa baseada em um TL431 barato . Isso pode fornecer uma referência confiável de 4,0 a 4,25 V com uma precisão de +/- 1%.
O circuito de referência de tensão externa seria algo tão fácil quanto isso (e o TL431 está disponível no pacote TO-92 amigável para a placa de ensaio!):
fonte
Eu tenho uma página sobre o conversor ADC no Atmega328P . Um pouco abaixo da página , descrevo as referências de tensão. Você pode usar o chip TL431 para fornecer tensões de referência variadas, por exemplo 4V:
Ao alterar os resistores, você pode obter outras tensões (parece que você deseja em torno de 4,2V).
A tensão de saída não é influenciada pela tensão de entrada (5V neste caso).
A página vinculada descreve como você pode escolher os valores do resistor.
fonte
sim e não: o módulo adc se preocupa com o Vref, que pode ser fornecido via Vdd, interna ou externamente.
configurando o módulo adc. a folha de dados do dispositivo deve ter registros / bits que precisam ser configurados para isso.
fonte