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.)

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.