SysSetPWMOut, establece la salida PWM

Lista

Esta página es parte del Manual de programación IEC 61131-3. Ir al índice.

Modulación de ancho de pulso (o PWM, abreviatura de Pulse Width Modulation), es una modulación que permite obtener un valor medio en función de la relación entre la duración del impulso positivo y negativo (Duty Cycle).

Este bloque de funciones gestiona el circuito PWM de hardware presente en algunos módulos (Solo se puede usar en módulos que tienen administración PWM de hardware), no debe confundirse con el FB PWMOut, PWM output management que en cambio crea un PWM de software (mucho menos rendimiento en frecuencia) pero que se puede usar con cualquier salida lógica. Para habilitar las salidas opcionales se debe solicitar el código de protección, ver función y protección de bloque de función. Sin embargo, es posible usarlos libremente en modo de prueba durante 15 min.

El FB permite la definición del valor de frecuencia. Frequency y ciclo de trabajo Duty del generador PWM en el módulo y canal indicado. El rango de valores depende del módulo utilizado y en general tendremos.

  • Frequency:=0, el generador PWM finaliza el período actual y restablece la salida.
  • Duty:=0, el generador PWM finaliza el período actual y desactiva la salida.
  • Duty:=100, el generador PWM finaliza el período actual y activa la salida.
  • Duty:=50, el generador PWM intenta mantener el ciclo de trabajo al 50% en todos los valores de frecuencia, frecuencia del generador.
Módulos con salida PWM

Este FB solo funciona en módulos que implementan la gestión de hardware PWM, debajo de una tabla resumen.

Código del móduloCanales PWMNote
MPS050-PCB1311OUT0, rango de frecuencia 5Hz÷3kHz
MPS053-PCB1351OUT0, rango de frecuencia 5Hz÷3kHz
MPS054-PCB1372OUT0÷1, rango de frecuencia 5Hz÷3kHz
MPS056-PCB1412OUT0÷1, rango de frecuencia 5Hz÷3kHz
PCB124 * 0104 (incluyendo 3 opciones)OUT0÷3, rango de frecuencia 8Hz÷5kHz
Configuración del ciclo de trabajo

Los módulos tienen salidas optoaisladas, por lo que se generan retardos en los flancos ascendente y descendente que, a medida que aumenta la frecuencia, reducen el rango configurable del ciclo de trabajo. Debido a los retrasos a medida que aumenta la frecuencia, aumenta la granularidad de los ajustes de frecuencia y servicio..

Código del módulodeber mínimodeber máximoServicio mínimo (20 Hz)Servicio máx. (20 Hz)
MPS054-PCB137, MPS056-PCB1411%100-(Frecuencia/27.2)1%100-(20/27.2)=99%
PCB124 * 010Frecuencia/71.499%20/71.4 =1%99%
Círculo de información

Función de bloqueo

CÓDIGOS: indisponible

Laboratorio lógico: eLLabXUnified12Lib

Descripción

Address (USINT) Es necesario especificar la dirección del módulo sobre el que realizar la gestión PWM (Rango de 0 a 15). El valor 0 indica el primer módulo de extensión, 1 el segundo y así sucesivamente. El valor 255 indica el módulo de la CPU.
Channel (USINT) La dirección del canal debe especificarse en el módulo (Rango 0 a 15).
Frequency (REAL) Valor de la frecuencia de salida (Consultar el manual de la tarjeta utilizada). El valor se expresa en Hz.
Duty (REAL) Valor del ciclo de trabajo de la señal de salida, ajustado a 50 si se utiliza como generador de frecuencia. El valor se expresa en %.
Done (BOOL) Generador PWM configurado correctamente.
Fault (BOOL) Error en la ejecución

Imagen SysSetPWMOut FB

Ejemplos

Cómo utilizar los ejemplos..
ST_SysSetPWMOut: El canal 0 (Out 00) del módulo de la CPU está configurado para generar una señal PWM de 100 Hz con un ciclo de trabajo del 50 %.

ST_PWMOutPulsesCount: Usando un contador conectado a la salida PWM es posible bloquear o modificar la frecuencia de salida después de un número preestablecido de pulsos. Como se puede ver en el diagrama, la salida DO00 del PWM está conectada a la entrada Di00 del contador.

