kramann.info
© Guido Kramann

Login: Passwort:










3.1.12 Bestimmung weiterer Parameter aus der dynamischen Messung "Rohdaten6"

  • Hier wurde der Stromverlauf und der Drehzahlverlauf bei sprunghaftem Anstieg der Spannung auf 5Volt gemessen.
  • Über diese Messung ist es möglich die Induktivität L, als auch das Trägheitsmoment J und die viskose Reibung D.
  • Zunächst müssen die Meßdaten geglättet und aufbereitet werden.
  • Von Hand können die Meßdaten zunächst auf den relevanten Zeitabschnitt nach Einschalten der 5V bis zum Erreichen des stationären Zustands nach 0,5Sekunden reduziert werden.

Aufbereitung des kontinuierlichen Verlaufs der Winkelgeschwindigkeit ω aus den gemessenen Pulsen

  • Da im Umfang der Lochscheibe 12 Löcher gleichmäßig verteilt sind, bedeutet jeder Puls ein Weiterdrehen um π/6 rad.
  • Im ersten Scilab-Programmteil wird eine Winkel/Zeit-Folge erstellt.
  • Dabei ist zu beachten, dass der Motor erst losläuft, wenn die Haftreibung überwunden wurde.
  • Die Stelle wurde ungefähr vermessen: Spannung/Strom, ab der der Motor gerade losläuft: 0,8V und 43mA
  • Über den dynamischen Stromverlauf ließe sich diese Stelle aber auch genauer identifizieren.
  • Der Zeitpunkt des Loslaufens ist wichtig, da er den Nulldurchgang der Kurve der Winkelgeschwindigkeit bildet.
  • Somit wird im ersten Teil des Scilab Skriptes der Verlauf des Motorstroms aufbereitet, um den Anlaufzeitpunkt des Motors zu erkennen.
  • Nach einem stetigen Anstieg des Stroms, sollte er zu diesem Zeitpunkt etwas abfallen:
  • (Anhand der Pulse der Lochscheibe ist der Anlaufzeitpunkt nicht genau bestimmbar, da die Scheibe vor dem ersten Lochdurchgang schon etwas gelaufen ist.)
//*********** TEIL 0 *******************
//Konstante PI merken:
PI = 3.1415926535897932384626433832795
//Matrix mit Meßdaten laden:
M=fscanfMat("messdaten.txt");

//Matrix-Dimensionen feststellen (Zeit, Iproportional, Pulse, U):
[zeilen,spalten] = size(M)

//t = t - tmin:
tmin = M(1,1);
for i=1:zeilen
    M(i,1) = M(i,1) - tmin;
end
t = M(:,1);

//*********** TEIL 1 *******************
//Aufarbeitung des Stromverlaufs
//1. Umrechnung als Strom I: Messung U an Widerstand R=98,9Ohm, Vorzeichen drehen:
imotor = M(:,2)./(-98.9);
clf();
plot(t,imotor);
 

Code 3.1.12-1: Scilab Auswerteprogramm Teil 1

BILDBESCHREIBUNG

Bild 3.1.12-1: Stromverlauf gesamt: Strom i in A gegen die Zeit in s.

BILDBESCHREIBUNG

Bild 3.1.12-2: Stromverlauf Übergang Haft- zu Gleitreibung, erste 0,014 Sekunden: Strom i in A gegen die Zeit in s.

BILDBESCHREIBUNG

Bild 3.1.12-3: Stromverlauf Übergang Haft- zu Gleitreibung, erste 0,007 Sekunden: Strom i in A gegen die Zeit in s.

  • Gemäß dem Schaubild für den Stromverlauf gehen wir davon aus, dass der Übergang zur Gleitreibung und das Anlaufen des Motors nach 0,002s stattgefunden haben.
  • Im folgenden soll der zeitliche Winkelverlauf φ und die Winkelgeschwindigkeit ω bestimmt werden.
  • Bei jeder Pulsflanke der Lochscheibe, hat diese sich um π/6 rad weitergedreht.
  • Das Aufsummieren dieser Schrittweite über die Zeit ergibt den Verlauf in groben Schritten.
  • Dieser grobe Verlauf dient dann als Grundlage für die Anwendung der Kleinsten Quadrate Methode.
  • Der Verlauf wird mit einem Polynom 8. Grades versucht anzunähern.
  • Da als weitere Bedingungen gilt, dass bei t=0,002s der Nulldurchgang sowohl für φ, als auch für ω ist, wird die Zeit einfach um 0,002s verschoben und durch Weglassen des Geradenteils des Polynoms gewährleistet, dass das verschobene Polynom und seine Ableitung durch den Nullpunkt gehen.
  • Im Anschluß muss die gefundene Funktion wieder um t=0,002s zurückgeschoben werden.
