22 votos

¿Cómo limpiar una señal ruidosa?

Estoy controlando un ventilador de PC PWM de 4 pines desde un PIC16F684 con la velocidad del ventilador impulsada desde una lectura ADC de un sensor de proximidad. Todo esto funciona bien.

Originalmente no planeaba usar la salida del tacómetro del ventilador, pero como está disponible lo he estado monitoreando con mi 'scope sólo para ver que mi mapeo entre la proximidad y la velocidad del ventilador está funcionando.

Ahora, lo que he notado es que cuando el PWM está ejecutando el ventilador al 100%, la señal del tacómetro (que es un drenaje abierto tirado hacia arriba a través de una resistencia de 10K) es agradable y limpio:

tachclean

Sin embargo, cuando funciona a menos del 100%, es ruidoso:

tachdirty

Acercándose a ese ruido:

tachdirtyzoom

Supongo que está siendo afectado por la señal PWM pero me gustaría entender por qué y cómo para poder limpiarlo si es necesario en el futuro. Realmente me interesa saber qué hay que hacer cuando se ve un ruido así, cómo se encuentra la causa y cómo se "arregla". El osciloscopio se las arregla para disparar bien, así que me pregunto si sólo alimentar al pin de interrupción externa en el PIC (RA2), que es una entrada de Schmitt Trigger con niveles CMOS, entonces no "ver" el ruido y podría, por ejemplo, hacer eco de una señal limpia de otro pin para desvanecer un LED o algo así.

¿Puede alguien explicar en términos generales cómo reconocer y corregir las señales ruidosas? O si eso es demasiado amplio tal vez sólo este problema en particular? También si hay algo malo en mi circuito sería bueno saberlo también. En el esquema de abajo, la señal que estoy mostrando es la entrada TACH a la izquierda del circuito:

schematic

ACTUALIZACIÓN
Después de las útiles sugerencias tanto de @MichaelKaras como de @techydude, he descartado que el Q2 sea la fuente de cualquier problema eliminándolo completamente del circuito y conectando el ventilador a tierra directamente. No hay efecto significativo en el ruido.

Así que codifiqué la interrupción externa en RA2 para que se hiciera eco de una señal "limpia" de un pin de repuesto (RA1 en este caso), lo que ayudó mucho pero seguía parpadeando debido a las falsas interrupciones. (Así que había configurado la interrupción para atrapar el flanco ascendente y luego cambiaba al flanco descendente cuando se disparaba y viceversa, configurando/reiniciando RA1 en consecuencia).

Pero, después de añadir también un condensador de 100nF a través de R3 (como parte de la sugerencia de @techydude), ahora obtengo una salida mucho más estable. La captura de pantalla a continuación es la señal TACH después de la limpieza a través de la entrada Schmitt Triggered RA2 y la re-salida en RA1:

tachclean

1 votos

¿Por qué necesita el FET IRF510 para conmutar la alimentación del ventilador? Conducir el PWM a un ciclo de trabajo del 0% debería apagar el ventilador o ponerlo a su mínima velocidad de funcionamiento.

1 votos

@MichaelKaras Sí, el ventilador tiene una velocidad mínima, por lo que no se para a no ser que cortes la corriente. Por diseño ignora cualquier PWM inferior a ~10% y funciona a 400RPM. Así que uso ese FET para matarlo completamente cuando sea necesario.

2 votos

Ya veo. Pero esto significa que cuando se pretende volver a arrancar el ventilador desde un estado de +12V apagado puede ser necesario arrancarlo con un ciclo de trabajo PWM más alto que el mínimo. He experimentado esto con algunos tipos de ventiladores que necesitan una patada de arranque para conseguir que se inicien de forma fiable en el encendido. Los algoritmos de control de los ventiladores en muchos ordenadores de tipo servidor funcionarán al 100% del ciclo de trabajo durante los primeros 10 a 20 segundos en el arranque para asegurar que todos los ventiladores arranquen correctamente.

10voto

Asmyldof Puntos 9125

Sobre su esquema:

Todo parece estar bien, puedes aumentar el R2 a 10k o incluso 100k, la capacitancia del MOST es tan pequeña que el FAN tendrá mucha más inercia de giro que el retardo de apagado en el MOST, probablemente incluso con 1M. De esta manera la ubicación de tu 100R es irrelevante y mientras esté encendido no pierdes ningún mA. Si nunca mantienes el uC en reset, técnicamente ni siquiera es necesario, ya que tu uC lo pondrá activamente en alto o en bajo.

