|
|
@@ -247,7 +247,7 @@ m_contrl_t * mc_params(void) {
|
|
|
return &motor;
|
|
|
}
|
|
|
|
|
|
-gear_t *mc_get_gear_config_by_gear(u8 n_gear) {
|
|
|
+gear_t *mc_gear_conf_by_gear(u8 n_gear) {
|
|
|
gear_t *gears;
|
|
|
if (!foc_observer_is_encoder()) { //无感模式,受限运行
|
|
|
return &sensorless_gear;
|
|
|
@@ -261,32 +261,32 @@ gear_t *mc_get_gear_config_by_gear(u8 n_gear) {
|
|
|
}
|
|
|
|
|
|
gear_t *mc_gear_conf(void) {
|
|
|
- return mc_get_gear_config_by_gear(motor.n_gear);
|
|
|
+ return mc_gear_conf_by_gear(motor.n_gear);
|
|
|
}
|
|
|
|
|
|
static __INLINE float gear_rpm_2_torque(u8 torque, s16 max) {
|
|
|
return (float)torque/100.0f * max;
|
|
|
}
|
|
|
|
|
|
-float mc_get_max_torque_with_gear_vel(s16 vel, u8 gear) {
|
|
|
- gear_t *_current_gear = mc_get_gear_config_by_gear(gear);
|
|
|
- if (_current_gear == NULL) {
|
|
|
+float mc_gear_max_torque(s16 vel, u8 gear_n) {
|
|
|
+ gear_t *gear = mc_gear_conf_by_gear(gear_n);
|
|
|
+ if (gear == NULL) {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- if (vel > _current_gear->max_speed) {
|
|
|
- vel = _current_gear->max_speed;
|
|
|
+ if (vel > gear->max_speed) {
|
|
|
+ vel = gear->max_speed;
|
|
|
}
|
|
|
vel = ABS(vel);
|
|
|
if (vel <= 1000) {
|
|
|
- return gear_rpm_2_torque(_current_gear->torque[0], _current_gear->max_torque);
|
|
|
+ return gear_rpm_2_torque(gear->torque[0], gear->max_torque);
|
|
|
}
|
|
|
|
|
|
for (int i = 1; i < CONFIG_GEAR_SPEED_TRQ_NUM; i++) {
|
|
|
if (vel <= 1000 * (i + 1)) { //线性插值
|
|
|
- float trq1 = gear_rpm_2_torque(_current_gear->torque[i-1], _current_gear->max_torque);
|
|
|
+ float trq1 = gear_rpm_2_torque(gear->torque[i-1], gear->max_torque);
|
|
|
float min_rpm = (i * 1000);
|
|
|
- float trq2 = gear_rpm_2_torque(_current_gear->torque[i], _current_gear->max_torque);
|
|
|
+ float trq2 = gear_rpm_2_torque(gear->torque[i], gear->max_torque);
|
|
|
float max_rpm = (i + 1) * 1000;
|
|
|
if (trq1 > trq2) {
|
|
|
return f_map_inv((float)vel, min_rpm, max_rpm, trq2, trq1);
|
|
|
@@ -295,7 +295,7 @@ float mc_get_max_torque_with_gear_vel(s16 vel, u8 gear) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- return gear_rpm_2_torque(_current_gear->torque[CONFIG_GEAR_SPEED_TRQ_NUM-1], _current_gear->max_torque);
|
|
|
+ return gear_rpm_2_torque(gear->torque[CONFIG_GEAR_SPEED_TRQ_NUM-1], gear->max_torque);
|
|
|
}
|
|
|
|
|
|
|