Tiempo de ciclo con PWM

  • 4 Respuestas
  • 985 Vistas

ArielSV-AFENsis

  • Novato
  • *
  • Mensajes: 3
Tiempo de ciclo con PWM
« : diciembre 04, 2020, 16:13:05 pm »
Buenas tardes.

En AFENsis estamos tratando de utilizar una señal PWM durante un breve período de tiempo seteado desde un HMI. En principio, probamos con una duración total de 19ms (refiriéndome a la duración de la señal de inicio a fin, no del dutycycle, ni de un solo periodo, sino total desde seteo a reseteo del valor del PWM).

Pero al medir el tiempo de duración de la señal del PWM con un osciloscopio, este nos marcaba, la mayoría de las veces, unos 36ms (y de tanto en tanto, los 19ms requeridos). Probamos con distintos tiempos de duración, pero rara vez lograba acertarle con suficiente repetitibilidad.

Eso nos llevó a pensar que quizas estabamos teniendo un tiempo de ciclo del PLC de unos 18ms, dado que cuando definiamos la duración de la señal PWM completa en múltiplos de esos números, lograbamos una buena repetitibilidad (es decir, con 18ms, 36ms, 72ms, 96ms, etc). En cambio, si seteabamos en 19, 20, o cualquier otro valor menor a 36, la medición por osciloscopio indicaba una duración total de la PWM de 36ms.

Acto seguido, programamos un conmutador que actualiza su estado en cada ciclo de scan del PLC, y obtuvimos lo que se muestra en las imágenes adjunta.
Los datos que obtuvimos de dicha medición fue que, el conmutador inicia a los 7.6ms de iniciada la PWM, independientemente del tiempo de duración seteado en la PWM (primera imagen). Y finaliza 2ms después de el flanco descendente del anteúltimo "1" del conmutador (segunda imagen).

La realidad es que estamos un poco perdidos respecto a esto, y quisieramos entender si es posible lograr señales de PWM con una duración ajustable a la unidad de ms, o si el scan cycle del PLC nos va a pisar siempre esto, llevándonos al múltiplo de 18ms más cercano. Y sumado a esto, porque es que el conmutador parece tener un tiempo de actualización desfasado con el final de la PWM (segunda imagen).

Por favor, cualqueir duda que haya con mi mala explicación, no dude en preguntarme y trataré de explayarme mejor.
Saludos.
« Última Modificación: diciembre 04, 2020, 19:18:12 pm por Soporte »

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2296
  • Soporte Técnico
Re:Tiempo de ciclo con PWM
« Respuesta #1 : diciembre 04, 2020, 19:08:51 pm »
Buenas tardes,

Le consulto para comprender, ¿necesita generar una señal PWM que este presente por "x" tiempo, y no obtiene exactamente tiempo "x"?.

¿Cómo sería conceptualmente la secuencia que utiliza para "prender/apagar" el PWM?.

Por ejemplo:

1) SET DUTY CYCLE = 50% (PRENDE PWM)
2) Espera "x" tiempo
3) SET DUTY CYCLE = 0% (APAGA PWM)

¿La medición entre puntos (1) y (3) no es "x"?.
¿Qué frecuencia de PWM está utilizando?.

La realidad es que estamos un poco perdidos respecto a esto, y quisieramos entender si es posible lograr señales de PWM con una duración ajustable a la unidad de ms, o si el scan cycle del PLC nos va a pisar siempre esto, llevándonos al múltiplo de 18ms más cercano. Y sumado a esto, porque es que el conmutador parece tener un tiempo de actualización desfasado con el final de la PWM (segunda imagen).

En el diagrama "Principal", desde que da la orden de "prender PWM", hasta que da la orden de "apagar PWM" (utilizando un temporizador por ejemplo), pueden pasar uno o más SCAN CYCLES, y cada SCAN CYCLE tiene código que se ejecuta (por ejemplo envío de datos, llamadas a otras funciones, etc). Por lo que un retardo tendrá, el valor mínimo, depende de la cantidad de código que ejecute en cada SCAN CYCLE.

Una forma de hacer más rápido el SCAN CYCLE, es agrupar código dentro de funciones que solo se ejecuta si se da una condición válida, por lo tanto, en cada SCAN CYCLE no se procesará todo el código de Principal, sino por fragmentos.

Por ejemplo, en el caso que use un Temporizador Ladder con valor de 1 mS (para prender/apagar el PWM), si el SCAN CYCLE tarda 15 mS, el temporizador en cada SCAN CYCLE habrá expirado, y sería equivalente a utilizar una resolución de 15 mS. En este caso se puede utilizar funciones para agrupar código y bajar el tiempo del SCAN CYCLE, pero requiere experimentar, y le recomiendo mejor la segunda o tercera alternativa a continuación.