Para la señal PWM, podrías ver si la hoja de datos permite un pull-up externo a 12V, aunque dudo que haga mucha diferencia de cualquier manera.

Sobre el ruido:

EDIT: He leído mal su trama para kHz, que es estúpido si se piensa en ello, donde es Hz. Algunos de mi historia va a cambiar un poco (como la charla sobre la necesidad de MHz para el trabajo digital), pero la idea general se mantiene.

Dejaré todo el post como está, pero para una señal de 100Hz con ruido de 30kHz, en lugar de 100kHz con ruido de >5MHz (tampoco tenía mucho sentido, ¿verdad?), podrías aumentar las resistencias que interactúan con los condensadores por un factor de 10, y también aumentar los condensadores por un factor de 50 a 100. Con eso conseguirás una frecuencia de filtrado factor 1000 más baja en todos los ejemplos. Pero también está bien sólo aumentar los condensadores por un factor de 10 a 20, para obtener bordes más nítidos o una respuesta más rápida en su señal de interés, ya que 30kHz está muy lejos de 100Hz.

¡Así que considere este post como escrito para altas frecuencias y reduzca las ideas, haciéndolas mucho más fáciles de implementar también! (Especialmente el rechazo digital en 3.)

Fin de la edición

Ya que haces un caso de uso tan bonito para trabajar con métodos de reducción de ruido, intentaré hacer uno que se aplique a tu situación.

A todos los que lean, estén atentos:

Se trata sólo de ruido en una señal digital

En una señal digital puedes suponer que sólo hay dos tensiones que te interesan "on" y "off". Todo lo que hay entre ellas no tiene sentido y pertenece al ruido o es erróneo. En una señal analógica, tienes que conocer todos los niveles de tensión y tienes que hacer un filtrado real con cargas de C, L, etc.

Un problema en tu señal es que los picos de ruido negativo en el nivel alto y los picos de ruido positivo en el nivel bajo se acercan mucho entre sí, por lo que un simple disparador estándar, incluso con nivel ajustable no puede garantizarte absolutamente que nunca te confundas.


Sus opciones:

  1. Cambiar el sesgo
  2. Cambiar los niveles de tensión
  3. Añadir histéresis "lenta"
  4. Filtrar el ruido

1. Cambiar el sesgo:

El positivo tiene picos negativos muy bajos, eso es porque su pull-up no puede ganar del ruido. Lo más fácil que puedes intentar es disminuir esa resistencia. Existe el riesgo de que esto aumente los picos en la señal de apagado también, por lo que no siempre puede funcionar. Pero es muy posible que te dé algo de espacio entre los picos para establecer una simple histéresis.

2. Cambiar los niveles de tensión

Puedes fácilmente, si el ventilador lo permite, cambiar el Tacho a un nivel de voltaje más alto y añadir un estado intermedio:

schematic

simular este circuito - Esquema creado con CircuitLab

Ahora puede haber suficiente espacio entre los picos altos y bajos para que el MOST esté siempre encendido, aunque haya picos negativos y siempre apagado, aunque haya picos positivos. Puede que se necesiten algunos diodos, zeners o resistencias para conseguir el punto de ajuste en la nueva situación, pero si los picos de la señal negativa siguen siendo los que son, no deberían disparar el MOSFET, siempre y cuando no lo sustituyas por uno que tenga un umbral de puerta inferior a 2V.

3. Añadir histéresis "lenta":

Este es un truco que se suele utilizar cuando se sabe que una señal de ruido punzante es de al menos un orden de magnitud mayor que la señal que interesa. Retrasará un poco la señal, por lo que no puede utilizarse en situaciones en las que el momento exacto de un cambio de encendido/apagado sea importante.

Pero para una señal de la que sólo quieres saber la forma o la frecuencia, este es un método muy robusto. Básicamente comienza a disparar cuando hay un voltaje que cruza el umbral, pero sólo completa esa acción cuando se mantiene allí. Hay muchas maneras de construir uno.

Se puede hacer en el controlador (que es más fácil en el recuento de componentes): Usted puede disparar en un flanco, a continuación, la muestra de algunos valores más a la velocidad suficiente para ver el alto entre los picos de ruido, pero no confundir acerca de perder todo un período de baja. A continuación, usted hace un juicio predefinido basado en el conocimiento de su señal y el ruido. Por ejemplo, si pudieras muestrear a 10MHz, podrías capturar 50 muestras y estar seguro de que una frecuencia más alta de 100kHz no será ignorada si vas con la regla de la mayoría. Es decir: al menos 25 tienen que ser bajas para que realmente lo sean. Tus picos son muy finos y la mayoría de las veces es la señal original, por lo que podría funcionar, pero el número de una mayoría se puede ajustar. Esto funcionará con 1MHz y 6 o 7 muestras también, pero será menos de una mayoría real, por lo que puede haber algunos riesgos de nuevo allí. 1MHz al menos debería ser factible con la mayoría de los uCs modernos.

