SysSetPWMOut, setați ieșirea PWM

Listă

Această pagină face parte din Manual de programare IEC 61131-3. Mergeți la index.

Modularea lățimii de impuls (sau PWM, prescurtare pentru Pulse Width Modulation), este o modulație care permite obținerea unei valori medii în funcție de raportul dintre durata impulsului pozitiv și negativ (duty cycle).

Acest bloc de funcții gestionează circuitul hardware PWM prezent pe unele module (Poate fi utilizat numai pe module care au management PWM hardware), nu trebuie confundat cu FB PWMOut, PWM output management care în schimb creează un software PWM (mult mai puțin performant în frecvență) dar care poate fi folosit cu orice ieșire logică. Pentru a activa ieșirile opționale, trebuie solicitat codul de protecție, vezi funcția și protecția blocului funcțional. Cu toate acestea, este posibil să le folosiți liber în modul de testare timp de 15 minute.

FB permite definirea valorii frecvenței Frequency și ciclul datoriei Duty a generatorului PWM pe modulul și canalul indicat. Gama de valori depinde de modulul utilizat și, în general, vom avea.

  • Frequency:=0, generatorul PWM încheie perioada curentă și resetează ieșirea.
  • Duty:=0, generatorul PWM încheie perioada curentă și dezactivează ieșirea.
  • Duty:=100, generatorul PWM încheie perioada curentă și activează ieșirea.
  • Duty:=50, generatorul PWM încearcă să mențină ciclul de lucru la 50% la toate valorile frecvenței, frecvența generatorului.
Module cu ieșire PWM

Acest FB funcționează numai pe module care implementează managementul hardware PWM, sub un tabel sumar.

Codul modululuiCanale PWMnotițe
MPS050-PCB1311OUT0, gama de frecvente 5Hz÷3kHz
MPS053-PCB1351OUT0, gama de frecvente 5Hz÷3kHz
MPS054-PCB1372OUT0÷1, gama de frecvente 5Hz÷3kHz
MPS056-PCB1412OUT0÷1, gama de frecvente 5Hz÷3kHz
PCB124 * 0104 (inclusiv 3 opțiune)OUT0÷3, gama de frecvente 8Hz÷5kHz
Setarea ciclului de lucru

Modulele au ieșiri optoizolate, prin urmare se generează întârzieri pe muchiile de creștere și de descreștere care, pe măsură ce frecvența crește, reduc intervalul setat al ciclului de lucru. Din cauza întârzierilor pe măsură ce frecvența crește, granularitatea setărilor de frecvență și sarcină crește.

Codul modululuidatorie minsarcina maxDuty Min (20Hz)Duty Max (20 Hz)
MPS054-PCB137, MPS056-PCB1411%100-(Frecv./27.2)1%100-(20/27.2)=99%
PCB124 * 010Frecvență/71.499%20 / 71.4 =1%99%
Cercul de informații

Blocarea funcției

CODESYS: Indisponibil

LogicLab: eLLabXUnified12Lib

Descriere

Address (USINT) Este necesar să se specifice adresa modulului pe care să se efectueze managementul PWM (Interval de la 0 la 15). Valoarea 0 indică primul modul de extensie, 1 al doilea și așa mai departe. Valoarea 255 indică modulul CPU.
Channel (USINT) Adresa canalului trebuie specificată pe modul (Interval de la 0 la 15).
Frequency (REAL) Valoarea frecvenței de ieșire (Consultați manualul cardului utilizat). Valoarea este exprimată în Hz.
Duty (REAL) Valoarea ciclului de lucru a semnalului de ieșire, setat la 50 dacă este folosit ca generator de frecvență. Valoarea este exprimată în %.
Done (BOOL) Generatorul PWM setat corect.
Fault (BOOL) Eroare la executare

Imagine SysSetPWMOut FB

Exemple

Cum se utilizează exemplele.
ST_SysSetPWMOut: Canalul 0 (Out 00) al modulului CPU este setat să genereze un semnal PWM de 100 Hz cu ciclu de lucru de 50%.

ST_PWMOutPulsesCount: Folosind un contor conectat la ieșirea PWM este posibilă blocarea sau modificarea frecvenței de ieșire după un număr prestabilit de impulsuri. După cum se poate vedea din diagramă, ieșirea DO00 a PWM este conectată la intrarea Di00 a contorului.

Se generează 4 impulsuri la 100Hz, urmate de 3 impulsuri la 200Hz și în final 2 impulsuri la 50Hz apoi ieșirea se resetează la zero, simulând comanda de pas, pornire, redirecționare, încetinire și oprire a motoarelor. Citirea contorului trebuie efectuată în durata de 1 puls (la 200Hz la fiecare 5mS), prin urmare programul trebuie executat în sarcină rapidă.

Legături pentru ST_PWMOutPulsesCount
LogicLab (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]
LogicLab (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]
A fost util acest articol?