Micro Mastro / 1501MG servo question

In my application, I need to be able to turn the servo by hand at times. I am controlling a deadbolt knob and need to be able to turn the deadbolt with a key. In order to do this, according to the documentation, I should be able to call setTarget(MY_SERVO_ID,0). This does, in fact, stop sending pulses to the servo (observed via oscilloscope), but the servo is still acting as if the pulses are still being sent (i.e. it can’t be rotated by hand). I am using a Micro Maestro and a 1501MG high torque servo.

I also investigated switching off the power temporarily to the servo (while leaving the board powered) and that did stop the servo from holding its position so I was able to turn it by hand.

Am I misunderstanding the purpose of setTarget with 0 or is this expected behavior (either in general or the specific servo)? Do some (or all) servos have a “memory” to hold even when they are no longer receiving pulses?

Hello,

Yes, using a target value of 0 with the setTarget() command will stop the servo signal output on the specified Maestro channel; however, as you mentioned, some digital servos will continue to hold their position when they stop receiving valid signals. You might consider trying a different servo that does stop holding position, or use something like a MOSFET or relay to cut power to your servo. Also, if you try doing this, please note that it is generally bad practice to continue sending logic signals to an unpowered device, so you should consider disabling the servo output on channels when the servo is unpowered.

By the way, you may want to read through the note on the servo’s product page regarding the risk of back-driving it, if you have not done so already.

-Dan

Thanks for the info.

I do have a relay to control power to the server, but I also have modified the servo to get the potentiometer output so I can sense the position as well, so the servo needs to be powered most of the time.

I did read the info about back-driving the servo, and in this case it will be a very rare occurrence, so I’m not too worried about it.

As it stands right now, the plan is to only send a position when it needs to move, when it is done moving send a 0 to stop the pulses, turn off the servo for 250ms then turn it back on so the position can still be read from the potentiometer. The 250ms seems to be enough time for the servo to “forget” where it was.