Einlesen von internen Signalen eines Mikrocontrollers mit Matlab: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 3: Zeile 3:
= Senden von Signalen von einem Mikrocontroller an einen PC =
= Senden von Signalen von einem Mikrocontroller an einen PC =
# Erstellen Sie in Ihrem Mikrocontroller-Programm eine Ausgabe an die RS232-Schnittstelle Ihres PCs. Ein Minimalbeispiel eines Arduino sieht z. B. so aus:
# Erstellen Sie in Ihrem Mikrocontroller-Programm eine Ausgabe an die RS232-Schnittstelle Ihres PCs. Ein Minimalbeispiel eines Arduino sieht z. B. so aus:
<source line lang="c" style="font-size:medium"> </source>  
<source line lang="arduino" style="font-size:medium">  
Serial.print(millis());
Serial.print(";");
Serial.print(Signal1);
Serial.print(";");
Serial.print(Signal2);
Serial.print(";");
Serial.print(Signal3);
Serial.println(",");</source>  


# Lesen Sie die Signale der RS232-Schnittstelle mit Hilfe eines geeigneten Programms ein.
# Lesen Sie die Signale der RS232-Schnittstelle mit Hilfe eines geeigneten Programms ein.

Version vom 10. November 2014, 16:22 Uhr

Sie können Signale von einem Mikrocontroller an einen PC senden und diese dann dort weiterverarbeiten.

Senden von Signalen von einem Mikrocontroller an einen PC

  1. Erstellen Sie in Ihrem Mikrocontroller-Programm eine Ausgabe an die RS232-Schnittstelle Ihres PCs. Ein Minimalbeispiel eines Arduino sieht z. B. so aus:
 
Serial.print(millis());
Serial.print(";");
Serial.print(Signal1);
Serial.print(";"); 
Serial.print(Signal2);
Serial.print(";"); 
Serial.print(Signal3);
Serial.println(",");
  1. Lesen Sie die Signale der RS232-Schnittstelle mit Hilfe eines geeigneten Programms ein.
    1. Geeignete Programme sind z. B. hterm u. a.
    2. Lesen Sie von dem COM-Port, an dem Ihr MIkrocontroller (ggf. über USB) hängt mit der richtigen Baudrate (wie oben im Mikrocontroller eingestellt) die Signale ein.
    3. Speichern Sie die Signale als Textdatei ab. Diese sollte dann so aussehen:
Signal1;Signal2;Signal3,
Signal1;Signal2;Signal3,
Signal1;Signal2;Signal3,
    1. Die Zeilen stellen die Zeitpunkte dar. Es empfiehlt sich, als erstes Signal "Signal1" die Zeit mitzuschicken, z. B. die Anzahl der vergangenen Millisekunden.

Verarbeiten von Signalen aus einer Textdatei mit Hilfe von Matlab-Simulink

  1. Voraussetzung: Die Signale liegen in einer Textdatei in deroben beschriebenen Form vor.
  2. Speichern Sie den u. g. Quelltext von Matlab unter funktion_signale_aus_txtlog_einlesen.m!):


Quelltext

 
function [A] = funktion_signale_aus_txtlog_einlesen(Datei);
%%% Funktion zum Einlesen von Signalen aus einer Textdatei.
%%%
%%% Eingang: Name inkl. Pfad einer Textdatei
%%% Ausgang: Matrix mit allen eingelesen Signalen in den Spalten (je Zeile
%%%             Text eine Zeile in der Matrix)
%%% Format der Textdatei:
%%%             Signal1;Signal2;Signal3,
%%%
%%%             also z. B.: 
%%%             34368;652;27;0;0;0;286;-68391,
%%%             34386;652;27;0;0;0;285;-68392,
%%%             34420;652;27;0;0;0;283;-68394,
%%%             34453;652;27;0;0;0;282;-68395,
%%%             34487;652;27;0;0;0;284;-68393,

%% Datei öffnen und Daten einlesen
% öffnen
fid = fopen(Datei);

% Rohdaten einlesen
raw_data = fread(fid,'*char')';
if ~(strcmp(raw_data(1),';'))
    raw_data=[';',raw_data];
end

%% Semicolons und Kommas finden
string_laenge   = length(raw_data);
semicolon       = strfind(raw_data,';');
komma           = strfind(raw_data,',');
gesamt          = sort([semicolon komma]);

n_spalten = round((length(gesamt)-1)/length(komma));
i_semicolon = 1;
i_komma     = 1;
i_zeilen    = 1;
i_gesamt    = 1;

%% leere Matrix A erzeugen
A = [];

% Matrix A befüllen
try
    while i_gesamt <= length(gesamt)
        for i_spalten = 1:n_spalten
            i_gesamt = i_gesamt+1;
            if i_gesamt >1
                if strcmp(raw_data(gesamt(i_gesamt-1)),',')
                    i_komma = i_komma +1;
                end
            end
            try
                A(i_komma,i_spalten) = str2num(raw_data(gesamt(i_gesamt-1)+1:gesamt(i_gesamt)-1));
            catch
                %fprintf(1, '%s: Catch-Zweig erreicht\n', mfilename);
            end
        end
    end
catch
    %fprintf(1, '%s: Catch-Zweig erreicht\n', mfilename);
end

%% Datei schließen
fclose(fid);