Agora que a corrente já foi medida e o sinal ampliado, o próximo passo é converte-lo para digital.
A procura pela ADC é uma coisa interminável, pois existem muitas, com várias funções etc...
O que procurei foi uma ADC com o máximo de bits, dentro do possível, pois com as comuns ADC de 10bits dos MCU a resolução mínima de leituras seria algo como 38uA (100mA/1023)... o objectivo é medir bem abaixo disso!
Uma vez que se pretende medir com algum rigor, a ADC tem de suportar uma entrada de Vref, sobre a qual serão feitas todas as divisões para a conversão.
Após alguma pesquisa e de ter conversado com o meu amigo Vitor Goulão (desde já um obrigado), consegui no stock dele uma MCP3428. Esta ADC tem mais do que aquilo que estaria a imaginar...
É uma ADC de 16bits, com 4 canais diferenciais (embora só vá usar 1 deles), com uma referencia interna de 2.048V (erro +-0.05%) e com um PGA na entrada (ganhos 1, 2, 4, 8), que me permite facilmente e de forma "digital" variar os ganhos de forma a ter sempre a máxima resolução possível. Esta ADC permite a medição de tensões negativas (canal diferencial) e por isso, os 16bits máx são aplicados de -2.048V a +2.048V. Como a tensão a medir será sempre positiva, quando configurada para leituras de 16bits, vou apenas ter resolução de 15bits, uma vez que não estou a usar a metade negativa da escala.
A frequência de leitura também afecta a resolução, pelo que para esta ADC:
 SPS - Samples Per Second
De forma a dar alguma rapidez na leitura e manter o máximo de resolução, optei pelo modo de 60SPS, ou seja, 14bits.
Qual a ideia geral?
Bem, para quando estiver a medir um sinal muito pequeno, ajustar a ADC para o PGA tenha o ganho máximo, à medida que esse sinal vai aumentando ir reduzindo o ganho do PGA. Simples... desde que se tenha em atenção a escolha dos valores, para que o programa não fique retido, mas isso vem a seguir.
O ganho do PGA é 1:
Topo de medição da ADC vai corresponder a 100mA;
Meio da medição da ADC vai corresponder a 50mA, então podemos subir o ganho.
O ganho do PGA é 2:
Topo de medição da ADC vai corresponder a 50mA;
Meio da medição da ADC vai corresponder a 25mA, então podemos subir o ganho.
O ganho do PGA é 4:
Topo de medição da ADC vai corresponder a 25mA;
Meio da medição da ADC vai corresponder a 12.5mA, então podemos subir o ganho.
O ganho do PGA é 8:
Topo de medição da ADC vai corresponder a 12.5mA;
O contrário também deverá ser feito, de modo a reduzir o ganho, quando o valor medido começa a subir. Para qualquer ganho abaixo de 1, se o valor medido for de 2^13-1, então o melhor é reduzir o ganho, porque se atingiu um topo de escala.

No que toca à comunicação, é utilizado I2C. Tem apenas um byte de configuração e aquando da leitura a resposta tem 3 bytes. Os primeiros 2 correspondem à leitura da ADC e o último é o byte de configuração que informa também se já foi feita uma nova leitura (utilizando o oscilador interno da ADC).


No proximo artigo irei descrever um pouco melhor os aspectos da comunicação, configuração e a gestão que o MCU terá de fazer.


Como escrito na 1ª parte deste projecto, para fazer a medição da corrente, não deveria provocar uma queda de tensão superior a 100mV na alimentação afim de medir um máximo de 100mA.
Para isso vou usar uma resistência de 1ohm.
R = V/I
R = 100mV/100mA
R = 1 ohm
Dado o baixo valor de queda de tensão é necessário um bom ampop, que tenha um input offset baixo.
Vamos tomar como exemplo o conhecido LM358, que tem um input offset de +-2mV. Isto significa que na medição de 100mV (correspondente a 100mA) teríamos um erro de +- 2mA. Um erro de +-2% é demasiado para o que tinha idealizado.
Após algumas pesquisas, surge então o MCP6V02 que tem um input offset de apenas +-2uV e ainda por cima é rail-to-rail. Com este ampop o erro será de apenas +-2uA, bem melhor do que aquilo que eu esperava.
Encontrado o ampop ideal para o serviço, resta determinar qual o ganho a usar... mas essa parte fica para a próxima parte. O ganho irá depender da referencia de tensão que conseguir encontrar ara a ADC.

PS: Como temos uma entrada de alta impedância, convém atenuar as altas frequências e por isso o conjunto R3 e C1 fazem um passa baixo com frequência de corte aprox. 16KHz.
A relação entre R1 e R2, que define o ganho da montagem, ficará como referia para a próxima parte.


Já passou bastante tempo desde que deixei de conseguir documentar algumas engenhocas que tenho vindo a fazer (principalmente devido ao mal comum a muita gente... a falta de tempo), mas agora com a necessidade surge mais um projecto pessoal, o uAmp Serial Monitor.
Motivado pela necessidade de fazer um registo temporal de corrente, para determinar com mais rigor a energia consumida por um sistema embutido, por um módulo rádio, etc...
O comum multímetro mostra-nos o valor instantâneo da corrente, mas não tem uma taxa de actualização muito significativa nem permite o registo de modo a conseguir ver com clareza qual o perfil de tempo x corrente do circuito a analisar.
Com um futuro cada vez mais low power, é útil a presença de um equipamento destes, quer para a medição quer para o registo das correntes e determinar o quão low power realmente é.
O meu objectivo geral é conseguir medir um máximo de 100mA (suficiente para o tipo de circuitos/sistemas já referidos) com uma queda de tensão máxima no Rsense de 100mV (Rsense será portanto de 1 ohm), o máximo de resolução possível, máxima frequência de amostragem possível e, claro, pelo menor preço possível. Na questão do preço, possivelmente com a ajuda de samples, pois trata-se de um prototipo...
O desafio aqui será manter uma resolução alta, sabendo que a escala também será bastante grande, pois, por exemplo, um simples módulo rádio pode consumir alguns uA (micro amperes) em sleep mode e dezenas de mA (mili amperes) em TX mode. Manter uma resolução consideravelmente boa em toda a escala, sem a intervenção humana para fazer alterações na escala de medição seria óptimo!
No entanto, para correntes tão reduzidas vários pontos vão ter de ser tidos em consideração para respeitar todos os requisitos iniciais.

PS: Não! Não vai dar para usar a ADC de 10 bits comum nos microcontroladores! Uma resolução de 97uA é grande de mais (100mA/1023)...


Não percam as próximas actualizações ;)