Files
paparazzi/sw/airborne/subsystems/electrical.c
T
2010-12-06 20:52:05 +01:00

48 lines
1.3 KiB
C

#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((electrical_priv.current_adc_buf.sum/electrical_priv.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 */
}