Se generan 4 pulsos a 100 Hz, seguidos de 3 pulsos a 200 Hz y finalmente 2 pulsos a 50 Hz, luego la salida se pone a cero, simulando el comando de paso, arranque, avance, desaceleración y parada de motores. La lectura del contador debe realizarse dentro de la duración de 1 pulso (a 200 Hz cada 5 mS) por lo que el programa debe ejecutarse en Tarea rápida.

Enlaces para ST_PWMOutPulsesCount
Laboratorio lógico (Ptp116, ST_SysSetPWMOut)
PROGRAM ST_SysSetPWMOut
VAR
    PWMOut : SysSetPWMOut; (* PWM output *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SysSetPWMOut"
// *****************************************************************************
// This program presets the PWM output channel 0 on CPU module.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // PWM OUTPUT
    // -------------------------------------------------------------------------
    // Preset PWM output.

    IF (SysFirstLoop) THEN
        PWMOut.Address:=255; //Module address
        PWMOut.Channel:=0; //Module channel
        PWMOut.Frequency:=100.0; //Frequency output (Hz)
        PWMOut.Duty:=50.0; //Duty cycle (%)
    END_IF;

    // Manage the PWM output.

    PWMOut(); //PWM output

// [End of file]
Laboratorio lógico (Ptp116, ST_PWMOutPulsesCount)
PROGRAM ST_PWMOutPulsesCount
VAR
    Start : BOOL; (* Start command *)
    CaseNr : USINT; (* Program case *)
    PulsesThr : UDINT; (* Pulses threshold *)
    PulsesCtr : UDINT; (* Pulses counter *)
    PWMOut : SysSetPWMOut; (* PWM output *)
    CInp : SysGetCounter; (* Counter acquisition *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_PWMOutPulsesCount"
// *****************************************************************************
// This program shows how to use a counter to count the PWM output pulses. After
// a defined number of pulses the output frequency is changed some times.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // PROGRAM INIT
    // -------------------------------------------------------------------------
    // Executed at first program execution, all variables are initialized.

    IF (SysFirstLoop) THEN
        PWMOut.Address:=255; //Module address
        PWMOut.Channel:=0; //Module channel

        CInp.Address:=255; //Module address
        CInp.Channel:=0; //Module channel
        CInp.Mode:=16#00000000; //Acquisition mode
    END_IF;

    // -------------------------------------------------------------------------
    // PWM OUTPUT
    // -------------------------------------------------------------------------
    // Preset PWM output.

    CASE (CaseNr) OF

        // ---------------------------------------------------------------------
        // Wait for the start command.

        0:
        IF NOT(Start) THEN RETURN; END_IF;
        Start:=FALSE; //Start command

        // Set ouput frequency, duty cycle and save counter value.

        CInp(); //Counter acquisition
        PWMOut(Frequency:=100.0, Duty:=50.0); //PWM output
        PulsesThr:=CInp.Value; //Pulses threshold
        CaseNr:=CaseNr+1; //Program case

        // ---------------------------------------------------------------------
        // Wait for the defined number of pulses (4 pulses at 100 Hz).

        1:
        CInp(); //Counter acquisition
        PulsesCtr:=CInp.Value-PulsesThr; //Pulses counter
        IF (PulsesCtr < 4) THEN RETURN; END_IF;

        // Set ouput frequency, duty cycle and save counter value.

        PWMOut(Frequency:=200.0, Duty:=50.0); //PWM output
        PulsesThr:=CInp.Value; //Pulses threshold
        CaseNr:=CaseNr+1; //Program case

        // ---------------------------------------------------------------------
        // Wait for the defined number of pulses (3 pulses at 200 Hz).

        2:
        CInp(); //Counter acquisition
        PulsesCtr:=CInp.Value-PulsesThr; //Pulses counter
        IF (PulsesCtr < 3) THEN RETURN; END_IF;

        // Set ouput frequency, duty cycle and save counter value.

        PWMOut(Frequency:=50.0, Duty:=50.0); //PWM output
        PulsesThr:=CInp.Value; //Pulses threshold
        CaseNr:=CaseNr+1; //Program case

        // ---------------------------------------------------------------------
        // Wait for the defined number of pulses (2 pulses at 50 Hz).

        3:
        CInp(); //Counter acquisition
        PulsesCtr:=CInp.Value-PulsesThr; //Pulses counter
        IF (PulsesCtr < 2) THEN RETURN; END_IF;

        // Stop PWM output with signal low.

        PWMOut(Frequency:=0.0, Duty:=0.0); //PWM output
        CaseNr:=0; //Program case
    END_CASE;

// [End of file]
¿Le resultó útil este artículo?