¿Cómo limpiar una señal ruidosa?

19

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

Originalmente no estaba planeando usar la salida del tacómetro del ventilador, pero como está disponible, la he estado monitoreando con mi alcance solo para ver que mi mapeo entre la proximidad y la velocidad del ventilador funciona.

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

tachclean

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

sucio

Acercándonos a ese ruido:

tachdirtyzoom

Supongo que está siendo afectado por la señal PWM, pero me gustaría entender por qué y cómo podría limpiarlo si es necesario en el futuro. Realmente estoy interesado en lo que debe hacer cuando ve un ruido como este, cómo encuentra la causa y cómo la "arregla". El alcance logra disparar bien, así que me pregunto si solo lo alimento al pin de interrupción externo en el PIC (RA2), que es una entrada de disparador Schmitt con niveles de CMOS, entonces no "veré" el ruido y yo podría, por ejemplo, hacer eco de una señal limpia de otro pin para atenuar un LED o algo así.

Entonces, ¿alguien puede explicar en términos generales cómo reconocer y corregir señales ruidosas? ¿O si eso es demasiado amplio, tal vez solo este problema en particular? Además, si hay algún problema con mi circuito, sería bueno saberlo también. En el siguiente esquema, la señal que estoy mostrando es la entrada TACH a la izquierda del circuito:

esquemático

ACTUALIZACIÓN
Después de sugerencias útiles de @MichaelKaras y @techydude, descarté Q2 como la fuente de cualquier problema al eliminarlo del circuito por completo y conectar a tierra el ventilador directamente. Sin efecto significativo sobre el ruido.

Entonces codifiqué la interrupción externa en RA2 para hacer eco de una señal "limpia" de un pin de repuesto (RA1 en este caso), lo que ayudó mucho pero todavía parpadeaba debido a falsas interrupciones. (Así que configuré la interrupción para atrapar el borde ascendente y luego cambié al borde descendente cuando se activó y viceversa, configurando / restableciendo RA1 en consecuencia).

Pero, después de agregar 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 disparada Schmitt RA2 y la nueva salida en RA1:

tachclean

Roger Rowland
fuente
1
¿Por qué tiene la necesidad de que el IRF510 FET cambie la alimentación del ventilador? Conducir el PWM a un ciclo de trabajo del 0% debe apagar el ventilador o alcanzar su velocidad mínima de funcionamiento.
Michael Karas
1
@MichaelKaras Sí, el ventilador tiene una velocidad mínima, por lo que no se detiene a menos que corte la corriente. Por diseño, ignora cualquier PWM inferior al ~ 10% y se ejecuta a 400 RPM. Así que uso ese FET para matarlo por completo cuando sea necesario.
Roger Rowland
2
Veo. Pero sí significa que cuando tiene la intención de reiniciar el ventilador desde un estado apagado de + 12V, es posible que deba arrancarlo con un ciclo de trabajo PWM más alto que el mínimo. He experimentado esto con algunos tipos de ventiladores en el sentido de que necesitan un arranque rápido para que puedan arrancar de manera confiable al encenderse. Los algoritmos de control del ventilador en muchas computadoras de tipo servidor se ejecutarán al 100% del ciclo de trabajo durante los primeros 10 a 20 segundos al inicio para garantizar que todos los ventiladores se inicien correctamente.
Michael Karas
2
En casi todos los subsistemas de ventiladores en los que he trabajado, he conectado la señal TACH a una red de resistencia que sesga la señal del riel de +12 V y luego tiene un par de resistencias divisorias además que llevan la señal TACH a la + Se necesitan 5 o + 3.3V niveles para el sistema de monitoreo. Una pequeña tapa a través de la resistencia inferior del divisor puede ayudar a filtrar los picos de ruido en la señal TACH.
Michael Karas
1
El uso principal del uso del riel de +12 V para polarizar la señal TACH es que proporciona aislamiento entre las señales de voltaje digital de bajo nivel de +12 V del sistema de control. Tres consideraciones son: 1) Se pueden pellizcar los cables del ventilador entre las partes del chasis y se pueden producir cortos entre los cuatro cables. 2) Los ventiladores en un ambiente polvoriento podrían acumular carga estática y las resistencias pueden ayudar a mantener cualquier descarga ESD fuera de la entrada del detector TACH. 3) La constante de tiempo RC del divisor con capacitancia parásita o con tapa agregada actúa como un filtro para la señal TACH.
Michael Karas

Respuestas:

9

Sobre su esquema:

