4 votos

¿Por qué cambiar la frecuencia PWM del microcontrolador?

¿Cuáles son exactamente los pros y los contras de cambiar la frecuencia PWM?

No creo que necesite cambiar ninguna frecuencia PWM en este momento, pero como no conozco los beneficios de hacerlo, ¿cómo puedo saber realmente si es útil para mí?

Me gustaría tener una respuesta general (que yo y otras personas que lean este post puedan aplicar en diferentes situaciones), pero si alguien quiere algunos datos para responder, aquí están los del proyecto en el que estoy trabajando en este momento:

  • ATmega328 microcnotroller @16Mhz (está solo, no está en una placa Arduino)
  • 4 pequeños motores de escobillas independientes, cada uno con una hélice (diámetro de la hélice: unos 6 cm), en los pines 3,5,6,11, controlados por un trasnsistor BUK9840-55 ( hoja de datos )
  • un simple receptor de RF se coloca cerca y necesita recibir una señal de 433MHz (la comunicación RF es bastante lenta (500bits/seg), y no necesita ser necesita ser muy fiable).

EDIT: ¿cómo influye la velocidad PWM en la comunicación RF?

0 votos

La pregunta obvia es ¿qué frecuencia PWM estás usando por defecto? Si podemos usar tu proyecto como ejemplo podemos poner la respuesta en un contexto útil.

0 votos

Estoy usando un PWM de 490Hz

3voto

DmitrySandalov Puntos 129

Las unidades PWM, normalmente, funcionan de la siguiente manera, o equivalente¹.

Preparados:

  1. un valor de salida inicial, es decir, alto o bajo y
  2. el "valor de reinicio del contador", al que se reinicia el contador tras alcanzar
  3. el "valor máximo del contador", así como
  4. el "counter flip value", en el que se conmuta el estado de salida

Después de eso, sólo tienes que dejar que el contador funcione - por ejemplo, puedes poner

  • estado inicial alto,
  • restablecer el valor 0,
  • valor máximo 100,
  • umbral de volteo 25

Entonces su contador comenzaría en 0, y se incrementaría una vez cada ciclo de reloj, y en 25, la salida se pondría en baja, hasta que el contador llegara a 100 y se reiniciara a 0. De esta manera, la salida sería alta durante 25 unidades de tiempo, y baja durante 75 - un ciclo de trabajo de \$\frac14=25\%\$ .

Ahora, la frecuencia PWM se define típicamente como el tiempo entre el reinicio y el alcance del máximo.

Por lo tanto, este es un aspecto inherente a la elección de una frecuencia PWM: si hay 100 unidades de tiempo (que, por cierto, son típicamente ticks de reloj de algo como el reloj de la CPU dividido por algunos \$N\$ ), su "granularidad" del ciclo de trabajo no puede ser mejor que el 1%.

Por otro lado, si, por ejemplo, fijas el valor máximo en 10 6 Entonces podrías obtener una resolución súper buena en el ciclo de trabajo, pero eso no te ayuda, porque ahora la salida podría ser baja y alta durante tanto tiempo que cualquier cosa que manejes con el PWM simplemente ve "encendido" y "apagado", a menos que hagas grandes esfuerzos (construir un filtro de paso bajo mecánicamente grande) para "suavizar" las cosas, y entonces perderías toda la capacidad de ajustar rápidamente el ciclo de trabajo (porque el filtro también suavizará tu ajuste).

Los PWMs se utilizan para cosas muy diferentes - por ejemplo, para generar un voltaje analógico, como se mencionó anteriormente, mediante el filtrado de paso bajo. En ese caso, usar una frecuencia alta puede ser beneficioso, porque tu filtro de paso bajo, que necesita cortar la frecuencia del PWM, es mucho más fácil de construir cuando esa frecuencia es alta. Por otro lado, en los circuitos donde se trabaja con voltajes analógicos sensibles, tener una señal PWM de conmutación rápida es peligroso, debido a que esa señal puede acoplarse.

Otros usos son, y probablemente es lo que hace tu motor internamente, más digitales: el PWM simplemente controla durante cuánto tiempo se enciende o apaga algo, por ejemplo, la fuente de alimentación interna en los motores brushless de corriente continua (que son, de hecho, motores de corriente alterna trifásica que tienen una alimentación que genera tres señales sinusoidales a partir de la tensión continua que toma). Para estas aplicaciones, como se ha dicho, la frecuencia PWM no debe ser demasiado baja, porque entonces el motor se parará, arrancará, se detendrá, , pero no debe ser más alta que las frecuencias que la fuente interna utiliza para generar las tensiones de CA.

Sin embargo, otros usos son en realidad usos de generación de señales - por ejemplo, supongamos que tienes un microcontrolador con un reloj de CPU de 16 MHz, y quieres generar un conjunto de frecuencias diferentes (por ejemplo, tienes un módem que utiliza el cambio de frecuencia como modulación, por lo que una frecuencia significa "0", la otra significa "1") - en esa aplicación, podrías utilizar un ciclo de trabajo fijo, ¡y lo que realmente te interesa es la frecuencia PWM!

También hay dispositivos que comunican los valores de medición por ciclo de trabajo PWM - o que toman el ciclo de trabajo PWM como entrada, por ejemplo estos "neopixels" de los que habrás oído hablar. Por supuesto, su controlador de interfaz tiene un rango de tiempo específico, así que tienes que configurar tu frecuencia PWM para que las cosas funcionen.


