mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-06-01 12:57:27 +08:00
Gorazoptere anlog continued : tested gyros and 8->128 com with real IMU
This commit is contained in:
@@ -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"/>
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user