Go to Post Advances in STEM are meant to benefit everyone, so even the most basic-level of understanding deserves to be validated and encouraged. - moamomen [more]
Home
Go Back   Chief Delphi > Technical > Control System > FRC Control System
CD-Media   CD-Spy  
portal register members calendar search Today's Posts Mark Forums Read FAQ rules

 
 
 
Thread Tools Rating: Thread Rating: 6 votes, 5.00 average. Display Modes
Prev Previous Post   Next Post Next
  #1   Spotlight this post!  
Unread 18-03-2012, 17:00
dtgriscom dtgriscom is offline
Mentor, Team 2713
AKA: Dan Griscom
FRC #2713 (iRaiders)
Team Role: Mentor
 
Join Date: Mar 2012
Rookie Year: 2008
Location: Melrose, MA
Posts: 14
dtgriscom is an unknown quantity at this point
PID control: need D values > 10000??

We're using CANJaguar and PID control on our robot arm's shoulder joint. The arm is driven by a pair of highly-geared motors, with an encoder directly on the joint. We're having a very tough time getting the right values for PID, and need some help. Specifically, we feel we need some D to prevent oscillation and overshoot, but have had no success getting any value of D to work.

We've been testing different PID values using BDC-Comm, initially with motor power disconnected. We're trying out different values of P, I and D, and watching the motor output voltage as we move the arm. Our P and I experimentation gives us sensible results, but D seems almost non-functional. We test by setting P and I to zero, choosing a value for D, and the moving the arm and watching the motor voltage. Unless we set D above 10000 (yes, ten thousand) the BDC-Comm voltage display never budges from zero. The max value for D (at least in BDC-Comm) is 32767, so that seems really strange.

BDC-Comm testing with motor connected shows that if I have all three terms set to 0, and stop action set to coast then the arm can easily be moved (obviously). I'd expect that I could then use a D value as a brake, resisting any motion. But, I have to bump my D value up to above 5000 before I get any braking action. If I set D to very negative (-10000) I get an apparent reduction in friction.

Why does this require such enormous values of D? It's conceivable that if we could use a D of, say, 100000 we'd be fine, but that won't work in BDC-Comm, and even if they'd work in Java using weird values "because they work" doesn't seem like the right approach.


Thanks,
Dan

Edit: I think I've found the answer, but my three posts to that effect have yet to show up, So, I'm trying this.

Ether pointed me the right way: the problem is our counts-per-second. Arm moves 220 degrees max, directly coupled to a 360 degree per rotation encoder, so that's only 220 counts total. We want control of motions of a few degrees a second, or a few counts a second. Given the PID iteration time of a millisecond, that won't work (and is why D is totally ineffective; P and I are probably hampered as well.) Lesson: we gotta get more counts, probably moving the encoder to an intermediate shaft on our gearbox.
__________________
Daniel Griscom
iRaiders Team 2713
Position: Mentor and Official Team Worrier

Last edited by dtgriscom : 19-03-2012 at 12:28. Reason: Aren't being allowed to post to this thread
Reply With Quote
 


Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT -5. The time now is 03:31.

The Chief Delphi Forums are sponsored by Innovation First International, Inc.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi