Kompass spielt verrückt!

#1
Hallo!

Ich habe ein Paris 4.0 board mit Sirius Navigator IMU!
Hatte bis vor kurzem die 1.9er Version drauf, die mir direkt von Multiwiicopter in Australien eingespielt wurde.
Hatte damit eigentlich keine Probleme, jedoch würde ich gern die Headfree Funktion nutzen.
Also habe ich mir die aktuelle 2.0release draufgespielt.
Jetzt habe ich das Problem ist in der GUI die Mag Werte extrem springen bei der kleinsten Bewegung.
Auch die Ausschläge sind zwischen Gut und Böse.
Was kann das sein??

Bitte um Hilfe

lg
Jürgen
 

Anhänge

Karsten J.

Erfahrener Benutzer
#2
Stell den copter auf einen ebenen Untergrund und drücke CALIB ACC
Danach musst Du noch den Kompass kalibrieren - CALIB MAG und ihn dann um alle Achsen 360° drehen.
Danach WRITE

Gruß Karsten
 

Karsten J.

Erfahrener Benutzer
#6
... immer einmal mehr wie Du :p

jo, erst gestern ging mir das Kabeln während der Drehung beim Kalibrieren ab...
Ich denke, dass ich meinen heute mittag mit der Methode auch mal wieder neu kalibriere...

Gruß Karsten
 
#7
Danke für die raschen Antworten!

Kalibrieren bringt jedoch keine Besserung.
Hab jetzt testweise die 1.9er Version draufgespielt um sicherzugehen ob der Kompass defekt ist
und siehe da - es funktioniert alles einwandfrei.
Die Werte von Mag ändern willkürlich ihre Vorzeichen, speziell bei MAG Pitch von 5000 auf -5000.

lG
Jürgen
 
#9
Habe das IMU Sirius in der Config.h aktiviert,das gleiche wie auch schon bei der 1.9er.
Auch die internen Pullups sind aktiviert.
Im Prinzip habe ich die Config "original" gelassen, bis eben auf IMU und Motor Stop aktiviert.
Warum funkts bei der 1.9er?

lG
Jürgen
 

lazyzero

... zu viel geflashdingst
#11
Es geht auch ohne Kabelsalat

Akku dran und dann folgende Sticks:
Throttle = hoch + Yaw = rechts
Pitch = hoch

Dann fängt die LED an zu blinken. Solange sie blinkt (30Sek) den copter in alle 3 Richtungen um 360 Grad drehen.
Bist Du dir da sicher? Im Code steht:
} else if (rcData[YAW] > MAXCHECK && rcData[PITCH] < MINCHECK) { // throttle=max, yaw=right, pitch=min
if (rcDelayCommand == 20) calibratingM=1; // MAG calibration request
Christian
 

halex

Erfahrener Benutzer
#14
Sowas hatte ich auch.
Prüf doch mal, ob die I2C Adresse stimmt. Bei mir musste ich umstellen.
 

Carl-Constantin

Erfahrener Benutzer
#16
@ schaublin80: ich habe das gleiche board ab mit wmp drunter, also sirius 600. bei mir funzt die 2.0 4er. die magwerte passen bei mir auch soweit nur habe ich headsfree noch nicht draußen ausgetestet, nur am pc.
grüße
 
#17
Die Wirkrichtungen zu kontrollieren ist eine sehr grosse Herausforderung, da die Werte und somit der simulierte Copter in der GUI sehr unruhig ist.
Wie schauts mit der I2C adresse aus? Wo find ich die bzw. was soll dort geändert werden?

@Carl-Constantin: Hat bei dir die 2.0pre4 auf anhieb geklappt, oder hast du bei den Sensoren und Wirkrichtungen Änderungen vornehmen müssen??
 

Carl-Constantin

Erfahrener Benutzer
#19
@ schaublin80: nö ich habe nix geändert, hatte auch kurzzeitig die 1.9er von der internetseite mit allen voreinstellungen drauf gehabt und diese einstellungen einfach nur in die 2.0 übernommen. vielleicht einfach nochmal richtig aufspielen. (richtiger atm ausgewählt, richtigen copter defined... upload. acc cal, und dann mag cal) ich war am anfang auch etwas verwirrt weil die acc werte gesponnen haben aber nach der kalibrierung war alles wie beim alten. aber baro ist besser geworde.
 
#20
Habe soeben die Wirkrichtungen so gut es geht kontrolliert und die scheinen zu stimmen!
Was die I2C adressen anbelangt hab ich im Vergleich zur 1.9er Unterschiede bemerkt.
Die MAG_ORIENTATION beim HMC5883 ist anders!
Ich habe sie geändert, jedoch ohne Erfolg.
Ich kopier den Sensor-Code mal unten rein auch wenn es nicht gern gesehen wird, aber vielleicht findet jemand einen Fehler.
Zuerst die funktionierende 1.9er:
// ************************************************************************************************************
// I2C Compass HMC5843 & HMC5883
// ************************************************************************************************************
// I2C adress: 0x3C (8bit) 0x1E (7bit)
// ************************************************************************************************************
#if defined(HMC5843) || defined(HMC5883)
void Mag_init() {
delay(100);
i2c_writeReg(0X3C ,0x02 ,0x00 ); //register: Mode register -- value: Continuous-Conversion Mode
}

void Device_Mag_getADC() {
i2c_getSixRawADC(0X3C,0X03);
#if defined(HMC5843)
MAG_ORIENTATION( ((rawADC[0]<<8) | rawADC[1]) ,
((rawADC[2]<<8) | rawADC[3]) ,
-((rawADC[4]<<8) | rawADC[5]) );
#endif
#if defined (HMC5883)
MAG_ORIENTATION( ((rawADC[4]<<8) | rawADC[5]) ,
-((rawADC[0]<<8) | rawADC[1]) ,
-((rawADC[2]<<8) | rawADC[3]) );
#endif
}
#endif

Und nun bei 2.0:

// ************************************************************************************************************
// I2C Compass HMC5843 & HMC5883
// ************************************************************************************************************
// I2C adress: 0x3C (8bit) 0x1E (7bit)
// ************************************************************************************************************
#if defined(HMC5843) || defined(HMC5883)
#define MAG_ADDRESS 0x3C
#define MAG_DATA_REGISTER 0x03

void Mag_init() {
delay(100);
// force positiveBias
i2c_writeReg(MAG_ADDRESS ,0x00 ,0x71 ); //Configuration Register A -- 0 11 100 01 num samples: 8 ; output rate: 15Hz ; positive bias
delay(50);
// set gains for calibration
i2c_writeReg(MAG_ADDRESS ,0x01 ,0x60 ); //Configuration Register B -- 011 00000 configuration gain 2.5Ga
i2c_writeReg(MAG_ADDRESS ,0x02 ,0x01 ); //Mode register -- 000000 01 single Conversion Mode

// read values from the compass - self test operation
// by placing the mode register into single-measurement mode (0x01), two data acquisition cycles will be made on each magnetic vector.
// The first acquisition values will be subtracted from the second acquisition, and the net measurement will be placed into the data output registers
delay(100);
getADC();
delay(10);
magCal[ROLL] = 1000.0 / abs(magADC[ROLL]);
magCal[PITCH] = 1000.0 / abs(magADC[PITCH]);
magCal[YAW] = 1000.0 / abs(magADC[YAW]);

// leave test mode
i2c_writeReg(MAG_ADDRESS ,0x00 ,0x70 ); //Configuration Register A -- 0 11 100 00 num samples: 8 ; output rate: 15Hz ; normal measurement mode
i2c_writeReg(MAG_ADDRESS ,0x01 ,0x20 ); //Configuration Register B -- 001 00000 configuration gain 1.3Ga
i2c_writeReg(MAG_ADDRESS ,0x02 ,0x00 ); //Mode register -- 000000 00 continuous Conversion Mode

magInit = 1;
}

void getADC() {
i2c_getSixRawADC(MAG_ADDRESS,MAG_DATA_REGISTER);
#if defined(HMC5843)
MAG_ORIENTATION( ((rawADC[0]<<8) | rawADC[1]) ,
((rawADC[2]<<8) | rawADC[3]) ,
((rawADC[4]<<8) | rawADC[5]) );
#endif
#if defined (HMC5883)
MAG_ORIENTATION( ((rawADC[0]<<8) | rawADC[1]) ,
((rawADC[4]<<8) | rawADC[5]) ,
((rawADC[2]<<8) | rawADC[3]) );
#endif
}

#if not defined(MPU6050_EN_I2C_BYPASS)
void Device_Mag_getADC() {
getADC();
}
#endif
#endif
 
FPV1

Banggood

Oben Unten