SysSetPWMOut, PWM-Ausgang einstellen

Liste

Diese Seite ist Teil der IEC 61131-3 Programmierhandbuch. Gehen Sie zum Index.

Pulsweitenmodulation (oder PWM, kurz für Pulse Width Modulation) ist eine Modulation, die es ermöglicht, einen Durchschnittswert abhängig vom Verhältnis zwischen der Dauer des positiven und negativen Impulses (Arbeitszyklus) zu erhalten.

Dieser Funktionsblock verwaltet die auf einigen Modulen vorhandene Hardware-PWM-Schaltung (Kann nur auf Modulen mit Hardware-PWM-Management verwendet werden), ist nicht mit dem FB zu verwechseln PWMOut, PWM output management die stattdessen eine Software-PWM erzeugt (viel weniger Leistung in der Frequenz), die aber mit jedem Logikausgang verwendet werden kann. Um die optionalen Ausgänge zu aktivieren, muss der Schutzcode angefordert werden, siehe Funktions- und Funktionsblockschutz. Es ist jedoch möglich, sie im Testmodus für 15 Minuten frei zu verwenden.

Der FB ermöglicht die Definition des Frequenzwertes Frequency und Arbeitszyklus Duty des PWM-Generators auf dem angegebenen Modul und Kanal. Der Wertebereich hängt vom verwendeten Modul ab und im Allgemeinen werden wir haben.

  • Frequency:=0beendet der PWM-Generator die aktuelle Periode und setzt den Ausgang zurück.
  • Duty:=0beendet der PWM-Generator die aktuelle Periode und deaktiviert den Ausgang.
  • Duty:=100beendet der PWM-Generator die aktuelle Periode und aktiviert den Ausgang.
  • Duty:=50, versucht der PWM-Generator, das Tastverhältnis bei allen Frequenzwerten, Generatorfrequenz, auf 50 % zu halten.
Module mit PWM-Ausgang

Dieser FB arbeitet nur mit Modulen, die das PWM-Hardwaremanagement implementieren, unter einer Übersichtstabelle.

ModulcodePWM-KanäleNote
MPS050-PCB1311OUT0, Frequenzbereich 5Hz÷3kHz
MPS053-PCB1351OUT0, Frequenzbereich 5Hz÷3kHz
MPS054-PCB1372OUT0÷1, Frequenzbereich 5Hz÷3kHz
MPS056-PCB1412OUT0÷1, Frequenzbereich 5Hz÷3kHz
PCB124 * 0104 (davon 3 Option)OUT0÷3, Frequenzbereich 8Hz÷5kHz
Duty-Cycle-Einstellung

Die Module haben optoisolierte Ausgänge, daher werden an den steigenden und fallenden Flanken Verzögerungen erzeugt, die mit zunehmender Frequenz den einstellbaren Bereich des Tastverhältnisses verringern. Aufgrund der Verzögerungen mit zunehmender Frequenz nimmt die Granularität der Frequenz- und Tastverhältniseinstellungen zu.

ModulcodePflicht mindPflicht maxEinschaltdauer min (20Hz)Einschaltdauer max. (20 Hz)
MPS054-PCB137, MPS056-PCB1411%100-(Frequenz/27.2)1%100-(20/27.2)=99%
PCB124 * 010Frequenz/71.499%20 / 71.4 =1%99%
Informationskreis

Funktionssperre

CODESYS: nicht verfügbar

LogikLab: eLLabXUnified12Lib

Beschreibung

Address (USINT) Es ist notwendig, die Moduladresse anzugeben, auf der die PWM-Verwaltung durchgeführt werden soll (Bereich von 0 bis 15). Der Wert 0 bezeichnet das erste Erweiterungsmodul, 1 das zweite und so weiter. Der Wert 255 gibt das CPU-Modul an.
Channel (USINT) Die Kanaladresse muss auf dem Modul angegeben werden (Bereich 0 bis 15).
Frequency (REAL) Ausgangsfrequenzwert (siehe Handbuch der verwendeten Karte). Der Wert wird in angegeben Hz.
Duty (REAL) Duty-Cycle-Wert des Ausgangssignals, auf 50 setzen, wenn er als Frequenzgenerator verwendet wird. Der Wert wird in % ausgedrückt.
Done (BOOL) PWM-Generator richtig eingestellt.
Fault (BOOL) Ausführungsfehler

SysSetPWMOut FB-Image

Beispiele

Verwendung der Beispiele.
ST_SysSetPWMOut: Kanal 0 (Out 00) des CPU-Moduls ist so eingestellt, dass er ein 100-Hz-PWM-Signal mit 50 % Tastverhältnis erzeugt.

ST_PWMOutPulsesCount: Mit einem an den PWM-Ausgang angeschlossenen Zähler ist es möglich, die Ausgangsfrequenz nach einer voreingestellten Anzahl von Impulsen zu blockieren oder zu ändern. Wie aus dem Diagramm ersichtlich ist, ist der Ausgang DO00 des PWM mit dem Eingang Di00 des Zählers verbunden.

Es werden 4 Impulse bei 100 Hz erzeugt, gefolgt von 3 Impulsen bei 200 Hz und schließlich 2 Impulsen bei 50 Hz, dann wird der Ausgang auf Null zurückgesetzt, wodurch der Befehl zum Schritt-, Starten-, Vorwärts-, Verlangsamungs- und Stoppen von Motoren simuliert wird. Das Lesen des Zählers muss innerhalb der Dauer von 1 Impuls (bei 200 Hz alle 5 ms) erfolgen, daher muss das Programm im Fast-Task ausgeführt werden.

Bindungen für 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]
War dieser Artikel hilfreich?