Hooverboard Setup with phub-29-a and RC Control

Hello, I have a configuration similar to that of the Hooverboard motor solution.
Two phub-29-a motors controlled via PWM.
The whole thing is going pretty well up to the point that I have a delay.

When I operate the remote control my robot starts rolling with a delay and when I let go it needs something before it comes to a stop.
Apparently the motor always needs some time to reach the position set by the PWM pulse.
I have now reduced the PWM mapping and it has improved a bit. from -2 +2 to -1 +1

Can I go further down there or where else can I do something?

{"axis0": {"acim_estimator": {"config": {"slip_velocity": 14.706000328063965}}, "config": {"dir_gpio_pin": 2, "enable_sensorless_mode": false, "enable_step_dir": false, "enable_watchdog": false, "startup_closed_loop_control": true, "startup_encoder_index_search": false, "startup_encoder_offset_calibration": false, "startup_homing": false, "startup_motor_calibration": false, "step_dir_always_on": false, "step_gpio_pin": 1, "watchdog_timeout": 0.0, "calibration_lockin": {"accel": 20.0, "current": 10.0, "ramp_distance": 3.1415927410125732, "ramp_time": 0.4000000059604645, "vel": 40.0}, "can": {"encoder_rate_ms": 10, "heartbeat_rate_ms": 100, "is_extended": false, "node_id": 0}, "general_lockin": {"accel": 20.0, "current": 10.0, "finish_distance": 100.0, "finish_on_distance": false, "finish_on_enc_idx": false, "finish_on_vel": false, "ramp_distance": 3.1415927410125732, "ramp_time": 0.4000000059604645, "vel": 40.0}, "sensorless_ramp": {"accel": 200.0, "current": 10.0, "finish_distance": 100.0, "finish_on_distance": false, "finish_on_enc_idx": false, "finish_on_vel": true, "ramp_distance": 3.1415927410125732, "ramp_time": 0.4000000059604645, "vel": 400.0}}, "controller": {"config": {"axis_to_mirror": 255, "circular_setpoint_range": 1.0, "circular_setpoints": false, "control_mode": 2, "electrical_power_bandwidth": 20.0, "enable_current_mode_vel_limit": true, "enable_gain_scheduling": false, "enable_overspeed_error": true, "enable_vel_limit": true, "gain_scheduling_width": 10.0, "homing_speed": 0.25, "inertia": 0.0, "input_filter_bandwidth": 2.0, "input_mode": 1, "load_encoder_axis": 0, "mechanical_power_bandwidth": 20.0, "mirror_ratio": 1.0, "pos_gain": 1.0, "spinout_electrical_power_threshold": 10.0, "spinout_mechanical_power_threshold": -10.0, "steps_per_circular_range": 1024, "torque_mirror_ratio": 0.0, "torque_ramp_rate": 0.009999999776482582, "vel_gain": 0.05000000074505806, "vel_integrator_gain": 1.0, "vel_limit": 1000.0, "vel_limit_tolerance": 1.2000000476837158, "vel_ramp_rate": 1.0, "anticogging": {"anticogging_enabled": true, "calib_anticogging": false, "calib_pos_threshold": 1.0, "calib_vel_threshold": 1.0, "cogging_ratio": 1.0, "index": 0, "pre_calibrated": false}}}, "encoder": {"config": {"abs_spi_cs_gpio_pin": 1, "bandwidth": 200.0, "calib_range": 0.019999999552965164, "calib_scan_distance": 150.0, "calib_scan_omega": 12.566370964050293, "cpr": 120, "direction": 1, "enable_phase_interpolation": true, "find_idx_on_lockin_only": false, "hall_polarity_calibrated": true, "hall_polarity": 0, "ignore_illegal_hall_state": false, "index_offset": 0.0, "mode": 1, "phase_offset_float": 0.531933605670929, "phase_offset": 72, "pre_calibrated": true, "sincos_gpio_pin_cos": 4, "sincos_gpio_pin_sin": 3, "use_index_offset": true, "use_index": false}}, "max_endstop": {"config": {"debounce_ms": 50, "enabled": false, "gpio_num": 0, "is_active_high": false, "offset": 0.0}}, "mechanical_brake": {"config": {"gpio_num": 0, "is_active_low": true}}, "min_endstop": {"config": {"debounce_ms": 50, "enabled": false, "gpio_num": 0, "is_active_high": false, "offset": 0.0}}, "motor": {"config": {"I_bus_hard_max": Infinity, "I_bus_hard_min": -Infinity, "I_leak_max": 0.10000000149011612, "R_wL_FF_enable": false, "acim_autoflux_attack_gain": 10.0, "acim_autoflux_decay_gain": 1.0, "acim_autoflux_enable": false, "acim_autoflux_min_Id": 10.0, "acim_gain_min_flux": 10.0, "bEMF_FF_enable": false, "calibration_current": 10.0, "current_control_bandwidth": 100.0, "current_lim_margin": 8.0, "current_lim": 20.0, "dc_calib_tau": 0.20000000298023224, "inverter_temp_limit_lower": 100.0, "inverter_temp_limit_upper": 120.0, "motor_type": 0, "phase_inductance": 0.00014278590970207006, "phase_resistance": 0.1470135748386383, "pole_pairs": 20, "pre_calibrated": true, "requested_current_range": 25.0, "resistance_calib_max_voltage": 4.0, "torque_constant": 0.03999999910593033, "torque_lim": Infinity}, "fet_thermistor": {"config": {"enabled": true, "temp_limit_lower": 100.0, "temp_limit_upper": 120.0}}, "motor_thermistor": {"config": {"enabled": false, "gpio_pin": 4, "poly_coefficient_0": 0.0, "poly_coefficient_1": 0.0, "poly_coefficient_2": 0.0, "poly_coefficient_3": 0.0, "temp_limit_lower": 100.0, "temp_limit_upper": 120.0}}}, "sensorless_estimator": {"config": {"observer_gain": 1000.0, "pll_bandwidth": 1000.0, "pm_flux_linkage": 0.0015800000401213765}}, "trap_traj": {"config": {"accel_limit": 0.5, "decel_limit": 0.5, "vel_limit": 2.0}}}, "axis1": {"acim_estimator": {"config": {"slip_velocity": 14.706000328063965}}, "config": {"dir_gpio_pin": 8, "enable_sensorless_mode": false, "enable_step_dir": false, "enable_watchdog": false, "startup_closed_loop_control": true, "startup_encoder_index_search": false, "startup_encoder_offset_calibration": false, "startup_homing": false, "startup_motor_calibration": false, "step_dir_always_on": false, "step_gpio_pin": 7, "watchdog_timeout": 0.0, "calibration_lockin": {"accel": 20.0, "current": 10.0, "ramp_distance": 3.1415927410125732, "ramp_time": 0.4000000059604645, "vel": 40.0}, "can": {"encoder_rate_ms": 10, "heartbeat_rate_ms": 100, "is_extended": false, "node_id": 1}, "general_lockin": {"accel": 20.0, "current": 10.0, "finish_distance": 100.0, "finish_on_distance": false, "finish_on_enc_idx": false, "finish_on_vel": false, "ramp_distance": 3.1415927410125732, "ramp_time": 0.4000000059604645, "vel": 40.0}, "sensorless_ramp": {"accel": 200.0, "current": 10.0, "finish_distance": 100.0, "finish_on_distance": false, "finish_on_enc_idx": false, "finish_on_vel": true, "ramp_distance": 3.1415927410125732, "ramp_time": 0.4000000059604645, "vel": 400.0}}, "controller": {"config": {"axis_to_mirror": 255, "circular_setpoint_range": 1.0, "circular_setpoints": false, "control_mode": 2, "electrical_power_bandwidth": 20.0, "enable_current_mode_vel_limit": true, "enable_gain_scheduling": false, "enable_overspeed_error": true, "enable_vel_limit": true, "gain_scheduling_width": 10.0, "homing_speed": 0.25, "inertia": 0.0, "input_filter_bandwidth": 2.0, "input_mode": 1, "load_encoder_axis": 1, "mechanical_power_bandwidth": 20.0, "mirror_ratio": 1.0, "pos_gain": 1.0, "spinout_electrical_power_threshold": 10.0, "spinout_mechanical_power_threshold": -10.0, "steps_per_circular_range": 1024, "torque_mirror_ratio": 0.0, "torque_ramp_rate": 0.009999999776482582, "vel_gain": 0.05000000074505806, "vel_integrator_gain": 0.3333333432674408, "vel_limit": 1000.0, "vel_limit_tolerance": 1.2000000476837158, "vel_ramp_rate": 1.0, "anticogging": {"anticogging_enabled": true, "calib_anticogging": false, "calib_pos_threshold": 1.0, "calib_vel_threshold": 1.0, "cogging_ratio": 1.0, "index": 0, "pre_calibrated": false}}}, "encoder": {"config": {"abs_spi_cs_gpio_pin": 1, "bandwidth": 200.0, "calib_range": 0.019999999552965164, "calib_scan_distance": 150.0, "calib_scan_omega": 12.566370964050293, "cpr": 120, "direction": -1, "enable_phase_interpolation": true, "find_idx_on_lockin_only": false, "hall_polarity_calibrated": true, "hall_polarity": 0, "ignore_illegal_hall_state": false, "index_offset": 0.0, "mode": 1, "phase_offset_float": -0.49911993741989136, "phase_offset": -69, "pre_calibrated": true, "sincos_gpio_pin_cos": 4, "sincos_gpio_pin_sin": 3, "use_index_offset": true, "use_index": false}}, "max_endstop": {"config": {"debounce_ms": 50, "enabled": false, "gpio_num": 0, "is_active_high": false, "offset": 0.0}}, "mechanical_brake": {"config": {"gpio_num": 0, "is_active_low": true}}, "min_endstop": {"config": {"debounce_ms": 50, "enabled": false, "gpio_num": 0, "is_active_high": false, "offset": 0.0}}, "motor": {"config": {"I_bus_hard_max": Infinity, "I_bus_hard_min": -Infinity, "I_leak_max": 0.10000000149011612, "R_wL_FF_enable": false, "acim_autoflux_attack_gain": 10.0, "acim_autoflux_decay_gain": 1.0, "acim_autoflux_enable": false, "acim_autoflux_min_Id": 10.0, "acim_gain_min_flux": 10.0, "bEMF_FF_enable": false, "calibration_current": 5.0, "current_control_bandwidth": 100.0, "current_lim_margin": 8.0, "current_lim": 20.0, "dc_calib_tau": 0.20000000298023224, "inverter_temp_limit_lower": 100.0, "inverter_temp_limit_upper": 120.0, "motor_type": 0, "phase_inductance": 0.00015606168017257005, "phase_resistance": 0.1569730043411255, "pole_pairs": 20, "pre_calibrated": true, "requested_current_range": 25.0, "resistance_calib_max_voltage": 4.0, "torque_constant": 0.03999999910593033, "torque_lim": Infinity}, "fet_thermistor": {"config": {"enabled": true, "temp_limit_lower": 100.0, "temp_limit_upper": 120.0}}, "motor_thermistor": {"config": {"enabled": false, "gpio_pin": 4, "poly_coefficient_0": 0.0, "poly_coefficient_1": 0.0, "poly_coefficient_2": 0.0, "poly_coefficient_3": 0.0, "temp_limit_lower": 100.0, "temp_limit_upper": 120.0}}}, "sensorless_estimator": {"config": {"observer_gain": 1000.0, "pll_bandwidth": 1000.0, "pm_flux_linkage": 0.0015800000401213765}}, "trap_traj": {"config": {"accel_limit": 0.5, "decel_limit": 0.5, "vel_limit": 2.0}}}, "can": {"config": {"baud_rate": 250000, "protocol": 1}}, "config": {"brake_resistance": 2.0, "dc_bus_overvoltage_ramp_end": 25.68000030517578, "dc_bus_overvoltage_ramp_start": 25.68000030517578, "dc_bus_overvoltage_trip_level": 25.68000030517578, "dc_bus_undervoltage_trip_level": 8.0, "dc_max_negative_current": -5.0, "dc_max_positive_current": Infinity, "enable_brake_resistor": true, "enable_can_a": true, "enable_dc_bus_overvoltage_ramp": false, "enable_i2c_a": false, "enable_uart_a": true, "enable_uart_b": false, "enable_uart_c": false, "error_gpio_pin": 0, "gpio10_mode": 0, "gpio11_mode": 0, "gpio12_mode": 0, "gpio13_mode": 0, "gpio14_mode": 0, "gpio15_mode": 7, "gpio16_mode": 7, "gpio1_mode": 4, "gpio2_mode": 4, "gpio3_mode": 10, "gpio4_mode": 10, "gpio5_mode": 3, "gpio6_mode": 0, "gpio7_mode": 0, "gpio8_mode": 0, "gpio9_mode": 0, "max_regen_current": 0.0, "uart0_protocol": 3, "uart1_protocol": 3, "uart2_protocol": 3, "uart_a_baudrate": 115200, "uart_b_baudrate": 115200, "uart_c_baudrate": 115200, "usb_cdc_protocol": 3, "gpio1_pwm_mapping": {"endpoint": null, "max": 0.0, "min": 0.0}, "gpio2_pwm_mapping": {"endpoint": null, "max": 0.0, "min": 0.0}, "gpio3_analog_mapping": {"endpoint": null, "max": 0.0, "min": 0.0}, "gpio3_pwm_mapping": {"endpoint": "config.gpio3_pwm_mapping.endpoint", "max": 1.0, "min": -1.0}, "gpio4_analog_mapping": {"endpoint": null, "max": 0.0, "min": 0.0}, "gpio4_pwm_mapping": {"endpoint": "config.gpio4_pwm_mapping.endpoint", "max": 1.0, "min": -1.0}}}

I think we’re going to need some plots, I don’t really understand the issue.

Try setting vel_integrator_gain to 0 and increase vel_gain instead.

I think you’re having the same problem as I had: Tuning hoverboard motors

Thanks for Help, i will try that vel_integrator_gain and read the Tuning Hover Boards and will post my results after that

Hello micropuller,
yes sounds like the same problem and i adjust the gain as described.

set up vel_integrator_gain to 0 and find vel_gain 0.2 nice to drive

it solves my Problem perfect. now i have to tune my PWM’ a little and have a good control.

Thanks a lot for help.

2 Likes