Encoder resolution to PidController, turning

Using an encoder with the PidController class (for the first time) to control our arm position. We are using a gearbox from previous year’s that has the US Digital encoder on the output shaft of the gearbox. That means that we aren’t getting very many counts, only 360 per revolution. I set it to 4x mode when creating the encoder object and GetRaw() gives me the 4x count, but it looks like it uses the “regular” count to calcuate distance. Yes, I know I can set the distance per pulse to any scaling I want, but it’s calculating it off the reguar not the 4x count, giving me less resolution. The encoder is passed to the PidController class with its source type set to “distance”. My question is does this sound like I’m getting as much resolution as I can"?

I don’t think its enough resolution because we can’t seem to get it tuned to be very stable. Any tuning advice / tips? We are using the analog inputs on the driver’s station to set Kp and KI (with scaling of course)

Also, the jaguar controlling it will fault if our full arm assembly is installed. That means its going over current right? Tomorrow we are going to change sprockets to gear it down some.


In LabVIEW at least, the Distance output of the Encoder Get vi changes in increments of one-quarter of the distance per count. You’re getting all the resolution possible.

For tuning, note that the LabVIEW PID function works with the “academic form” of PID. That means that the I and D numbers are actually time values, not gains. A larger value has a smaller/slower effect on the output.