La modulazione di larghezza di impulso (o PWM, acronimo di pulse-width modulation), è una modulazione che permette di ottenere un valore medio dipendente dal rapporto tra la durata dell'impulso positivo e di quello negativo (duty cycle).

Questo blocco funzione esegue la gestione del circuito PWM hardware presente su alcuni moduli (Utilizzabile solo sui moduli che hanno la gestione PWM hardware), non è da confondere con il FB PWMOut, PWM output management che invece realizza un PWM software (Molto meno performante in frequenza) ma che può essere utilizzato con una qualsiasi uscita logica.

Il FB permette la definizione del valore di frequenza Frequency e di duty cycle Duty del generatore PWM  sul modulo e canale indicato. Il range dei valori di frequenza e duty cycle dipendono dal modulo utilizzato. Impostando il valore di Frequency a 0 viene disabilitato il PWM e l'uscita viene forzata in base al valore di Duty. Duty < 50: L'uscita viene settata a FALSE. Duty >= 50: L'uscita viene settata a TRUE.

Function block
CODESYS: Non disponibile
LogicLab: eLLabXUnified12Lib

Address (USINT) Occorre specificare l'indirizzo di modulo su cui eseguire la gestione del PWM (Range da 0 a 15). Il valore 0 indica il primo modulo di estensione, 1 il secondo e così di seguito. Il valore 255 indica il modulo CPU.

Channel (USINT) Occorre specificare l'indirizzo del canale sul modulo (Range da 0 a 15).

Frequency (REAL) Valore di frequenza in uscita (Per i limiti fare riferimento al manuale hardware della scheda utilizzata). Il valore è espresso in Hz.

Duty (REAL) Valore di duty cycle del segnale in uscita (Per i limiti fare riferimento al manuale hardware della scheda utilizzata). Il valore è espresso in %.

Done (BOOL) Generatore PWM correttamente impostato.

Fault (BOOL) Errore nella esecuzione.

Errori

In caso di errore si attiva l'uscita Fault, eseguendo immediatamente dopo la funzione SysGetLastError è possibile rilevare il codice di errore. Fare riferimento alla tabella seguente per la descrizione.

Esempi

Come utilizzare gli esempi.
Viene impostati l canale 0 (Out 00) del modulo CPU per generare un segnale PWM a 100 Hz con duty cycle 50 %.

LogicLab (Ptp116)
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.

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

// [End of file]

Ti è stato utile questo articolo ?

Ultimo aggiornamento: 18 Marzo 2020