S1 force feedback

Hi,

I have used the ODrive Pro for some years. For one project I switched to the S1. I use hall sensors for encoder. I also use nearly the same configurations for the S1 from the pro. I just added the break resistor. Now the force feedback is nearly zero on the S1. The pro works against turning at set_vel 0 and could not be stoppt at any heigher rpm. The S1 gives some force feedback, but is not returning to its last position. Is there any difference in the S1 to the pro in the case?

Cheers, Robert

There definitely shouldn’t be any difference, especially not in an application like this. Sounds like either a wiring issue or an ODrive configuration issue – how are you transferring the configuration from the ODrive Pro to the ODrive S1?

HI, thanks for your reply. I first transfered it with backup-config. After I tested it, I also set up the S1 with the ODrive tool.
A Wirering problem is not realy likely, because I have the problem on two similar motor configurations, that have no problem with the ODrive Pro.
The S1 configuration has a slight force feedback, but is definitly not that effective as the pro. It do not take more current. But i have a big enough Power source and the current limits are much higher.

Can you use backup-config to export both the S1 and Pro configs and upload them here?

Here the configs from S1 and Pro. They are for slightly different motors.
I have to insert the text:
S1:
{“axis0”: {“commutation_mapper”: {“config”: {“approx_init_pos”: 0.0, “approx_init_pos_valid”: false, “circular_output_range”: 1.0, “circular”: true, “index_gpio”: 7, “index_offset”: 0.0, “index_offset_valid”: false, “offset”: 0.0, “offset_valid”: true, “passive_index_search”: false, “scale”: 1.0, “use_endstop”: false, “use_index_gpio”: false}}, “config”: {“I_bus_hard_max”: Infinity, “I_bus_hard_min”: -Infinity, “I_bus_soft_max”: Infinity, “I_bus_soft_min”: -Infinity, “P_bus_soft_max”: Infinity, “P_bus_soft_min”: -Infinity, “calib_range”: 0.019999999552965164, “calib_scan_distance”: 8.0, “calib_scan_vel”: 2.0, “commutation_encoder_bandwidth”: NaN, “commutation_encoder”: 8, “dir_gpio_pin”: 9, “enable_error_gpio”: false, “enable_step_dir”: false, “enable_watchdog”: false, “encoder_bandwidth”: 100.0, “error_gpio_pin”: 10, “index_search_at_target_vel_only”: false, “load_encoder”: 8, “startup_closed_loop_control”: false, “startup_encoder_index_search”: false, “startup_encoder_offset_calibration”: false, “startup_homing”: false, “startup_max_wait_for_ready”: 3.0, “startup_motor_calibration”: false, “step_dir_always_on”: false, “step_gpio_pin”: 8, “torque_soft_max”: Infinity, “torque_soft_min”: -Infinity, “watchdog_timeout”: 0.0, “anticogging”: {“calib_bidirectional”: true, “calib_coarse_integrator_gain”: 100.0, “calib_coarse_tuning_duration”: 60.0, “calib_end_vel”: 0.07000000029802322, “calib_fine_dist_scale”: 1.0, “calib_fine_tuning_duration”: 120.0, “calib_start_vel”: 4.0, “enabled”: false, “max_torque”: 0.15000000596046448}, “calibration_lockin”: {“accel”: 3.183098793029785, “current”: 4.0, “ramp_distance”: 0.5, “ramp_time”: 0.4000000059604645, “vel”: 6.36619758605957}, “can”: {“bus_voltage_msg_rate_ms”: 0, “encoder_msg_rate_ms”: 0, “error_msg_rate_ms”: 0, “heartbeat_msg_rate_ms”: 100, “iq_msg_rate_ms”: 0, “node_id”: 3, “powers_msg_rate_ms”: 0, “temperature_msg_rate_ms”: 0, “torques_msg_rate_ms”: 0, “version_msg_rate_ms”: 0}, “general_lockin”: {“accel”: 20.0, “current”: 10.0, “finish_distance”: 100.0, “finish_on_distance”: false, “finish_on_vel”: false, “initial_pos”: 0.0, “ramp_distance”: 3.1415927410125732, “ramp_time”: 0.4000000059604645, “vel”: 40.0}, “motor”: {“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, “acim_nominal_slip_vel”: 2.3399999141693115, “bEMF_FF_enable”: false, “calibration_current”: 4.0, “current_control_bandwidth”: 100.0, “current_hard_max”: 110.0, “current_slew_rate_limit”: 10000.0, “current_soft_max”: 90.0, “direction”: 1.0, “ff_pm_flux_linkage”: 0.0, “ff_pm_flux_linkage_valid”: false, “fw_enable”: false, “fw_fb_bandwidth”: 500.0, “fw_mod_setpoint”: 0.7813565135002136, “motor_model_l_d”: 0.0, “motor_model_l_dq_valid”: false, “motor_model_l_q”: 0.0, “motor_type”: 0, “phase_inductance”: 6.874503014842048e-05, “phase_inductance_valid”: true, “phase_resistance”: 0.05476512014865875, “phase_resistance_valid”: true, “pole_pairs”: 7, “power_torque_report_filter_bandwidth”: 8000.0, “resistance_calib_max_voltage”: 10.0, “sensorless_observer_gain”: 1000.0, “sensorless_pll_bandwidth”: 1000.0, “sensorless_pm_flux_linkage”: 0.0, “sensorless_pm_flux_linkage_valid”: false, “torque_constant”: 0.030629629269242287, “wL_FF_enable”: false}, “sensorless_ramp”: {“accel”: 31.83098793029785, “current”: 10.0, “finish_distance”: 15.915493965148926, “finish_on_distance”: false, “finish_on_vel”: true, “initial_pos”: 0.0, “ramp_distance”: 0.5, “ramp_time”: 0.4000000059604645, “vel”: 63.6619758605957}}, “controller”: {“config”: {“absolute_setpoints”: false, “circular_setpoint_range”: 1.0, “circular_setpoints”: false, “commutation_vel_scale”: 1.0, “control_mode”: 2, “enable_gain_scheduling”: false, “enable_overspeed_error”: true, “enable_torque_mode_vel_limit”: true, “enable_vel_limit”: true, “gain_scheduling_width”: 0.0010000000474974513, “homing_speed”: 0.25, “inertia”: 0.0, “input_filter_bandwidth”: 2.0, “input_mode”: 2, “pos_gain”: 1.0, “spinout_electrical_power_bandwidth”: 20.0, “spinout_electrical_power_threshold”: 10.0, “spinout_mechanical_power_bandwidth”: 20.0, “spinout_mechanical_power_threshold”: -10.0, “steps_per_circular_range”: 1024, “torque_ramp_rate”: 0.009999999776482582, “use_commutation_vel”: false, “use_load_encoder_for_commutation_vel”: false, “vel_gain”: 0.20000000298023224, “vel_integrator_gain”: 0.5, “vel_integrator_limit”: Infinity, “vel_limit”: 40.0, “vel_limit_tolerance”: 1.2000000476837158, “vel_ramp_rate”: 30.0}}, “enable_pin”: {“config”: {“debounce_ms”: 50, “enabled”: false, “gpio_num”: 7, “is_active_high”: false, “offset”: 0.0}}, “interpolator”: {“config”: {“dynamic”: true}}, “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”: {“motor_thermistor”: {“config”: {“beta”: 3435.0, “enabled”: true, “gpio_pin”: 4, “r_ref”: 10000.0, “t_ref”: 25.0, “temp_limit_lower”: 100.0, “temp_limit_upper”: 120.0}}}, “pos_vel_mapper”: {“config”: {“approx_init_pos”: 0.0, “approx_init_pos_valid”: false, “circular_output_range”: 1.0, “circular”: false, “index_gpio”: 7, “index_offset”: 0.0, “index_offset_valid”: false, “offset”: 0.0, “offset_valid”: false, “passive_index_search”: false, “scale”: 0.1428571492433548, “use_endstop”: false, “use_index_gpio”: false}}, “trap_traj”: {“config”: {“accel_limit”: 0.5, “decel_limit”: 0.5, “vel_limit”: 2.0}}}, “can”: {“config”: {“baud_rate”: 250000, “protocol”: 1}}, “config”: {“dc_bus_overvoltage_trip_level”: 52.0, “dc_bus_undervoltage_trip_level”: 10.5, “dc_max_negative_current”: -1.0, “dc_max_positive_current”: 120.0, “enable_uart_a”: true, “gpio0_mode”: 17, “gpio10_mode”: 17, “gpio11_mode”: 17, “gpio12_mode”: 4, “gpio1_mode”: 17, “gpio2_mode”: 17, “gpio3_mode”: 17, “gpio4_mode”: 17, “gpio5_mode”: 17, “gpio6_mode”: 4, “gpio7_mode”: 4, “gpio8_mode”: 17, “gpio9_mode”: 17, “max_regen_current”: 0.0, “uart0_protocol”: 3, “uart_a_baudrate”: 9600, “usb_cdc_protocol”: 3, “user_config_0”: 0, “user_config_1”: 0, “user_config_2”: 0, “user_config_3”: 0, “user_config_4”: 0, “user_config_5”: 0, “user_config_6”: 0, “user_config_7”: 0, “brake_resistor0”: {“dc_bus_voltage_feedback_ramp_end”: 53.0, “dc_bus_voltage_feedback_ramp_start”: 51.0, “enable_dc_bus_voltage_feedback”: false, “enable”: true, “resistance”: 2.0}, “gpio11_analog_mapping”: {“endpoint”: null, “max”: 0.0, “min”: 0.0}, “gpio1_analog_mapping”: {“endpoint”: null, “max”: 0.0, “min”: 0.0}, “gpio8_pwm_mapping”: {“endpoint”: null, “max”: 0.0, “min”: 0.0}, “inverter0”: {“current_hard_max”: 96.0, “current_soft_max”: 80.0, “drv_config”: 9029553697166464, “mod_magn_max”: 0.6781481504440308, “shunt_conductance”: 1999.9998779296875, “temp_limit_lower”: 83.95999908447266, “temp_limit_upper”: 103.11000061035156}}, “hall_encoder0”: {“config”: {“edge0”: 0.46867263317108154, “edge1”: 0.6461350321769714, “edge2”: 0.7879056334495544, “edge3”: 0.9674991965293884, “edge4”: 0.15842601656913757, “edge5”: 0.29775094985961914, “edges_calibrated”: true, “enabled”: true, “hall_polarity_calibrated”: true, “hall_polarity”: 0, “ignore_illegal_hall_state”: true}}, “inc_encoder0”: {“config”: {“cpr”: 90, “enabled”: true}}, “rs485_encoder_group0”: {“config”: {“mode”: 0}}, “spi_encoder0”: {“config”: {“baudrate”: 1687500, “biss_c_bits”: 18, “delay”: 0.0, “max_error_rate”: 0.004999999888241291, “mode”: 0, “ncs_gpio”: 17}}, “spi_encoder1”: {“config”: {“baudrate”: 1687500, “biss_c_bits”: 18, “delay”: 0.0, “max_error_rate”: 0.004999999888241291, “mode”: 0, “ncs_gpio”: 17}}}

