Meça a tensão de entrada VDD do PIC com o ADC

8
  • Processador: PIC18F66K22
  • Compilador: C18 (XC8 também está bom)

Acabei de criar (e testado com sucesso) código para medir a tensão no pino analógico AN4.

Agora, quero tentar outra coisa, sem ter certeza se é teoricamente possível.

Minha placa de teste possui um processador PIC, com VDD, AVVD conectado a uma fonte (variando de 0 (se a bateria estiver vazia / desconectada) a 4,2 (bateria cheia).

Posso usar o ADC para medir o VDD (-in) da minha placa?

Por que não?:

  • Não é um pino ANx, não sabe como fazer o ADC medir isso? (Canal?)
  • Se a tensão no VDD (-in) cair, minha tensão de referência ADC também cairá? (Então, quando meu PIC recebe apenas 3,3V, o ADC ainda diz que é 100% (como a tensão máxima no chip, também a referência é 3,3V).

Por que / o que você pergunta ?:

  • Posso apenas medir o canal 30 (VDDCORE)?
  • Posso definir meu Vref como Vdd e medir uma referência de tensão de precisão com o conversor A / D. (Não sei como)
  • Ou eu poderia adicionar um fio do VDD-in a um pino ANx?

  • O VREF + interno (4.096V) permanecerá 4 + V quando a entrada VDD estiver em torno de 3,4V? Existe algum tipo de transformador que o faz assim?

  • O VREF + interno (4.096V) é um pouco menor que o máximo da bateria (4,2V), isso significa que posso danificar o ADC? Ou apenas que o resultado será máximo quando a bateria estiver cheia. (4,2V de 4.096V)

Lembre-se de que meu conhecimento de eletrônica é "baixo". Aprendi muito mais sobre a parte do software na minha formação, mas gostaria de saber mais sobre a eletrônica (incorporada), pois é uma parte crucial da engenharia incorporada. (É triste como minha escola não vê isso.)

Paulo
fonte

Respostas:

14

Esse PIC possui uma referência interna de intervalo de banda de 1.024V, selecionada ao definir os bits de seleção de canal como 11111.
Portanto, se você definir a referência do seu módulo ADC para Vdd e depois instruí-lo a medir a reverência de 1.024V, é possível inferir o que seu Vdd realmente é.

Normalmente, você calcularia a tensão em um pino com o qual A2D seria algo como:
Vin = (ADCval / ADCrange) * Vref

Mas, neste caso, é Vin que você conhece (1.024v) e deseja resolver para Vref (seu Vdd), então:
Vref = (Vin * ADCrange) / ADCval
ou mais especificamente para o seu caso:
Vdd = (1.024 * 4096) / ADCval

brhans
fonte
Vou tentar! ((amanhã) e coloque isso como resposta, se funcionar) Outro collegua apontou que tinha uma "referência Bandgap". Obrigado pela compreensão do cálculo da 'escala', não sabia disso!
Paul
Perfeito! Obrigado pela teoria em combinação com os detalhes específicos, isso foi corrigido em questão de minutos, o pensamento e o teste levaram mais tempo como o desenvolvimento real (após a sua resposta).
Paul