360° Feedback Servo - Shakes



Is it normal for the servo to be shaking like this while waiting for command in terminal? I simply connected the servo to project board & run it with the C code from the website. I only changed the pins assignment.
int pinFeedback = 23; // P14 connected to feedback line
int pinControl = 25; // P12 connected to control line


Kenichi

Comments

  • 14 Comments sorted by Date Added Votes
  • I had similar results using the demo code and greater than 5V.

    If you lower the servo's voltage to 5V does it calm down?

  • xanadu wrote: »
    I had similar results using the demo code and greater than 5V.

    If you lower the servo's voltage to 5V does it calm down?

    Per the Specs
    *5 VDC is absolute minimum required for no-load angular position control. 5.8 to 8 VDC is recommended for continuous rotation speed control.

    The OP never said what voltage he was running at.

    Infernal Machine
  • My experience at 5V was that they run very slowly and have a very huge dead zone.

    I didn't spend any time with the C code, but perhaps there is a way to adjust the gain.

    I have been working on a PASM driver which twm has ported to C. You can see what we have been doing in this thread.

    Re-inventing the wheel is not a waste of time if, when you are done, you understand why it is round.
    Cool, CA, USA 95614
  • "5 VDC is absolute minimum required for no-load angular position control. 5.8 to 8 VDC is recommended for continuous rotation speed control."

    That's great, but it should mention 5 VDC is also the maximum for unloaded non-CR operation. I think a lot of people will get the servo, and run it from a > 5 V power source, and encounter the same issue.

    I posted about this a while back. I will be quiet now.
  • My experience at 5V was that they run very slowly and have a very huge dead zone.

    I didn't spend any time with the C code, but perhaps there is a way to adjust the gain.

    I have been working on a PASM driver which twm has ported to C. You can see what we have been doing in this thread.

    That is good news. Thanks you.

  • PublisonPublison Posts: 9,810
    edited December 4 Vote Up0Vote Down
    xanadu wrote: »
    "5 VDC is absolute minimum required for no-load angular position control. 5.8 to 8 VDC is recommended for continuous rotation speed control."

    That's great, but it should mention 5 VDC is also the maximum for unloaded non-CR operation. I think a lot of people will get the servo, and run it from a > 5 V power source, and encounter the same issue.

    I posted about this a while back. I will be quiet now.

    You guys have a lot more hands on than I do right now so I bow to your findings. I'll be quiet now. :)

    Would like to know what the OP's voltage is. He's in Singapore so it may be a while.

    Infernal Machine
  • Hi,

    Have you tried the examples in here?

    https://www.parallax.com/downloads/propeller-c-learn-folder

    Download "Learn-Folder-Updated-2017.10.31.zipside" and open SimpleIDE, click Tools -> Update Workspace -> Browse.

    Browse to the .zipside you just downloaded and click Open.

    After the libraries have been updated, try:

    ...Docuemnts\SimpleIDE\Learn\Examples\Devices\Motor\Servo360\Set Angles 1 servo.side

    If it still oscillates, the libraries you downloaded have control system adjustment functions we can try.

    Andy
  • xanadu wrote: »
    "5 VDC is absolute minimum required for no-load angular position control. 5.8 to 8 VDC is recommended for continuous rotation speed control."

    That's great, but it should mention 5 VDC is also the maximum for unloaded non-CR operation. I think a lot of people will get the servo, and run it from a > 5 V power source, and encounter the same issue.

    I posted about this a while back. I will be quiet now.

    Do you have a link to your findings?

    I just ran the " Feedback 360 Angle Control [Low Level Example].c at 5volts and it ran fine.

    At VIN, , (8.00 volts Lion Battery Pack), it exhibited the same oscillations that the OP posted. Curious, as I tend to run servos off of VIN to get the most out of them.


    Infernal Machine
  • xanaduxanadu Posts: 3,120
    edited December 4 Vote Up0Vote Down
    Yes, it runs fine at 5V. The demo code is great for servos on USB power.

    The general consensus was that overshoot is normal under no load, using the demo code, at voltages over 5V.

    What I am trying to get across is that information needs to be more prominent. IMO the highest use case will be someone testing it out, under no load, at 6 V, using the demo code. If you recreate that scenario you will see the same thing as the OP, and myself.

    Maybe an app note or code update would resolve the issue.

    Here are my findings -



    http://forums.parallax.com/discussion/167298/new-parallax-360-feedback-servo/p3
  • I cocurr on your findings as I had the same outcome. Testing Andy's new software....
    Infernal Machine
  • Okay, the unmodified C demo version works fine. 8 V, no load, no overshoot.

    So there was an update? I would assume so.

    @maxtuxlin try the update Andy mentioned, if you haven't.



  • Try using a Capacitor to reduce the shaking. Companies sell capacitors for RC cars
    as a fix for using a 2S lipo battery. Many servos will shake when using a 2S lipo,
    and not shake when using a 7.2v nicad or nmh battery.


    Bill M.



  • Thanks, guys.

    Initially, I powered my PPB USB with a 7.5v since manual wrote > 5v. However, after I changed to 5v, the oscillation stopped.


    Next, I've updated the workspace according to Andy's suggestion. It seems to have eliminated the most of the shaking after reaching the designated angle.
    This is back to 7.5v


    Same after adding the cap.


    I'll eventually return to SPIN/PASM so I'll try Tom's link.

    Thanks again!
    int main()
    {
      servo360_connect(12, 14);
      pause(1000);
      
      servo360_angle(12, 0);
      //servo360_angle(13, 0);
      pause(1000);
    
      for(;;){
        servo360_angle(12, 45);
      //servo360_angle(13, -45);
        pause(1500);
        servo360_angle(12, 360);
        pause(2500);
      }
        
      servo360_angle(12, 360 + 45);
      //servo360_angle(13, -360 -45);
      pause(2500);
     
      servo360_angle(12, 0);
      //servo360_angle(13, 0);
      pause(1000);
      
      print("\nServo 1 Completed");
      pause(5000);
    }
    

    Kenichi
  • Excellent. Thanks for bringing this up. My servos were starting to collect dust. Now I have working PropC and SPIN. Can't ask for anything more.



Sign In or Register to comment.