Una segunda alternativa, es crear un evento OnTimer2 que se llame cada 1 mS (ver Temporizadores por Evento), y desde allí prender y apagar el PWM, contabilizando el tiempo desde el propio evento utilizando un contador por ejemplo. Esto podría mejorar los retardos a un punto aceptable.

Finalmente, existe una tercera alternativa para el PWM, hay una función en lenguaje Pawn, (que podría utilizarse en Ladder si se inserta código Pawn) que permite generar un tren de "x" pulsos PWM. Esto se hace en segundo plano, independiente del SCAN CYCLE, por lo que desde que da la orden, se generan "x" pulsos, y luego se apaga. Si establece la frecuencia a un valor determinado, puede lograr un tiempo fijo de acuerdo a la cantidad de pulsos, y este tiempo sería lo más exacto posible.

Ver función PwmTrainStart(Channel, DutyCycle, Pulses) en página 84 del manual:

www.slicetex.com/hw/stx8xxx/docs/STX8XXX-MP-PLC.pdf

Ejemplo:

// Generar 10 pulsos en salida PWM1 con un DutyCycle del 50.0%.
PwmTrainStart(PWM1, 500, 10)


Si la frecuencia es "30 Hz":

Tiempo total = Pulsos * 1 / FrecuenciaPWM = 10 * 1/30 = 333 mS

Tiene dos variables para variar el tiempo final, la cantidad de pulsos y la frecuencia. La frecuencia la puede dejar fija, y variar el tiempo total con la cantidad de pulsos.

Si le interesa el "tren de pulsos" le puedo hacer un ejemplo de uso en Ladder.

Buen fin de semana.

Saludos!.

« Última Modificación: diciembre 04, 2020, 19:29:37 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Atención: Desde el 26 de enero al 21 de febrero de 2023, cerramos por vacaciones. Tenga en cuenta para sus pedidos y/o consultas.

ArielSV-AFENsis

  • Novato
  • *
  • Mensajes: 3
Re:Tiempo de ciclo con PWM
« Respuesta #2 : diciembre 09, 2020, 08:22:14 am »
Buenos días.

En primer lugar, muchas gracias por tan completa respuesta.

Ha comprendido perfectamente nuestro problema. Seteamos la PWM a X% de duty cycle (usualmente a 95%), damos inicio a un temporizador de t milisegundos, y cuando termina seteamos la PWM a 0% de duty cycle. Pero cuando registramos el tiempo que duró de inicio a fin esa PWM no nos coincide con el tiempo del temporizador. Tal cual usted lo ha descrito en los pasos 1, 2, 3.

La frecuencia que utilizamos en la PWM es de 10kHz.

Vamos a estudiar las opciones que nos brinda, sobre todo las dos últimas, ya que no vemos como podemos cambiar la programación actual para que reducir la carga de procesamiento.

Entendemos que el Temporizador de Eventos se basa en interrupciones. Nos preocupa que esto nos perjudique la comunicación constante entre el PLC y la PC donde tenemos activa la aplicación de medición de nuestro equipo, pero probaremos para ver como funciona.

Por favor, si puede pasarnos ese ejemplo del tren de pulsos en ladder que menciona, ciertamente nos ayudaría mucho.

Desde ya, muchas gracias nuevamente.
Saludos.

ArielSV-AFENsis

  • Novato
  • *
  • Mensajes: 3
Re:Tiempo de ciclo con PWM
« Respuesta #3 : diciembre 09, 2020, 14:28:03 pm »
Buenas tardes.

Vuelvo a postear para decir que logramos implementar la alternativa con PAWN (tal como nos recomendó, fusionando PAWN con LADDER) y fue la solución definitiva que estabamos buscando. Logramos el mejor control de la PWM desde que empezamos este proyecto.

Muchas gracias por el tiempo.
Saludos.

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2296
  • Soporte Técnico
Re:Tiempo de ciclo con PWM
« Respuesta #4 : diciembre 09, 2020, 14:59:34 pm »
Vuelvo a postear para decir que logramos implementar la alternativa con PAWN (tal como nos recomendó, fusionando PAWN con LADDER) y fue la solución definitiva que estabamos buscando. Logramos el mejor control de la PWM desde que empezamos este proyecto.

Buenas tardes, excelente, felicitaciones que haya podido implementar por su cuenta el cambio.

Saludos!
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Atención: Desde el 26 de enero al 21 de febrero de 2023, cerramos por vacaciones. Tenga en cuenta para sus pedidos y/o consultas.