Gorazoptere anlog continued : tested gyros and 8->128 com with real IMU

This commit is contained in:
Antoine Drouin
2005-08-23 00:39:29 +00:00
parent 2240220e89
commit 75d033e9be
6 changed files with 50 additions and 22 deletions
@@ -1,4 +1,4 @@
<airframe name="Gorazoptere_brushless_ANALOG" ctl_board="V1_2_1" gps="SAM_LS"> <airframe name="Gorazoptere_brushless_ANALOG" ctl_board="V1_2" gps="SAM_LS">
<section name="IMU_ANALOG" prefix="IMU_"> <section name="IMU_ANALOG" prefix="IMU_">
<define name="TYPE_ANALOG" value="1"/> <define name="TYPE_ANALOG" value="1"/>
<define name="ADC_ROLL_DOT" value="1"/> <define name="ADC_ROLL_DOT" value="1"/>
+12
View File
@@ -65,6 +65,8 @@ int main( void ) {
ir_init(); ir_init();
estimator_init(); estimator_init();
uart0_init();
/** - start interrupt task */ /** - start interrupt task */
sei(); sei();
@@ -101,6 +103,16 @@ int main( void ) {
#ifdef IMU_TYPE_3DMG #ifdef IMU_TYPE_3DMG
DOWNLINK_SEND_IMU_3DMG(&from_fbw.euler_dot[0], &from_fbw.euler_dot[1], &from_fbw.euler_dot[2], &from_fbw.euler[0], &from_fbw.euler[1], &from_fbw.euler[2]); DOWNLINK_SEND_IMU_3DMG(&from_fbw.euler_dot[0], &from_fbw.euler_dot[1], &from_fbw.euler_dot[2], &from_fbw.euler[0], &from_fbw.euler[1], &from_fbw.euler[2]);
estimator_update_state_3DMG(); estimator_update_state_3DMG();
#endif
#ifdef SECTION_IMU_ANALOG
uart0_transmit('G');
uart0_transmit(' ');
uart0_print_hex16(from_fbw.euler_dot[0]);
uart0_transmit(',');
uart0_print_hex16(from_fbw.euler_dot[1]);
uart0_transmit(',');
uart0_print_hex16(from_fbw.euler_dot[2]);
uart0_transmit('\n');
#endif #endif
} }
} }
+1 -1
View File
@@ -25,7 +25,7 @@
#include "airframe.h" #include "airframe.h"
#if defined(SECTION_IMU_3DMG) && defined(SECTION_IMU_ANALOG) #if defined(SECTION_IMU_3DMG) && defined(SECTION_IMU_ANALOG)
#error "IMU_3DMG and IMU_ANALOG cannot be defined simultaneously #error "IMU_3DMG and IMU_ANALOG cannot be defined simultaneously"
#endif #endif
#include "imu.h" #include "imu.h"
+1 -1
View File
@@ -3,7 +3,7 @@
#include <inttypes.h> #include <inttypes.h>
#ifdef IMU_TYPE_3DMG #ifdef SECTION_IMU_3DMG
extern int16_t roll, pitch, yaw; extern int16_t roll, pitch, yaw;
#endif #endif
extern int16_t roll_dot, pitch_dot, yaw_dot; extern int16_t roll_dot, pitch_dot, yaw_dot;
+2 -2
View File
@@ -54,10 +54,10 @@ struct inter_mcu_msg {
uint8_t status; uint8_t status;
uint8_t nb_err; uint8_t nb_err;
uint8_t vsupply; /* 1e-1 V */ uint8_t vsupply; /* 1e-1 V */
#if defined IMU_TYPE_3DMG || defined IMU_TYPE_ANALOG #if defined SECTION_IMU_ANALOG || defined SECTION_IMU_3DMG
int16_t euler_dot[3]; int16_t euler_dot[3];
#endif #endif
#ifdef IMU_TYPE_3DMG #ifdef SECTION_IMU_3DMG
int16_t euler[3]; int16_t euler[3];
#endif #endif
}; };
+33 -17
View File
@@ -44,11 +44,11 @@
#include "uart.h" #include "uart.h"
#ifdef IMU_TYPE_3DMG #ifdef SECTION_IMU_3DMG
#include "3dmg.h" #include "3dmg.h"
#endif #endif
#if defined IMU_TYPE_ANALOG || defined IMU_TYPE_3DMG #if defined SECTION_IMU_ANALOG || defined SECTION_IMU_3DMG
#include "imu.h" #include "imu.h"
#include "control.h" #include "control.h"
#endif #endif
@@ -85,14 +85,14 @@ static inline void to_autopilot_from_last_radio (void) {
} }
to_mega128.ppm_cpt = last_ppm_cpt; to_mega128.ppm_cpt = last_ppm_cpt;
to_mega128.vsupply = VoltageOfAdc(vsupply_adc_buf.sum/AV_NB_SAMPLE) * 10; to_mega128.vsupply = VoltageOfAdc(vsupply_adc_buf.sum/AV_NB_SAMPLE) * 10;
#if defined IMU_TYPE_3DMG || defined IMU_TYPE_ANALOG #if defined SECTION_IMU_3DMG || defined SECTION_IMU_ANALOG
to_mega128.euler_dot[0] = roll_dot; to_mega128.euler_dot[0] = roll_dot;
to_mega128.euler_dot[1] = pitch_dot; to_mega128.euler_dot[1] = pitch_dot;
to_mega128.euler_dot[2] = yaw_dot; to_mega128.euler_dot[2] = yaw_dot;
#endif #endif
#ifdef IMU_TYPE_3DMG #ifdef SECTION_IMU_3DMG
to_mega128.euler[0] = roll; to_mega128.euler[0] = roll;
to_mega128.euler[1] = 777; //pitch; to_mega128.euler[1] = pitch;
to_mega128.euler[2] = yaw; to_mega128.euler[2] = yaw;
#endif #endif
} }
@@ -107,9 +107,7 @@ inline void radio_control_task(void) {
mode = MODE_OF_PPRZ(last_radio[RADIO_MODE]); mode = MODE_OF_PPRZ(last_radio[RADIO_MODE]);
} }
if (mode == MODE_MANUAL) { if (mode == MODE_MANUAL) {
#if defined IMU_TYPE_3DMG #if defined SECTION_IMU_3DMG || defined SECTION_IMU_ANALOG
// control_set_desired(last_radio);
#elif defined IMU_TYPE_ANALOG
control_set_desired(last_radio); control_set_desired(last_radio);
#else #else
servo_set(last_radio); servo_set(last_radio);
@@ -121,12 +119,13 @@ inline void spi_task(void) {
if (mega128_receive_valid) { if (mega128_receive_valid) {
time_since_last_mega128 = 0; time_since_last_mega128 = 0;
mega128_ok = TRUE; mega128_ok = TRUE;
if (mode == MODE_AUTO) if (mode == MODE_AUTO) {
#if defined IMU_TYPE_ANALOG || defined IMU_TYPE_3DMG #if defined SECTION_IMU_ANALOG || defined SECTION_IMU_3DMG
control_set_desired(from_mega128.channels); control_set_desired(from_mega128.channels);
#else #else
servo_set(from_mega128.channels); servo_set(from_mega128.channels);
#endif #endif
}
} }
to_autopilot_from_last_radio(); to_autopilot_from_last_radio();
spi_reset(); spi_reset();
@@ -135,7 +134,7 @@ inline void spi_task(void) {
int main( void ) int main( void )
{ {
uart_init_tx(); uart_init_tx();
#if defined IMU_TYPE_3DMG #if defined SECTION_IMU_3DMG
uart_init_rx(); uart_init_rx();
#else #else
uart_print_string("FBW Booting $Id$\n"); uart_print_string("FBW Booting $Id$\n");
@@ -143,7 +142,7 @@ int main( void )
adc_init(); adc_init();
adc_buf_channel(3, &vsupply_adc_buf); adc_buf_channel(3, &vsupply_adc_buf);
adc_buf_channel(6, &vservos_adc_buf); adc_buf_channel(6, &vservos_adc_buf);
#if defined IMU_TYPE_3DMG || defined IMU_TYPE_ANALOG #if defined SECTION_IMU_3DMG || defined SECTION_IMU_ANALOG
imu_init(); imu_init();
#endif #endif
timer_init(); timer_init();
@@ -170,7 +169,7 @@ int main( void )
spi_was_interrupted = FALSE; spi_was_interrupted = FALSE;
spi_task(); spi_task();
} }
#ifdef IMU_TYPE_3DMG #ifdef SECTION_IMU_3DMG
if (_3dmg_data_ready) { if (_3dmg_data_ready) {
imu_update(); imu_update();
RED_LED_TOGGLE(); RED_LED_TOGGLE();
@@ -202,8 +201,25 @@ int main( void )
static uint8_t _20Hz; static uint8_t _20Hz;
_1Hz++; _1Hz++;
_20Hz++; _20Hz++;
#ifdef IMU_TYPE_3DMG #if defined SECTION_IMU_ANALOG
// control_run(); imu_update();
#if 0
{
static uint8_t foo = 0;
foo++;
if (!(foo%10)) {
uart_print_hex16(roll_dot);
uart_transmit(',');
uart_print_hex16(pitch_dot);
uart_transmit(',');
uart_print_hex16(yaw_dot);
uart_transmit('\n');
}
}
#endif /* 0 */
#endif
#if defined SECTION_IMU_3DMG || defined SECTION_IMU_ANALOG
control_run();
#endif #endif
if (_1Hz >= 60) { if (_1Hz >= 60) {
_1Hz = 0; _1Hz = 0;
@@ -212,8 +228,8 @@ int main( void )
} }
if (_20Hz >= 3) { if (_20Hz >= 3) {
_20Hz = 0; _20Hz = 0;
#ifndef IMU_TYPE_3DMG #ifndef SECTION_IMU_3DMG
servo_transmit(); // servo_transmit();
#endif #endif
} }
if (time_since_last_mega128 < STALLED_TIME) if (time_since_last_mega128 < STALLED_TIME)