Balance app: dual adc switch (single combined switch) support

Support for combining both adc switches into a single one.

Signed-off-by: Dado Mista <dadomista@gmail.com>
This commit is contained in:
Dado Mista 2022-07-16 13:52:18 -07:00
parent 763f7598c7
commit 20796a66c1
5 changed files with 20 additions and 8 deletions

View File

@ -357,6 +357,7 @@ static bool check_faults(bool ignoreTimers){
}
// Switch partially open and stopped
if(!balance_conf.fault_is_dual_switch) {
if((switch_state == HALF || switch_state == OFF) && abs_erpm < balance_conf.fault_adc_half_erpm){
if(ST2MS(current_time - fault_switch_half_timer) > balance_conf.fault_delay_switch_half || ignoreTimers){
state = FAULT_SWITCH_HALF;
@ -365,6 +366,7 @@ static bool check_faults(bool ignoreTimers){
} else {
fault_switch_half_timer = current_time;
}
}
// Check pitch angle
if(fabsf(pitch_angle) > balance_conf.fault_pitch){
@ -675,6 +677,9 @@ static THD_FUNCTION(balance_thread, arg) {
if(adc1 > balance_conf.fault_adc1 && adc2 > balance_conf.fault_adc2){
switch_state = ON;
}else if(adc1 > balance_conf.fault_adc1 || adc2 > balance_conf.fault_adc2){
if (balance_conf.fault_is_dual_switch)
switch_state = ON;
else
switch_state = HALF;
}else{
switch_state = OFF;

View File

@ -355,6 +355,9 @@
#ifndef APPCONF_BALANCE_FAULT_ADC_HALF_ERPM
#define APPCONF_BALANCE_FAULT_ADC_HALF_ERPM 1000
#endif
#ifndef APPCONF_BALANCE_FAULT_IS_DUAL_SWITCH
#define APPCONF_BALANCE_FAULT_IS_DUAL_SWITCH false
#endif
#ifndef APPCONF_BALANCE_TILTBACK_DUTY_ANGLE
#define APPCONF_BALANCE_TILTBACK_DUTY_ANGLE 10.0
#endif

View File

@ -310,6 +310,7 @@ int32_t confgenerator_serialize_appconf(uint8_t *buffer, const app_configuration
buffer_append_uint16(buffer, conf->app_balance_conf.fault_delay_switch_half, &ind);
buffer_append_uint16(buffer, conf->app_balance_conf.fault_delay_switch_full, &ind);
buffer_append_uint16(buffer, conf->app_balance_conf.fault_adc_half_erpm, &ind);
buffer[ind++] = conf->app_balance_conf.fault_is_dual_switch;
buffer_append_float16(buffer, conf->app_balance_conf.tiltback_duty_angle, 100, &ind);
buffer_append_float16(buffer, conf->app_balance_conf.tiltback_duty_speed, 100, &ind);
buffer_append_float16(buffer, conf->app_balance_conf.tiltback_duty, 1000, &ind);
@ -703,6 +704,7 @@ bool confgenerator_deserialize_appconf(const uint8_t *buffer, app_configuration
conf->app_balance_conf.fault_delay_switch_half = buffer_get_uint16(buffer, &ind);
conf->app_balance_conf.fault_delay_switch_full = buffer_get_uint16(buffer, &ind);
conf->app_balance_conf.fault_adc_half_erpm = buffer_get_uint16(buffer, &ind);
conf->app_balance_conf.fault_is_dual_switch = buffer[ind++];
conf->app_balance_conf.tiltback_duty_angle = buffer_get_float16(buffer, 100, &ind);
conf->app_balance_conf.tiltback_duty_speed = buffer_get_float16(buffer, 100, &ind);
conf->app_balance_conf.tiltback_duty = buffer_get_float16(buffer, 1000, &ind);
@ -1080,6 +1082,7 @@ void confgenerator_set_defaults_appconf(app_configuration *conf) {
conf->app_balance_conf.fault_delay_switch_half = APPCONF_BALANCE_FAULT_DELAY_SWITCH_HALF;
conf->app_balance_conf.fault_delay_switch_full = APPCONF_BALANCE_FAULT_DELAY_SWITCH_FULL;
conf->app_balance_conf.fault_adc_half_erpm = APPCONF_BALANCE_FAULT_ADC_HALF_ERPM;
conf->app_balance_conf.fault_is_dual_switch = APPCONF_BALANCE_FAULT_IS_DUAL_SWITCH;
conf->app_balance_conf.tiltback_duty_angle = APPCONF_BALANCE_TILTBACK_DUTY_ANGLE;
conf->app_balance_conf.tiltback_duty_speed = APPCONF_BALANCE_TILTBACK_DUTY_SPEED;
conf->app_balance_conf.tiltback_duty = APPCONF_BALANCE_TILTBACK_DUTY;

View File

@ -9,7 +9,7 @@
// Constants
#define MCCONF_SIGNATURE 3188187738
#define APPCONF_SIGNATURE 992988844
#define APPCONF_SIGNATURE 2551442059
// Functions
int32_t confgenerator_serialize_mcconf(uint8_t *buffer, const mc_configuration *conf);

View File

@ -777,6 +777,7 @@ typedef struct {
uint16_t fault_delay_switch_half;
uint16_t fault_delay_switch_full;
uint16_t fault_adc_half_erpm;
bool fault_is_dual_switch;
float tiltback_duty_angle;
float tiltback_duty_speed;
float tiltback_duty;