Este é o meu primeiro post. Eu sou um cara de software tentando fazer hardware, então seja gentil :)
O circuito
Estou projetando um pequeno circuito (veja a foto e desculpe pelo esquema bagunçado) que é simples e simples um monte de MOSFETS e drivers de porta projetados para alternar cargas resistivas (placas de aquecimento, neste caso) de um microcontrolador. Os elementos de aquecimento geralmente têm uma resistência muito baixa e, para manter a energia no nível desejado, os MOSFETS são comutados usando PWM.
Medição
Além do aspecto puramente funcional, há um foco educacional também. Quero poder obter algum feedback sobre o consumo atual. E minha abordagem ingênua foi simplesmente inserir alguns ICs atuais dos sensores de derivação. Ao usar um multímetro para medir a tensão de saída do sensor, recebo algo que se parece com a corrente média (com comutação PWM) devido à "lentidão" do amperímetro. Mas ao conectar a mesma saída a um ADC atmega328p, recebo algumas leituras ruins - a velocidade aqui coloca uma leitura em qualquer lugar da onda quadrada do PWM.
Então, minha pergunta é: como faço para medir a corrente (média) ao alternar com o PWM?
Parece que o design está bom, mas eu posso ter perdido algo no design e como o uC ADC deve ser usado nesse contexto.
Respostas:
Às vezes, o que parece simples não é assim tão simples. Você tem uma medida bastante complexa para fazer, mas deseja um resultado simples. O que você deseja medir não é constante, está variando no tempo. Dependendo do seu nível de exigência, você pode calcular uma ou várias propriedades do consumo atual. Essas propriedades ajudarão você a monitorar melhor o sistema. Eu proponho a você 3 soluções diferentes, em complexidade crescente.
Solução 1: média
Você deseja obter um resultado de um valor -> obter a média no tempo. Como já proposto por @akellyirl, use um filtro passa-baixo. Calcule
float y = alpha*input + (1-alpha)*y
para cada amostra, ondealpha
está o fator de suavização. Veja a Wikipedia para detalhes.Solução 2: Máx. + Média
Você é interessante em obter a média e o valor máximo. O monitoramento do valor máximo pode ser interessante para o dimensionamento de componentes, por exemplo.
Solução 3: desvio padrão + máximo + médio
Por quê?
Veja os gráficos abaixo. Existem 3 sinais de diferentes formas. Um triângulo , um seno e um sinal de pico . Todos são periódicos com o mesmo período, a mesma amplitude , a mesma média e os mesmos mínimos e máximos . Mas eles têm formas diferentes e, de fato, têm uma história completamente diferente ...
Uma das diferenças é o desvio padrão. Por isso, sugiro que você estenda suas medidas e inclua o desvio padrão. O problema é que a maneira padrão de computá-lo consome CPU. Felizmente, existe uma solução.
Quão?
Use o método de histograma . Crie um histograma de todas as medições e extraia com eficiência as estatísticas (mín, máx, média, desvio padrão) do conjunto de dados. O histograma agrupa valores que têm o mesmo valor ou o mesmo intervalo de valor. A vantagem é evitar o armazenamento de todas as amostras (aumento da contagem no tempo) e ter um cálculo rápido em um número limitado de dados.
Antes de começar a adquirir medições, crie uma matriz para armazenar o histograma. É uma matriz inteira de 1 dimensão, de tamanho 32, por exemplo:
int histo[32];
Dependendo da faixa do amperímetro, adapte a função abaixo. Por exemplo, se o intervalo for 256mA, significa que a posição 0 do histograma será incrementada em valores entre 0 e 8 mA, posição 1 em valores entre 8 e 16 mA etc ... Portanto, será necessário um número inteiro para representar o número da lixeira do histograma:
short int index;
Cada vez que você obtém uma amostra, encontre o índice de compartimento correspondente:
index = (short int) floor(yi);
E incremente esta lixeira:
histo[index] += 1;
Para calcular a média, execute este loop:
Para calcular o desvio padrão, execute este loop:
A estratégia do método do histograma é fazer operações lentas em um número pequeno de posições, em vez de todas as amostras de sinal adquiridas. Quanto maior o tamanho da amostra, melhor. Se você quiser mais detalhes, leia esta página interessante O Histograma, Pmf e Pdf .
fonte
Você entende o problema corretamente: você precisa obter a "média" do PWM, assim como o medidor que você está usando para medições.
Você pode usar um filtro RC nos sinais A1,2,3 cuja constante de tempo é pelo menos dez vezes o seu período PWM. Isso significa que, se o seu período PWM foi de 10 microssegundos, a constante de tempo de RC deve ser de 100 microssegundos. Por exemplo 10kOhms x 10nF = 100us
Uma solução melhor é filtrar os sinais digitalmente no microcontrolador assim:
Altere o valor "0,99" para alterar a constante de tempo deste filtro digital.
fonte