Estou controlando uma ventoinha PWM de 4 pinos para PC de um PIC16F684 com a velocidade da ventoinha direcionada a partir de uma leitura ADC de um sensor de proximidade. Tudo isso funciona bem.
Originalmente, eu não estava planejando usar a saída do tacômetro da ventoinha, mas como ela está disponível, eu a monitorei com o meu escopo apenas para ver que meu mapeamento entre a proximidade e a velocidade da ventoinha está funcionando.
Agora, o que eu notei é que, quando o PWM está funcionando com o ventilador a 100%, o sinal de tach (que é um dreno aberto puxado por um resistor de 10 K) é agradável e limpo:
No entanto, quando corro a menos de 100%, é barulhento:
Ampliando esse ruído:
Acho que está sendo afetado pelo sinal PWM, mas gostaria de entender por que e como, para que eu possa limpá-lo se necessário no futuro. Realmente, estou interessado no que você deve fazer quando vê barulho como esse, como encontra a causa e como "conserta". O escopo consegue disparar ok, então eu estou querendo saber se eu apenas o alimento no pino de interrupção externo no PIC (RA2), que é uma entrada do Schmitt Trigger com níveis de CMOS, então eu não "vejo" o ruído e eu Por exemplo, pode ecoar um sinal limpo de outro pino para apagar um LED ou algo assim.
Então, alguém pode explicar em termos gerais como reconhecer e corrigir sinais ruidosos? Ou se isso é muito amplo, talvez apenas esse problema em particular? Além disso, se houver algo errado com o meu circuito, seria bom saber também. No esquema abaixo, o sinal que estou exibindo é a entrada TACH à esquerda do circuito:
ATUALIZAÇÃO
Após sugestões úteis de @MichaelKaras e @techydude, descartei o Q2 como a fonte de qualquer problema removendo-o completamente do circuito e aterrando o ventilador diretamente. Nenhum efeito significativo no ruído.
Então, codifiquei a interrupção externa no RA2 para fazer eco de um sinal "limpo" de um pino sobressalente (RA1 neste caso), o que ajudou muito, mas ainda estava piscando devido a interrupções falsas. (Então, eu configuraria a interrupção para interceptar a borda ascendente e depois a alternaria para a borda descendente quando acionada e vice-versa, configurando / redefinindo o RA1 de acordo).
Mas, depois de adicionar também um capacitor de 100nF no R3 (como parte da sugestão do @ techydude), agora recebo uma saída muito mais estável. A captura de tela abaixo é o sinal TACH após a limpeza através da entrada Schmitt Triggered RA2 e re-output no RA1:
Respostas:
Sobre o seu esquema:
Tudo parece bem, você pode aumentar o R2 para 10k ou até 100k, a capacitância do MOST é tão pequena que a ventoinha terá muito mais inércia de rotação do que o atraso no desligamento do MOST, provavelmente mesmo com 1M. Dessa forma, a localização do seu 100R é irrelevante e enquanto você não gasta nenhum mA. Se você nunca reter o DEC em redefinição, isso nem sempre é necessário, pois o seu UC ativamente o puxa para cima ou para baixo.
Para o sinal PWM, você pode ver se a folha de dados permite uma extração externa de 12V, embora eu duvide que faça muita diferença de qualquer maneira.
Sobre o barulho:
EDIT: Eu interpretei errado o seu gráfico para kHz, o que é estúpido se você pensar nisso, onde é Hz. Parte da minha história mudará um pouco (como a conversa sobre a necessidade de MHz para o trabalho digital), mas a idéia geral permanece.
Vou deixar o post inteiro como está, mas, para um sinal de 100Hz com ruído de 30kHz, em vez de 100kHz com ruído> 5MHz (também não fazia sentido, não é?), Você pode aumentar os resistores que interagem com os capacitores por um fator de 10 e também aumente os capacitores em um fator de 50 a 100. Isso resultará em uma frequência de filtragem de fator 1000 mais baixa em todos os exemplos. Mas também não há problema em apenas aumentar os capacitores em um fator de 10 a 20, para bordas mais nítidas ou resposta mais rápida no seu sinal de interesse, já que 30kHz está muito longe de 100Hz.
Portanto, considere este post como escrito para altas frequências e reduza as ideias, tornando-as muito mais fáceis de implementar! (Especialmente a rejeição digital em 3.)
Fim da Edição
Como você cria um bom caso de uso para trabalhar com métodos de redução de ruído, tentarei criar um que se aplique à sua situação.
Para quem estiver lendo, esteja ciente de:
Trata-se apenas de ruído em um sinal digital
Em um sinal digital, você pode supor que há apenas duas voltagens nas quais você está interessado "ligado" e "desligado". Qualquer coisa no meio é inútil e pertence ao barulho ou errado. Em um sinal analógico, você precisa conhecer todos os níveis de tensão e fazer alguma filtragem real com cargas de C, L, etc.
Um problema no seu sinal é que os picos de ruído negativo no nível alto e os picos de ruído positivo no nível baixo se aproximam muito, portanto, um simples gatilho padrão, mesmo com nível ajustável, não garante absolutamente que você nunca obterá confuso.
Suas opções:
1. Altere o viés:
O positivo tem picos negativos muito baixos, é porque sua flexão não pode ganhar com o barulho. A coisa mais fácil que você pode tentar é diminuir essa resistência. Existe o risco de isso também aumentar os picos no sinal de desligado, de modo que nem sempre funcionará. Mas é muito possível que isso lhe dê algum espaço entre os espigões para definir uma histerese simples.
2. Altere os níveis de tensão
Você pode facilmente, se o ventilador permitir, alterar o Tacho para um nível de tensão mais alto e adicionar um estado intermediário:
simular este circuito - esquemático criado usando o CircuitLab
Agora, pode haver espaço suficiente entre os picos alto e baixo para garantir que o MOST esteja sempre ativado, mesmo quando houver picos negativos e sempre desligados, mesmo se houver picos positivos. Pode levar alguns diodos, zeners ou resistores para obter o ponto de ajuste na nova situação, mas se os picos no sinal negativo permanecerem o que são, eles não deverão acionar o MOSFET, desde que você não substitua-o por um que tenha um limiar de porta abaixo de 2V.
3. Adicione histerese "lenta":
Esse é um truque comumente usado quando você sabe que um sinal de ruído pontudo é pelo menos uma ordem de magnitude maior que o sinal em que está interessado. Isso atrasará um pouco o sinal, portanto não poderá ser usado em situações em que o momento exato de uma mudança on / off é importante.
Mas para um sinal em que você deseja apenas saber a forma ou a frequência dele, esse é um método muito robusto. Basicamente, começa a disparar quando há uma tensão que ultrapassa o limite, mas somente conclui essa ação quando permanece lá. Existem muitas maneiras de construir uma.
Você pode fazer isso no controlador (o que é mais fácil na contagem de componentes): é possível disparar em um flanco e, em seguida, experimentar mais alguns valores em velocidade suficiente para ver a alta entre picos de ruído, mas não confundir a perda de um período inteiro baixo. Então você faz um julgamento predefinido com base no conhecimento do seu sinal e ruído. Por exemplo, se você pudesse amostrar em 10 MHz, poderá capturar 50 amostras e ter certeza de que uma frequência mais alta de 100 kHz não será ignorada se você seguir a regra da maioria. Ou seja: pelo menos 25 precisam ser baixos para realmente serem baixos. Seus picos são muito finos e, na maioria das vezes, é o sinal original, para que funcione, mas o número da maioria pode ser ajustado. Isso funcionará com 1MHz e 6 ou 7 amostras também, mas será uma maioria menor, portanto, pode haver alguns riscos novamente lá.
Você também pode fazer isso externamente: Mas já é MUITO mais complicado do que adicionar um filtro simples, especialmente quando você olha o resultado com um uC com alguma histerese em sua entrada. Mas é divertido pensar, então vamos:
simule este circuito
U1 é qualquer Op-Amp ou Comperador adequado. Os operadores são melhores comutadores, geralmente com melhor giro, mas para sub-MHz um OpAmp com giro decente de trilho / trilho será fácil.
Embora esse tipo de histerese possa ser construído com pelo menos um resistor a menos, este é mais fácil de explicar e, como tal, mais fácil de modificar.
Primeiro imagine sem o capacitor:
Primeiro, veja que o divisor do resistor é influenciado pela saída do U1, ele o puxa um pouco mais para baixo através da resistência aparente de 20kOhm. Digamos que na entrada positiva de U1 há uma tensão de 1,1V arredondada para baixo quando sua saída é 0 e 3,9V arredondada quando sua saída é de 5V.
Se a entrada Tacho inicial em estado estacionário for alta, a saída do U1 será baixa, devido à natureza invertida da entrada no Tacho. Portanto, a entrada negativa será, novamente devido ao resistor extra, cerca de 2,3V. Como a entrada positiva é de apenas 1,1V, a entrada precisa cair abaixo de 2,2V para fazer com que a entrada negativa veja uma tensão mais baixa e faça a saída virar.
Quando a saída virar, a entrada negativa verá 3,6V (porque neste instante o sinal de entrada é 2,2V, a saída do U1 é 5V, então o meio, produzido pelos resistores de 10k, é de cerca de 3,6V), mas o positivo entrada terá mudado de 1.1V para 3.9V, então o negativo ainda está abaixo da entrada positiva e a saída permanecerá 5V.
Se o sinal agora "abortar" rapidamente e subir novamente, a saída do U1 voltará rapidamente novamente, mas o pico já teve que cair abaixo de 2,2V, então isso é melhor do que nada.
Se o sinal descer mais para 0, a situação estável ficará mais forte, a entrada negativa cairá para 2,5V (já que assumimos que o tacho da ventoinha é forte o suficiente para puxar para baixo) e o positivo permanecerá em cerca de 3,9 V.
Agora, o sinal precisa aumentar acima de 2,7V para que a saída vire para o outro lado. Muito provavelmente, 95% dos seus picos já serão ignorados.
Adicionando o capacitor:
Com o capacitor, o sinal de entrada precisa fornecer energia suficiente por tempo suficiente para carregar ou descarregar o capacitor. Na verdade, isso já é um filtro RC. Qualquer pico que desça rapidamente e depois se recupere não poderá descarregar o capacitor.
O valor de C obviamente depende do sinal da fonte e do sinal de ruído. Eu tenho 510pF estacionado para um sinal de fonte de 100kHz vs 1us de duração máxima, mas eu realmente não fiz muita matemática, é apenas um pressentimento baseado no tempo de RC que pode estar próximo do que funcionará.
4. Filtre o ruído
Isso é como filtrar um sinal analógico. Você pode usar uma rede RC simples, como discutido na seção anterior:
simule este circuito
Como os picos de ruído são iguais ou inferiores a 1us, eles não podem fazer uma alteração muito significativa na tensão no capacitor, pois o tempo de RC é de 5us. Isso significa que a energia nos picos é reduzida a uma média. Como você vê altos e baixos nos picos, é possível que as médias sejam muito próximas de 0V e 5V, mas isso só pode ser dito com fotos melhores ou apenas com um experimento. Como você o alimenta com um pino de uC, o tempo de RC provavelmente será suficiente para vê-lo como alto ou baixo. Isso causará uma pequena distorção devido ao carregamento mais lento do que ao descarregamento, causado pelo resistor de pull-up. Alguns ajustes de valores podem resultar em um resultado insignificante.
Se isso não for suficiente, você poderá adicionar mais alguns componentes, mas estará exagerando muito rapidamente quando o ruído dominante for pelo menos 10 vezes "mais rápido" do que o seu sinal.
Você pode adicionar um indutor de 4.7uH em série com o resistor para suavizar alguns flancos de alta frequência, talvez até 10uH.
Mas, para ser sincero, no caso de "alimentá-lo com um uC", a única razão para experimentar Ls em um sinal do seu tipo é encontrar um equilíbrio em que R seja grande, C seja pequeno e L apenas ajude a suavizar alguns flancos, para que R2 / R1 seja pequeno o suficiente para ignorar a diferença no tempo de subida e descida. como um R1 de 33k, C de 150pF e um L em série com R1 de 56uH. Ou talvez um cordão de ferrite no lugar do indutor dependa um pouco da nitidez dos seus espinhos.
Mas já pensando demais, eu diria.
fonte
Barulho como esse de um tacho de ventilador é comum, porque os circuitos (que geralmente incluem um sensor de efeito Hall) no ventilador que está gerando a saída do tacho estão sendo cortados / desativados no seu PWM freq (quando a sua saída PWM está em outra 100% -On), não apenas a alimentação do próprio motor. Claro que eles terão alguma capacitância para suavizar a alimentação desse circuito, mas, como, por exemplo, uma fonte de alimentação de 12V, desde que haja capacitância suficiente para manter vários volts entre períodos mínimos de desligamento de PWM, isso é suficiente para ambos acionarem o Hall- Sensor de efeito e puxe a saída do tacômetro (se o ventilador incluir sua própria tração na saída do tacômetro), para fornecer um sinal de saída recuperável. Sim, os fãs ficam confusos quando você fornece o suprimento deles. Algumas ventoinhas oferecem uma entrada de velocidade PWM separada para sua fonte de + 12V.
Seu PWM parece ter cerca de 27kHz. Portanto, a coisa boa nessa situação específica é que sua saída do tacho a 100% parece ser de cerca de 800Hz, que é <1/30 da frequência do seu PWM, portanto, filtrar essa saída do tacho para se livrar da maior parte do ruído do PWM é fácil e vale a pena fazer. É tarde aqui, então eu trabalhei com CBF nos cálculos, mas porque é de dreno aberto e é a sua tensão de alimentação pull-up (no ventilador) que está sendo molestada pelo PWM, uma tampa entre o tacho e o trilho de + 12V (não o PWM saída do circuito de acionamento do ventilador) provavelmente será uma opção melhor do que uma tampa no tacho para o terra. Experimente os dois e veja. Comece com uma tampa de cerâmica de 100n de voltagem apropriada e veja como fica.
Com uma entrada Schmigger no PIC, você pode até conseguir sair sem filtrar essa saída do tacho antes de colocá-lo no seu PIC, mas você tem esse diferencial de frequência que permitirá facilmente percorrer um longo caminho para limpá-lo acima.
Um possível problema com o manuseio do sinal de tacho da ventoinha: se o ventilador está puxando-o para +12 com 10k internamente (alguns fazem, outros não) e você também está puxando o sinal para seu + 5V ferroviário, então você está realmente puxando-o para baixo! Existem várias configurações de circuitos para lidar com isso, dependendo da tensão de alimentação do ventilador, quão forte é a tração, etc. Tente medi-la com seu multímetro e informe-nos.
fonte
Uma possível fonte de ruído no sinal TACH pode ser devido ao fato de o IRF150 FET não ser uma impedância ON suficientemente baixa. Isso pode dever-se ao fato de o FET RdsON estar razoavelmente alto ou o FET não estar totalmente LIGADO na tensão de acionamento de porta fornecida.
À medida que a corrente FAN liga e desliga com o sinal PWM, haverá uma queda na resistência FET, fazendo com que a referência "GND" da ventoinha bata para cima e para baixo e traduza para o ruído visto no sinal TACH.
Você pode verificar isso para ver se o efeito que eu descrevo é o caso, colocando o fio GND do escopo no dreno FET e, em seguida, observe o sinal TACH. O sinal pareceria muito mais limpo.
A solução seria selecionar um FET com RdsON muito mais baixo quando fornecido com uma unidade de gate que seu sistema fornece.
Outra idéia possível é usar um P-FET para alternar o fio de + 12V do ventilador em vez do fio GND.
Observe que o arranjo do resistor de portão que você está usando faz com que você perca parte do seu potencial acionamento por portão. Mova o resistor 1K para o outro lado dos 100ohm.
fonte
Isso parece um trabalho para um filtro passa-baixo. Você precisa manter o sinal útil com f 1 em torno de 1 kHz e remover o sinal incorreto com f 2 próximo a 25 kHz. A frequência de corte pode ser escolhida como média geométrica de f 1 ef 2 (abaixo do ideal, mas simples):
f c = sqrt (1 * 25) = 5 kHz.
Supondo que um filtro RC simples seja suficiente e você já tenha resistência no circuito TACH (R 3 = 10 kOhm), o valor apropriado do capacitor deve ser calculado para corresponder ao tempo de 5 kHz :
C = 1 / (2 * pi * fc * R) = 1 / (6,28 * 5000 * 10000) = 3,2 * 10 -9 F.
Então, tudo o que você precisa fazer é soldar um capacitor de 3nF entre a linha TACH e o solo. Atenuará o ruído de alta frequência por um fator de 20 ou mais, o que deve ser suficiente para sua aplicação.
fonte