Todo parece estar bien, puede aumentar el R2 a 10k o incluso 100k, la capacitancia del MOST es tan pequeña que el VENTILADOR tendrá mucha más inercia de giro que el retraso de apagado en el MOST, probablemente incluso con 1M. De esa manera, la ubicación de su 100R es irrelevante y, mientras está encendido, no desperdicia ningún mA. Si nunca mantiene presionado de uC en el reinicio, técnicamente ni siquiera es necesario, ya que su uC lo empujará activamente hacia arriba o hacia abajo.

Para la señal PWM, podría ver si la hoja de datos permite un pull-up externo a 12V, aunque dudo que haga una gran diferencia en ambos sentidos.

Sobre el ruido:

EDITAR: Leí mal su trama para kHz, lo cual es estúpido si lo piensa, donde es Hz. Parte de mi historia cambiará un poco (como la charla sobre la necesidad de MHz para el trabajo digital), pero la idea general sigue siendo.

Dejaré toda la publicación tal como está, pero para una señal de 100Hz con ruido de 30kHz, en lugar de 100kHz con> 5MHz de ruido (tampoco tenía sentido, ¿verdad?), Podría aumentar las resistencias que interactúan con los condensadores en un factor de 10, y también aumentar los condensadores en un factor de 50 a 100. Eso le dará un factor 1000 de frecuencia de filtrado más baja en todos los ejemplos. Pero también está bien simplemente aumentar los condensadores en 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.

¡Considere esta publicación como escrita para frecuencias altas y reduzca las ideas, haciéndolas mucho más fáciles de implementar también! (Especialmente el rechazo digital en 3.)

Fin de Editar

Dado que es un buen caso de uso para trabajar con métodos de reducción de ruido, intentaré crear uno que se aplique a su situación.

Para cualquiera que lea, tenga en cuenta:

Esto solo se trata de ruido en una señal digital

En una señal digital, puede suponer que solo hay dos voltajes que le interesan "encendido" y "apagado". Cualquier cosa intermedia no tiene sentido y pertenece al ruido o al mal. En una señal analógica, debe saber acerca de cada nivel de voltaje y debe realizar un filtrado real con cargas de C, L, etc.

Un problema en su 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, por lo que un simple disparador estándar, incluso con un nivel ajustable, no puede garantizarle absolutamente que nunca obtendrá confuso.


Sus opciones:

  1. Cambiar el sesgo
  2. Cambiar los niveles de voltaje
  3. Agregar histéresis "lenta"
  4. Filtrar el ruido

1. Cambiar el sesgo:

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

2. Cambiar los niveles de voltaje

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

esquemático

simular este circuito : esquema creado con CircuitLab

Ahora podría haber suficiente espacio entre los picos altos y bajos para asegurarse de que el MOST esté siempre encendido, incluso cuando haya picos negativos y siempre apagados, incluso si hay picos positivos. Puede tomar algunos diodos, zeners o resistencias para obtener el punto de ajuste en la nueva situación, pero si los picos en la señal negativa permanecen como están, no deberían activar el MOSFET, siempre y cuando no lo haga. reemplácelo con uno que tenga un umbral de puerta inferior a 2V.

3. Agregue Histéresis "lenta":

Este es un truco que se usa comúnmente cuando sabes que una señal de ruido puntiagudo es de al menos un orden de magnitud mayor que la señal que te interesa. Retrasa un poco la señal, por lo que no se puede usar en situaciones donde el momento exacto de un cambio de encendido / apagado es importante.

Pero para una señal en la que solo desea conocer la forma o frecuencia de la misma, este es un método muy robusto. Básicamente comienza a dispararse cuando hay un voltaje que cruza el umbral, pero solo completa esa acción cuando permanece allí. Hay muchas formas de construir uno.

Puede hacerlo en el controlador (que es el más fácil en el recuento de componentes): puede disparar en un flanco, luego muestrear algunos valores más a la velocidad suficiente para ver el nivel alto entre picos de ruido, pero no confundir si pierde un período completo de nivel bajo. Luego, realiza un juicio predefinido basado en el conocimiento de su señal y ruido. Por ejemplo, si pudiera muestrear a 10MHz, podría capturar 50 muestras y asegurarse de que una frecuencia más alta de 100kHz no será ignorada si sigue la regla de la mayoría. Es decir: al menos 25 deben ser bajos para que sea realmente bajo. Sus picos son muy delgados y la mayoría de las veces es la señal original, por lo que podría funcionar, pero se puede ajustar el número de una mayoría. 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 nuevamente.

