
How to make motors coast instead of brake
With a tip from this thread, I was able to get the motors to stop dynamic braking at speed=0 and instead coast. The motivation was that the hard braking was damaging the gearboxes in our motors.
The main idea is "don't use speed = 0." Setting the speed to 1 avoids the braking mode. But this only works if the current speed was > 0 (forward). If the current speed was < 0 (backward), setting speed to +1 caused braking to happen. In this case using -1 avoided braking mode. In other words, the value to use for "coast" depends on the current direction of the motor.
Therefore this requires access to the current speed setting of the motor. I created a "speed-setting" function for each motor that remembers the speed it was set to:
These functions are used in place of
The function also contains the logic to set the speed to +1 or -1 if a speed of zero is requested, thus causing the motor to coast instead of brake:
Below is an example of a simple "tophat drive" method that uses coasting: