Current and speed setting for all variants

This commit is contained in:
Candas1 2020-11-13 22:31:49 +01:00
parent 4cc02fddc1
commit 11ab848103
2 changed files with 42 additions and 21 deletions

View File

@ -135,8 +135,8 @@
#define TRQ_MODE 3 // [-] TORQUE mode #define TRQ_MODE 3 // [-] TORQUE mode
// Enable/Disable Motor // Enable/Disable Motor
//#define MOTOR_LEFT_ENA // [-] Enable LEFT motor. Comment-out if this motor is not needed to be operational #define MOTOR_LEFT_ENA // [-] Enable LEFT motor. Comment-out if this motor is not needed to be operational
//#define MOTOR_RIGHT_ENA // [-] Enable RIGHT motor. Comment-out if this motor is not needed to be operational #define MOTOR_RIGHT_ENA // [-] Enable RIGHT motor. Comment-out if this motor is not needed to be operational
// Control selections // Control selections
#define CTRL_TYP_SEL FOC_CTRL // [-] Control type selection: COM_CTRL, SIN_CTRL, FOC_CTRL (default) #define CTRL_TYP_SEL FOC_CTRL // [-] Control type selection: COM_CTRL, SIN_CTRL, FOC_CTRL (default)
@ -324,6 +324,7 @@
#define FILTER 3276 // 0.05f #define FILTER 3276 // 0.05f
#define SPEED_COEFFICIENT 8192 // 0.5f #define SPEED_COEFFICIENT 8192 // 0.5f
#define STEER_COEFFICIENT 62259 // -0.2f #define STEER_COEFFICIENT 62259 // -0.2f
#define DEBUG_SERIAL_USART2 // left sensor cable debug
// #define SUPPORT_BUTTONS // Define for Nunchuck buttons support // #define SUPPORT_BUTTONS // Define for Nunchuck buttons support
#endif #endif
// ############################# END OF VARIANT_NUNCHUK SETTINGS ######################### // ############################# END OF VARIANT_NUNCHUK SETTINGS #########################
@ -371,6 +372,11 @@
*/ */
#define CONTROL_PWM_LEFT // use RC PWM as input on the LEFT cable. disable DEBUG_SERIAL_USART2! #define CONTROL_PWM_LEFT // use RC PWM as input on the LEFT cable. disable DEBUG_SERIAL_USART2!
// #define CONTROL_PWM_RIGHT // use RC PWM as input on the RIGHT cable. disable DEBUG_SERIAL_USART3! // #define CONTROL_PWM_RIGHT // use RC PWM as input on the RIGHT cable. disable DEBUG_SERIAL_USART3!
#ifdef CONTROL_PWM_RIGHT
#define DEBUG_SERIAL_USART2 // left sensor cable debug
#else
#define DEBUG_SERIAL_USART3 // right sensor cable debug
#endif
// Min / Max values of each channel (use DEBUG to determine these values) // Min / Max values of each channel (use DEBUG to determine these values)
#define INPUT1_TYPE 2 // 0:Disabled 1:Normal POT 2:Middle Resting Pot #define INPUT1_TYPE 2 // 0:Disabled 1:Normal POT 2:Middle Resting Pot
#define INPUT1_DEADBAND 100 // How much of the center position is considered 'center' (100 = values -100 to 100 are considered 0) #define INPUT1_DEADBAND 100 // How much of the center position is considered 'center' (100 = values -100 to 100 are considered 0)
@ -519,7 +525,11 @@
#define CTRL_MOD_REQ TRQ_MODE // SKATEBOARD works best in TORQUE Mode #define CTRL_MOD_REQ TRQ_MODE // SKATEBOARD works best in TORQUE Mode
//#define CONTROL_PWM_LEFT // use RC PWM as input on the LEFT cable. disable DEBUG_SERIAL_USART2! //#define CONTROL_PWM_LEFT // use RC PWM as input on the LEFT cable. disable DEBUG_SERIAL_USART2!
#define CONTROL_PWM_RIGHT // use RC PWM as input on the RIGHT cable. disable DEBUG_SERIAL_USART3! #define CONTROL_PWM_RIGHT // use RC PWM as input on the RIGHT cable. disable DEBUG_SERIAL_USART3!
#ifdef CONTROL_PWM_RIGHT
#define DEBUG_SERIAL_USART2 // left sensor cable debug
#else
#define DEBUG_SERIAL_USART3 // right sensor cable debug
#endif
// Min / Max values of each channel (use DEBUG to determine these values) // Min / Max values of each channel (use DEBUG to determine these values)
#define INPUT1_TYPE 0 // 0:Disabled 1:Normal POT 2:Middle Resting Pot #define INPUT1_TYPE 0 // 0:Disabled 1:Normal POT 2:Middle Resting Pot
#define INPUT1_DEADBAND 100 // How much of the center position is considered 'center' (100 = values -100 to 100 are considered 0) #define INPUT1_DEADBAND 100 // How much of the center position is considered 'center' (100 = values -100 to 100 are considered 0)
@ -542,11 +552,6 @@
// #define SUPPORT_BUTTONS_LEFT // use left sensor board cable for button inputs. Disable DEBUG_SERIAL_USART2! // #define SUPPORT_BUTTONS_LEFT // use left sensor board cable for button inputs. Disable DEBUG_SERIAL_USART2!
// #define SUPPORT_BUTTONS_RIGHT // use right sensor board cable for button inputs. Disable DEBUG_SERIAL_USART3! // #define SUPPORT_BUTTONS_RIGHT // use right sensor board cable for button inputs. Disable DEBUG_SERIAL_USART3!
// #define STANDSTILL_HOLD_ENABLE // [-] Flag to hold the position when standtill is reached. Only available and makes sense for VOLTAGE or TORQUE mode. // #define STANDSTILL_HOLD_ENABLE // [-] Flag to hold the position when standtill is reached. Only available and makes sense for VOLTAGE or TORQUE mode.
#ifdef CONTROL_PWM_RIGHT
#define DEBUG_SERIAL_USART2 // left sensor cable debug
#else
#define DEBUG_SERIAL_USART3 // right sensor cable debug
#endif
#endif #endif
// ############################# END OF VARIANT_SKATEBOARD SETTINGS ############################ // ############################# END OF VARIANT_SKATEBOARD SETTINGS ############################