¹ esto, por ejemplo, asume que puedes establecer tanto el límite superior como el inferior, y que el contador cuenta hacia arriba - no hay razón para que todo eso sea cierto, puedes implementar PWM contando hacia abajo, o no teniendo un límite superior variable, pero eso son detalles.

2voto

jason saldo Puntos 5036

El modo PWM de Arduino funciona a 490 (o 980) Hz, dependiendo de la placa, y está pensado para aplicaciones sencillas como la atenuación de LEDs y la DAC (conversión digital-analógica), y para jugar con motores baratos (de alta resistencia/inductancia). Mantener la frecuencia baja y fija hace que este tipo de circuitos sean consistentes en todas las placas Arduino, lo que reduce la curva de aprendizaje, que es en cierto modo la idea de la plataforma.

Considere el ejemplo del DAC. Si permites que el usuario juegue fácilmente con la frecuencia, tendría que recalcular los valores de R y C para filtrar efectivamente la nueva frecuencia PWM.

El ejemplo de la atenuación del LED podría beneficiarse de ser capaz de ejecutar el PWM más lento, pero se puede obtener el mismo efecto por bit-banging y el uso de la función de retardo (ejecutarlo 5s en, 5s fuera; a continuación, 500ms en, 500ms fuera; a continuación, 50ms en, 50ms fuera).

Cuando quieres hacer cosas "útiles" con PWM, necesitas tener control de frecuencia. El control de motores, por ejemplo. La frecuencia óptima de PWM va a depender del propio motor (inductancia y resistencia) y a menudo es mejor probar empíricamente en lugar de buscar un valor en una hoja de datos. Las pérdidas en el controlador también jugarán un papel importante.

Las fuentes de alimentación conmutadas son otro ejemplo. La frecuencia de conmutación de un convertidor accionado por PWM afectará tanto a la corriente de pico como a las pérdidas de conmutación en los elementos de accionamiento.

Para tu ejemplo específico, yo consideraría pasar por alto las cosas habituales de PWM de Arduino y hablar con el hardware, y experimentar con qué frecuencia hace que tus motores y el FET del conductor sean felices. Vigila la zona de funcionamiento seguro del FET y asegúrate de que no se calienta demasiado.

2voto

DmitrySandalov Puntos 129

Has añadido la pregunta:

EDIT: ¿cómo influye la velocidad PWM en la comunicación RF?

Bien, supongamos que estamos tratando con PWM de ciclo de trabajo del 50% - ondas cuadradas. Es fácil demostrar que esto se aplica a otros ciclos de trabajo con pequeñas modificaciones en el resultado.

Una onda cuadrada está compuesta por senos:

sines

y si sumas estos senos ponderados, te acercas a la onda cuadrada:

sum of sine

Exactamente hablando, $$ f_\text{square}(x) = \sum\limits_{n=0}^{\infty} \frac1{2n+1} \sin\left(2\pi (2n+1) x\right) $$

Así, una onda cuadrada perfecta contiene armónicos a la frecuencia de la onda cuadrada, y cada múltiplo impar de ella - por lo que si se quiere comunicar a 30 MHz, sería un muy mala idea tener un PWM con una frecuencia de 10 MHz.

1voto

Carole Puntos 11

Considere la posibilidad de hacer funcionar un motor de CC muy pequeño utilizando una frecuencia PWM de 1Hz. No podrás controlar la velocidad muy bien, porque se quedará ahí, temblando. Un motor pequeño puede fácilmente girar hacia arriba y hacia abajo en 1 segundo.

Esto es debido a la baja inercia rotacional del motor - su PWM de 1Hz no es mejor que simplemente pulsar y soltar un botón con el dedo.

Considere el mismo sistema utilizando 1000Hz en su lugar. Puedes encajar muchos pulsos PWM en el tiempo que tarda el motor en girar hacia arriba o hacia abajo. En este punto, el motor se convierte efectivamente en un filtro de paso bajo y encuentra el equilibrio girando a una velocidad que es proporcional a (relación PWM) * (tensión de alimentación).

Para los motores en particular, es una buena idea elegir una frecuencia que permita un control suave de la velocidad, pero no tan alta como para que los devanados del motor empiecen a actuar en su contra y se pierda eficiencia por los efectos inductivos y de retroalimentación.

Es una respuesta general pertinente a los motores (ya que mencionaste que los usabas). Otras aplicaciones (cargas resistivas o capacitivas) tendrán diferentes razones para elegir frecuencias sensibles.

0voto

Sang Wan Jeon Puntos 20

PWM es la abreviatura de Pulse Width Modulation.

PWM Description by arduino.cc

La modificación de la frecuencia PWM aumenta la precisión de la tensión de las clavijas.
El aumento de la frecuencia PWM disminuye el tiempo por ciclo.

Pros

  • Mayor precisión.

Cons

  • Hay limitaciones para aumentar la frecuencia PWM; no se puede aumentar por encima de la frecuencia del chip.
  • El uso de la biblioteca externa utiliza la memoria.

0 votos

El OP dijo que no es un proyecto de Arduino. IIRC esas funciones que mencionó son de las bibliotecas de Arduino.

0 votos

Oh... Ya veo. ¿Debo eliminar la respuesta? Porque @Wossname tiene razón. (Es mi primera respuesta y creo que he cometido un error muy grande)

0 votos

No te preocupes, el OP quería respuestas "generales" de todos modos, pero podrías considerar el uso de "contras" que no son específicas de arduino :)

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