Why is my encoder causing my pendulum angle to drift?

  • Thread starter Thread starter jgeating
  • Start date Start date
Click For Summary
SUMMARY

The discussion centers on the issue of angle drift in a pneumatic inverted pendulum project utilizing an S1-1250 rotary encoder by US Digital, interfaced with an Arduino via interrupt pins for quadrature output. Despite correct initial readings, the angle drifts several degrees after a few seconds of operation, even when the system is manually disturbed. The user has tested multiple Arduino models and encoders, and suggestions include using an external encoder counter to handle high pulse rates and investigating potential missing interrupts due to asymmetric processing times.

PREREQUISITES
  • Understanding of rotary encoders, specifically S1-1250 by US Digital
  • Familiarity with Arduino programming and interrupt handling
  • Knowledge of pneumatic systems and their dynamics
  • Basic principles of quadrature output and signal processing
NEXT STEPS
  • Research the implementation of external encoder counters for high pulse rate applications
  • Learn about optimizing interrupt handling in Arduino to prevent missed signals
  • Explore techniques for minimizing mechanical drift in pendulum systems
  • Investigate the effects of different materials on pendulum dynamics, comparing carbon fiber and aluminum
USEFUL FOR

This discussion is beneficial for robotics enthusiasts, engineers working on control systems, and hobbyists involved in projects utilizing rotary encoders and Arduino for dynamic balancing applications.

jgeating
Messages
35
Reaction score
0
So I am reading a rotary encoder through an an arduino using interrupt pins for the quadrature output. I'm not an expert, but the system seems to work fine, i.e. gives correct output readings. It is for a pneumatic inverted pendulum, which can jitter, and change the cart velocity very suddenly. I have noticed that after running for several seconds, the angle drifts. When I realign the pendulum with gravity, the angle has drifted several degrees. Even shaking it with my hand (pneumatics turned off) causes the angle to drift.

Encoder is a S1-1250 by US Digital. 1250 counts per revolution, with standard, ground, power, ChA, and ChB outputs. (Unused index channel). Have tried an arduino mega as well as duemilanove, and two separate encoders (same model number). Someone recommended getting an "encoder counter" because the pulses are probably too high for the arduino.

However, a previous student did the exact same project without problems. The only differences are that my rail friction is much lower (3X lower), and my pendulum is a carbon fiber rod with a weight on the end, while his was just an aluminum shaft.
See http://dasl.mem.drexel.edu/~jiyueHe/pneumatic_inverted_pendulum/ for the tutorial I'm following

Thanks,
-Josh
 
Last edited by a moderator:
Engineering news on Phys.org
I would place a small bet on missing interrupts. If the drift is always in the same direction you might have asymmetric processing times on one input.

You could try an external counter to compare the number of interrupts you get, or simplify your program somehow to keep an accurate count.
 
Drift is in both directions, but usually CW. The program is simplified to the point where only the encoder related code is present. I also directly downloaded a simple encoder program from the arduino website and the problem still remains. I also eliminated serial output and used an LED to indicate where the supposed 0 point is. It always still drifts when I shake it about.