También puede hacerlo externamente: pero ya es MUCHO más complicado que agregar un filtro simple, especialmente cuando mira el resultado con un uC con cierta histéresis en su entrada. Pero es divertido pensar en eso, así que:

esquemático

simular este circuito

U1 es cualquier Op-Amp o Competidor adecuado. Los competidores son mejores conmutadores, a menudo con un mejor swing, pero para sub-MHz, un OpAmp con un buen rail / rail swing funcionará fácilmente.

Si bien este tipo de histéresis se puede construir con al menos una resistencia menos, esta es más fácil de explicar y, como tal, más fácil de modificar.

Primero imagínelo sin el condensador:

Primero, vea que el divisor de resistencia está influenciado por la salida de U1, lo empujará un poco más bajo a más alto a través de la resistencia aparente de 20kOhm. Digamos que en la entrada positiva de U1 hay un voltaje de 1.1V redondeado hacia abajo cuando su salida es 0, y 3.9V redondeado hacia arriba cuando su salida es 5V.

Si la entrada Tacho de arranque en estado estable es alta, la salida de U1 será baja, debido a la naturaleza inversora de la entrada al Tacho. Entonces, la entrada negativa será, nuevamente debido a la resistencia extra pull-up, aproximadamente 2.3V. Dado que la entrada positiva es de solo 1.1V, la entrada debe caer por debajo de 2.2V para que la entrada negativa vea un voltaje más bajo y haga que la salida se voltee.

Cuando la salida se voltea, la entrada negativa verá 3.6V (porque en este instante la señal de entrada es 2.2V, la salida de U1 es 5V, por lo que su punto medio, hecho por las resistencias de 10k es aproximadamente 3.6V), pero el positivo la entrada habrá cambiado de 1.1V a 3.9V, por lo que el negativo todavía está por debajo de la entrada positiva y la salida se mantendrá 5V.

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

Si la señal baja aún más a 0, la situación estable solo se volverá más fuerte, la entrada negativa caerá a 2.5V (dado que asumimos que el tacho del FAN es lo suficientemente fuerte como un pull-down) y lo positivo descansará a aproximadamente 3.9 V.

Ahora la señal necesita elevarse por encima de 2.7V para que la salida se invierta. Es muy probable que el 95% de tus picos ya sean ignorados.

Agregar el condensador:

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

El valor de C, por supuesto, depende de la señal fuente y la señal de ruido. He estacionado la bola 510pF para una señal de fuente de 100 kHz frente a la duración del pico de 1us como máximo, pero realmente no hice muchas matemáticas, es solo una sensación instintiva basada en el tiempo RC de que esto podría estar cerca de lo que funcionará.

4. Filtrar el ruido

Esto es un poco como simplemente filtrar una señal analógica. Puede usar una red RC simple, como se discutió en la sección anterior:

esquemático

simular este circuito

Como los picos de ruido son iguales o inferiores a 1us, no pueden hacer un cambio muy significativo en el voltaje del condensador, ya que su tiempo RC es de 5us. Esto significa que la energía en los picos se aplana a un promedio. Dado que ve picos altos y bajas en los picos, incluso es posible que los promedios estén muy cerca de 0V y 5V, pero eso solo se puede decir con mejores imágenes o solo con un experimento. Como lo alimenta a un pin uC, el tiempo RC probablemente será suficiente para verlo como alto o bajo. Esto dará una pequeña distorsión debido a la carga más lenta que a la descarga, causada por la resistencia pull-up. Algunos ajustes de valores pueden producir un resultado en el que eso es insignificante.

Si eso no es suficiente, podría agregar algunos componentes más, pero está exagerando rápidamente cuando su ruido dominante es al menos 10 veces "más rápido" que su señal.

Puede agregar un inductor de 4.7uH en serie con la resistencia para suavizar algunos flancos de alta frecuencia, tal vez incluso 10uH.

Pero para ser honesto, en el caso de "alimentarlo a una uC", la única razón para experimentar con L en una señal de su tipo es encontrar un equilibrio en el que la R sea grande, C sea pequeña y L simplemente ayude 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 nitidez de sus picos.

Pero ya pensándolo demasiado, diría.