View File

@ -464,7 +464,7 @@ void adcCalibLim(void) {
HAL_Delay(5); HAL_Delay(5);
} }
HAL_Delay(50); HAL_Delay(10);
uint16_t input_margin = 0; uint16_t input_margin = 0;
#ifdef CONTROL_ADC #ifdef CONTROL_ADC
@ -489,7 +489,7 @@ void adcCalibLim(void) {
consoleLog("Input1 is a mid-resting pot"); consoleLog("Input1 is a mid-resting pot");
} }
HAL_Delay(50); HAL_Delay(10);
#ifdef CONTROL_ADC #ifdef CONTROL_ADC
if ( (INPUT1_MIN_CAL - ADC_PROTECT_THRESH) > 0 && (INPUT1_MAX_CAL + ADC_PROTECT_THRESH) < 4095){ if ( (INPUT1_MIN_CAL - ADC_PROTECT_THRESH) > 0 && (INPUT1_MAX_CAL + ADC_PROTECT_THRESH) < 4095){
consoleLog(" and protected"); consoleLog(" and protected");
@ -498,9 +498,9 @@ void adcCalibLim(void) {
input_cal_valid = 1; input_cal_valid = 1;
} }
HAL_Delay(50); HAL_Delay(10);
consoleLog("\n"); consoleLog("\n");
HAL_Delay(50); HAL_Delay(10);
threshold = (INPUT2_MAX - INPUT2_MIN) / 10; threshold = (INPUT2_MAX - INPUT2_MIN) / 10;
INPUT2_MIN_CAL = INPUT2_MIN_temp + input_margin; INPUT2_MIN_CAL = INPUT2_MIN_temp + input_margin;
@ -520,7 +520,7 @@ void adcCalibLim(void) {
consoleLog("Input2 is a mid-resting pot"); consoleLog("Input2 is a mid-resting pot");
} }
HAL_Delay(50); HAL_Delay(10);
#ifdef CONTROL_ADC #ifdef CONTROL_ADC
if ( (INPUT2_MIN_CAL - ADC_PROTECT_THRESH) > 0 && (INPUT2_MAX_CAL + ADC_PROTECT_THRESH) < 4095 ){ if ( (INPUT2_MIN_CAL - ADC_PROTECT_THRESH) > 0 && (INPUT2_MAX_CAL + ADC_PROTECT_THRESH) < 4095 ){
@ -530,11 +530,11 @@ void adcCalibLim(void) {
input_cal_valid = 1; input_cal_valid = 1;
} }
HAL_Delay(50); HAL_Delay(10);
consoleLog("\n"); consoleLog("\n");
HAL_Delay(50); HAL_Delay(10);
consoleLog("Saved limits\n"); consoleLog("Saved limits\n");
HAL_Delay(50); HAL_Delay(10);
setScopeChannel(0, (int16_t)INPUT1_MIN_CAL); setScopeChannel(0, (int16_t)INPUT1_MIN_CAL);
setScopeChannel(1, (int16_t)INPUT1_MID_CAL); setScopeChannel(1, (int16_t)INPUT1_MID_CAL);
setScopeChannel(2, (int16_t)INPUT1_MAX_CAL); setScopeChannel(2, (int16_t)INPUT1_MAX_CAL);
@ -545,8 +545,9 @@ void adcCalibLim(void) {
setScopeChannel(7, (int16_t)0); setScopeChannel(7, (int16_t)0);
consoleScope(); consoleScope();
HAL_Delay(50); HAL_Delay(20);
consoleLog("OK\n");
#endif #endif
} }
@ -565,7 +566,7 @@ void updateCurSpdLim(void) {
#if !defined(VARIANT_HOVERBOARD) && !defined(VARIANT_TRANSPOTTER) #if !defined(VARIANT_HOVERBOARD) && !defined(VARIANT_TRANSPOTTER)
consoleLog("Torque and Speed limits update started... "); consoleLog("Torque and Speed limits update started...\n");
int32_t input1_fixdt = cmd1_in << 16; int32_t input1_fixdt = cmd1_in << 16;
int32_t input2_fixdt = cmd2_in << 16; int32_t input2_fixdt = cmd2_in << 16;
@ -582,14 +583,29 @@ void updateCurSpdLim(void) {
} }
// Calculate scaling factors // Calculate scaling factors
cur_factor = CLAMP((input1_fixdt - (INPUT1_MIN_CAL << 16)) / (INPUT1_MAX_CAL - INPUT1_MIN_CAL), 6553, 65535); // ADC1, MIN_cur(10%) = 1.5 A cur_factor = CLAMP((input1_fixdt - ((int16_t)INPUT1_MIN_CAL << 16)) / ((int16_t)INPUT1_MAX_CAL - (int16_t)INPUT1_MIN_CAL), 6553, 65535); // ADC1, MIN_cur(10%) = 1.5 A
spd_factor = CLAMP((input2_fixdt - (INPUT2_MIN_CAL << 16)) / (INPUT2_MAX_CAL - INPUT2_MIN_CAL), 3276, 65535); // ADC2, MIN_spd(5%) = 50 rpm spd_factor = CLAMP((input2_fixdt - ((int16_t)INPUT2_MIN_CAL << 16)) / ((int16_t)INPUT2_MAX_CAL - (int16_t)INPUT2_MIN_CAL), 3276, 65535); // ADC2, MIN_spd(5%) = 50 rpm
// Update maximum limits // Update maximum limits
rtP_Left.i_max = (int16_t)((I_MOT_MAX * A2BIT_CONV * cur_factor) >> 12); // fixdt(0,16,16) to fixdt(1,16,4) rtP_Left.i_max = (int16_t)((I_MOT_MAX * A2BIT_CONV * cur_factor) >> 12); // fixdt(0,16,16) to fixdt(1,16,4)
rtP_Left.n_max = (int16_t)((N_MOT_MAX * spd_factor) >> 12); // fixdt(0,16,16) to fixdt(1,16,4) rtP_Left.n_max = (int16_t)((N_MOT_MAX * spd_factor) >> 12); // fixdt(0,16,16) to fixdt(1,16,4)
rtP_Right.i_max = rtP_Left.i_max; rtP_Right.i_max = rtP_Left.i_max;
rtP_Right.n_max = rtP_Left.n_max; rtP_Right.n_max = rtP_Left.n_max;
HAL_Delay(10);
consoleLog("Saved limits\n");
HAL_Delay(10);
setScopeChannel(0, (int16_t)input1_fixdt);
setScopeChannel(1, (uint16_t)cur_factor);
setScopeChannel(2, (int16_t)rtP_Right.i_max);
setScopeChannel(3, (int16_t)0);
setScopeChannel(4, (int16_t)input2_fixdt);
setScopeChannel(5, (uint16_t)spd_factor);
setScopeChannel(6, (int16_t)rtP_Right.n_max);
setScopeChannel(7, (int16_t)0);
consoleScope();
HAL_Delay(20);
cur_spd_valid = 1; cur_spd_valid = 1;
consoleLog("OK\n"); consoleLog("OK\n");
#endif #endif