Prof. Dr. R.Kessler, FH-Karlsruhe, Fachb. Mechatronik und Naturwissenschaften Pad6.doc, Seite 1 Pendel-Positionierung mit „Paddel“ ein Versuch zur Regelungstechnik Experimente und Simulink- Simulation (vgl. die Tephys-Simulation: http://www.home.fh-karlsruhe.de/~kero0001/Pad4.PDF) Aufgabenstellung Ein drehbar gelagertes Pendel ist mit Hilfe eines Gleichstrom-Motors zu positionieren. Dabei soll sich der Motor nicht auf einem ortsfesten Fundament abstützen, sondern über drehbare „Paddel“ soll sich der Motor über den „Luftwiderstand“ auf der Luft „abstützen“. Der Vorgang ist vergleichbar mit einem Boot, das mit Hilfe von Paddeln auf dem Wasser zu positionieren ist. Die Paddel haben im Gegensatz zu Propellern keinen „Auftrieb“, sondern wirken nur durch ihren Strömungswiderstand. Stator und Pendel starr miteinander verschraubt Rotor Stator des DC-Motors reibungsarme Montage des Winkel-Potis WinkelPotentiometer 10 Gang Wendel PaddelFlügel rML = Gleitreibung der Motor-Lager PendelStange Kugellager für Pendel-Welle Grundplatte . Sie kann mit Gelenk-Muffe um 90 Grad geschwenkt werden rPL = Gleitreibung des Pendel-Lagers Die Paddel sind einfache Rechteck-Flächen, z.B. aus Kunststoff. Sie haben kein „Profil“. Bei der Rotation üben sie also keine „Auftriebskraft“ aus (wie ein „Propeller“). Bei der Drehung der Paddel muß der Motor ein Drehmoment ausüben. Dies wirkt auch auf das Pendel. Bei konstanter Winkelgeschwindigkeit wM des Motors wirkt nur das Widerstands -Moment der Luftreibung (= wM*abs(wM) * Kpad ) proportional zum Quadrat von wM, bei veränderlicher Winkelgeschwindigkeit wirkt zusätzlich das Beschleunigungs-Moment Jpad * dwM/dt Wie aus der nachfolgenden Erläuterung hervorgeht, enthält die Anordnung mehrere Nicht-Linearitäten: Gleitreibung der Motorlager und der Pendellager, Luftwiderstand von Paddel und Pendel, Sinus des Pendelwinkels, Begrenzungen der Regler-Stellgröße. Die mathenmatische Beschreibung kann also nicht mit dem komplexen Frequenzgang und nicht mit der Laplace -Transformation erfolgen, sondern sie muß numerisch durchgeführt werden. Mit numerischer Simulation mit TEPHYS oder mit SIMULINK erhält man gute Übereinstimmung mit den Experimenten (vgl. nachfolgenden Text) Prof. Dr. R.Kessler, FH-Karlsruhe, Fachb. Mechatronik und Naturwissenschaften Pad6.doc, Seite 2 Aufstellen der DGLn Die „Elektrik“ des Motors (Gleichstrom-Motor): Das Ersatz-Schaltbild eines Gleichstrom-Motors ist bekanntlich wie folgt (linkes Teilbild): i uM L R kg*wM i uM L R kg*(wM-wPe) Dabei ist uM die an den Motorklemmen anliegende Spannung, i der Strom, R der Ohm’sche Widerstand des Motors , L die Induktivität der Motorspule und kg*wM ist die infolge der Winkelgeschwindigkeit wM der Motorwelle induzierte elektrische Spannung. kg ist die „Generatorkonstante“. Da im vorliegenden Falle das Gehäuse des Motors mit dem Pendel starr verbunden ist, bewegt sich das Motorgehäuse mit der Winkelgeschwindigkeit wPe des Pendels, folglich ist jetzt gemäß dem rechten Teilbild die induzierte Spannung kg* (wM-wPe) Der Maschensatz, angewendet auf das rechte Teilbild, liefert die DGL uM = R*i + L *di/dt + kg * (wM-wPe). Wir wollen im Folgenden den Einfluss der Motorinduktivität vernachlässigen, setzen also einfach L=0. Dann bleibt die algebraischen Gleichung uM = R*i + kg * (wM – wPe ) und daraus die einfache Gleichung für den Strom i i = ( uM - kg*(wM -wPe) ) / R Die Mechanik des Motors: Die Motorwelle dreht sich (bezogen auf ein ruhendes Koordinatensystem) mit der Winkelgeschwindigkeit wM. Auf die Motorwelle wirken mehrere Drehmomente : Antriebsdrehmoment: Der Strom i erzeugt das Antriebsdrehmoment kg * i. Es wirkt einerseits auf die Motorwelle, andererseits „stützt“ sich dies Drehmoment auf dem Motorgehäuse ab. Auf das Motorgehäuse wirkt also infolge des Stromes das gleich große, aber entgegengesetzte Drehmoment –kg*i. Luftwiderstand: Mit der Motorwelle dreht sich das Paddel. Die Flächen des Paddels erfahren beim Drehen der Motorwelle ein durch den Luftwiderstand der Paddel erzeugtes Drehmoment. Dies wird angesetzt als Mpad = - Kpad * wM * abs(wM). Es wirkt also entgegensetzt zur Winkelgeschwindigkeit wM und proportional dem Quadrat von wM. Lagerreibung: Die Motorlager üben ein Reibungsdrehmoment aus , das wir als Gleitreibung annehmen wollen: -rML*sign( wM-wPe), es ist also proportional einer Konstanten rML („MotorLager“) und ist abhängig vom Vorzeichen der Differenz wM – wPe. Das gleiche Drehmoment wirkt mit umgekehrten Vorzeichen auch auf das Pendel Das Paddel und die Motorwelle haben das gesamte Massenträgheitsmoment Jpad . Nach dem Newton’schen Grundgesetz für die Drehdynamik ergibt sich also die DGL für die Motorwinkelgeschwindigkeit wM Jpad * Winkelbeschleunigung = Summe der auf die Motorwelle wirkenden Drehmomente, oder die Formeln eingesetzt: Jpad* dwM/dt = kg*i - Kpad * wM * abs(wM) –rML*sign ( wM – wPe) Das Pendel: Das Pendel hat (gegen die Vertikale) den Pendelwinkel xPe und die Winkelgeschwindigkeit wPe = dxPe/dt. Die Schwerkraft mPe*g der Pendelmasse mPe (g=Fallbeschleunigung) erzeugt im Schwerpunkt S (Abstand Ls von der Drehachse des Pendels) das Drehmoment - mPe* g* Ls * sin (xPe). Das Produkt mPe * g *Ls wollen wir als Konstante mgLs abkürzen, also ist das Schwerkraftdrehmoment – mgLs * sin(xPe) Prof. Dr. R.Kessler, FH-Karlsruhe, Fachb. Mechatronik und Naturwissenschaften Pad6.doc, Seite 3 Reibungsdrehmomente auf das Pendel: Die Lagerreibung des Pendel-Lagers erzeugt das Gleitreibungsdrehmoment – rPL*sign( wPe). Das von der Luftreibung auf das Pendel wirkende (turbulente) Drehmoment wird angesetzt als - rtu * wPe * abs(wPe), also proportional dem Quadrat der Winkelgeschwindigkeit. Zusätzlich wollen wir noch ein viskoses Reibungsdrehmoment annehmen: rP*wPe, also proportional wM. Bei der obigen Behandlung des Motors wurden schon zwei weitere Drehmomente diskutiert, die ebenfalls auf das Pendel wirken: Das Antriebsdrehmoment - kg*i und das Drehmoment des Motorlagers: rML*sign( wM-wPe) Das Pendel hat das Massenträgheitsmoment Jpe. Die Drehdynamik des Pendels liefert also folgende DGL: Jpe*dwPe/dt = - kg*i + rML* sign(wM - wPe) –mgLs * sin(xPe) – rP*wPe - rtu*wPe*abs(wPe) –rPL*sign(wPe) Die Simulink-Schaltung: Gesamtschaltung: Datei Pad20.mdl Kessler Nov 05 Aufruf mit Parameter-Datei pad20_X mit X = 14, 15, 16, 17, 18, 20 Pendel-Positionierung mit Paddel fixed step dt , Ode5 W uM Mel wPe W-periodisch UnivRegler Umax Umin wahlweise mit Tiefpass uXoTP 1 Kx Pendel uX R0*CTP.s+1 xPe kon kg/R t 1/Jpad rML*sgn(u) rML*sgn(wM-wPe) Clock TP 1/s Kpad*u*abs(u) wM wPe kg Zusammenstellung der Formeln: i = ( uM - kg*(wM-wPe) ) / R Jpad* dwM/dt = kg*i - Kpad * wM * abs(wM) -rML*sign ( wM - wPe) Jpe*dwPe/dt = - kg*i + rML* sign(wM- wPe) -mgLs * sin(xPe) - rP*wPe- rtu*wPe*abs(wPe) -rPL*sign(wPe) Anschließend die Subsystme der Schaltung: Subsystem W-periodisch + Gleichanteil aW*sgn( cos( 2*pi*(f*u+ del )) ) a0 Quelle für Sollwert W, anstiegsbegrenzt u. verrundet 1/tW 1/s +- vma f=0.0735; aW=0.6; tW=0.1; vma=.5; 1 W Prof. Dr. R.Kessler, FH-Karlsruhe, Fachb. Mechatronik und Naturwissenschaften Pad6.doc, Zu pad20.MDL Seite 4 "Universal"-PID-Regler 1 kW X kW*W 2 1/Ti W 1/s Ap 1 Y 3 kon -1 Td du/dt Z.B.: Ap= - 100; Ti=1000; Td=0; kW=1; konv=1; Tephys wäre so: Ein = W - X int = int + Ein * dt / Ti DA = ja (kon) * (Ein -Einalt) /dt - nein (konv) * ( x - Xalt) /dt Einalt = Ein Xalt = X Y = Ap * ( kW * W - X + int + Td * DA ) 1 in_1 2 Mel Subsystem Pendel von Datei Pad20.MDL s.u. 1 dwPe/dt wPe 1/JPe in_2 tst 1 1 s s 0 rPL*sgn(u)+rP*u+rPtu*u*abs(u) ReibMoment Pendel: PendelLager, viskos, turbulent in_2 = rML*sgn(wM-wPe) = ReibMoment vom MotorLager Startwert xPes 2 xPe mgLs * sin(u) SchwerkraftMoment Jpe*dwPe/dt = - kg*i + rML* sign(wM- wPe) -mgLs * sin(xPe) - rP*wPe- rtu*wPe*abs(wPe) -rPL*sign(wPe) Anschließend Simulationsläufe , der jeweilige Aufruf steht unterhalb des Bildes. Hinweis zu den Messungen: Die in den nachfolgenden Bildern benutzten Messungen sind die gleichen wie bei der Tephys-Simulation (s. den oben zitierten Link). Diese Tephys-Messungen wurden so umkodiert, dass sie von Matlab gelesen werden können, vgl. die unten eingefügte Matlab-Datei) In jedem Bild sind die beiden oberen Kurven die gemessenen Kurven: Sollwert y1 (blau, Rechteck oder anstiegsbegrenztes Rechteck) und Istwert y2 (grün). Darunter drei Simulationskurven: Sollwert W blau, Istwert X grün und rot die Motorspannung uM Prof. Dr. R.Kessler, FH-Karlsruhe, Fachb. Mechatronik und Naturwissenschaften Pad6.doc, Seite 5 Als Titel der Figuren eine Zeile mit einigen Parametern: Bild Nr, Parameter des Sollwertes W (Amplitude aW, Frequenz f, Phasenlage del), Parameter des Reglers (Verstärkungsfaktor Ap, Zeitkonstante Td des D-Anteils) Die Bildunterschrift (xlabel) ist der beim Messein eingegebene Messkommentar. Man erkennt u.a., dass die Motorspannung (rote Kurve) in allen Beispielen in die positive und in die negative Begrenzung geht. Das ist eine von mehreren Nichtlinearitäten des Systems. Die anderen Nichtlinearitäten wurden oben schon erwähnt: Gleitreibung der Motorlager und der Pendellager, Luftreibung von Motor und Pendel, Sinus des Pendelwinkels Wegen dieser Nichtlinearitäten kann die Simulation nur numerisch durchgeführt werden. LaplaceTransformation und auch Bode-Diagramm sind ungeeignete Berechnungsmethoden. Wie aus den Bildern hervorgeht, sind die Kurven recht kompliziert. Dennoch stimmen die Simulations-Kurven weitgehend mit den Messkurven überein Bild=14, aW=1.2, f=0.0735, del=-0.02, vma=50, Ap=-200, Td=0 Nr Zeit W ux uM*0.015 4 1 4.78 2 6.28 3 -1.2 -1.2 -2.24 -1.38 -0.21 -0.21 2 y1/2+2 y2/2+2 W uX uM*0.02 1 0 -1 -2 -3 0 5 10 15 20 Pad14m,Pad y1=W(1V),y2=uX(1V),P-Regl:Rp=2.2M, Soll+-180ø Aufruf mit pad20_14 25 Sollwert +- 180 Grad, also Pendel steht Kopf, P-Regler Ap= -200 Bild=15, aW=1.2, f=0.0735, del=-0.03, vma=500, Ap=-100, Td=0 4 y1/2+2 y2/2+2 W uX uM*0.02 3 2 1 0 -1 -2 -3 0 5 10 15 20 Pad15m,Pad y1=W(1V),y2=uX(1V),P-Regl:Rp=1M, Soll+-180ø Aufruf mit pad20_15 Sollwert +- 180 Grad, also Pendel steht Kopf, P-Regler Ap= -100 25 Prof. Dr. R.Kessler, FH-Karlsruhe, Fachb. Mechatronik und Naturwissenschaften Pad6.doc, 4 Seite 6 Bild=16, aW=1.2, f=0.0735, del=0.03, vma=50, Ap=-200, Td=0.0357 y1/2+2 y2/2+2 W uX uM*0.02 3 2 1 0 -1 -2 0 5 10 15 20 25 Pad16m,Pad y1=W(1V),y2=uX(1V),PD:Rp=2.2M,Rd=23.8k,Cd1.5/uF,Rd1=2k Soll+-180ø Aufruf mit pad20_16 Sollwert +- 180 Grad, also Pendel steht Kopf, PD-Regler Ap= -200, Td=0.0357 3 Bild=17, aW=1.2, f=0.0735, del=-0.05, vma=50, Ap=-200, Td=0.1125 y1/2+2 y2/2+2 W uX uM*0.02 2 1 0 -1 -2 0 5 10 15 20 25 Pad17m,Pad y1=W(1V),y2=uX(1V),PD:Rp=2.2M,Rd=75k,Cd1.5/uF,Rd1=6.3k Soll+-180ø Aufruf mit pad20_17 Sollwert +- 180 Grad, also Pendel steht Kopf, PD-Regler Ap= -200, Td=0.1125 4 3 2 Bild=18, aW=2.998, f=0.098, del=-0.15, vma=50, Ap=-200, Td=0.18 y1/2+2 y2/2+2 W/2 uX/2 uM*0.02 1 0 -1 -2 0 5 10 15 20 25 Pad18m,Pad y1=W(1V),y2=uX(1V),PD:Rp=2.2M,Rd=40k,Cd=4.5/uF,Rd1=4k Soll=+-5*90ø Aufruf mit pad20_18 Sollwert +- 5 * 90 Grad, also Pendel steht waagrecht, PD-Regler Ap= -200, Td=0.18 Prof. Dr. R.Kessler, FH-Karlsruhe, Fachb. Mechatronik und Naturwissenschaften Pad6.doc, 3 2 1 Seite 7 Bild=20, aW=2.998, f=0.07825, del=-0.06, vma=10, Ap=-200, Td=0 y1/2+2 y2/2+2 W/2 uX/2 uM*0.02 0 -1 -2 -3 0 5 10 15 20 25 Pad20m,Pad y1=W(5V),y2=uX(5V),P:Rp=2.2M,[Rd=40k,Cd=4.5/uF,Rd1=4k] Soll=+-5*90ø Aufruf mit pad20_20 Sollwert +- 5 * 90 Grad, also Pendel steht waagrecht, P-Regler Ap= -200 Eine der aufrufenden Matlab-Dateien: % Datei pad20_15.m Parameter-File zum Betreiben des % Simulink-Modells pad20.MDL (Paddel, R46, 20.11.02, R59 S.157 ) % Die Messungen stammen aus früheren Tephys-Messungen, sind umkodiert % für die Benutzung mit Matlab format compact; % unterdrückt unnötige Leerzeilen clear; % So sollte man jedes Programm anfangen, sonst erlebt man % ev. Überraschungen infolge alter Variablenwerte f = 0.07350; % Frequenz des Sollwertes del = -0.03; % Phasenverschiebung des Sollwertes aW = 1.20; % Amplitude des Sollwertes tW = 0.010; % für Anstiegsbegrenzer, s. Schaltung vma = 500; % vma= maximale Steigung des Sollwertes dt = 0.0010156250; % dt = Rechenschrittweite kg = 0.08110; % kg = Generatorkonstante des Motors R = 10; % R = Ohmscher Widerstand des Motors rML = 0.0059; % rML = Gleitreibung des Motorlagers Kpad = 2.3700E-4; % Faktor bei turbulenter Reibung Paddel Jpad = 0.0014920; % Jpad = MassenTrägheitsMoment des Paddels rPL = 0.00220; % rPL= Gleitreibung PendelLager rP = 0; % rP = viskose Reibung Pendel rPtu = 2E-4; % rPtu = turbulente Reibung Pendel mgLs = 0.0560; % mgLs=m*g*Ls,m= Pendelmasse, Ls=Schwerpktradius JPe = 0.00287; % Jpe = MassenTrägheitsMoment des Pendels Kx = 0.382; % Kx = SensorKonstante PendelWinkel R0 = 3.3E+4; % RTP = 10000; % RTP = Widerstand des Tiefpasses CTP = 2.2000E-0008 ; % CTP = Kapazität des Tiefpasses TP = 0 ; % TP = 0--> ohne Tiefpass Td = 0 ; % Td = Zeitkonstante D-Anteil des PID-Reglers Ap = -100; % Ap = Proportionalitätskonstante PID-Regler Umax = 12.50; % Umax = maximale Motorspannung Umin = -14.0; % Umin = minimale Motorspannung tmax = 20.8; % tmax = Simulationszeit tst =0; % tst = Startzeit (s. Simulink-Schaltung) xPes =0; % xPes = Startwert Pendelwinkel, s. Schaltung kon =1; % kon=1 konventioneller D-Anteil kW =1; % kW Faktor im Regler (s. Schaltung Regler) a0 =0; % a0 = Gleichanteil Sollwert Ti=100000;% Ti =Zeitkonstante I-Anteil des PID-Reglers Prof. Dr. R.Kessler, FH-Karlsruhe, Fachb. Mechatronik und Naturwissenschaften Pad6.doc, Bild=15; %***************** Messung laden und darstellen: ************* Y=load('Pad15m'); % Messdatei, Messungen mit Hameg-Oszi HM 1208 tmaxm=Y.tmax; kom=Y.kom; anz=Y.anz; y1=Y.Y1; % Y1 = Sollwert y2=Y.Y2; % Y2 = Istwert dtm=tmaxm/anz; % dtm = Zeitschrittweite bei der Messung tm=0:dtm:tmaxm-dt; % tm= Zeitvektor für Darstellung der Messung figure(Bild);clf reset; plot(tm,y1/2+2, tm,y2/2+2); grid on; hold on; % Damit man weiter in die Figur plotten kann % ************* jetzt simulieren: *****************************+ if Bild ==14 pad20; end; % Aufruf der Simulink-Datei auf Bildschirm sim('pad20',[0,tmax]); % Durchführung der Simulation set(0,'defaultlinelinewidth',1.0); % 1.0 Strichstärke normal plot(t,W,t,uX,t,uM*0.02); grid on; legend('y1/2+2','y2/2+2','W','uX','uM*0.02'); SBild=['Bild=',num2str(Bild)]; % Bildung von Strings für Titel SaW=[', aW=',num2str(aW,15)]; Sf=[', f=',num2str(f,15)]; Sdel=[', del=',num2str(del,15)]; SAp=[', Ap=',num2str(Ap,15)]; STd=[', Td=',num2str(Td)]; Svma=[', vma=',num2str(vma)]; Ti=[SBild,SaW,Sf,Sdel,Svma,SAp,STd]; % Titel als StringVektor title(Ti); % cursor aktivieren: tc= t; % Vektor der x-Achse, hier die Zeit yc= [W'; uX'; uM'*0.02]; % die Daten sind Spaltenvektor, drum transponiert ofsc= [0, 0,0 ]; % Der Vektor der y-Offsets %.....5....1....5....2....5....1....5....3....5....4....5.... Stry=[' Zeit W ux uM*0.02 ']; % Tabellenkopf tab=1;while 1 SimCurs2; end; set(0,'defaultlinelinewidth',1); xlabel(kom) % Der Messkommentar als Bildunterschrift (xlabel) hold off; % Damit die nachfolgenden Figuren frisch anfangen % Ende Datei Pad20_15.m Seite 8