We are using a Pololu micro servo controller for a rover project (interfaced with a BasicX24 microcontroller). The controller manages the steering servo and electronic speed control for a rock crawling robot.
After integrating this into the system I wanted to point out some important shortcomings of this controller:
- There is a red led indicating a communications error occurred, but there is no (documented) indicator pin which the microcontroller can use to tell there was something that went wrong. This means a human can tell there was a problem, but the microcontroller cannot. [There is a pin labeled OUT, but I don’t know what it does].
This is a big deal when reseting the servo board is much more desirable compared to locking up due to a bad communication. Handling a heartbeat message or something like that would be really great.
The reset line is not documented. It’s labeled on the board, and seems to work, but there isn’t anything in the documentation about it. In particular, I would like to know how long to wait after a reset before attempting to communicate with the board (20 milliseconds seems long enough, but can I wait less, or should I wait more to be certain the board is ready to communicate again?)
Resetting the board pulses the servos! Instead of leaving the servos in the off state (which makes perfect sense), resetting the controller causes the servos to twitch Since we are controlling the motor (via the electronic speed control), it would be much better if a reset left the servo lines quiet.
Some documentation and a firmware update could make this into a much more generally useful board:
The reset line should be documented.
Useful output should be generated via the serial port (and documented). For example, in response to any message regarding any given servo, the system could respond with the current config byte and pulse width of that servo (three bytes).
An updated command 0 (command 7?) should be given that has a second data byte as a mask for which parameters you wish to update. Without this, you need to maintain the state of the servos on the microcontroller as well in order to provide a clean interface (SetDirection(), SetRange(), etc.) This also makes for a NOP command (mask is 0) to get the current config and position of the servo.
A reset should not twitch the servos, but instead leaves them in the off state.
Does anyone have a work-around or know more details for these?