//*********** TEIL 2 *******************
//Zeitpunkte merken, wo Pulsflanke -1 unterschreitet merken:
//1. durchzählen
anzahl = 0;
i=1;
gefunden = 0;
while(i<=zeilen)
    while(M(i,3)<-1.0)
        i=i+1;
        if(gefunden==0)
            anzahl = anzahl+1;
        end
        gefunden = 1;
    end
    gefunden = 0;
    i=i+1;
end
anzahl

//Zeitpunkt der Pulsflanke
t_puls = zeros(anzahl+1,1);
//Winkel der Pulsflanke
phi_puls = zeros(anzahl+1,1);

anzahl = 1;
//Bei der um 0,002s verschobenen Funktion,
//ist der Nulldurchgang um Nullpunkt:
t_puls(1,1) = 0.0;
phi_puls(1,1) = 0.0;

i=1;
gefunden = 0;

//2. merken
while(i<=zeilen)
    while(M(i,3)<-1.0)
        i=i+1;
        if(gefunden==0)
            anzahl = anzahl+1;
//Zeit um 0,002s verschieben:
            t_puls(anzahl,1) = M(i,1)-0.002;
            phi_puls(anzahl,1) = phi_puls(anzahl-1,1) +PI/6.0;
        end
        gefunden = 1;
    end
    gefunden = 0;
    i=i+1;
end

clf();
plot(t_puls,phi_puls);

//*********** TEIL 3 *******************
//Annäherung des Verlaufs durch Polynom 8. Ordnung ohne Geradenanteil:
//y(t) = c8*t^8 + c7*t^7 + c6*t^6 + c5*t^5 + c4*t^4 + c3*t^3 + c2*t^2
//Darstellung in der Form Bc+d=0 => Spalten von B: t^2,t^3,t^4, ..., d=-y
//zur Anwendung von LSQ
s2=t_puls.*t_puls;
s3=s2.*t_puls;
s4=s3.*t_puls;
s5=s4.*t_puls;
s6=s5.*t_puls;
s7=s6.*t_puls;
s8=s7.*t_puls;
B = [s2,s3,s4,s5,s6,s7,s8];
d = -phi_puls;
c = lsq(B,-d)
//Kurve t,phi mit Funktion erstellen,
//Dabei die Zeitverschiebung um 0,002s wieder rückgängig machen:
phi = zeros(zeilen,1);
for i=1:zeilen
    tt = t(i,1)-0.002;
    yy = (((((((c(7)*tt+c(6))*tt+c(5))*tt+c(4))*tt+c(3))*tt+c(2))*tt+c(1))*tt*tt);
    if(tt<0.0)
        phi(i,1)=0.0;
    else
        phi(i,1) = yy;
    end
end

//t_puls auch wieder zurückverschieben:
t_puls = t_puls+0.002.*ones(anzahl,1);

clf();
plot(t,phi,'red',t_puls,phi_puls,'blu');

//Bestimmung der momentanen Winkelgeschwindigkeit
//als Ableitung des Näherungspolynoms:
dphi = zeros(zeilen,1);
for i=1:zeilen
    tt = t(i,1)-0.002;
    yy = ((((((8.0*c(7)*tt+7.0*c(6))*tt+6.0*c(5))*tt+5.0*c(4))*tt+4.0*c(3))*tt+3.0*c(2))*tt+2.0*c(1))*tt;
    if(tt<0.0)
        dphi(i,1)=0.0;
    else
        dphi(i,1) =yy; 
    end
end

clf();
plot(t,dphi);
 

Code 3.1.12-2: Scilab Auswerteprogramm Teil 2 und 3

BILDBESCHREIBUNG

Bild 3.1.12-4: Vergleich zwischen φ in rad aus der Pulsfolge (blau) und dem Näherungspolynom (rot) über die Zeit in s.

BILDBESCHREIBUNG

Bild 3.1.12-5: Vergleich zwischen φ in rad aus der Pulsfolge (blau) und dem Näherungspolynom (rot) über die Zeit in s nahe dem Nulldurchgang bei 0,002s.

BILDBESCHREIBUNG

