¿Puedo usar el GPIO como una salida de modulación de ancho de pulso ?

Si es así, ¿cómo lo haría y cuántas salidas PWM simultáneas y distintas puedo tener?

Comentarios

  • Usted probablemente necesite especificar qué modelo ‘ está utilizando. Todos son ligeramente diferentes.
  • @ user1147688 ¡Esta pregunta se hizo cuando solo había un modelo!

Responder

Según lo sugerido por Alex Chamberlain , aparece la biblioteca WiringPi para admitir tanto la salida de hardware PWM en uno o dos pines GPIO según el modelo, como el PWM de software en cualquiera de los otros pines GPIO. Mientras tanto, la biblioteca RPIO.PWM hace PWM por DMA en cualquier pin GPIO. Efectivamente, se trata de un punto intermedio entre el hardware y el software PWM, que proporciona una resolución de tiempo de 1   µs en comparación con 100   µs con WiringPi «s Software PWM [1] .

Cuál de estos es adecuado para sus aplicaciones depende de cuántas salidas PWM necesita y qué rendimiento desea de esas salidas.

Si su aplicación es tolerante con una resolución de tiempo baja y una jitter alta, entonces puede usar un software o un bucle de tiempo asistido por DMA. Si desea una mayor precisión / menor jitter PWM, entonces es posible que necesite asistencia de hardware.

¿Cuándo podría ser adecuado el software PWM?

Si desea hacer parpadear un montón de LED con diferentes cadencias visibles humanas (10 «s de hertz) con requisitos de respuesta suave en tiempo real , entonces el bucle de software podría manejar tantos PWM como pines GPIO.

Cuando ¿Podría ser adecuado el hardware PWM?

Si desea controlar un servidor o motor con requisitos de respuesta estrictos en tiempo real , entonces necesitará usar hardware PWM. Incluso entonces, puede tener problemas para garantizar una respuesta en tiempo real para el bucle de servo que vincula la entrada del codificador a la salida PWM.

Un servobucle Necesita leer codificadores a una velocidad regular (bajo jitter), escribir valores de salida PWM revisados a un ritmo regular y la latencia entre estos debe ser fija (bajo jitter en general). Si no puede hacer esto, entonces tendrá que afinar el motor (sintonización suave) para evitar que se vuelva inestable bajo carga. Esto es difícil de hacer con un sistema operativo multitarea sin soporte de bajo nivel.

¿Qué pasa si necesito más salidas PWM de hardware?

Si necesita ejecutar más servobucles de los que tiene salidas PWM de hardware, entonces probablemente tendrá que descargarlos a otro dispositivo para asegurar rendimiento en tiempo real, relegando su Raspberry Pi a ser un supervisor suave en tiempo real.

Una opción, sería algo como el Adafruit 16-Channel 12-bit PWM / Servo Driver – Interfaz I²C – PCA9685 que le permitiría controlar 16 salidas PWM con solo unos pocos pines de GPIO para el bus I²C. Para un ejemplo de su uso, Echa un vistazo a la publicación I²C 16 Channel PWM / Servo Breakout – Funcionando en los foros de Raspberry Pi.

1. Gracias a dm76 para la sugerencia, sin embargo heather dice que RPIO.PWM puede que ya no funcione para los modelos pi más nuevos.

Comentarios

  • ¿Puedo usar el enfoque de software PWM para hacer funcionar motores de CC?
  • @gideon – Sí, los amplificadores de potencia del motor que he usado han tomado PWM como entrada.
  • Para su información, la biblioteca RPI ( pythonhosted.org/RPIO/pwm_py.html ) parece tener una resolución mucho mejor (1us) en comparación con WiringPi con Resolución de 100us
  • @MarkBooth – No hay problemas. La biblioteca está muy bien escrita y puede usarse como reemplazo directo de RPi.GPIO, lo cual es muy útil si comenzó un proyecto con este último y luego se dio cuenta de que se necesitaban señales PWM …
  • RPIO. Es posible que PWM ya no funcione para los modelos pi más nuevos, creo.

Respuesta

Hardware PWM

Sí, hay una salida PWM de hardware en la Raspberry Pi, conectada a P1-12 (GPIO18). Además, las salidas PWM se pueden agregar usando una interfaz I²C o SPI ; algunas personas han tenido éxito con esto ( publicación en el foro ).

Código de ejemplo

Puede usar el biblioteca WiringPi para controlar el pin PWM; podría mirar el código para evitar incluir toda la biblioteca.

Software PWM

La Raspberry Pi no es adecuada para ningún software PWM serio ya que Linux no es un sistema operativo en tiempo real .

