Hey guys, here’s my problem.
Up to today, my Odrive was working just fine. However, since this morning, when I begin the CAN bus communication and I send my command over CAN bus protocol from an Arduino, the Odrive gets the error of watchdog_timout everytime.
As weird as it is, I can read the heartbeat messages on the CAN bus with my Arduino, that means my connection is well established right ?!
Would it be an issue with my Arduino more than with the controller ?
EDIT: I’ve tried with another CAN module and still no response from the controller. I’m wondering what setting could have changed in the controller so that it no longer receives data. As far as I can see, my module do send data.
Thanks
Also, what is the default clock frequency of the Odrive Pro for the CAN communication, 8 MHz?
EDIT: NVM, I figured out it was 16MHz, but I still have the problem that I can only read data and no longer send them to the Odrive.
@Wetmelon Any thoughts on that ?
It’s 250kbaud,
I don’t know. Erase configuration and try again?
I set the Baudrate to 500 KBPS. I already tried to erase all the configurations of the Odrive and re-enter all the parameters. Again, I can only read the messages of the Odrive, but I can no longer send data, so the Drive stays on idle state.
I have tried many CAN bus modules and few Arduinos, which makes me think that it’s not a hardware problem on my side at least
@Wetmelon A weird thing is that when I send this command over usb-c
odrv0.axis0.requested_state = AxisState.CLOSED_LOOP_CONTROL
odrv0.axis0.controller.config.control_mode = ControlMode.TORQUE_CONTROL
odrv0.axis0.controller.input_torque = 2
The motor doesn’t even move. I can hear a slight noise of current inside it.
But when I erase all configuration and re-do all the calibration, I can send the same command over usb-c and the motor will turn. Then I set it to idlea and when I want to set the CAN settings to what they were before :
#Setting up CAN communication
odrv0.config.enable_can_a = True
odrv0.axis0.config.enable_watchdog = False
odrv0.axis0.config.watchdog_timeout = 1
odrv0.axis0.config.can.node_id = 0
odrv0.can.config.baud_rate = 500000
odrv0.save_configuration()
odrv0.reboot()
At that point, with the same command :
odrv0.axis0.requested_state = AxisState.CLOSED_LOOP_CONTROL
odrv0.axis0.controller.config.control_mode = ControlMode.TORQUE_CONTROL
odrv0.axis0.controller.input_torque = 2
The motor doesn’t move. Does it have something to do with the firmware of the Odrive ?
Are you sending any CAN frames from your other controller? Check the axis0.current_state
, input_torque
, input_mode
, etc.