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

Problem mit Abtastrate von MPU6050 sensor

 

johnnyenglish
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 24.10.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2018, 09:50     Titel: Problem mit Abtastrate von MPU6050 sensor
  Antworten mit Zitat      
Hallo zusammen,

ich will einen freien Fall mittels des MPU6050 Sensors über die Beschleunigungsmessung aufnehmen. Die Sensordaten lese ich über I2C mit einem Arduino UNO aus.

Folgender Code übermittelt mir unter anderem meine Beschleunigungsdaten:

Code:

a=arduino;
mpu=i2cdev(a,'0x68'); %sensor adress


%% sensor setup
writeRegister(mpu, hex2dec('6B'), hex2dec('00'), 'int16');
writeRegister(mpu, hex2dec('19'), bin2dec('00000111'), 'int8'); %divider set 7 --> 1kHz acc output rate
writeRegister(mpu, hex2dec('1A'), bin2dec('00000000'), 'int8'); %filter set to 260 Hz
writeRegister(mpu, hex2dec('1C'), bin2dec('00000000'), 'int8'); %range set to +-2g --> 16384 LSB/g
writeRegister(mpu, hex2dec('1B'), bin2dec('00000000'), 'int8'); %range set to +-250°/s --> 131 LSB/°/s

%% calibration
acc_1_offset=acc_1_offset_temp;
acc_2_offset=acc_2_offset_temp;
acc_3_offset=acc_3_offset_temp;

gyro_1_offset=gyro_1_offset_temp;
gyro_2_offset=gyro_2_offset_temp;
gyro_3_offset=gyro_3_offset_temp;

%% variables
n=100; %cycles
data=zeros(n,14,'int8');
acc=zeros(n,3, 'int16');
temp=zeros(n,1, 'int16');
gyro=zeros(n,3, 'int16');

j=1;
f=1000; %acceleration output rate
dt=1/f;
time=zeros(n,1);
time(1,1)=0;

%% loop get raw data
while(j<=n)
    x=1;
    for i=59:72 % 14 data registers for accel,temp,gyro
        data(j,x)= readRegister(mpu, i, 'int8');
        x=x+1;
    end
    j=j+1;
end

j=1;

%% loop get data
while(j<=n)
   % acceleration
   acc(j,1)=swapbytes(typecast(data(j,1:2), 'int16'));
   acc(j,2)=swapbytes(typecast(data(j,3:4), 'int16'));
   acc(j,3)=swapbytes(typecast(data(j,5:6), 'int16'));
   acc=double(acc);
   acc(j,1)=(acc(j,1)*9.81/16384)+acc_1_offset; % LSB --> m/s^2 + offset
   acc(j,2)=(acc(j,2)*9.81/16384)+acc_2_offset; % LSB --> m/s^2 + offset
   acc(j,3)=(acc(j,3)*9.81/16384)+acc_3_offset-9.81; % LSB --> m/s^2 + offset + gravity compensation

   % temperatur
   temp(j,1)=swapbytes(typecast(data(j,7:8), 'int16'));
   temp=double(temp);
   temp(j,1)=(temp(j,1)/340)+36.53; % LSB --> °C
   
   % gyro
   gyro(j,1)=swapbytes(typecast(data(j,9:10), 'int16'));
   gyro(j,2)=swapbytes(typecast(data(j,11:12), 'int16'));
   gyro(j,3)=swapbytes(typecast(data(j,13:14), 'int16'));
   gyro=double(gyro);
   gyro(j,1)=(gyro(j,1)/131)+gyro_1_offset; % LSB --> °/s + offset
   gyro(j,2)=(gyro(j,2)/131)+gyro_2_offset; % LSB --> °/s + offset
   gyro(j,3)=(gyro(j,3)/131)+gyro_3_offset; % LSB --> °/s + offset
   time(j+1,1)=time(j,1)+dt;
   j=j+1;
end
 


Im Datenblatt des MPU6050 ist eine Abtastrate für den Beschleunigungssensor von 1kHz angegeben. Bei n=100 müsste ich nach meinem Verständnis mit obigen Skript 100 Messdaten über eine Zeitspanne von 100ms bekommen.
Ich bekomme jedoch 100 Messdaten über einen viel längeren Zeitraum, was zu einer sehr geringen Abtastrate führt (ca. 10Hz).

Kann mir jemand sagen wie ich die vollen 1000Hz Abtastrate erreiche?

Vielen Dank schon mal im Voraus!
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 - 2024 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.