Asmyldof
fuente
1
¡Estoy sin palabras! Qué respuesta fantástica, bien explicada, completa y útil. No puedo agradecerles lo suficiente, este es exactamente el tipo de respuesta que esperaba. Hay tanto que aprender aquí y muy agradecido. Necesito leer esto varias veces, pero a primera vista puedo ver las opciones más claramente ahora y realmente me has abierto los ojos. Excelente, simplemente excelente.
Roger Rowland
2
@RogerRowland Ese es el punto principal de un sitio como este. Feliz de ayudar. Cualquier otra complicación / matemática se puede tener en Chat. Estoy allí regularmente. Solo necesito agregar una nota de que
leí
6

Un ruido como este proveniente de un tacho de ventilador es común, porque el circuito (que generalmente incluye un sensor de efecto Hall) en el ventilador que genera la salida de tacho se está encendiendo / apagando en su frecuencia PWM (cuando su salida PWM está en cualquier otra cosa 100% -On), no solo el suministro al motor en sí. Seguro que tendrán algo de capacidad para suavizar el suministro a ese circuito, pero dada, digamos, una fuente de alimentación de ventilador de 12V, siempre que haya suficiente capacidad para mantener varios voltios entre los períodos de apagado PWM mínimos, eso es suficiente para que ambos conduzcan el Hall- Sensor de efecto y pull-up de la salida de tacho (si el ventilador incluye su propio pull-up en la salida de tacho), para proporcionar una señal de salida recuperable. Sí, los fanáticos son desordenados cuando PWM su suministro. Algunos ventiladores ofrecen una entrada de velocidad PWM separada de su suministro de + 12V.

Su PWM parece ser de unos 27 kHz. Entonces, lo bueno en esta situación específica es que su salida de tacho al 100% parece ser de aproximadamente 800Hz, que es <1/30 de la frecuencia de su PWM, por lo que filtrar esta salida de tacho para eliminar la mayor parte del ruido PWM es fácil y vale la pena hacerlo. Es tarde aquí, así que CBF trabajé a través de los calcs, pero debido a que es de drenaje abierto y es su voltaje de suministro pull-up (en el ventilador) que está siendo molestado por PWM, una tapa entre el tacho y el riel de + 12V (no el PWM salida de su circuito de impulsión del ventilador) probablemente será una mejor opción que un tapón en el tacho a tierra. Prueba ambos y verás. Comience con una tapa de cerámica de 100n de voltaje apropiado y vea cómo se ve.

Con una entrada de Schmigger en el PIC, incluso podría escapar sin filtrar esta salida de tacho antes de ponerla en su PIC, pero tiene ese diferencial de frecuencia que le permitirá recorrer un largo camino hacia la limpieza. arriba.

Un posible problema con su manejo de la señal de tacho desde el ventilador aunque: si el ventilador lo eleva hasta +12 con un 10k internamente (algunos lo hacen, otros no) y también está elevando la señal de tacho a su Carril de + 5V, ¡entonces lo estás tirando hacia abajo! Hay varias configuraciones de circuito para lidiar con esto, dependiendo del voltaje de suministro del ventilador, qué tan fuerte es el pull-up, etc. Intente medirlo con su multímetro y avísenos.

Techydude
fuente
"Algunos ventiladores ofrecen una entrada de velocidad PWM que está separada de su suministro de + 12V" - Sí, eso es lo que tengo :-) Este ventilador de 4 pines tiene un control PWM que está separado del 12V / GND, así que esa es la línea I Estoy conduciendo. El otro FET (Q2) solo está allí, así que puedo apagar el ventilador por completo porque tiene una velocidad mínima. Así que no estoy PWM'ing Q2, solo Q1.
Roger Rowland
En general, para un ventilador de 4 hilos, si recibe un suministro constante de 12V y el cable de entrada PWM se usa para controlar la velocidad, no vería la frecuencia de conmutación PWM en la salida TACH. Solo sería el caso de tratar de aplicar el PWM a los cables de alimentación del ventilador.
Michael Karas
"si el ventilador lo eleva a +12 con 10k internamente" - Hmmm, no se eleva a +12, pero si quito mi pullup parece que el ventilador lo eleva a aproximadamente 2V. Me parece extraño, pero tal vez explica por qué mis señales ruidosas son de alrededor de 6V en lugar de 5V. ¡No estoy seguro de qué hacer ahora!
Roger Rowland
D'oh! Lo siento, ni siquiera noté en tu sch que es un ventilador de 4 cables. Y ahora recuerdo tus otras preguntas :). Bien, después de haber revisado la hoja de datos del IRF510, creo que @Michael Karas tiene más probabilidades de estar en lo cierto, que Q2 podría no estar completamente activado (y que R1 & R2 no lo ayuda al ser un divisor 1:10, por lo que no obtendrá más que Vgs = 4.5V, por lo que su +12 al ventilador puede estar caído (demasiado difícil para estar seguro de sus disparos de alcance, necesita ver dentro del período PWM). Cambie R2 a 100k (más que suficiente para evitar cuando está en tri- estado) y ver si eso ayuda. Si es así, elija un MOSFET de umbral Vgs más bajo.
Techydude
1
@Techydude lol, no importa, todavía es un rompecabezas. Como le dije a Michael, ahora eliminé Q2 y conecté a tierra el ventilador directamente, y todavía veo el mismo ruido. También intenté hacer eco del TACH a otro pin a través de INT, pero el Schmitt no lo limpia lo suficiente por sí solo y la salida con eco sigue siendo irregular. ¿Quizás es porque todo esto todavía está en una placa de pruebas? En realidad, 100nF entre TACH y Vcc ha ayudado.
Roger Rowland
3

