Manually merged #166

This commit is contained in:
Benjamin Vedder 2020-05-12 15:53:32 +02:00
parent 939634b9a2
commit 9781fb9563
6 changed files with 25 additions and 1 deletions

View File

@ -3,6 +3,7 @@
* Added COMM_GET_MCCONF_TEMP command. * Added COMM_GET_MCCONF_TEMP command.
* Added bidirectional current command to VESC remote. * Added bidirectional current command to VESC remote.
* Fixed motor temperature reading on hw with ADC mux. * Fixed motor temperature reading on hw with ADC mux.
* Added speed PID input ramping option.
=== FW 5.01 === === FW 5.01 ===
* Fixed PPM bug in previous release. * Fixed PPM bug in previous release.

View File

@ -118,6 +118,7 @@ int32_t confgenerator_serialize_mcconf(uint8_t *buffer, const mc_configuration *
buffer_append_float32_auto(buffer, conf->s_pid_kd_filter, &ind); buffer_append_float32_auto(buffer, conf->s_pid_kd_filter, &ind);
buffer_append_float32_auto(buffer, conf->s_pid_min_erpm, &ind); buffer_append_float32_auto(buffer, conf->s_pid_min_erpm, &ind);
buffer[ind++] = conf->s_pid_allow_braking; buffer[ind++] = conf->s_pid_allow_braking;
buffer_append_float32_auto(buffer, conf->s_pid_ramp_erpms_s, &ind);
buffer_append_float32_auto(buffer, conf->p_pid_kp, &ind); buffer_append_float32_auto(buffer, conf->p_pid_kp, &ind);
buffer_append_float32_auto(buffer, conf->p_pid_ki, &ind); buffer_append_float32_auto(buffer, conf->p_pid_ki, &ind);
buffer_append_float32_auto(buffer, conf->p_pid_kd, &ind); buffer_append_float32_auto(buffer, conf->p_pid_kd, &ind);
@ -410,6 +411,7 @@ bool confgenerator_deserialize_mcconf(const uint8_t *buffer, mc_configuration *c
conf->s_pid_kd_filter = buffer_get_float32_auto(buffer, &ind); conf->s_pid_kd_filter = buffer_get_float32_auto(buffer, &ind);
conf->s_pid_min_erpm = buffer_get_float32_auto(buffer, &ind); conf->s_pid_min_erpm = buffer_get_float32_auto(buffer, &ind);
conf->s_pid_allow_braking = buffer[ind++]; conf->s_pid_allow_braking = buffer[ind++];
conf->s_pid_ramp_erpms_s = buffer_get_float32_auto(buffer, &ind);
conf->p_pid_kp = buffer_get_float32_auto(buffer, &ind); conf->p_pid_kp = buffer_get_float32_auto(buffer, &ind);
conf->p_pid_ki = buffer_get_float32_auto(buffer, &ind); conf->p_pid_ki = buffer_get_float32_auto(buffer, &ind);
conf->p_pid_kd = buffer_get_float32_auto(buffer, &ind); conf->p_pid_kd = buffer_get_float32_auto(buffer, &ind);
@ -698,6 +700,7 @@ void confgenerator_set_defaults_mcconf(mc_configuration *conf) {
conf->s_pid_kd_filter = MCCONF_S_PID_KD_FILTER; conf->s_pid_kd_filter = MCCONF_S_PID_KD_FILTER;
conf->s_pid_min_erpm = MCCONF_S_PID_MIN_RPM; conf->s_pid_min_erpm = MCCONF_S_PID_MIN_RPM;
conf->s_pid_allow_braking = MCCONF_S_PID_ALLOW_BRAKING; conf->s_pid_allow_braking = MCCONF_S_PID_ALLOW_BRAKING;
conf->s_pid_ramp_erpms_s = MCCONF_S_PID_RAMP_ERPMS_S;
conf->p_pid_kp = MCCONF_P_PID_KP; conf->p_pid_kp = MCCONF_P_PID_KP;
conf->p_pid_ki = MCCONF_P_PID_KI; conf->p_pid_ki = MCCONF_P_PID_KI;
conf->p_pid_kd = MCCONF_P_PID_KD; conf->p_pid_kd = MCCONF_P_PID_KD;

View File

@ -8,7 +8,7 @@
#include <stdbool.h> #include <stdbool.h>
// Constants // Constants
#define MCCONF_SIGNATURE 3698540221 #define MCCONF_SIGNATURE 1775793947
#define APPCONF_SIGNATURE 4090856534 #define APPCONF_SIGNATURE 4090856534
// Functions // Functions

View File

@ -321,6 +321,7 @@ typedef struct {
float s_pid_kd_filter; float s_pid_kd_filter;
float s_pid_min_erpm; float s_pid_min_erpm;
bool s_pid_allow_braking; bool s_pid_allow_braking;
float s_pid_ramp_erpms_s;
// Pos PID // Pos PID
float p_pid_kp; float p_pid_kp;
float p_pid_ki; float p_pid_ki;

View File

@ -136,6 +136,9 @@
#ifndef MCCONF_S_PID_ALLOW_BRAKING #ifndef MCCONF_S_PID_ALLOW_BRAKING
#define MCCONF_S_PID_ALLOW_BRAKING true // Allow braking in speed control mode #define MCCONF_S_PID_ALLOW_BRAKING true // Allow braking in speed control mode
#endif #endif
#ifndef MCCONF_S_PID_RAMP_ERPMS_S
#define MCCONF_S_PID_RAMP_ERPMS_S -1.0 // Default Speed Input Ramp
#endif
// Position PID parameters // Position PID parameters
#ifndef MCCONF_P_PID_KP #ifndef MCCONF_P_PID_KP

View File

@ -111,6 +111,7 @@ typedef struct {
bool m_output_on; bool m_output_on;
float m_pos_pid_set; float m_pos_pid_set;
float m_speed_pid_set_rpm; float m_speed_pid_set_rpm;
float m_speed_command_rpm;
float m_phase_now_observer; float m_phase_now_observer;
float m_phase_now_observer_override; float m_phase_now_observer_override;
bool m_phase_observer_override; bool m_phase_observer_override;
@ -798,6 +799,17 @@ void mcpwm_foc_set_duty_noramp(float dutyCycle) {
* The electrical RPM goal value to use. * The electrical RPM goal value to use.
*/ */
void mcpwm_foc_set_pid_speed(float rpm) { void mcpwm_foc_set_pid_speed(float rpm) {
if (motor_now()->m_conf->s_pid_ramp_erpms_s > 0.0 ) {
if (motor_now()->m_control_mode != CONTROL_MODE_SPEED ||
motor_now()->m_state != MC_STATE_RUNNING) {
motor_now()->m_speed_pid_set_rpm = mcpwm_foc_get_rpm();
}
motor_now()->m_speed_command_rpm = rpm;
} else {
motor_now()->m_speed_pid_set_rpm = rpm;
}
motor_now()->m_control_mode = CONTROL_MODE_SPEED; motor_now()->m_control_mode = CONTROL_MODE_SPEED;
motor_now()->m_speed_pid_set_rpm = rpm; motor_now()->m_speed_pid_set_rpm = rpm;
@ -3632,6 +3644,10 @@ static void run_pid_control_speed(float dt, volatile motor_all_state_t *motor) {
return; return;
} }
if (conf_now->s_pid_ramp_erpms_s > 0.0) {
utils_step_towards((float*)&motor->m_speed_pid_set_rpm, motor->m_speed_command_rpm, conf_now->s_pid_ramp_erpms_s * dt);
}
const float rpm = mcpwm_foc_get_rpm(); const float rpm = mcpwm_foc_get_rpm();
float error = motor->m_speed_pid_set_rpm - rpm; float error = motor->m_speed_pid_set_rpm - rpm;