Signalqualität bei Signalausgabe mit digitalen Analogausgängen – Klirrfaktor

Das modulare Beckhoff IO-System IP20/IP67 verfügt über analoge Ausgänge in verschiedenen Bauformen, z.B. die Serien EL41xx, EL47xx, EJ4xxx oder EP4xxx (die „x“ stehen für jeweilige konkrete Produktnummern).

Allen Geräten gemeinsam ist, dass sie

Insgesamt führt dies dazu, dass kein harmonischer Signalverlauf erzeugt werden kann, sondern stattdessen am Ausgang ein in Zeit und Amplitude gestuftes Signal anliegt (insbesondere ohne interne oder externe Signalglättung):

Signalqualität bei Signalausgabe mit digitalen Analogausgängen – Klirrfaktor 1:
Analogsignal (schematisch, diskretisiert)

Das eigentlich vorgegebene analoge Signal (blau) kann elektrisch nur durch dezidierte Stützstellen (rote Punkte) abgebildet werden. Dadurch wird das reale Ausgabesignal sowohl in der Zeit-Dimension als auch in der Amplituden-Dimension gestuft, es wird diskretisiert.

Dazu folgendes Beispiel mit der EL4732 (Analogausgang ±10 V, max. 100 kSps, Oversampling-fähig):

     Deklaration:

   FUNCTION_BLOCK FB_sine_generator
   VAR CONSTANT
       // TwinCAT / Terminal configuration:
       CnMaxIdx           : UDINT  :=10;    // Fixed amount for Oversampling
       tCycleTime         : LTIME  :=LTIME#1MS; // Configured task cycle time
       nOversampling      : UDINT  :=10;    // Used oversampling of the terminal
   END_VAR
   VAR_INPUT
       // Output configuration:
       rFreq_Hz           : LREAL   :=1;    // Destination frequency
       rAmplitude         : LREAL   :=1;    // Destination amplitude
   END_VAR
   VAR_OUTPUT
       bError             : BOOL;
       arOut              : ARRAY[1..CnMaxIdx] OF LREAL;
       aiOut_EL4732 AT%Q* : ARRAY[1..CnMaxIdx] OF INT; // 10 V max
   END_VAR
   VAR
      nIdx                : UDINT;
      rPosition            : LREAL := 0;   // Init, if for startup important
      rPeriod_Sec,
      rStep,
      rPositionPi,
      rValue              : LREAL;
   END_VAR

     Ausführung:

// This code generates values of a sinus for an EL4732 analog output terminal
   IF nOversampling > CnMaxIdx OR (nOversampling = 0) OR
    (tCycleTime = LTIME#0S) THEN
       bError := TRUE;
   ELSE
       bError := FALSE;
       rPeriod_Sec := 1 / rFreq_Hz;
       
       // Calculate a step width (percentual of 1):
       // Divide the cycletime by the destination periode and ovs factor:
       rStep := (1E-9 * LTIME_TO_LREAL(tCycleTime))
                  / (rPeriod_Sec * UDINT_TO_LREAL(nOversampling));
       // (Note:
       // factor of 1E-9 for value in seconds due to LTIME data type's unit is ns)
   
       // fill the array bound to oversampling output for one task cycle
       FOR nIdx := 1 TO nOversampling DO
   
           // Calculate next X-Position of the sine:
           rPosition := FRAC(rStep + rPosition);
           // (usage of FRAC for saturation of rPosition to < 1)
   
           // Calculate percent from 1 to an angle of radians:
           rPositionPi := (rPosition * 2 * PI);
           
           // Calculate next Y-Value:
           rValue := rAmplitude * SIN(rPositionPi);
           arOut[nIdx] := rValue; // allocate to array
   
           // Convert output to PDO of EL4732:
           aiOut_EL4732[nIdx] := LREAL_TO_INT((rValue / 10) * 16#7FFF);
       END_FOR
   END_IF
Signalqualität bei Signalausgabe mit digitalen Analogausgängen – Klirrfaktor 2:

Verwendung der Beispielprogramme

Dieses Dokument enthält exemplarische Anwendungen unserer Produkte für bestimmte Einsatzbereiche. Die hier dargestellten Anwendungshinweise beruhen auf den typischen Eigenschaften unserer Produkte und haben ausschließlich Beispielcharakter. Die mit diesem Dokument vermittelten Hinweise beziehen sich ausdrücklich nicht auf spezifische Anwendungsfälle, daher liegt es in der Verantwortung des Anwenders zu prüfen und zu entscheiden, ob das Produkt für den Einsatz in einem bestimmten Anwendungsbereich geeignet ist. Wir übernehmen keine Gewährleistung, dass der in diesem Dokument enthaltene Quellcode vollständig und richtig ist. Wir behalten uns jederzeit eine Änderung der Inhalte dieses Dokuments vor und übernehmen keine Haftung für Irrtümer und fehlenden Angaben.

Erläuterung des Beispiels

Soweit zur Theorie. Nun kann in manchen Aufgabestellungen die Frage nach der analogen Signaltreue in Relation zum theoretischen Signal aufkommen. Dafür gibt es verschiedene Bewertungskriterien wie etwa den Klirrfaktor.

Für Sinusförmige Signale gibt der Klirrfaktor den Oberschwingungsgehalt des realen Signals zum Gesamtsignal an, d.h. wie hoch die Anteile im Signal sind, die nicht dem idealen Sinus entsprechen, ihn also verzerren. Der Klirrfaktor bewegt sich zwischen 0 und 1, i.allg. zeigt ein niedriger Klirrfaktor nahe 0 ein Realsignal an, dass sehr nahe am Ideal-Sinus ist und wenig (ungewollte) Oberschwingungen enthält.

Signalqualität bei Signalausgabe mit digitalen Analogausgängen – Klirrfaktor 7:
Klirrfaktor: Idealer Sinus, Ausgabe, Messung und Bewertung

Messung und Bewertung wie folgt:

Im folgenden Beispiel soll diese Klirrfaktor-Berechnung an der Sinusausgabe einer EL4732 (±10 V, 10 kSps je Kanal) mit f = 1 kHz, RLoad = 1 kΩ durchgeführt werden.

Es wird ein einfaches Oszilloskop mit FFT-Funktion verwendet: Im Zeitbereich (blau) ist mit 10-fach Oversampling das 1‑kHz-Sinusförmige Signal zu sehen:

Signalqualität bei Signalausgabe mit digitalen Analogausgängen – Klirrfaktor 8:
Sinusförmiges Ausgangssignal der EL4732 und FFT-Auswertung

Grün ist die FFT-Auswertung. Die daraus abgelesenen Effektivwerte [dBV] (Hinweis: Grundlinie „M“ beachten) und per Vrms = 10-(dBV/20) umgerechnet lauten wie folgt:

Frequenz [kHz]

Effektivwert [dBV]

Effektivwert [Vrms]

1

-4

0,630

2

-51

0,0028

3

-46

0,005

4

-60

0,001

5

-53

0,002

Gemäß der Formel:

Signalqualität bei Signalausgabe mit digitalen Analogausgängen – Klirrfaktor 9:

ergeben sich 0,92% Klirrfaktor.