También puedes hacerlo de forma externa: Pero ya es MUCHO más complicado que añadir un simple filtro, sobre todo si miramos el resultado con un uC con algo de histéresis en su entrada ya. Pero es divertido pensar en ello, así que vamos:

schematic

simular este circuito

U1 es cualquier Op-Amp o Comperador adecuado. Los Comperadores son mejores conmutadores, a menudo con mejor oscilación, pero para sub-MHz un OpAmp con una decente oscilación carril/carril lo hará fácilmente.

Aunque este tipo de histéresis se puede construir con al menos una resistencia menos, ésta es más fácil de explicar y, por tanto, más fácil de modificar.

Primero imagínalo sin el condensador:

En primer lugar, ver que el divisor de resistencia está influenciada por la salida de U1, se tire de ella un poco más bajo o más alto a través de la resistencia aparente 20kOhm. Digamos que en la entrada positiva de U1 hay una tensión de 1,1V redondeada hacia abajo cuando su salida es 0, y 3,9V redondeada hacia arriba cuando su salida es 5V.

Si la entrada del tacómetro en estado estacionario es alta, la salida de U1 será baja, debido a la naturaleza inversa de la entrada del tacómetro. Así que la entrada negativa será, de nuevo debido a la resistencia extra de pull-up, de unos 2,3V. Como la entrada positiva es sólo 1,1V, la entrada necesita caer por debajo de 2,2V para que la entrada negativa vea un voltaje más bajo y haga que la salida se invierta.

Cuando la salida se voltea, la entrada negativa verá 3.6V (porque en este instante la señal de entrada es de 2.2V, la salida de U1 es de 5V, así que su medio, hecho por las resistencias de 10k es de unos 3.6V), pero la entrada positiva habrá volteado de 1.1V a 3.9V, así que el negativo sigue estando por debajo de la entrada positiva y la salida seguirá siendo de 5V.

Si la señal ahora se "aborta" rápidamente y vuelve a subir, la salida de U1 volverá a retroceder rápidamente, pero entonces el pico ya ha tenido que caer por debajo de 2,2V, así que es mejor que nada.

Si la señal baja más a 0, la situación estable sólo se hará más fuerte, la entrada negativa caerá a 2,5V (ya que asumimos que el tacómetro del FAN es lo suficientemente fuerte como un pull-down) y la positiva descansará a unos 3,9V.

Ahora la señal tiene que subir por encima de los 2,7V para que la salida cambie de sentido. Es muy probable que el 95% de tus picos sean ignorados ya.

Añadiendo el condensador:

Con el condensador, la señal entrante necesita suministrar suficiente energía durante el tiempo necesario para cargar o descargar el condensador. En efecto, esto ya es un filtro R-C. Cualquier pico que caiga rápidamente y luego se recupere no podrá descargar el condensador.

El valor de C depende, por supuesto, de la señal de origen y de la señal de ruido. He calculado 510pF para una señal de origen de 100kHz frente a una duración de pico de 1us como máximo, pero no he hecho muchos cálculos, es sólo una intuición basada en el tiempo R-C que podría estar cerca de lo que funcionará.

4. Filtrar el ruido

Esto es un poco como filtrar una señal analógica. Puedes utilizar una simple red R-C, como la que se ha comentado en el apartado anterior:

schematic

simular este circuito

Como los picos de ruido son de 1us o menos, no pueden hacer un cambio muy significativo en la tensión del condensador, ya que su tiempo R-C es de 5us. Esto significa que la energía de los picos se aplana hasta un promedio. Ya que ves altos y bajos en los picos, es posible que los promedios estén muy cerca de 0V y 5V, pero eso solo se puede decir con mejores fotos, o solo con un experimento. Como lo alimentas a un pin del uC, el tiempo R-C probablemente será suficiente para verlo como alto o bajo. Esto dará una pequeña distorsión debido a la carga más lenta que la descarga, causada por la resistencia de pull-up. Algunos ajustes de los valores pueden dar un resultado en el que esto sea insignificante.

Si eso no es suficiente, podrías añadir algunos componentes más, pero te estás pasando muy rápidamente cuando tu ruido dominante es al menos 10 veces más "rápido" que tu señal.

