Übung 6.2
Simulation einer von einem Gleichstrommotor angetriebenen Achse
Die Räder eines mobilen Roboters werden von Gleichstrommotoren angetrieben. Der Motor wird von einer PWM-Ausgangskarte angesteuert, d.h. die Frequenz der von ihr ausgegebenen Impulse ist proportional zur Drehzahl des Motors. Im Unterschied zum Servoantrieb aus Beispiel 6.3 werden Drehzahl- und Lageregelung aber nicht in der Umrichterelektronik ausgeführt. Es soll ein Simulationsbaustein entwickelt werden, der das dynamische Übertragungsverhalten von Motor, Getriebe und Drehgeber modelliert.
- a) Entwickeln Sie einen Funktionsbaustein zur Simulation des Motors, der die Frequenz als analoge Größe einliest und die Motordrehzahl simuliert!
- b) Entwickeln Sie einen Funktionsbaustein zur Simulation des Getriebes, das gemäß der Motordrehzahl den Radwinkel berechnet!
- c) Entwickeln Sie einen Funktionsbaustein zur Simulation des Drehgebers, der einen Zählwert für die vom Encoder (s. Ubung 6.1) gemessenen Impulse simuliert!
- d) Setzen Sie die Bausteine aus a-c) im Funktionsbaustein SIM_Axis_DC zusammen!
Lösung:
a) Der Motor hat PT1-Verhalten, d.h. die Übertragungsfunktion ist GM=KM/(1+TMs).
FUNCTION_BLOCK SIM_PT1 (* Funktionsbaustein zum Glätten der Geschwindigkeit *)
VAR_INPUT
y: REAL; (* Eingang *)
K,T_T0: REAL; (* Parameter *)
STOP:BOOL;
END_VAR
VAR_OUTPUT
x: REAL; (* Ausgang *)
END_VAR
VAR (* Gedächtnis der alten Ausgangsgröße / Ausgangsgröße des vorhergehenden Zykluses *)
x_alt: REAL;
END_VAR
IF STOP THEN
x:=0;
ELSE
x:=(T_T0*x_alt+K*y)/(1+T_T0); (* Berechnung der gedämpften Ausgangsgrösse *)
END_IF;
x_alt:=x; (* Zwischenspeichern des aktuellen Ausgangswertes *)
b) Das Getriebe hat I-Verhalten, d.h. die Übertragungsfunktion ist GG=KG/s.
FUNCTION_BLOCK SIM_I
VAR_INPUT
y:REAL;
K_I:REAL;
x0:REAL;
Reset:BOOL;
END_VAR
VAR_OUTPUT
x:REAL;
END_VAR
IF Reset THEN
x:=x0;
END_IF
x:=K_I*y+x;
c) Der Encoder erzeugt für die vom Getriebe ausgegebenen Position einen Zählwert, den die Encoderkarte als DINT ausgibt.
FUNCTION_BLOCK SIM_CIN
VAR_INPUT
IN:REAL;
DIR1: BOOL;
DIR2: BOOL;
PV_MAX:REAL;
PV_MIN:REAL;
END_VAR
VAR_OUTPUT
OUT:UDINT;
END_VAR
VAR
dataword:REAL;
END_VAR
IF ABS(PV_MAX-PV_MIN)>0.001 THEN
dataWord:=(20000/(PV_MAX-PV_MIN))*(IN-PV_MIN); (* 20000 Impulse/Umdrehung*T0echt/T0Sim *)
END_IF
OUT:=REAL_TO_UDINT(dataWord);
IF NOT Dir1 AND NOT Dir2 THEN
dataWord:=0;
END_IF
d)

Speicherprogrammierbare Steuerungen für die Fabrik- und Prozessautomation
4. Auflage erschienen im Hanser Verlag, 2015