Como limpar um sinal barulhento?


19

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:

tachclean

No entanto, quando corro a menos de 100%, é barulhento:

tachdirty

Ampliando esse ruído:

tachdirtyzoom

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:

esquemático

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:

tachclean


1
Por que você precisa do IRF510 FET para ligar a ventoinha? Conduzir o PWM para um ciclo de trabalho de 0% deve desligar o ventilador ou atingir sua velocidade operacional mínima.
Michael Karas

1
@MichaelKaras Sim, o ventilador tem uma velocidade mínima, portanto não para a menos que você desligue a energia. Por design, ignora qualquer PWM inferior a ~ 10% e roda a 400RPM. Então, eu uso esse FET para matá-lo completamente quando necessário.
Roger Rowland

2
Entendo. Mas isso significa que, quando você pretende reiniciar o ventilador com um estado de + 12V desligado, pode ser necessário iniciá-lo com um ciclo de trabalho PWM maior que o mínimo. Eu experimentei isso com alguns tipos de fãs, pois eles precisam de um pontapé inicial para fazê-los iniciar com segurança na inicialização. Os algoritmos de controle de ventiladores em muitos computadores do tipo servidor funcionam com ciclo de funcionamento de 100% nos primeiros 10 a 20 segundos na inicialização, para garantir que todos os ventiladores iniciem corretamente.
Michael Karas

2
Em quase todos os subsistemas de ventiladores em que trabalhei, tive o sinal TACH vinculado a uma rede de resistores que enviesam o sinal do barramento + 12V e, em seguida, possuem um par de resistores divisores que levam o sinal TACH até o + Níveis de 5 ou + 3,3V necessários para o sistema de monitoramento. Uma pequena tampa no resistor inferior do divisor pode ajudar a filtrar quaisquer picos de ruído no sinal TACH.
Michael Karas

1
O uso principal do uso do trilho de + 12V para desviar o sinal TACH é que ele fornece isolamento entre os sinais de tensão digital de + 12V e o baixo nível digital do sistema de controle. Três considerações são: 1) Os fios do ventilador podem ficar presos entre as peças do chassi e os curtos entre os quatro fios se tornam possíveis. 2) Os ventiladores em um ambiente empoeirado podem obter acúmulo de carga estática e os resistores podem ajudar a manter qualquer descarga ESD fora da entrada do detector TACH. 3) A constante de tempo RC do divisor com capacitância dispersa ou com tampa adicional atua como um filtro para o sinal TACH.
Michael Karas

Respostas:


9

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. Alterar o viés
  2. Alterar os níveis de tensão
  3. Adicionar histerese "lenta"
  4. Filtrar o ruído

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:

esquemático

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:

esquemático

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:

esquemático

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.


1
Estou sem palavras! Que resposta fantástica, bem explicada, abrangente e útil. Não posso agradecer o suficiente, este é exatamente o tipo de resposta que eu estava esperando. Tanta coisa para aprender aqui e muito grato. Eu preciso ler isso algumas vezes, mas à primeira vista eu posso ver as opções mais claramente agora e você realmente abriu meus olhos. Excelente, simplesmente excelente.
Roger Rowland

2
@RogerRowland Esse é o ponto principal de um site como este. Feliz por ajudar. Quaisquer outras complicações / matemáticas podem ser encontradas no Chat. Eu estou lá regularmente. Só preciso adicionar uma observação de que eu interpretei errado o seu gráfico como kHz em vez de Hz #
21335 Asmyldof

6

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.


"Alguns ventiladores oferecem uma entrada de velocidade PWM separada da sua fonte de + 12V" - Sim, é isso que eu tenho :-) Esta ventoinha de 4 pinos possui um controle PWM separado dos 12V / GND, então essa é a linha que eu estou dirigindo. O outro FET (Q2) está lá apenas para que eu possa desligar completamente o ventilador porque ele tem uma velocidade mínima. Então, eu não estou fazendo o Q2 do Q2, apenas o Q1.
Roger Rowland