Podrías añadir un inductor de 4,7uH en serie con la resistencia para suavizar un poco más los flancos de alta frecuencia, quizás incluso 10uH.

Pero para ser honesto, en el caso de "alimentar a un uC" la única razón para experimentar con L's en una señal de su tipo es encontrar un equilibrio en el que el R es grande, C es pequeño y L sólo ayuda a suavizar algunos flancos, de modo que R2 / R1 será lo suficientemente pequeño como para ignorar la diferencia en el tiempo de subida y bajada. como un R1 de 33k, C de 150pF y un L en serie con R1 de 56uH. O tal vez una cuenta de ferrita en lugar del inductor, depende un poco de la agudeza de sus picos.

Pero ya lo estoy pensando demasiado, diría yo.

1 votos

Me he quedado sin palabras. Qué respuesta tan fantástica, bien explicada, completa y útil. No puedo agradecerles lo suficiente, es exactamente el tipo de respuesta que esperaba. Hay mucho que aprender aquí y estoy muy agradecido. Necesito leer esto varias veces pero a primera vista puedo ver las opciones más claramente ahora y realmente has abierto mis ojos. Excelente, simplemente excelente.

2 votos

@RogerRowland Ese es el objetivo principal de un sitio como este. Feliz de ayudar. Cualquier otra complicación/matematización se puede tener en el Chat. Estoy allí regularmente. Sólo hay que añadir una nota que leí mal su parcela como kHz en lugar de Hz

6voto

brianpeiris Puntos 7693

Este tipo de ruido de un tacómetro de ventilador es común, porque el circuito (que normalmente incluye un sensor de efecto Hall) en el ventilador que está generando la salida del tacómetro está siendo encendido/apagado en su frecuencia PWM (cuando su salida PWM está en cualquier cosa que no sea 100%-On), no sólo el suministro al motor en sí. Seguramente tendrán algo de capacitancia para suavizar el suministro a ese circuito, pero dado, digamos, una fuente de alimentación de ventilador de 12V, mientras haya suficiente capacitancia para mantener varios voltios entre los períodos mínimos de apagado del PWM, eso es suficiente tanto para conducir el sensor de efecto Hall como para pull-up la salida del tacómetro (si el ventilador incluye su propio pull-up en la salida del tacómetro), para proporcionar una señal de salida recuperable. Sí, los ventiladores son un lío cuando se alimenta por PWM. Algunos ventiladores ofrecen una entrada de velocidad PWM separada de su alimentación de +12V.

Su PWM parece ser de unos 27kHz. Así que lo bueno en esta situación específica es que tu salida del tacómetro al 100% parece ser de unos 800Hz, que es < 1/30 de la frecuencia de tu PWM, así que filtrar esta salida del tacómetro para deshacerse de la mayor parte del ruido PWM es fácil y vale la pena hacerlo. Es tarde aquí, así que he estado trabajando en los cálculos, pero debido a que es de drenaje abierto y es su tensión de alimentación (en el ventilador) la que está siendo molestada por el PWM, una tapa entre el tacómetro y el carril de +12V (no la salida PWM de su circuito de accionamiento del ventilador) probablemente será una mejor opción que una tapa en el tacómetro a tierra. Pruebe ambos y vea. Empieza con una gorra cerámica de 100n de voltaje apropiado y ve cómo se ve.

Con una entrada Schmigger en el PIC, podrías incluso salirte con la tuya sin hacer ningún tipo de filtrado de esta salida del tacómetro antes de ponerla en tu PIC, pero tienes ese diferencial de frecuencias que te permitirá fácilmente recorrer un largo camino para limpiarlo.

Un posible problema con tu manejo de la señal del tacómetro desde el ventilador: si el ventilador está subiendo a +12 con un 10k internamente (algunos lo hacen, otros no) y también estás subiendo la señal del tacómetro a tu carril de +5V, ¡entonces en realidad la estás bajando! Hay varias configuraciones de circuitos para hacer frente a esto, dependiendo de la tensión de alimentación del ventilador, lo fuerte que es el pull-up, etc. Intenta medirlo con tu multímetro y dinos.

0 votos

"Algunos ventiladores ofrecen una entrada de velocidad PWM independiente de su alimentación de +12V" - Sí, eso es lo que tengo :-) Este ventilador de 4 pines tiene un control PWM que está separado de los 12V/GND, así que esa es la línea que estoy manejando. El otro FET (Q2) sólo está ahí para que pueda apagar el ventilador completamente porque tiene una velocidad mínima. Así que no estoy PWM'ing Q2, sólo Q1.

