Idea for Servo noise and power control.

Hi Folks.
When wearing one of my animatronic masks I notices there was a lot of servo noise. Not just the whine of movement but also when the servo was trying to seek that fraction of a millimeter,
So I wondered if there was a way to turn of a specific servo or bank of servo's after the move.
Here are my idea's (and I am in the process of making one of these)

I currently use an ESP32 as a base processor. It's great since there are 240Mhz processors,  plenty of I/O, it has BLE, Wifi, 64K of memory, and another 4M+ of flash memory that can be used akin to an sd drive.
Also for the servo's there is the I2C  PCA9685 PWM Controller that is used in the Adafruit 16 Channel Servo Driver.

Since I will be using the servo in an organic mode where fractional position is not essential (like in ailerons) I can affort for the servo to move a little. So turning off a servo will not be an issue and letting it rest.

To do this I use 2 x 74HC595  Shift Register that also has a Latch.. so you can set the pattern and then Enable it. This is sent to a bank of N-Channel MOSFETS which then are turned on to enable power for a servo, or off to disable the servo.

The Arduino already has several Shift Register Libraries and you can chain as many of these as you want together to turn on additional functions.

Just an idea..
Dave

Comments

  • Hey David!
    I've experienced servo jitter in the past. Are you using the new programmable servos? I have not used them but they may have a "jitter control" to decrease sensitivity. As for cutting power to a servo, I would think the issue would be powering back up. You would need to immediately sending the previous position to the servo or it would return to its neutral position. I just guessing. 

    David
  • The 16 channel servo controllers that Adafruit have are a 'set and forget, as in that once you tell them to send a pulse of X width they will continue to do so. Unfortunately this stops the servo's automatic shutdown. There is no way to turn off a pulse.
    Sadly programmable servos are beyond my price range. And much of what I am making  is like wises aimed at Cosplayers and other lower price range area's.
    So if the servo is powered down - when it powers up again it will automatically receive the new position pulse.
    Many thanks for commenting :)  We are all explorers in this area.


  • Cool. I had this problem a long time ago. I just don;t remember how I solved it. How is your power supply filtering and capacity. I do remember getting jitters when I had dirty power and inadequate current. Perhaps you need more shielding in your cables? Just trying to think what it might be,
  • First, make sure the servos are on a separate power supply from the Arduino.  The PCA9685 does this for you.  Second make sure you have your capacitor  slightly oversized for the need.  I am working with Alorium to resolve a conflict with the PCA9685 board.  https://www.aloriumtech.com/project/servo-control/
    snippet:
    However, generally speaking, Arduino-based servo control solutions suffer from servo jitter and twitching due to the 8-bit micro not being able to maintain precise timing required on the Pulse-Width-Modulation (PWM) signal that controls the servo.  If the tight timing required to maintain absolute servo position is not met, the servo will jitter between locations until refreshed from the micro.  This can cause significant issues where accurate, stable servo performance is required.

    Their board although expensive can single handedly handle up to 12 servos if those are on a separate power supply.


    I am looking at switching to micro python as that language is much more easily ported to the newer, faster, boards and processors that are coming to market.  


    I suspect like my projects yours are doing multiple things at once and that seems to give the Arduino based hardware fits when multitasking is required within the code itself.
Sign In or Register to comment.