Una posible fuente de ruido en la señal TACH puede deberse a que el IRF150 FET no tiene una impedancia de encendido suficientemente baja. Esto podría deberse a que el FET RdsON es bastante alto o que el FET no está completamente ENCENDIDO con el voltaje de accionamiento de la puerta proporcionado.

A medida que la corriente FAN se enciende y se apaga con la señal PWM, habrá una caída en la resistencia FET, lo que hace que la referencia "GND" del ventilador se mueva hacia arriba y hacia abajo y se traduzca en el ruido que se ve en la señal TACH.

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

La solución sería seleccionar un FET con un RdsON mucho más bajo cuando se suministra con una unidad de compuerta que proporciona su sistema.

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

Tenga en cuenta que la disposición de resistencia de compuerta que está utilizando hace que pierda parte de su potencial accionamiento de compuerta. Mueva la resistencia de 1K al otro lado de los 100 ohmios.

Michael Karas
fuente
Gracias Michael, realmente aprecio tu consejo. Ahora he desenganchado Q2 por completo y conecté a tierra el ventilador directamente, pero aún veo el mismo ruido TACH en todo por debajo del 100% PWM. ¡Buen punto sobre la colocación de la resistencia de 1K sin embargo!
Roger Rowland
3

Esto suena como un trabajo para un filtro de paso bajo. Debe 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 se puede elegir como media geométrica de f 1 y f 2 (subóptima pero simple):

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

Suponiendo que un filtro RC simple será suficiente, y ya tiene la resistencia en el circuito TACH (R 3 = 10 kOhm), el valor del condensador apropiado debe calcularse para que coincida con el costo temporal de 5 kHz :

ingrese la descripción de la imagen aquí

C = 1 / (2 * pi * fc * R) = 1 / (6.28 * 5000 * 10000) = 3.2 * 10 -9 F.

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

Dmitry Grigoryev
fuente
Gracias, eso es similar a lo que sugirió @techydude (aunque su cálculo es obviamente mejor que una estimación aproximada), pero ¿sabe por qué encuentro una mejor supresión de ruido con el límite entre TACH y 5V en lugar de TACH y GND? ¿Esa elección afecta dónde se suprime el ruido (es decir, en la parte alta del pulso o la parte baja) o debería suprimirlo por igual?
Roger Rowland
El hecho de que un límite entre TACH y 5V funcione mejor que un límite entre TACH y GND me sorprende. Normalmente, se supone que debe conectar el filtro al nivel de voltaje que se utiliza como referencia en su sistema, y ​​en el 99% de los casos es GND. Además, VCC y GND están conectados a través de una fuente de voltaje con resistencia interna cercana a cero (en comparación con la resistencia de 10k), por lo que realmente no debería importar.
Dmitry Grigoryev
Después de un análisis más detallado del esquema, creo que está relacionado con el hecho de que su entrada es de drenaje abierto, lo que produce ruido con bordes asimétricos (caídas rápidas y subidas suaves). Si usa el esquema de la respuesta de @Asmildof , la señal ruidosa se aplicará a la entrada del filtro RC en lugar de en el medio, y debería funcionar como se espera para cualquier tipo de ruido.
Dmitry Grigoryev
Gracias @Dmitry, el ruido asimétrico que describe parece coincidir con mi traza ampliada, por lo que tiene sentido para mí. Haré un poco más de trabajo en el circuito basado en todos los buenos consejos que he recibido aquí. Su aportación es muy apreciada.
Roger Rowland