0 votos

Generalmente para un ventilador de 4 hilos, si se le da una alimentación constante de 12V y se utiliza el hilo de entrada PWM para controlar la velocidad no se vería la frecuencia de conmutación PWM en la salida TACH. Sólo sería el caso de intentar aplicar el PWM a los cables de alimentación del ventilador.

0 votos

"si el ventilador está tirando hasta +12 con un 10k internamente" - Hmmm, no llega a +12, pero si quito mi pullup parece que el ventilador lo sube a unos 2V. Me parece extraño, pero tal vez explica por qué mis señales ruidosas es alrededor de 6V en lugar de 5V. No sé qué hacer ahora.

3voto

Bernd Puntos 61

Una posible fuente de ruido en la señal TACH puede deberse a que el FET IRF150 no tiene una impedancia ON suficientemente baja. Esto podría deberse a que la RdsON del FET es bastante alta o a que el FET no está completamente en ON con la tensión de accionamiento de la puerta proporcionada.

Como la corriente del ventilador se enciende y apaga con la señal PWM, habrá una caída a través de la resistencia del FET que hace que la referencia "GND" del ventilador suba y baje y se traduzca en el ruido visto en la señal TACH.

Puedes comprobar esto para ver si el efecto que describo es el caso poniendo el cable GND del osciloscopio en el drenaje del FET y luego mirar la señal TACH. La señal se vería mucho más limpia.

La solución sería seleccionar un FET con una RdsON mucho más baja cuando se alimenta con un accionamiento de puerta que proporciona su sistema.

Otra idea posible es utilizar un P-FET para conmutar el cable de +12V del ventilador en lugar del cable de GND.

Tenga en cuenta que la disposición de la resistencia de puerta que está utilizando hace que pierda parte de su potencial de impulso de puerta. Mueve la resistencia de 1K al otro lado de la de 100 ohmios.

0 votos

Gracias Michael, aprecio mucho tus consejos. Ahora he desenganchado Q2 completamente y conectado a tierra el ventilador directamente, pero todavía veo el mismo ruido TACH en todo por debajo de 100% PWM. ¡Buen punto sobre la colocación de la resistencia de 1K sin embargo!

3voto

Mark0978 Puntos 495

Esto parece un trabajo para un filtro de paso bajo. Necesitas mantener la señal útil con f 1 alrededor de 1 kHz y eliminar la señal ofensiva con f 2 cerca de 25 kHz. La frecuencia de corte puede elegirse como media geométrica de f 1 y f 2 (subóptima pero sencilla):

f c \=sqrt(1*25) = 5 kHz.

Asumiendo que un simple filtro RC será suficiente, y que ya tienes la resistencia en el circuito TACH (R 3 \= 10 kOhm), debe calcularse el valor del condensador adecuado para que coincida con los 5 kHz tiempo costante :

enter image description here

C = 1/(2 * pi * fc * R)=1/(6,28 * 5000 * 10000)=3,2*10 -9 F.

Así que todo lo que necesitas hacer es soldar un condensador de 3nF entre la línea TACH y la tierra. Atenuará el ruido de alta frecuencia por un factor de 20 o más, lo que debería ser suficiente para tu aplicación.

0 votos

Gracias, eso es similar a lo que sugirió @techydude (aunque tu cálculo es obviamente mejor que una suposición), pero ¿sabes por qué encuentro una mejor supresión de ruido con la tapa entre TACH y 5V en lugar de TACH y GND? ¿Afecta esa elección a donde el ruido se suprime (es decir, en la parte alta del pulso o en la parte baja) o debe suprimirlo por igual?

0 votos

El hecho de que una tapa entre TACH y 5V funcione mejor que una tapa entre TACH y GND me sorprende. Normalmente, se supone que debes conectar el filtro al nivel de tensión que se utiliza como referencia en tu sistema, y en el 99% de los casos es GND. Además, VCC y GND se conectan a través de una fuente de voltaje con una resistencia interna cercana a cero (comparada con una resistencia de 10k), así que no debería importar.

0 votos

Después de una mirada más cercana al esquema, creo que está relacionado con el hecho de que tu entrada es de drenaje abierto, lo que produce ruido con bordes asimétricos (caídas rápidas y subidas suavizadas). Si utilizas el esquema de @Asmildof En la respuesta de la empresa, la señal ruidosa se aplicará a la entrada del filtro RC y no en medio de él, y debería funcionar como se espera para cualquier tipo de ruido.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X