Step/Dir Movement Delay above 5kHz


I’ve been trying to get the step/dir interface working with my ODrive and ran into this odd problem:

*Been tested using Grbl Mega and Duet 2 Wifi as interfaces, issue is the same for both

The issue rises from what I see as a critical step input pulse frequency.

Below 5kHz - works perfectly, love it

Above 5-6kHz - not so much
The motor will spin slowly for a 0.25 - 0.5 turns, then stop and pause (initial movement is in the correct direction). The pause length is proportional to the commanded distance (the pause is roughly 10x longer for a 100mm move than for a 10mm move). Then the motor will execute the command properly.

In all the tests I set the mm/step = turns/step in both the config of both the microcontroller and the ODrive, as such 1mm = 1turn.

Very short commands (~1-2mm) are usually executed immediately and correctly without delay, regardless of settings.

I’ve tested the following:

  1. Steps/mm = 1024, V = 1800mm/min, A = 60mm/s/s, the delay issue occurs (f = 30.720kHz)

  2. Same as #1, but V = 600mm/min -> issue is the same (f = 10.240kHz)

  3. Same as #1, but V = 300mm/min -> works perfectly (f = 5.120kHz)

  4. Same as #1, but V = 350mm/min -> immediately executes, but has weird increase in velocity at the end (f = 5.973kHz)

  5. Same as #1, but V = 400mm/min -> same as #4 (f = 6.826kHz)
    **Tried a 100mm move, the slower velocity duration increases with longer moves, slower velocity seems to be ~1-3 turns/s.

  6. Same as #1, but V = 500mm/min -> same as #1 (f = 8.533kHz)

  7. Same as #3 but a = 200 mm/s/s -> works perfectly (f = 5.120kHz)

  8. Set steps/mm = 10 and turns_per_step = 1/10, same V & A as #1 -> works perfectly (f = 0.3kHz)

  9. Set steps/mm = 100, turns_per_step = 1/100, same V&A as #1 -> works perfectly (f = 3kHz)

  10. Set steps/mm = 400, turns_per_step = 1/400, same V & A as #1 -> issue is the same (f = 12kHz)

The site says, 50kHz maximum step rate, so I’m not sure why it stops working correctly above ~5kHz.

The motor is not attached to anything:

  1. Motor = Turnigy sensorless 190Kv
  2. 24V v3.6 board, with most recent firmware
  3. AS5047P in incremental with index (works great as tested from the anaconda terminal)
  4. vel_limit is higher than any of the commanded speeds
  5. 12V, 33A power supply

Ideally, I’d like to use 1/2000 or 1/4000 turns/step to get great resolution at speeds of 30turns/s

Cheers :slight_smile: