Rotate external magneto fix

This commit is contained in:
kevindehecker
2016-03-30 16:43:48 +02:00
parent 30800f88e2
commit 7eb1e00c54
3 changed files with 30 additions and 13 deletions
+11 -5
View File
@@ -87,6 +87,12 @@
<load name="mag_hmc58xx.xml">
<configure name="MAG_HMC58XX_I2C_DEV" value="i2c1"/>
<define name="MODULE_HMC58XX_UPDATE_AHRS" value="TRUE"/>
<define name="HMC58XX_CHAN_X" value="1"/>
<define name="HMC58XX_CHAN_Y" value="0"/>
<define name="HMC58XX_CHAN_Z" value="2"/>
<define name="HMC58XX_CHAN_X_SIGN" value="-"/>
<define name="HMC58XX_CHAN_Y_SIGN" value="+"/>
<define name="HMC58XX_CHAN_Z_SIGN" value="+"/>
</load>
<!-- <load name="spektrum_soft_bind.xml"/>-->
</modules>
@@ -104,12 +110,12 @@
<define name="ACCEL_Y_SENS" value="0.609921478775" integer="16"/>
<define name="ACCEL_Z_SENS" value="0.619923942578" integer="16"/>
<define name="MAG_X_NEUTRAL" value="21"/>
<define name="MAG_Y_NEUTRAL" value="-93"/>
<define name="MAG_X_NEUTRAL" value="92"/>
<define name="MAG_Y_NEUTRAL" value="35"/>
<define name="MAG_Z_NEUTRAL" value="-15"/>
<define name="MAG_X_SENS" value="5.1784060163" integer="16"/>
<define name="MAG_Y_SENS" value="5.55867516912" integer="16"/>
<define name="MAG_Z_SENS" value="5.06809390796" integer="16"/>
<define name="MAG_X_SENS" value="5.52543569751" integer="16"/>
<define name="MAG_Y_SENS" value="4.91233764159" integer="16"/>
<define name="MAG_Z_SENS" value="4.99453775296" integer="16"/>
</section>
<commands>
<axis name="PITCH" failsafe_value="0" />
+17 -6
View File
@@ -30,6 +30,8 @@
#include "pprzlink/messages.h"
#include "subsystems/datalink/downlink.h"
#include BOARD_CONFIG
#ifndef HMC58XX_CHAN_X
#define HMC58XX_CHAN_X 0
#endif
@@ -39,6 +41,15 @@
#ifndef HMC58XX_CHAN_Z
#define HMC58XX_CHAN_Z 2
#endif
#ifndef HMC58XX_CHAN_X_SIGN
#define HMC58XX_CHAN_X_SIGN +
#endif
#ifndef HMC58XX_CHAN_Y_SIGN
#define HMC58XX_CHAN_Y_SIGN +
#endif
#ifndef HMC58XX_CHAN_Z_SIGN
#define HMC58XX_CHAN_Z_SIGN +
#endif
#if MODULE_HMC58XX_UPDATE_AHRS
#include "subsystems/imu.h"
@@ -68,9 +79,9 @@ void mag_hmc58xx_module_event(void)
// set channel order
struct Int32Vect3 mag = {
(int32_t)(mag_hmc58xx.data.value[HMC58XX_CHAN_X]),
(int32_t)(mag_hmc58xx.data.value[HMC58XX_CHAN_Y]),
(int32_t)(mag_hmc58xx.data.value[HMC58XX_CHAN_Z])
HMC58XX_CHAN_X_SIGN(int32_t)(mag_hmc58xx.data.value[HMC58XX_CHAN_X]),
HMC58XX_CHAN_Y_SIGN(int32_t)(mag_hmc58xx.data.value[HMC58XX_CHAN_Y]),
HMC58XX_CHAN_Z_SIGN(int32_t)(mag_hmc58xx.data.value[HMC58XX_CHAN_Z])
};
// unscaled vector
VECT3_COPY(imu.mag_unscaled, mag);
@@ -91,9 +102,9 @@ void mag_hmc58xx_module_event(void)
void mag_hmc58xx_report(void)
{
struct Int32Vect3 mag = {
(int32_t)(mag_hmc58xx.data.value[HMC58XX_CHAN_X]),
(int32_t)(mag_hmc58xx.data.value[HMC58XX_CHAN_Y]),
(int32_t)(mag_hmc58xx.data.value[HMC58XX_CHAN_Z])
HMC58XX_CHAN_X_SIGN(int32_t)(mag_hmc58xx.data.value[HMC58XX_CHAN_X]),
HMC58XX_CHAN_Y_SIGN(int32_t)(mag_hmc58xx.data.value[HMC58XX_CHAN_Y]),
HMC58XX_CHAN_Z_SIGN(int32_t)(mag_hmc58xx.data.value[HMC58XX_CHAN_Z])
};
DOWNLINK_SEND_IMU_MAG_RAW(DefaultChannel, DefaultDevice, &mag.x, &mag.y, &mag.z);
}