moved supply and current out of main_fbw to new subsystems/electrical

This commit is contained in:
Antoine Drouin
2010-12-06 00:56:19 +01:00
parent 123d18dadf
commit 9d9d4abcc1
7 changed files with 77 additions and 45 deletions
@@ -150,6 +150,7 @@ endif
fbw_CFLAGS += -DFBW
fbw_srcs += $(SRC_FIRMWARE)/main_fbw.c
fbw_srcs += subsystems/electrical.c
fbw_srcs += $(SRC_FIXEDWING)/commands.c
######################################################################
+2 -1
View File
@@ -45,6 +45,7 @@
#include "mcu_periph/uart.h"
#include "firmwares/fixedwing/main_fbw.h"
#include "subsystems/radio_control.h"
#include "subsystems/electrical.h"
#include "inter_mcu.h"
#define DOWNLINK_DEVICE DOWNLINK_FBW_DEVICE
@@ -53,7 +54,7 @@
#define PERIODIC_SEND_COMMANDS(_chan) DOWNLINK_SEND_COMMANDS(_chan, COMMANDS_NB, commands)
#ifdef RADIO_CONTROL
#define PERIODIC_SEND_FBW_STATUS(_chan) DOWNLINK_SEND_FBW_STATUS(_chan, &(radio_control.status), &(radio_control.frame_rate), &fbw_mode, &fbw_vsupply_decivolt, &fbw_current_milliamp)
#define PERIODIC_SEND_FBW_STATUS(_chan) DOWNLINK_SEND_FBW_STATUS(_chan, &(radio_control.status), &(radio_control.frame_rate), &fbw_mode, &electrical.vsupply, &electrical.current)
#ifdef RADIO_CONTROL_TYPE_PPM
#define PERIODIC_SEND_PPM(_chan) DOWNLINK_SEND_PPM(_chan, &(radio_control.frame_rate), PPM_NB_CHANNEL, ppm_pulses)
#else
+6 -39
View File
@@ -47,6 +47,7 @@
#include "sys_time.h"
#include "commands.h"
#include "firmwares/fixedwing/actuators.h"
#include "subsystems/electrical.h"
#include "subsystems/radio_control.h"
#include "fbw_downlink.h"
#include "firmwares/fixedwing/autopilot.h"
@@ -58,24 +59,9 @@
#endif
#ifdef MILLIAMP_PER_PERCENT
# warning "deprecated MILLIAMP_PER_PERCENT --> Please use MILLIAMP_AT_FULL_THROTTLE"
# error "deprecated MILLIAMP_PER_PERCENT --> Please use MILLIAMP_AT_FULL_THROTTLE"
#endif
#ifdef ADC
struct adc_buf vsupply_adc_buf;
#ifndef VoltageOfAdc
#define VoltageOfAdc(adc) DefaultVoltageOfAdc(adc)
#endif
#ifdef ADC_CHANNEL_CURRENT
struct adc_buf current_adc_buf;
#ifndef MilliAmpereOfAdc
#define MilliAmpereOfAdc(adc) DefaultMilliAmpereOfAdc(adc)
#endif
#endif
#endif
uint8_t fbw_vsupply_decivolt;
int32_t fbw_current_milliamp;
uint8_t fbw_mode;
@@ -88,12 +74,7 @@ void init_fbw( void ) {
#ifdef ADC
adc_init();
#ifdef ADC_CHANNEL_VSUPPLY
adc_buf_channel(ADC_CHANNEL_VSUPPLY, &vsupply_adc_buf, DEFAULT_AV_NB_SAMPLE);
#endif
#ifdef ADC_CHANNEL_CURRENT
adc_buf_channel(ADC_CHANNEL_CURRENT, &current_adc_buf, DEFAULT_AV_NB_SAMPLE);
#endif
electrical_init();
#endif /* ADC */
#ifdef ACTUATORS
@@ -115,7 +96,7 @@ void init_fbw( void ) {
fbw_mode = FBW_MODE_FAILSAFE;
#ifndef SINGLE_MCU
int_enable();
mcu_int_enable();
#endif
}
@@ -209,22 +190,8 @@ void periodic_task_fbw( void ) {
fbw_downlink_periodic_task();
#endif
if (!_10Hz)
{
#ifdef ADC
#ifdef ADC_CHANNEL_VSUPPLY
fbw_vsupply_decivolt = VoltageOfAdc((10*(vsupply_adc_buf.sum/vsupply_adc_buf.av_nb_sample)));
#endif
#ifdef ADC_CHANNEL_CURRENT
fbw_current_milliamp = MilliAmpereOfAdc((current_adc_buf.sum/current_adc_buf.av_nb_sample));
#endif
#endif
#if ((! defined ADC_CHANNEL_CURRENT) && defined MILLIAMP_AT_FULL_THROTTLE)
#ifdef COMMAND_THROTTLE
fbw_current_milliamp = Min(((float)commands[COMMAND_THROTTLE]) * ((float)MILLIAMP_AT_FULL_THROTTLE) / ((float)MAX_PPRZ), 65000);
#endif
# endif
if (!_10Hz) {
electrical_periodic();
}
#ifdef ACTUATORS
@@ -31,7 +31,6 @@
#define FBW_H
#include "std.h"
#include "mcu_periph/adc.h"
/** Fly by wire modes */
#define FBW_MODE_MANUAL 0
@@ -40,8 +39,6 @@
#define FBW_MODE_OF_PPRZ(mode) ((mode) < TRESHOLD_MANUAL_PPRZ ? FBW_MODE_MANUAL : FBW_MODE_AUTO)
extern uint8_t fbw_mode;
extern uint8_t fbw_vsupply_decivolt;
extern int32_t fbw_current_milliamp;
extern bool_t failsafe_mode;
void init_fbw( void );
+3 -2
View File
@@ -42,6 +42,7 @@
#include "paparazzi.h"
#include "generated/airframe.h"
#include "subsystems/radio_control.h"
#include "subsystems/electrical.h"
#include "firmwares/fixedwing/main_fbw.h"
#ifndef SINGLE_MCU
@@ -117,8 +118,8 @@ static inline void inter_mcu_fill_fbw_state (void) {
status |= (fbw_mode == FBW_MODE_FAILSAFE ? _BV(STATUS_MODE_FAILSAFE) : 0);
fbw_state->status = status;
fbw_state->vsupply = fbw_vsupply_decivolt;
fbw_state->current = fbw_current_milliamp;
fbw_state->vsupply = electrical.vsupply;
fbw_state->current = electrical.current;
}
/** Prepares date for next comm with AP. Set ::ap_ok to TRUE */
+47
View File
@@ -0,0 +1,47 @@
#include "subsystems/electrical.h"
#include "mcu_periph/adc.h"
#include "commands.h"
#include "generated/airframe.h"
#include BOARD_CONFIG
struct Electrical electrical;
static struct {
struct adc_buf vsupply_adc_buf;
#ifdef ADC_CHANNEL_CURRENT
struct adc_buf current_adc_buf;
#endif
} electrical_priv;
#ifndef VoltageOfAdc
#define VoltageOfAdc(adc) DefaultVoltageOfAdc(adc)
#endif
#ifndef MilliAmpereOfAdc
#define MilliAmpereOfAdc(adc) DefaultMilliAmpereOfAdc(adc)
#endif
void electrical_init(void) {
electrical.vsupply = 0;
electrical.current = 0;
adc_buf_channel(ADC_CHANNEL_VSUPPLY, &electrical_priv.vsupply_adc_buf, DEFAULT_AV_NB_SAMPLE);
#ifdef ADC_CHANNEL_CURRENT
adc_buf_channel(ADC_CHANNEL_CURRENT, &electrical_priv.current_adc_buf, DEFAULT_AV_NB_SAMPLE);
#endif
}
void electrical_periodic(void) {
electrical.vsupply = VoltageOfAdc((10*(electrical_priv.vsupply_adc_buf.sum/electrical_priv.vsupply_adc_buf.av_nb_sample)));
#ifdef ADC_CHANNEL_CURRENT
electrical.current = MilliAmpereOfAdc((current_adc_buf.sum/current_adc_buf.av_nb_sample));
#else
#if defined MILLIAMP_AT_FULL_THROTTLE && defined COMMAND_THROTTLE
electrical.current = Min(((float)commands[COMMAND_THROTTLE]) * ((float)MILLIAMP_AT_FULL_THROTTLE) / ((float)MAX_PPRZ), 65000);
#endif
#endif /* ADC_CHANNEL_CURRENT */
}
+18
View File
@@ -0,0 +1,18 @@
#ifndef SUBSYSTEMS_ELECTRICAL_H
#define SUBSYSTEMS_ELECTRICAL_H
#include "std.h"
struct Electrical {
uint8_t vsupply; /* supply in decivolts */
int32_t current; /* current in miliamps */
};
extern struct Electrical electrical;
extern void electrical_init(void);
extern void electrical_periodic(void);
#endif /* SUBSYSTEMS_ELECTRICAL_H */