I’m currently using Index pulses as part of my startup sequence and it works okay…
However I’m wondering if we could add support for a more simple startup. I have some other BLDC motor controllers that do something like this…
- Command a known commutation state
- Sit there with relatively high current for a brief moment
- Reset the encoder position to zero and then start doing their thing
The main goal here is to be able to startup with the least possible motor motion.
I see what you mean, this won’t be very accurate, and it will depend on the load. But I guess it could be sufficient for some applications. You can add this feature in the firmware yourself if you want.
I have done something like that. The only changes needed in the firmware are to change some read only properties to writable ones. Then I use a python script on my computer that constantly reads those specific values and puts them in an xml-file. When I start the ODrive, the python script will load the last values from the xml-file back to the ODrive.
This is indeed not a very accurate method and I didn’t test it over a long period of time, but as of now this works fine. Of course you need to be sure to not manually change the encoder position when the ODrive is not powered or when the script is not running.
I will later collect my updated firmware and python files, and post them here
Why do we think that this won’t be accurate? I will apply a large current and wait a sufficient amount of time to reduce any ringing.
Agreed the starting position of the motor is always unknown, but my system has absolute position sensors on the output so I don’t care where the motor starts it’s “relative” zero.
The issue I have now with the index based startup is that I have to have my robot in the correct starting posture or the index won’t be seen before actuators crash themselves.
I will take a stab at modifying the firmware to add this startup option.