Servo Movement At Power Up Before Initialization

 
#1

When running my servo initialization in the connection script I am able to set position and speed just fine. I noticed that when first powering up before the connection init script runs the tilt and rotation servos both always go to the "0" degree position which is a bit awkward.

I read the servo positioning and speed setting tutorial and it mentions about a reverse init routine before powering down to set the servos in the position that you want them in at power down. This could be done via a button in the mobile app via scripting. At the end it is implied as far as I can tell from reading the tutorial, that once this is done and power is applied again (and before the init script is run) the servos would remain in the same positions as they were when power was removed. This doesn't seem to be the case however.

Wondering if there is a way to keep the servos in the same position at powerup (before the int script is executed) as they were at power down? Why do the servos when power is applied always go to the zero degree position?

I noticed when you use the servo slider in the mobile app, that when you first move the servos after poweup no matter what position the servos are in they go to 0 degree position and then start to function normally.

Any clarification on these issues is much appreciated....Rick

#2

Servos are not instructed to move on power up or connection by default in ezrobot software or ezb.

Any movement of servos must be done by your code, only. Ezrobot will NOT move a servo into any position on startup or connection without code instructing them to move. EZ-Builder and the ezb is unaware of what ports have servos connected, so there is no possible way for the software to move servos on its own.

Lastly, there is no position 0

You can share your project if you'd like it to be reviewed.

#3

I think what you're saying is that when a servo is powered up it will naturally move to "center" without being commanded to move. So if the servo is powered down without the horn or whatever is attached to the servo being at this center position the servo will jerk back to center when powered up. This is totally independent of EZ Builder and a natural act of the servo.

You can't expect EZ Builder to know where the servo is positioned when it the servo powers up. There is no feedback from the servo to EZ Builder to tell EZ where the servo is. Typical servos don't have a built in sensor that sends this info out to a controller. So there is no way for EZ Builder to send a shutdown position command (other than center) to the serov, shut down servo power and EZ Builder and then when you turn everything back on expect the servo to stay at any spot without jerking other then at the center position.

With that said, what do we do? Simply power down the servo at the center position and try to keep it there until the next power up. You don't need to have whatever is attached to your servo attached at the center position.

Hope this all makes sense. Smile

#4

@DAVE,

Would I be correct in saying the center position for each servo is 90 degrees? If not what is center position. DJ mentioned servos don't move on powerup unless commanded to do so.

@DJ, @DAVE,

I have uploaded my project to the cloud and made it public so you can take a look see at the servo issue. Servos move quite a bit when power is first applied before the init script. Any thoughts are much appreciated. The project name is:

RC_TRUCK_DEMO_MOBILE_APP.EZB

Any thoughts are much appreciated...Rick

#5

Two different issues:

1)

Tutorial:
https://www.ez-robot.com/Tutorials/UserTutorials/155/1

Problem:

Quote:


our robot has a servo controlled head and you have it set at "90" in your Init script. When you power off your EZ-B, maybe the head servo is facing at "180". When you power on and connect your EZ-B to the EZ Builder project again, that servo will still go at full speed to the position back to the "90" you have set up as in your "Init" script.



Solution purposed:

Quote:


One way to combat this is to do a reverse "Init" script. By this I mean a kind of Off button in EZ Builder that would be pressed when you are finished with your robot. This could be an EZ-Script control, or a button on the mobile interface. This is where you would use the same servo speed and position "Init" script to move the servos to their starting position, so when you turn it on again, the servo don't move.



This is between EZ-Builder and EZ-B controller basically before power off/disconnect you set the the servos positions to the same position you have in your initialization script.

====

2)

Quote:


Wondering if there is a way to keep the servos in the same position at powerup (before the int script is executed) as they were at power down?



No without any other hardware/software changes.

Firmware:
My custom EZB4 V1's firmware allows you to configure the initial servo position values.
Only the micro-controller firmware can react immediately after a power on event.

The new EZB4 V2 is a different chip and does not support the custom firmware, although supports OTA updates, maybe new firmware features will be released.

Extra hardware:
the SSC-32 allows you to set the initial startup positions of the servos, i believe the default configuration is 1500us more or less the center position. The configuration is done via hardware tools.


Quote:


Why do the servos when power is applied always go to the zero degree position?



There is no zero degree. The power-on random move of a servo is normal, until the servo has power and received the first pulse it has no idea where it is headed, also while the micro-controller is initializing the hardware ports are in undefined logical states.

I share your pain.

My big bot uses two parallax HB-25 motor controllers, they support high amps and the construction is very good, unfortunatelly the motor controller emulates a Servo. So every time i powered on the bot, or reboted the PC (powering the Parallax propeller micro-controller) and it was frequent, the robot moved it was like he got electrocuted.

It was very annoying.

User-inserted image

User-inserted image

I solved the problem adding two relays (always off) to cut the motor power (not the controller power).
When the system (micro-controller and or the pc) power ups, checks several sensors, initializes the servo position to center (continuous servo stop position), and only then activates the relay, so the servo receives at same time power and the position.

You can obtain the same result if you introduce ONE relay (always off) between the VIN and your servos, all the servos vcc (red) will be connected to the relay port.

Then you can open EZ-Builder, set the initial servo positions and only then you activate the relay.

#6

On my Inmoov,

I am using an init script where the maximum, minimum and home or relax position is define for each servo.

When I wish to disconect my EZB's I am using this type of script:

Code:

 :loop
servo(D0,$relaxD0) #head position looking straight (value 73)


$HeadPos = GetServo( D0 )


if( $HeadPos =73 )
ControlCommand("Connection", Disconnect0)
endif

goto (loop)





What will happend, is the EZB will emit the disconect sound, but the servo will still move to the position (in this case the relax position 73).

Then you could power down the robot.

At power up, if the servo have not been move mechanicly, when you restart the EZB, the servo will not move, because the init value match the position where you have left the servo at power down.


Watch the end of this video, you will here the EZB disconnecting and servos still moving to home position

#7

@Aerius:
What kind of servos are you using?

#8

@ptp
The new HDD servo, they are just great. no buzz and strong.

#9

Wow Giles, is that InMoov number 2 build?
I love the new shoulder moment and pivot points on the chest.
Your print quality is excellent are you still using your FF Dreamer?

Cheers
Chris.

#10

@cem
Tanks Chris,
It is InMoov #1 modified.
I'm still using my Flash Forge Dreamer