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
// Enable/Disable Motor
//#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_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
// Control selections
#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 SPEED_COEFFICIENT 8192 // 0.5f
#define STEER_COEFFICIENT 62259 // -0.2f
#define DEBUG_SERIAL_USART2 // left sensor cable debug
// #define SUPPORT_BUTTONS // Define for Nunchuck buttons support
#endif
// ############################# 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_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)
#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)
@ -519,7 +525,11 @@
#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_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)
#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)
@ -542,11 +552,6 @@
// #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 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
// ############################# END OF VARIANT_SKATEBOARD SETTINGS ############################

View File

@ -464,7 +464,7 @@ void adcCalibLim(void) {
HAL_Delay(5);
}
HAL_Delay(50);
HAL_Delay(10);
uint16_t input_margin = 0;
#ifdef CONTROL_ADC
@ -489,7 +489,7 @@ void adcCalibLim(void) {
consoleLog("Input1 is a mid-resting pot");
}
HAL_Delay(50);
HAL_Delay(10);
#ifdef CONTROL_ADC
if ( (INPUT1_MIN_CAL - ADC_PROTECT_THRESH) > 0 && (INPUT1_MAX_CAL + ADC_PROTECT_THRESH) < 4095){
consoleLog(" and protected");
@ -498,9 +498,9 @@ void adcCalibLim(void) {
input_cal_valid = 1;
}
HAL_Delay(50);
HAL_Delay(10);
consoleLog("\n");
HAL_Delay(50);
HAL_Delay(10);
threshold = (INPUT2_MAX - INPUT2_MIN) / 10;
INPUT2_MIN_CAL = INPUT2_MIN_temp + input_margin;
@ -520,7 +520,7 @@ void adcCalibLim(void) {
consoleLog("Input2 is a mid-resting pot");
}
HAL_Delay(50);
HAL_Delay(10);
#ifdef CONTROL_ADC
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;
}
HAL_Delay(50);
HAL_Delay(10);
consoleLog("\n");
HAL_Delay(50);
HAL_Delay(10);
consoleLog("Saved limits\n");
HAL_Delay(50);
HAL_Delay(10);
setScopeChannel(0, (int16_t)INPUT1_MIN_CAL);
setScopeChannel(1, (int16_t)INPUT1_MID_CAL);
setScopeChannel(2, (int16_t)INPUT1_MAX_CAL);
@ -545,8 +545,9 @@ void adcCalibLim(void) {
setScopeChannel(7, (int16_t)0);
consoleScope();
HAL_Delay(50);
HAL_Delay(20);
consoleLog("OK\n");
#endif
}
@ -565,7 +566,7 @@ void updateCurSpdLim(void) {
#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 input2_fixdt = cmd2_in << 16;
@ -582,14 +583,29 @@ void updateCurSpdLim(void) {
}
// 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
spd_factor = CLAMP((input2_fixdt - (INPUT2_MIN_CAL << 16)) / (INPUT2_MAX_CAL - INPUT2_MIN_CAL), 3276, 65535); // ADC2, MIN_spd(5%) = 50 rpm
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 - ((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
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_Right.i_max = rtP_Left.i_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;
consoleLog("OK\n");
#endif