Informationstechnik
02-23 MiniVibe
Sommersemester 2017
stsi1012@hs-karlsruhe.de
zima1013@hs-karlsruhe.de
Quellcode
Um aus den Messdaten eine Fourie-Transofrmation zu berechnen wurde MatLab verwendet.
Folgendes Programm liest eine, vorher in das Programm per "drag&drop" importierte log-Datei ein, berechnet die spektrale Verteilung und zeigt sowohl den x-/ als auch den y-Graph an.

Werden diese Daten für spätere Berechnung noch weiter benötigt kann man die Frequenzen und die dazugehörigen Amplituden aus den Arrays fftx/ffty/frequenz exportieren.

  t = data(:, 1)/1000;
Signalx = data(:, 2);
dt=t(2)-t(1); % Schrittweite
Fa = 1 / dt; % Abtastfrequenz
Fg = Fa / 2; % Grenzfrequenz, hier wird das Spektrum gespiegelt
n = length(Signalx); % Laenge des Signals
FFT_Signalx = abs(fft(Signalx,n)/n); % Fast Fourier Trafo
f=(0:floor(n/2))/(n*dt); %Frequenzachse bis zur Grenzfrequenz

subplot(2,1,1)

plot(f,FFT_Signalx(1:length(f)));
title('FFT der x-Komponente');
xlabel('Frequenz in Hz');
ylabel('Amplitude');
grid on;
axis([0 250 0 40])

Signaly = data(:, 3);
dt=t(2)-t(1); % Schrittweite
Fa = 1 / dt; % Abtastfrequenz
Fg = Fa / 2; % Grenzfrequenz, hier wird das Spektrum gespiegelt
n = length(Signaly); % Laenge des Signals
FFT_Signaly = abs(fft(Signaly,n)/n); % Fast Fourier Trafo
f=(0:floor(n/2))/(n*dt); %Frequenzachse bis zur Grenzfrequenz

subplot(2,1,2)
plot(f,FFT_Signaly(1:length(f)));
title('FFT der y-Komponente');
xlabel('Frequenz in Hz');
ylabel('Amplitude');
grid on;
axis([0 250 0 300]);

ffty = FFT_Signaly(1:length(f));
fftx = FFT_Signalx(1:length(f));
frequenz = f';
Quellcode als MatLab-Script Datei zum downloaden !
       
Der Quellcode für die Motoransteuerung durch die App wurde etwas erweitert. Wie die Analye der verschiedenen Geschwindigkeiten gezeigt hat, sind hauptsächlich die niedrigen Drehraten proplematisch. Daher soll über das Geschwindigkeitenspektrum die verschiedenen Ansteuerungsarten des Motors kombiniert werden:
In dem langsamen Bereich soll der Mikroschrittbetrieb verwendet werden, bei den mittleren Drehzahlen der Interleavebetrieb und hohen Geschwindigkeiten díe Doublecoilansteuerung.

Folgender Code-Ausschnitt soll verdeutlichen wie das Programm erweitert wurde.

  case 97: // Linkslauf
if (digitalRead(6) == HIGH) { // Schlitten ist nicht am linken Endschalter

switch(Drehzahl){               //Abfrage welche Drehzahl eingestellt ist
case 18:                        //langsamste Drehzahl -> Mikrostep ff+3
Serial.println("Mikrostep 1");
myMotor->setSpeed(50);
myMotor->step(3, FORWARD, MICROSTEP);  //^

break;

case 36:
Serial.print("Mikrostep 2");
myMotor->setSpeed(1000);
myMotor->step(5, FORWARD, MICROSTEP);

break;

case 54:                    // Mittlere Drehzahl -> Interleave ff+3
Serial.println("Interleave 1");
myMotor->setSpeed(60);
myMotor->step(1, FORWARD, INTERLEAVE);  //^
break;

case 72:
Serial.println("Interleave 2");
myMotor->setSpeed(120);
myMotor->step(1, FORWARD, INTERLEAVE);
break;

case 90:
Serial.println("Interleave 3");
myMotor->setSpeed(220);
myMotor->step(1, FORWARD, INTERLEAVE);
break;

case 108:
Serial.println("Interleave 4");
myMotor->setSpeed(255);
myMotor->step(1, FORWARD, INTERLEAVE);
break;

case 126:
Serial.println("Double 1");
myMotor->setSpeed(150);
myMotor->step(1, FORWARD, DOUBLE);
break;

case 144:
Serial.println("Double 2");
myMotor->setSpeed(200);
myMotor->step(1, FORWARD, DOUBLE);
break;

case 162:
Serial.println("Double 3");
myMotor->setSpeed(255);
myMotor->step(1, FORWARD, DOUBLE);
break;

case 180:
Serial.println("Double 4");
myMotor->setSpeed(1000);
myMotor->step(1, FORWARD, DOUBLE);
break;
}
   
Kompletten Quellcode als Zip-Datei zum downloaden !
       

02-23 MiniVibe Sommersemester 2017