Added UAVCAN raw RPM command

This commit is contained in:
Benjamin Vedder 2021-11-24 10:56:45 +01:00
parent 36c333cc03
commit 5d385c046b
4 changed files with 16 additions and 5 deletions

View File

@ -204,6 +204,7 @@ int32_t confgenerator_serialize_appconf(uint8_t *buffer, const app_configuration
buffer[ind++] = conf->can_mode; buffer[ind++] = conf->can_mode;
buffer[ind++] = (uint8_t)conf->uavcan_esc_index; buffer[ind++] = (uint8_t)conf->uavcan_esc_index;
buffer[ind++] = conf->uavcan_raw_mode; buffer[ind++] = conf->uavcan_raw_mode;
buffer_append_float32_auto(buffer, conf->uavcan_raw_rpm_max, &ind);
buffer[ind++] = conf->servo_out_enable; buffer[ind++] = conf->servo_out_enable;
buffer[ind++] = conf->kill_sw_mode; buffer[ind++] = conf->kill_sw_mode;
buffer[ind++] = conf->app_to_use; buffer[ind++] = conf->app_to_use;
@ -223,7 +224,7 @@ int32_t confgenerator_serialize_appconf(uint8_t *buffer, const app_configuration
buffer[ind++] = conf->app_ppm_conf.multi_esc; buffer[ind++] = conf->app_ppm_conf.multi_esc;
buffer[ind++] = conf->app_ppm_conf.tc; buffer[ind++] = conf->app_ppm_conf.tc;
buffer_append_float32_auto(buffer, conf->app_ppm_conf.tc_max_diff, &ind); buffer_append_float32_auto(buffer, conf->app_ppm_conf.tc_max_diff, &ind);
buffer_append_float32_auto(buffer, conf->app_ppm_conf.max_erpm_for_dir, &ind); buffer_append_float16(buffer, conf->app_ppm_conf.max_erpm_for_dir, 1, &ind);
buffer_append_float32_auto(buffer, conf->app_ppm_conf.smart_rev_max_duty, &ind); buffer_append_float32_auto(buffer, conf->app_ppm_conf.smart_rev_max_duty, &ind);
buffer_append_float32_auto(buffer, conf->app_ppm_conf.smart_rev_ramp_time, &ind); buffer_append_float32_auto(buffer, conf->app_ppm_conf.smart_rev_ramp_time, &ind);
buffer[ind++] = conf->app_adc_conf.ctrl_type; buffer[ind++] = conf->app_adc_conf.ctrl_type;
@ -574,6 +575,7 @@ bool confgenerator_deserialize_appconf(const uint8_t *buffer, app_configuration
conf->can_mode = buffer[ind++]; conf->can_mode = buffer[ind++];
conf->uavcan_esc_index = buffer[ind++]; conf->uavcan_esc_index = buffer[ind++];
conf->uavcan_raw_mode = buffer[ind++]; conf->uavcan_raw_mode = buffer[ind++];
conf->uavcan_raw_rpm_max = buffer_get_float32_auto(buffer, &ind);
conf->servo_out_enable = buffer[ind++]; conf->servo_out_enable = buffer[ind++];
conf->kill_sw_mode = buffer[ind++]; conf->kill_sw_mode = buffer[ind++];
conf->app_to_use = buffer[ind++]; conf->app_to_use = buffer[ind++];
@ -593,7 +595,7 @@ bool confgenerator_deserialize_appconf(const uint8_t *buffer, app_configuration
conf->app_ppm_conf.multi_esc = buffer[ind++]; conf->app_ppm_conf.multi_esc = buffer[ind++];
conf->app_ppm_conf.tc = buffer[ind++]; conf->app_ppm_conf.tc = buffer[ind++];
conf->app_ppm_conf.tc_max_diff = buffer_get_float32_auto(buffer, &ind); conf->app_ppm_conf.tc_max_diff = buffer_get_float32_auto(buffer, &ind);
conf->app_ppm_conf.max_erpm_for_dir = buffer_get_float32_auto(buffer, &ind); conf->app_ppm_conf.max_erpm_for_dir = buffer_get_float16(buffer, 1, &ind);
conf->app_ppm_conf.smart_rev_max_duty = buffer_get_float32_auto(buffer, &ind); conf->app_ppm_conf.smart_rev_max_duty = buffer_get_float32_auto(buffer, &ind);
conf->app_ppm_conf.smart_rev_ramp_time = buffer_get_float32_auto(buffer, &ind); conf->app_ppm_conf.smart_rev_ramp_time = buffer_get_float32_auto(buffer, &ind);
conf->app_adc_conf.ctrl_type = buffer[ind++]; conf->app_adc_conf.ctrl_type = buffer[ind++];
@ -928,6 +930,7 @@ void confgenerator_set_defaults_appconf(app_configuration *conf) {
conf->can_mode = APPCONF_CAN_MODE; conf->can_mode = APPCONF_CAN_MODE;
conf->uavcan_esc_index = APPCONF_UAVCAN_ESC_INDEX; conf->uavcan_esc_index = APPCONF_UAVCAN_ESC_INDEX;
conf->uavcan_raw_mode = APPCONF_UAVCAN_RAW_MODE; conf->uavcan_raw_mode = APPCONF_UAVCAN_RAW_MODE;
conf->uavcan_raw_rpm_max = APPCONF_UAVCAN_RAW_RPM_MAX;
conf->servo_out_enable = APPCONF_SERVO_OUT_ENABLE; conf->servo_out_enable = APPCONF_SERVO_OUT_ENABLE;
conf->kill_sw_mode = APPCONF_KILL_SW_MODE; conf->kill_sw_mode = APPCONF_KILL_SW_MODE;
conf->app_to_use = APPCONF_APP_TO_USE; conf->app_to_use = APPCONF_APP_TO_USE;

View File

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

View File

@ -854,7 +854,8 @@ typedef enum {
typedef enum { typedef enum {
UAVCAN_RAW_MODE_CURRENT = 0, UAVCAN_RAW_MODE_CURRENT = 0,
UAVCAN_RAW_MODE_CURRENT_NO_REV_BRAKE, UAVCAN_RAW_MODE_CURRENT_NO_REV_BRAKE,
UAVCAN_RAW_MODE_DUTY UAVCAN_RAW_MODE_DUTY,
UAVCAN_RAW_MODE_RPM
} UAVCAN_RAW_MODE; } UAVCAN_RAW_MODE;
typedef enum { typedef enum {
@ -883,6 +884,7 @@ typedef struct {
CAN_MODE can_mode; CAN_MODE can_mode;
uint8_t uavcan_esc_index; uint8_t uavcan_esc_index;
UAVCAN_RAW_MODE uavcan_raw_mode; UAVCAN_RAW_MODE uavcan_raw_mode;
float uavcan_raw_rpm_max;
// Application to use // Application to use
app_use app_to_use; app_use app_to_use;

View File

@ -510,7 +510,9 @@ static void handle_esc_raw_command(CanardInstance* ins, CanardRxTransfer* transf
if (cmd.cmd.len > app_get_configuration()->uavcan_esc_index) { if (cmd.cmd.len > app_get_configuration()->uavcan_esc_index) {
float raw_val = ((float)cmd.cmd.data[app_get_configuration()->uavcan_esc_index]) / 8192.0; float raw_val = ((float)cmd.cmd.data[app_get_configuration()->uavcan_esc_index]) / 8192.0;
switch (app_get_configuration()->uavcan_raw_mode) { volatile const app_configuration *conf = app_get_configuration();
switch (conf->uavcan_raw_mode) {
case UAVCAN_RAW_MODE_CURRENT: case UAVCAN_RAW_MODE_CURRENT:
mc_interface_set_current_rel(raw_val); mc_interface_set_current_rel(raw_val);
break; break;
@ -527,6 +529,10 @@ static void handle_esc_raw_command(CanardInstance* ins, CanardRxTransfer* transf
mc_interface_set_duty(raw_val); mc_interface_set_duty(raw_val);
break; break;
case UAVCAN_RAW_MODE_RPM:
mc_interface_set_pid_speed(raw_val * conf->uavcan_raw_rpm_max);
break;
default: default:
break; break;
} }