WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

6DOF Echtzeitplot beschleunigen

 

grafiker
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 07.02.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.10.2012, 19:18     Titel: 6DOF Echtzeitplot beschleunigen
  Antworten mit Zitat      
Hi!

Ich lese per mikrocontroller die Daten eines 6DOF Sensors aus (Invensense MPU6050 mit 3*Gyro, 3*Accelerometer). Diese Daten will ich nun sämtlich in Echtzeit über der Zeit auftragen. Dazu sende ich die Daten über die serielle Schnittstelle an den PC und von dort an übernimmt MATLAB.

Nun kann ich allerdings nur immer 2 Daten gleichzeitig plotten, sonst hakt die Darstellung. Wie ihr im Code seht, habe ich z.B.
Code:
       subplot(3,2,5); plot(dataACCZ,'color','blue');
        subplot(3,2,6); plot(dataGYROZ,'color','blue');
einkkommentiert, d.h. hier plotte ich nur je einen der drei Beschleunigungs-und Drehbeschluenigungswerte.


Wie kann ich die Darstellung der Werte signifikant beschleunigen?

Ich hab jetzt schon so manches im Code ausprobiert, komme aber hier einfach nicht weiter. Der Code ist nicht ansatzweise schnell genug, und ich bin nicht sicher ob ich mich beim Beschleunigen des Codes auf die str2double -Wandlung oder eher auf das Plotten an sich konzentrieren soll.

Schöne Grüße
Andy

Öffnen der Schnittstelle:
Code:
%% Serielle_Schnittstelle_erzeugen
% öffnen     %clear all
    %s = serial('COM3','BAUD',9600);
    s = serial('COM3','BAUD',115200);
    global ByteCntr;    %Anzahl empfangener Zahlen
    ByteCntr = 0;
    global Cntr2;      
    Cntr2 = 0;
    global data;
    data = 0;
   
   
    s.BytesAvailableFcn = @MATLAB_Serial_Portfcn;
    %s1.OutputBuffersize = 1000000;
    %s.Terminator = 'CR'/'LF'/'\r\n';                % 'CR/LF' Auftreten eines solchen Zeichens löst callbackFcn aus
    %.BytesAvailableFcnMode = 'terminator';
   
    %Serielle Schnittstelle öffnen
    fopen(s);



Daten plotten:
Code:
function MATLAB_Serial_Portfcn(s, event)
%MATLAB_SERIAL_PORTFCN
%This is the callback fcn to my MATLAB_SerialCOM.m Script.
%it is called whenever there are bytes available at the serial port.
global ByteCntr;
global Cntr2;
global dataACCX;
global dataACCY;
global dataACCZ;
global dataGYROX;
global dataGYROY;
global dataGYROZ;

ByteCntr = ByteCntr + 1;
Cntr2 = Cntr2 + 1;

%Datenreihe aktualisieren
    if (Cntr2 == 500)
        %Länge der Datenreihe ist 500
        Cntr2 = 1;
        cla(gca);
    end    
   
%Daten von COM-Port holen
    IncomingStringArray = regexp(fgetl(s),'/','split');
    try
        %String trennen
        %str2double: LANGSAM! 0.0013seconds
        dataACCX(Cntr2) = str2double(IncomingStringArray(1));
        dataACCY(Cntr2) = str2double(IncomingStringArray(2));
        dataACCZ(Cntr2) = str2double(IncomingStringArray(3));
        dataGYROX(Cntr2) = str2double(IncomingStringArray(4));
        dataGYROY(Cntr2) = str2double(IncomingStringArray(5));
        dataGYROZ(Cntr2) = str2double(IncomingStringArray(6));

%         %sscanf: SCHNELL!
%         tic
%         dataACCX(Cntr2) = sscanf(IncomingStringArray(1),'%i');
%         dataACCY(Cntr2) = sscanf(IncomingStringArray(2),'%i');
%         dataACCZ(Cntr2) = sscanf(IncomingStringArray(3),'%i');
%         dataGYROX(Cntr2) = sscanf(IncomingStringArray(4),'%i');
%         dataGYROY(Cntr2) = sscanf(IncomingStringArray(5),'%i');
%         dataGYROZ(Cntr2) = sscanf(IncomingStringArray(6),'%i');
%         toc
    catch
    end;    
   




%2D-Diagramm plotten
    if (ByteCntr == 7)
        %Plot alle 7 Werte erneuern        
%        subplot(3,2,1); plot(dataACCX,'color','red');
%        subplot(3,2,2); plot(dataGYROX,'color','red');
%        subplot(3,2,3); plot(dataACCY,'color','green');
%        subplot(3,2,4); plot(dataGYROY,'color','green');
        subplot(3,2,5); plot(dataACCZ,'color','blue');
        subplot(3,2,6); plot(dataGYROZ,'color','blue');
        % Geschwindigkeit v. Plotten optimieren http://www.gomatlab.de/erstellung-v.....ts-optimieren-t14414.html
        %tic
        %toc  
    %Plot Einstellungen  
        %ylim([-20000 20000]); %für Gyros %Accs
        %xlim([0 500]);
        %grid(gca,'major')
        %grid on;
        %whitebg('black')
        %hold on;
        ByteCntr = 0;
       
    end
end
 
Private Nachricht senden Benutzer-Profile anzeigen


Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.