Geralmente para uma ventoinha de 4 fios, se for fornecida uma fonte constante de 12V e o fio de entrada PWM for usado para controlar a velocidade, você não verá a frequência de comutação PWM na saída TACH. Somente seria o caso de tentar aplicar o PWM aos cabos de alimentação do ventilador.
Michael Karas

"se o ventilador está puxando-o para +12 com 10k internamente" - Hmmm, ele não é puxado para +12, mas se eu remover meu pullup, ele parece ser puxado pelo ventilador para cerca de 2V. Parece estranho para mim, mas talvez explique por que meus sinais ruidosos estão em torno de 6V em vez de 5V. Não tenho certeza do que fazer agora!
21815 Roger Rowland

D'oh! Desculpe, eu nem percebi no seu gabinete que é um ventilador de 4 fios. E agora eu lembro de suas outras perguntas :). OK, depois de revisar a folha de dados do IRF510, acho que @Michael Karas provavelmente está certo, que o Q2 pode não estar totalmente ativado (e não ajudado por R1 e R2 serem um divisor de 1:10, portanto você não terá mais do que Vgs = 4.5V, para que os seus +12 para o ventilador possam estar diminuindo (muito difícil de ter certeza das suas fotos da mira, é necessário ver dentro do período PWM). Altere R2 para 100k (mais que o suficiente para manter-se desligado quando estiver em movimento). estado) e ver se isso ajuda Se assim for, escolher um MOSFET Vgs-limite mais baixo..
Techydude

1
@Techydude lol, não importa, ainda é um quebra-cabeça. Como disse a Michael, agora removi o Q2 e aterrei o ventilador diretamente, e ainda vejo o mesmo ruído. Eu também tentei fazer eco do TACH para outro pino via INT, mas o Schmitt não o limpa sozinho e a saída ecoada ainda é irregular. Talvez seja porque tudo isso ainda está em uma tábua de pão? Na verdade, 100nF entre o TACH e o Vcc ajudou.
Roger Rowland

3

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.


Obrigado Michael, eu realmente aprecio o seu conselho. Agora tirei completamente o Q2 e aterrei o ventilador diretamente, mas ainda vejo o mesmo ruído TACH em tudo abaixo de 100% de PWM. Bom ponto sobre a colocação do resistor 1K!
21815 Roger

3

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 :

insira a descrição da imagem aqui

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.


Obrigado, isso é semelhante ao que o @techydude sugeriu (embora seu cálculo seja obviamente melhor do que um palpite), mas você sabe por que eu acho uma melhor supressão de ruído com o limite entre TACH e 5V, em vez de TACH e GND? Essa escolha afeta onde o ruído é suprimido (ou seja, na parte alta do pulso ou na parte baixa) ou deve suprimi-lo igualmente?
Roger Rowland

O fato de um limite entre TACH e 5V funcionar melhor do que um limite entre TACH e GND me surpreende. Normalmente, você deve conectar o filtro ao nível de tensão usado como referência em seu sistema e, em 99% dos casos, é GND. Além disso, o VCC e o GND são conectados através de uma fonte de tensão com resistência interna próxima a zero (em comparação com o resistor de 10k), portanto, isso realmente não deve importar.
Dmitry Grigoryev

Após uma análise mais detalhada do esquema, acho que está relacionado ao fato de que sua entrada é de dreno aberto, que produz ruído com bordas assimétricas (quedas rápidas e aumentos suavizados). Se você usar o esquema da resposta de @Asmildof , o sinal barulhento será aplicado à entrada do filtro RC, e não no meio, e deve funcionar como esperado para qualquer tipo de ruído.
Dmitry Grigoryev

Obrigado @Dmitry, o ruído assimétrico que você descreve parece corresponder ao meu traço ampliado, o que faz sentido para mim. Vou trabalhar mais no circuito com base em todos os bons conselhos que recebi aqui. Sua opinião é muito apreciada.
Roger Rowland
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.