mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-05-27 18:27:05 +08:00
px4io delete old v1 battery current and voltage
This commit is contained in:
committed by
Lorenz Meier
parent
04fa54a077
commit
2a6f915dfe
@@ -74,7 +74,6 @@
|
|||||||
#include <systemlib/param/param.h>
|
#include <systemlib/param/param.h>
|
||||||
#include <systemlib/circuit_breaker.h>
|
#include <systemlib/circuit_breaker.h>
|
||||||
#include <systemlib/mavlink_log.h>
|
#include <systemlib/mavlink_log.h>
|
||||||
#include <systemlib/battery.h>
|
|
||||||
|
|
||||||
#include <uORB/topics/actuator_controls.h>
|
#include <uORB/topics/actuator_controls.h>
|
||||||
#include <uORB/topics/actuator_outputs.h>
|
#include <uORB/topics/actuator_outputs.h>
|
||||||
@@ -83,7 +82,6 @@
|
|||||||
#include <uORB/topics/vehicle_control_mode.h>
|
#include <uORB/topics/vehicle_control_mode.h>
|
||||||
#include <uORB/topics/vehicle_command.h>
|
#include <uORB/topics/vehicle_command.h>
|
||||||
#include <uORB/topics/rc_channels.h>
|
#include <uORB/topics/rc_channels.h>
|
||||||
#include <uORB/topics/battery_status.h>
|
|
||||||
#include <uORB/topics/servorail_status.h>
|
#include <uORB/topics/servorail_status.h>
|
||||||
#include <uORB/topics/parameter_update.h>
|
#include <uORB/topics/parameter_update.h>
|
||||||
#include <uORB/topics/multirotor_motor_limits.h>
|
#include <uORB/topics/multirotor_motor_limits.h>
|
||||||
@@ -183,14 +181,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
int set_update_rate(int rate);
|
int set_update_rate(int rate);
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the battery current scaling and bias
|
|
||||||
*
|
|
||||||
* @param[in] amp_per_volt
|
|
||||||
* @param[in] amp_bias
|
|
||||||
*/
|
|
||||||
void set_battery_current_scaling(float amp_per_volt, float amp_bias);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Push failsafe values to IO.
|
* Push failsafe values to IO.
|
||||||
*
|
*
|
||||||
@@ -275,7 +265,6 @@ private:
|
|||||||
/* advertised topics */
|
/* advertised topics */
|
||||||
orb_advert_t _to_input_rc; ///< rc inputs from io
|
orb_advert_t _to_input_rc; ///< rc inputs from io
|
||||||
orb_advert_t _to_outputs; ///< mixed servo outputs topic
|
orb_advert_t _to_outputs; ///< mixed servo outputs topic
|
||||||
orb_advert_t _to_battery; ///< battery status / voltage
|
|
||||||
orb_advert_t _to_servorail; ///< servorail status
|
orb_advert_t _to_servorail; ///< servorail status
|
||||||
orb_advert_t _to_safety; ///< status of safety
|
orb_advert_t _to_safety; ///< status of safety
|
||||||
orb_advert_t _to_mixer_status; ///< mixer status flags
|
orb_advert_t _to_mixer_status; ///< mixer status flags
|
||||||
@@ -287,15 +276,9 @@ private:
|
|||||||
bool _lockdown_override; ///< allow to override the safety lockdown
|
bool _lockdown_override; ///< allow to override the safety lockdown
|
||||||
bool _armed; ///< wether the system is armed
|
bool _armed; ///< wether the system is armed
|
||||||
|
|
||||||
float _battery_amp_per_volt; ///< current sensor amps/volt
|
|
||||||
float _battery_amp_bias; ///< current sensor bias
|
|
||||||
float _battery_mamphour_total;///< amp hours consumed so far
|
|
||||||
uint64_t _battery_last_timestamp;///< last amp hour calculation timestamp
|
|
||||||
bool _cb_flighttermination; ///< true if the flight termination circuit breaker is enabled
|
bool _cb_flighttermination; ///< true if the flight termination circuit breaker is enabled
|
||||||
bool _in_esc_calibration_mode; ///< do not send control outputs to IO (used for esc calibration)
|
bool _in_esc_calibration_mode; ///< do not send control outputs to IO (used for esc calibration)
|
||||||
|
|
||||||
Battery _battery;
|
|
||||||
|
|
||||||
int32_t _rssi_pwm_chan; ///< RSSI PWM input channel
|
int32_t _rssi_pwm_chan; ///< RSSI PWM input channel
|
||||||
int32_t _rssi_pwm_max; ///< max RSSI input on PWM channel
|
int32_t _rssi_pwm_max; ///< max RSSI input on PWM channel
|
||||||
int32_t _rssi_pwm_min; ///< min RSSI input on PWM channel
|
int32_t _rssi_pwm_min; ///< min RSSI input on PWM channel
|
||||||
@@ -303,7 +286,6 @@ private:
|
|||||||
bool _analog_rc_rssi_stable; ///< true when analog RSSI input is stable
|
bool _analog_rc_rssi_stable; ///< true when analog RSSI input is stable
|
||||||
float _analog_rc_rssi_volt; ///< analog RSSI voltage
|
float _analog_rc_rssi_volt; ///< analog RSSI voltage
|
||||||
|
|
||||||
float _last_throttle; ///< last throttle value for battery calculation
|
|
||||||
bool _test_fmu_fail; ///< To test what happens if IO looses FMU
|
bool _test_fmu_fail; ///< To test what happens if IO looses FMU
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -504,7 +486,6 @@ PX4IO::PX4IO(device::Device *interface) :
|
|||||||
_t_vehicle_command(-1),
|
_t_vehicle_command(-1),
|
||||||
_to_input_rc(nullptr),
|
_to_input_rc(nullptr),
|
||||||
_to_outputs(nullptr),
|
_to_outputs(nullptr),
|
||||||
_to_battery(nullptr),
|
|
||||||
_to_servorail(nullptr),
|
_to_servorail(nullptr),
|
||||||
_to_safety(nullptr),
|
_to_safety(nullptr),
|
||||||
_to_mixer_status(nullptr),
|
_to_mixer_status(nullptr),
|
||||||
@@ -513,20 +494,14 @@ PX4IO::PX4IO(device::Device *interface) :
|
|||||||
_primary_pwm_device(false),
|
_primary_pwm_device(false),
|
||||||
_lockdown_override(false),
|
_lockdown_override(false),
|
||||||
_armed(false),
|
_armed(false),
|
||||||
_battery_amp_per_volt(90.0f / 5.0f), // this matches the 3DR current sensor
|
|
||||||
_battery_amp_bias(0),
|
|
||||||
_battery_mamphour_total(0),
|
|
||||||
_battery_last_timestamp(0),
|
|
||||||
_cb_flighttermination(true),
|
_cb_flighttermination(true),
|
||||||
_in_esc_calibration_mode(false),
|
_in_esc_calibration_mode(false),
|
||||||
_battery{},
|
|
||||||
_rssi_pwm_chan(0),
|
_rssi_pwm_chan(0),
|
||||||
_rssi_pwm_max(0),
|
_rssi_pwm_max(0),
|
||||||
_rssi_pwm_min(0),
|
_rssi_pwm_min(0),
|
||||||
_thermal_control(-1),
|
_thermal_control(-1),
|
||||||
_analog_rc_rssi_stable(false),
|
_analog_rc_rssi_stable(false),
|
||||||
_analog_rc_rssi_volt(-1.0f),
|
_analog_rc_rssi_volt(-1.0f),
|
||||||
_last_throttle(0.0f),
|
|
||||||
_test_fmu_fail(false)
|
_test_fmu_fail(false)
|
||||||
{
|
{
|
||||||
/* we need this potentially before it could be set in task_main */
|
/* we need this potentially before it could be set in task_main */
|
||||||
@@ -1054,21 +1029,6 @@ PX4IO::task_main()
|
|||||||
io_set_rc_config();
|
io_set_rc_config();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* re-set the battery scaling */
|
|
||||||
int32_t voltage_scaling_val = 10000;
|
|
||||||
param_t voltage_scaling_param;
|
|
||||||
|
|
||||||
/* set battery voltage scaling */
|
|
||||||
param_get(voltage_scaling_param = param_find("BAT_V_SCALE_IO"), &voltage_scaling_val);
|
|
||||||
|
|
||||||
/* send scaling voltage to IO */
|
|
||||||
uint16_t scaling = voltage_scaling_val;
|
|
||||||
int pret = io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_VBATT_SCALE, &scaling, 1);
|
|
||||||
|
|
||||||
if (pret != OK) {
|
|
||||||
mavlink_log_critical(&_mavlink_log_pub, "IO vscale upload failed");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* send RC throttle failsafe value to IO */
|
/* send RC throttle failsafe value to IO */
|
||||||
int32_t failsafe_param_val;
|
int32_t failsafe_param_val;
|
||||||
param_t failsafe_param = param_find("RC_FAILS_THR");
|
param_t failsafe_param = param_find("RC_FAILS_THR");
|
||||||
@@ -1080,7 +1040,7 @@ PX4IO::task_main()
|
|||||||
if (failsafe_param_val > 0) {
|
if (failsafe_param_val > 0) {
|
||||||
|
|
||||||
uint16_t failsafe_thr = failsafe_param_val;
|
uint16_t failsafe_thr = failsafe_param_val;
|
||||||
pret = io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_RC_THR_FAILSAFE_US, &failsafe_thr, 1);
|
int pret = io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_RC_THR_FAILSAFE_US, &failsafe_thr, 1);
|
||||||
|
|
||||||
if (pret != OK) {
|
if (pret != OK) {
|
||||||
mavlink_log_critical(&_mavlink_log_pub, "failsafe upload failed, FS: %d us", (int)failsafe_thr);
|
mavlink_log_critical(&_mavlink_log_pub, "failsafe upload failed, FS: %d us", (int)failsafe_thr);
|
||||||
@@ -1259,9 +1219,6 @@ PX4IO::task_main()
|
|||||||
param_get(parm_handle, ¶m_val);
|
param_get(parm_handle, ¶m_val);
|
||||||
(void)io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_MOTOR_SLEW_MAX, FLOAT_TO_REG(param_val));
|
(void)io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_MOTOR_SLEW_MAX, FLOAT_TO_REG(param_val));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Also trigger param update in Battery instance.
|
|
||||||
_battery.updateParams();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1371,11 +1328,6 @@ PX4IO::io_set_control_state(unsigned group)
|
|||||||
regs[i] = FLOAT_TO_REG(ctrl);
|
regs[i] = FLOAT_TO_REG(ctrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
// save last throttle for battery calculation
|
|
||||||
if (group == 0) {
|
|
||||||
_last_throttle = controls.control[3];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_test_fmu_fail) {
|
if (!_test_fmu_fail) {
|
||||||
/* copy values to registers in IO */
|
/* copy values to registers in IO */
|
||||||
return io_reg_set(PX4IO_PAGE_CONTROLS, group * PX4IO_PROTOCOL_MAX_CONTROL_COUNT, regs, _max_controls);
|
return io_reg_set(PX4IO_PAGE_CONTROLS, group * PX4IO_PROTOCOL_MAX_CONTROL_COUNT, regs, _max_controls);
|
||||||
@@ -2255,17 +2207,7 @@ PX4IO::print_status(bool extended_status)
|
|||||||
/* now clear alarms */
|
/* now clear alarms */
|
||||||
io_reg_set(PX4IO_PAGE_STATUS, PX4IO_P_STATUS_ALARMS, 0xFFFF);
|
io_reg_set(PX4IO_PAGE_STATUS, PX4IO_P_STATUS_ALARMS, 0xFFFF);
|
||||||
|
|
||||||
if (_hardware == 1) {
|
if (_hardware == 2) {
|
||||||
printf("vbatt mV %u ibatt mV %u vbatt scale %u\n",
|
|
||||||
io_reg_get(PX4IO_PAGE_STATUS, PX4IO_P_STATUS_VBATT),
|
|
||||||
io_reg_get(PX4IO_PAGE_STATUS, PX4IO_P_STATUS_IBATT),
|
|
||||||
io_reg_get(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_VBATT_SCALE));
|
|
||||||
printf("amp_per_volt %.3f amp_offset %.3f mAh discharged %.3f\n",
|
|
||||||
(double)_battery_amp_per_volt,
|
|
||||||
(double)_battery_amp_bias,
|
|
||||||
(double)_battery_mamphour_total);
|
|
||||||
|
|
||||||
} else if (_hardware == 2) {
|
|
||||||
printf("vservo %u mV vservo scale %u\n",
|
printf("vservo %u mV vservo scale %u\n",
|
||||||
io_reg_get(PX4IO_PAGE_STATUS, PX4IO_P_STATUS_VSERVO),
|
io_reg_get(PX4IO_PAGE_STATUS, PX4IO_P_STATUS_VSERVO),
|
||||||
io_reg_get(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_VSERVO_SCALE));
|
io_reg_get(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_VSERVO_SCALE));
|
||||||
@@ -3041,13 +2983,6 @@ PX4IO::set_update_rate(int rate)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
PX4IO::set_battery_current_scaling(float amp_per_volt, float amp_bias)
|
|
||||||
{
|
|
||||||
_battery_amp_per_volt = amp_per_volt;
|
|
||||||
_battery_amp_bias = amp_bias;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" __EXPORT int px4io_main(int argc, char *argv[]);
|
extern "C" __EXPORT int px4io_main(int argc, char *argv[]);
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
@@ -3634,18 +3569,6 @@ px4io_main(int argc, char *argv[])
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strcmp(argv[1], "current")) {
|
|
||||||
if ((argc > 3)) {
|
|
||||||
g_dev->set_battery_current_scaling(atof(argv[2]), atof(argv[3]));
|
|
||||||
|
|
||||||
} else {
|
|
||||||
errx(1, "missing argument (apm_per_volt, amp_offset)");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!strcmp(argv[1], "safety_off")) {
|
if (!strcmp(argv[1], "safety_off")) {
|
||||||
int ret = g_dev->ioctl(NULL, PWM_SERVO_SET_FORCE_SAFETY_OFF, 0);
|
int ret = g_dev->ioctl(NULL, PWM_SERVO_SET_FORCE_SAFETY_OFF, 0);
|
||||||
|
|
||||||
@@ -3822,7 +3745,7 @@ px4io_main(int argc, char *argv[])
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
errx(1, "need a command, try 'start', 'stop', 'status', 'test', 'monitor', 'debug <level>',\n"
|
errx(1, "need a command, try 'start', 'stop', 'status', 'test', 'monitor', 'debug <level>',\n"
|
||||||
"'recovery', 'limit <rate>', 'current', 'bind', 'checkcrc', 'safety_on', 'safety_off',\n"
|
"'recovery', 'limit <rate>', 'bind', 'checkcrc', 'safety_on', 'safety_off',\n"
|
||||||
"'forceupdate', 'update', 'sbus1_out', 'sbus2_out', 'rssi_analog' or 'rssi_pwm',\n"
|
"'forceupdate', 'update', 'sbus1_out', 'sbus2_out', 'rssi_analog' or 'rssi_pwm',\n"
|
||||||
"'test_fmu_fail', 'test_fmu_ok'");
|
"'test_fmu_fail', 'test_fmu_ok'");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -127,8 +127,6 @@
|
|||||||
#define PX4IO_P_STATUS_ALARMS_PWM_ERROR (1 << 6) /* PWM configuration or output was bad */
|
#define PX4IO_P_STATUS_ALARMS_PWM_ERROR (1 << 6) /* PWM configuration or output was bad */
|
||||||
#define PX4IO_P_STATUS_ALARMS_VSERVO_FAULT (1 << 7) /* [2] VServo was out of the valid range (2.5 - 5.5 V) */
|
#define PX4IO_P_STATUS_ALARMS_VSERVO_FAULT (1 << 7) /* [2] VServo was out of the valid range (2.5 - 5.5 V) */
|
||||||
|
|
||||||
#define PX4IO_P_STATUS_VBATT 4 /* [1] battery voltage in mV */
|
|
||||||
#define PX4IO_P_STATUS_IBATT 5 /* [1] battery current (raw ADC) */
|
|
||||||
#define PX4IO_P_STATUS_VSERVO 6 /* [2] servo rail voltage in mV */
|
#define PX4IO_P_STATUS_VSERVO 6 /* [2] servo rail voltage in mV */
|
||||||
#define PX4IO_P_STATUS_VRSSI 7 /* [2] RSSI voltage */
|
#define PX4IO_P_STATUS_VRSSI 7 /* [2] RSSI voltage */
|
||||||
#define PX4IO_P_STATUS_PRSSI 8 /* [2] RSSI PWM value */
|
#define PX4IO_P_STATUS_PRSSI 8 /* [2] RSSI PWM value */
|
||||||
@@ -195,7 +193,6 @@
|
|||||||
#define PX4IO_P_SETUP_PWM_ALTRATE 4 /* 'high' PWM frame output rate in Hz */
|
#define PX4IO_P_SETUP_PWM_ALTRATE 4 /* 'high' PWM frame output rate in Hz */
|
||||||
#define PX4IO_P_SETUP_RELAYS_PAD 5
|
#define PX4IO_P_SETUP_RELAYS_PAD 5
|
||||||
|
|
||||||
#define PX4IO_P_SETUP_VBATT_SCALE 6 /* hardware rev [1] battery voltage correction factor (float) */
|
|
||||||
#define PX4IO_P_SETUP_VSERVO_SCALE 6 /* hardware rev [2] servo voltage correction factor (float) */
|
#define PX4IO_P_SETUP_VSERVO_SCALE 6 /* hardware rev [2] servo voltage correction factor (float) */
|
||||||
#define PX4IO_P_SETUP_DSM 7 /* DSM bind state */
|
#define PX4IO_P_SETUP_DSM 7 /* DSM bind state */
|
||||||
enum { /* DSM bind states */
|
enum { /* DSM bind states */
|
||||||
|
|||||||
@@ -84,8 +84,6 @@ volatile uint16_t r_page_status[] = {
|
|||||||
[PX4IO_P_STATUS_CPULOAD] = 0,
|
[PX4IO_P_STATUS_CPULOAD] = 0,
|
||||||
[PX4IO_P_STATUS_FLAGS] = 0,
|
[PX4IO_P_STATUS_FLAGS] = 0,
|
||||||
[PX4IO_P_STATUS_ALARMS] = 0,
|
[PX4IO_P_STATUS_ALARMS] = 0,
|
||||||
[PX4IO_P_STATUS_VBATT] = 0,
|
|
||||||
[PX4IO_P_STATUS_IBATT] = 0,
|
|
||||||
[PX4IO_P_STATUS_VSERVO] = 0,
|
[PX4IO_P_STATUS_VSERVO] = 0,
|
||||||
[PX4IO_P_STATUS_VRSSI] = 0,
|
[PX4IO_P_STATUS_VRSSI] = 0,
|
||||||
[PX4IO_P_STATUS_PRSSI] = 0,
|
[PX4IO_P_STATUS_PRSSI] = 0,
|
||||||
@@ -635,10 +633,6 @@ registers_set_one(uint8_t page, uint8_t offset, uint16_t value)
|
|||||||
pwm_configure_rates(r_setup_pwm_rates, r_setup_pwm_defaultrate, value);
|
pwm_configure_rates(r_setup_pwm_rates, r_setup_pwm_defaultrate, value);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PX4IO_P_SETUP_VBATT_SCALE:
|
|
||||||
r_page_setup[PX4IO_P_SETUP_VBATT_SCALE] = value;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PX4IO_P_SETUP_SET_DEBUG:
|
case PX4IO_P_SETUP_SET_DEBUG:
|
||||||
r_page_setup[PX4IO_P_SETUP_SET_DEBUG] = value;
|
r_page_setup[PX4IO_P_SETUP_SET_DEBUG] = value;
|
||||||
isr_debug(0, "set debug %u\n", (unsigned)r_page_setup[PX4IO_P_SETUP_SET_DEBUG]);
|
isr_debug(0, "set debug %u\n", (unsigned)r_page_setup[PX4IO_P_SETUP_SET_DEBUG]);
|
||||||
|
|||||||
@@ -31,15 +31,6 @@
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/**
|
|
||||||
* Scaling factor for battery voltage sensor on PX4IO.
|
|
||||||
*
|
|
||||||
* @min 1
|
|
||||||
* @max 100000
|
|
||||||
* @group Battery Calibration
|
|
||||||
*/
|
|
||||||
PARAM_DEFINE_INT32(BAT_V_SCALE_IO, 10000);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Scaling from ADC counts to volt on the ADC input (battery voltage)
|
* Scaling from ADC counts to volt on the ADC input (battery voltage)
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user