Bild 3.1.12-6: Verlauf der Winkelgeschwindigkeit ω in rad/s aus dem abgeleiteten Näherungspolynom über die Zeit in s.

  • Im folgenden vierten Skriptteil wird der Stromverlauf durch eine Funktion angenähert und anschließend die zeitliche Ableitung di/dt gebildet.
//*********** TEIL 4 *******************
//Der Stromverlauf soll nun auch über Funktionen angenähert werden.
//Eine gute Näherung an die Gesamtfunktion gibt die Arcus-Tangens-Funktion.
//Mit ihr wird zuert ein grober Fit des Verlaufs von Hand gesucht.
//Anschließend wird der Verlauf mit einem additiven Polynom verfeintert.
//Dieser zweite Schritt findet wieder mit Hilfe der Methode der kleinsten Quadrate statt.
//Da gerade im anfänglichen Haftreibungsanteil wenige Meßpunkte vorliegen,
//werden diese interpoliert, um Polynome höheren Grades finden zu können.


maxanzneu = zeilen*8;
grenzzeit = t(zeilen,1);
tneu = linspace(0,grenzzeit,maxanzneu);
ineu = zeros(1,maxanzneu);
ineu = interp1(t,imotor(:,1),tneu,'linear');

tneu = tneu';
ineu = ineu';

[zeil,spal] = size(tneu)

grad = 20;
B = zeros(zeil,grad);
B(:,1) = tneu;
for i=2:1:grad
   B(:,i) = B(:,i-1).*tneu; 
end

d = -ineu(1:zeil,1)+0.029*atan(7000.0*tneu);
c = lsq(B,-d)
imotor_neu = zeros(zeilen,1);
for i=1:zeilen
    tt = t(i,1);
    imotor_neu(i,1) = 0.0;
    for k= grad:-1:1
         imotor_neu(i,1) = imotor_neu(i,1)*tt;
         imotor_neu(i,1) = imotor_neu(i,1)+c(k);
    end
    imotor_neu(i,1) = imotor_neu(i,1)*tt;
    imotor_neu(i,1) = imotor_neu(i,1) +0.029*atan(7000.0*tt);
end

clf();
//plot(t(:,1),imotor(:,1),'red',t(:,1),imotor_neu(:,1),'blu');

//Ableitung für den Strom bilden:
//arctan(x)' = 1/(1+x^2)
dimotor_neu = zeros(zeilen,1);
for i=1:zeilen
    tt = t(i,1);
    dimotor_neu(i,1) = 0.0;
    for k= grad:-1:1
         dimotor_neu(i,1) = dimotor_neu(i,1)*tt;
         dimotor_neu(i,1) = dimotor_neu(i,1)+c(k)*k;
    end
    dimotor_neu(i,1) = dimotor_neu(i,1) +0.029*7000.0/(1.0+7000.0*tt*7000.0*tt);
end
plot(t(:,1),dimotor_neu(:,1),'red');
 

Code 3.1.12-3: Scilab Auswerteprogramm Teil 4: Bestimmung des Stromverlaufs

BILDBESCHREIBUNG

Bild 3.1.12-7: gemessener Stromverlauf (rot) und durch Funktion angenäherter Stromverlauf (blau) in Ampere gegen die Zeit in Sekunden.

BILDBESCHREIBUNG

Bild 3.1.12-8: gemessener Stromverlauf (rot) und durch Funktion angenäherter Stromverlauf (blau) in Ampere gegen die Zeit in Sekunden im Bereich der Haftreibung.

BILDBESCHREIBUNG

Bild 3.1.12-9: Abgeleitete Näherungsfunktion Funktion des Stromverlaufs in Ampere/s gegen die Zeit in Sekunden.

Bestimmung der Modellparameter mit Hilfe der dynamischen Messungen

//*********** TEIL 5 *******************
//Bestimmung einzelner Modellparameter:
//Es stehen nun die zeitlichen Verläufe für folgende Größen 
//sowohl im Haftreibungsbereich, als auch bei Gleitreibung zur Verfügung:
//Strom i: imotor_neu
//Stromänderungsgeschwindigkeit di/dt: dimotor_neu
//Winkelverlauf phi: phi
//Winkelgeschwindigkeit omega: dphi
//Spannung U: konstant 5 Volt.
//
//ELEKTRISCHES MODELL
//E-a) Bestimmung aller Parameter, ohne Verwendung direkt meßbaerer Parameter 
//E-a1) Haftreibungsbereich, dphi/dt = 0rad/s
//Elektrisches Modell: u=Ri+L(di/dt) <=> Ri+L(di/dt) - u =0
//Anzahl der Stützpunkte bis t=0,002:
anz=0;
i=1;
while(t(i,1)<=0.002)
    anz = anz+1;
    i=i+1;
