mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-06-01 12:57:27 +08:00
moved supply and current out of main_fbw to new subsystems/electrical
This commit is contained in:
@@ -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
|
||||
|
||||
######################################################################
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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, ¤t_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 );
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
}
|
||||
@@ -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 */
|
||||
Reference in New Issue
Block a user