Pro:
{“amt21_encoder_group0”: {“config”: {“addr0”: 84, “enable”: false, “event_driven_mode”: false, “gpio”: 0, “rs485”: 0}}, “axis0”: {“commutation_mapper”: {“config”: {“approx_init_pos”: 0.0, “approx_init_pos_valid”: false, “circular_output_range”: 1.0, “circular”: true, “index_gpio”: 7, “index_offset”: 0.0, “index_offset_valid”: false, “index_search_always_on”: false, “offset”: 0.0, “offset_valid”: true, “scale”: 1.0, “use_endstop”: false, “use_index_gpio”: false}}, “config”: {“I_bus_hard_max”: Infinity, “I_bus_hard_min”: -Infinity, “calib_range”: 0.019999999552965164, “calib_scan_distance”: 8.0, “calib_scan_vel”: 2.0, “commutation_encoder”: 8, “dir_gpio_pin”: 9, “enable_error_gpio”: false, “enable_step_dir”: false, “enable_watchdog”: false, “encoder_bandwidth”: 100.0, “error_gpio_pin”: 10, “index_search_at_target_vel_only”: false, “load_encoder”: 8, “startup_closed_loop_control”: false, “startup_encoder_index_search”: false, “startup_encoder_offset_calibration”: false, “startup_homing”: false, “startup_max_wait_for_ready”: 3.0, “startup_motor_calibration”: false, “step_dir_always_on”: false, “step_gpio_pin”: 8, “torque_soft_max”: Infinity, “torque_soft_min”: -Infinity, “watchdog_timeout”: 0.0, “anticogging”: {“calib_coarse_integrator_gain”: 100.0, “calib_coarse_tuning_duration”: 60.0, “calib_end_vel”: 0.07000000029802322, “calib_fine_tuning_duration”: 120.0, “calib_start_vel”: 4.0, “enabled”: false, “max_torque”: 0.15000000596046448}, “calibration_lockin”: {“accel”: 3.183098793029785, “current”: 4.0, “ramp_distance”: 0.5, “ramp_time”: 0.4000000059604645, “vel”: 6.36619758605957}, “can”: {“bus_voltage_msg_rate_ms”: 0, “encoder_msg_rate_ms”: 0, “error_msg_rate_ms”: 0, “heartbeat_msg_rate_ms”: 100, “iq_msg_rate_ms”: 0, “is_extended”: false, “node_id”: 3, “temperature_msg_rate_ms”: 0, “torques_msg_rate_ms”: 0, “version_msg_rate_ms”: 0}, “general_lockin”: {“accel”: 20.0, “current”: 10.0, “finish_distance”: 100.0, “finish_on_distance”: false, “finish_on_vel”: false, “initial_pos”: 0.0, “ramp_distance”: 3.1415927410125732, “ramp_time”: 0.4000000059604645, “vel”: 40.0}, “motor”: {“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, “acim_nominal_slip_vel”: 2.3399999141693115, “bEMF_FF_enable”: false, “calibration_current”: 4.0, “current_control_bandwidth”: 100.0, “current_hard_max”: 110.0, “current_slew_rate_limit”: 10000.0, “current_soft_max”: 90.0, “direction”: 1.0, “ff_pm_flux_linkage”: 0.0, “ff_pm_flux_linkage_valid”: false, “fw_enable”: false, “fw_fb_bandwidth”: 500.0, “fw_mod_setpoint”: 0.7813565135002136, “motor_model_l_d”: 0.0, “motor_model_l_dq_valid”: false, “motor_model_l_q”: 0.0, “motor_type”: 0, “phase_inductance”: 7.802167965564877e-05, “phase_inductance_valid”: true, “phase_resistance”: 0.08081876486539841, “phase_resistance_valid”: true, “pole_pairs”: 7, “resistance_calib_max_voltage”: 10.0, “sensorless_observer_gain”: 1000.0, “sensorless_pll_bandwidth”: 1000.0, “sensorless_pm_flux_linkage”: 0.0, “sensorless_pm_flux_linkage_valid”: false, “torque_constant”: 0.07876190543174744, “wL_FF_enable”: false}, “sensorless_ramp”: {“accel”: 31.83098793029785, “current”: 10.0, “finish_distance”: 15.915493965148926, “finish_on_distance”: false, “finish_on_vel”: true, “initial_pos”: 0.0, “ramp_distance”: 0.5, “ramp_time”: 0.4000000059604645, “vel”: 63.6619758605957}}, “controller”: {“config”: {“absolute_setpoints”: false, “circular_setpoint_range”: 1.0, “circular_setpoints”: false, “commutation_vel_scale”: 1.0, “control_mode”: 2, “enable_gain_scheduling”: false, “enable_overspeed_error”: true, “enable_torque_mode_vel_limit”: true, “enable_vel_limit”: true, “gain_scheduling_width”: 0.0010000000474974513, “homing_speed”: 0.25, “inertia”: 0.0, “input_filter_bandwidth”: 2.0, “input_mode”: 2, “pos_gain”: 1.0, “spinout_electrical_power_bandwidth”: 20.0, “spinout_electrical_power_threshold”: 10.0, “spinout_mechanical_power_bandwidth”: 20.0, “spinout_mechanical_power_threshold”: -10.0, “steps_per_circular_range”: 1024, “torque_ramp_rate”: 0.009999999776482582, “use_commutation_vel”: false, “vel_gain”: 0.4000000059604645, “vel_integrator_gain”: 2.0, “vel_integrator_limit”: Infinity, “vel_limit”: 40.0, “vel_limit_tolerance”: 1.2000000476837158, “vel_ramp_rate”: 30.0}}, “interpolator”: {“config”: {“dynamic”: true}}, “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”: {“motor_thermistor”: {“config”: {“beta”: 3435.0, “enabled”: true, “gpio_pin”: 3, “r_ref”: 10000.0, “t_ref”: 25.0, “temp_limit_lower”: 100.0, “temp_limit_upper”: 120.0}}}, “pos_vel_mapper”: {“config”: {“approx_init_pos”: 0.0, “approx_init_pos_valid”: false, “circular_output_range”: 1.0, “circular”: false, “index_gpio”: 7, “index_offset”: 0.0, “index_offset_valid”: false, “index_search_always_on”: false, “offset”: 0.0, “offset_valid”: false, “scale”: 0.1428571492433548, “use_endstop”: false, “use_index_gpio”: false}}, “trap_traj”: {“config”: {“accel_limit”: 0.5, “decel_limit”: 0.5, “vel_limit”: 2.0}}}, “can”: {“config”: {“baud_rate”: 250000, “protocol”: 1}}, “config”: {“dc_bus_overvoltage_trip_level”: 52.0, “dc_bus_undervoltage_trip_level”: 10.5, “dc_max_negative_current”: -1.0, “dc_max_positive_current”: 120.0, “enable_can_a”: true, “enable_uart_a”: false, “gpio0_mode”: 17, “gpio10_mode”: 17, “gpio11_mode”: 17, “gpio12_mode”: 4, “gpio13_mode”: 4, “gpio14_mode”: 17, “gpio15_mode”: 17, “gpio16_mode”: 17, “gpio17_mode”: 17, “gpio18_mode”: 17, “gpio1_mode”: 17, “gpio2_mode”: 17, “gpio3_mode”: 17, “gpio4_mode”: 17, “gpio5_mode”: 17, “gpio6_mode”: 17, “gpio7_mode”: 17, “gpio8_mode”: 17, “gpio9_mode”: 17, “max_regen_current”: 0.0, “uart0_protocol”: 3, “uart_a_baudrate”: 115200, “usb_cdc_protocol”: 3, “gpio15_analog_mapping”: {“endpoint”: null, “max”: 0.0, “min”: 0.0}, “gpio16_analog_mapping”: {“endpoint”: null, “max”: 0.0, “min”: 0.0}, “gpio8_pwm_mapping”: {“endpoint”: null, “max”: 0.0, “min”: 0.0}, “gpio9_pwm_mapping”: {“endpoint”: null, “max”: 0.0, “min”: 0.0}, “inverter0”: {“current_hard_max”: 150.0, “current_soft_max”: 100.0, “drv_config”: 9029553772700800, “shunt_conductance”: 1999.9998779296875, “temp_limit_lower”: 83.95999908447266, “temp_limit_upper”: 103.11000061035156}, “motor_fan”: {“enabled”: false, “lower”: 70.0, “upper”: 80.0}, “odrv_fan”: {“enabled”: false, “lower”: 70.0, “upper”: 80.0}}, “hall_encoder0”: {“config”: {“enabled”: true, “hall_polarity_calibrated”: true, “hall_polarity”: 0, “ignore_illegal_hall_state”: true}}, “hall_encoder1”: {“config”: {“enabled”: false, “hall_polarity_calibrated”: false, “hall_polarity”: 0, “ignore_illegal_hall_state”: false}}, “inc_encoder0”: {“config”: {“cpr”: 42, “enabled”: true}}, “inc_encoder1”: {“config”: {“cpr”: 8192, “enabled”: false}}, “spi_encoder0”: {“config”: {“baudrate”: 1687500, “delay”: 0.0, “max_error_rate”: 0.004999999888241291, “mode”: 0, “ncs_gpio”: 17}}, “spi_encoder1”: {“config”: {“baudrate”: 1687500, “delay”: 0.0, “max_error_rate”: 0.004999999888241291, “mode”: 0, “ncs_gpio”: 17}}}

Hey there,

What motors are these specifically? It looks like the vel gains are different (vel_gain=0.4/vel_integrator_gain=2 on the Pro, vel_gain=0.2/vel_integrator_gain=0.5 on the S1), so this is likely a tuning issue.

With identical motors and vel gains, the performance will be identical – however neither of these are the case here. If the vel gains are identical and the torque constants are correctly set, then performance should be similar. I’d try setting the vel gain and vel integrator gain to 0.4 and 2, respectively, on the S1.

I noticed you said “but is not returning to its last position” – this is a result of the velocity integrator windup, and is not a deliberate behavior. If you’re looking for it to return to a specific position, you should either use position control or torque control with an external motion controller giving fine-grained torque setpoints.

Maybe you can give a bit more detail as to what your application/usecase is?