end
anz = anz+1;

B = [imotor_neu(1:anz,1),dimotor_neu(1:anz,1)];
d = -5.0.*ones(anz,1);
c = lsq(B,-d)
//Ergebnis: R=119Ohm, L=24mH

//E-a2) Gleitreibungsbereich, dphi/dt > 0rad/s
//Elektrisches Modell: u=Ri+L(di/dt)+kw <=> Ri+L(di/dt)+kw - u =0
B = [imotor_neu(anz:zeilen,1),dimotor_neu(anz:zeilen,1),dphi(anz:zeilen,1)];
d = -5.0.*ones(zeilen-anz+1,1);
c = lsq(B,-d)
//Ergebnis: R=115Ohm, L=912mH, k=0,0167

//E-b) Bestimmung aller Parameter, mit Verwendung direkt meßbaerer Parameter 
//E-b1) Haftreibungsbereich, dphi/dt = 0rad/s
//Vorgabe von R=24Ohm
B = [dimotor_neu(1:anz,1)];
d = -5.0.*ones(anz,1)+24.0.*imotor_neu(1:anz,1);
c = lsq(B,-d)
//Ergebnis: L=36,7mH

//E-b2) Gleitreibungsbereich, dphi/dt > 0rad/s
//Vorgabe von L=12,78mH und R=24Ohm
B = [dphi(anz:zeilen,1)];
d = -5.0.*ones(zeilen-anz+1,1)+24.0.*imotor_neu(anz:zeilen,1)+12.78*dimotor_neu(anz:zeilen,1);
c = lsq(B,-d)
//Ergebnis: k=0,0544

//MECHANISCHES MODELL
//M-b) Bestimmung aller Parameter, mit Verwendung direkt meßbaerer Parameter 
//M-b1) Haftreibungsbereich, dphi/dt = 0rad/s
//einfach den Zeitpunkt 0,002s nehmen und hier km*i bilden:
km=0.0078;
H=km*imotor_neu(anz,1)
//Ergebnis:
//H=0,0003348Nm

//M-b) Bestimmung aller Parameter, mit Verwendung direkt meßbaerer Parameter 
//M-b2) Gleitreibungsbereich, dphi/dt > 0rad/s
//Mechanisches Modell: J dphi^2/dt^2 = kmi - D dphi/dt - G
//<=> J dphi^2/dt^2 - kmi + D dphi/dt + G = 0
//plot(t,ddphi);
//Verwendung des Bereichs 0,002 bis 0,005,
//in dem die Winkelbeschleunigung monoton fällt.
//Vorgabe von J=0,00000051 kgm^2
anz2=0;
i=1;
while(t(i,1)<=0.005)
    anz2 = anz2+1;
    i=i+1;
end
anz2 = anz2+1;
//anz2-anz+1=32
J=0.00000051;
B = [-1.0.*imotor_neu(anz:anz2,1),dphi(anz:anz2,1),ones(anz2-anz+1,1)];
d = J.*ddphi(anz:anz2,1);
c = lsq(B,-d)
//Ergebnis:
//km=0,0007966
//D=0,0000207 Nms
//G=-0,00075 Nm

//Vorgabe von J=0,00000051 kgm^2 und km=0,000335
km=0.0078;
B = [dphi(anz:anz2,1),ones(anz2-anz+1,1)];
d = J.*ddphi(anz:anz2,1)-km.*imotor_neu(anz:anz2,1);
c = lsq(B,-d)
//Ergebnis:
//D=0,0000207 Nms
//G=-0,00077 Nm
 

//Bereich erweitert:
//Vorgabe von J=0,00000051 kgm^2 und km=0,000335
km=0.0078;
B = [dphi(anz2:zeilen,1),ones(zeilen-anz2+1,1)];
d = J.*ddphi(anz2:zeilen,1)-km.*imotor_neu(anz2:zeilen,1);
c = lsq(B,-d)
//Ergebnis:
//D=0,0000207 Nms
//G=-0,00077 Nm
 

Code 3.1.12-4: Scilab Auswerteprogramm Teil 5: Bestimmung der Modellparameter

Gesamtes Scilab-Skript herunterladen