Comentarios

  • Pregunta, ¿cuál es la definición o un ejemplo de software PWM serio? ¿Y qué son los » sistemas operativos en tiempo real «? ¿Existe alguna posibilidad de obtener uno en un Pi?
  • @AnthonyBlake Bueno, probablemente puedas controlar el brillo de una luz usando el software PWM, pero sospecho que un motor se detendrá. Sin embargo, ‘ no es necesario utilizar software PWM, el hardware es más simple y efectivo. Los sistemas operativos en tiempo real serán mejor explicados por Google; garantizan ciertas cosas sobre el tiempo y la frecuencia con la que se ejecuta el software.
  • @AnthonyBlake A » SO en tiempo real » (RTOS) es un sistema operativo que le da una garantía sobre el límite de tiempo superior de ejecución. Como decirle al programa » Sí, tendrá un tiempo de ejecución en 33 ms (más o menos 2 ms de tolerancia) para voltear ese pin GPIO para darle a su motor paso a paso una señal exacta ventana de tiempo cuando lo necesite. ¡Y puede confiar en eso! » Hay ‘ un RT Linux por ahí. No ‘ no sé si ‘ se ha trasladado al RPi (todavía).
  • Lo siento Alex, yo No ‘ t robé intencionalmente otra parte de tu respuesta, pero ‘ acabo de notar que llegamos a la misma publicación del foro a través de diferentes rutas. .
  • Los modelos más nuevos con 40 pines tienen un segundo PWM de hardware conectado a GPIO19 (pin 35).

Respuesta

Pis recientes tienen dos canales PWM de hardware. Además, los pulsos PWM temporizados por hardware se pueden generar de forma independiente en todos los GPIO conectados al cabezal de expansión de 40 pines.

En la práctica, esto significa que hay dos canales PWM de alta precisión y todos los demás GPIO pueden tener PWM estilo Arduino (800 Hz, 0 apagado – 255 completamente encendido).

Por ejemplo servoblaster y mi pigpio , etc.

Comentarios

  • ¡Buena respuesta! ¿Cómo puedo utilizar esos dos HW PWM? Necesito controlar 2 servos, sé que dices que servoblaster y pigpio están bien para eso, pero me pregunto sobre el HW PWM, porque no puedo encontrar nada sobre ellos … ¿hay algunos documentos para eso? Tengo un RPi 2 V1.1 para pruebas.
  • C , Python , línea de comandos de pigs .
  • Una carga pesada de CPU no debería ‘ hacer un diferencia. Una carga de red pesada puede marcar la diferencia para gpioServo, especialmente si se realiza un muestreo a 1MHz en lugar de los 200kHz predeterminados. La frecuencia es 50 (Hz), el rango de ciclos de trabajo será 0 – 1000000 (mapeado al verdadero valor subyacente de 0 – 5000000). 1 ms es 1 ms en 20 ms, por lo que un ciclo de trabajo del 5% es decir 50000, 1.5ms- > 7.5% – > 75000, 2ms – > 10% – > 100000.
  • Página 102 de BCM2835 ARM Peripherals muestra los distintos modos que se pueden asignar al GPIO. Busque en línea qué GPIO se dirigen a los distintos encabezados de expansión del modelo Pi.
  • @ user1147688 PLLD (500MHz) se utiliza como reloj PWM central. Debido a la forma en que » funciona «, la frecuencia central de PWM es de 250 MHz. Para poder encender y apagar (bastante esencial para PWM) el máximo es 125 MHz. Puede duplicar las cifras utilizando PLLC (1000 MHz), pero ese PLL varía con la velocidad del reloj central.

Respuesta

No es un sistema operativo en tiempo real, pero RISC OS para Raspberry Pi es multitarea cooperativa, por lo que puede ejecutar fácilmente una aplicación que tenga un 100% de CPU, por lo que puedes administrar tus tiempos mucho mejor. Simplemente no espere hacer nada más que su propio código.

Comentarios

  • Leí en alguna parte que hay un límite de hardware en cuanto al cambio frecuencia de un pin de salida, también. Creo que era alrededor de 20 MHz. Así que no ‘ no espere poder extraer de 300 MHz PWM o algo por el estilo, incluso con 100 % De uso de CPU.
  • @Wallacoloo: ¿Qué aplicaciones requieren PWM de 300 MHz?
  • @PeterMortensen: Bueno, no ‘ no sé cómo transmisores y similares generan sus señales, pero algunos podrían hacerlo con PWM. PiFM lo hace a 100 MHz. Sin embargo, eso parece contradecir mi comentario, así que me pregunto si tal vez el pin todavía se puede ordenar a esa frecuencia, pero ‘ s solo que la capacitancia del pin atenúa tales señales, de modo que una onda cuadrada de 100 MHz podría oscilar de, por ejemplo, (1.0 V, 2.3 V) en lugar de la completa (0 V, 3.3 V) abarcar.

Respuesta

He encontrado esta biblioteca ( pi -blaster ) que dice ser «extremadamente eficiente: no usa la CPU y da pulsos muy estables».

No lo he probado todavía, pero lo actualizaré tan pronto como lo haga. (probablemente hoy)

Comentarios

  • Yo ‘ he estado intentando esto pero hasta ahora no tuve suerte. Por lo que puedo decir, ¿no ‘ realmente cambia el hardware?
  • Solo quiero resaltar esto. Pi-blaster ha funcionado para mí donde estas otras respuestas no lo hizo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *