Issues with Accurate Quadrature Encoder Readings on BeagleBone Black

Hey guys am developing a real-time control system for a robotics application using a BeagleBone Black running Embedded Linux. The system needs to read data from a quadrature encoder to determine the position and speed of a motor. However, I encounter an issue where the encoder readings are not accurate or are missed at higher speeds. I have connected the quadrature encoder to the BeagleBone Black's GPIO pins, verified that the encoder signals (A and B) are properly connected to the correct GPIO pins.

Error: Missed encoder pulses

Here's my code
   import Adafruit_BBIO.GPIO as GPIO
   import time

   # Encoder GPIO pins
   ENCODER_A = "P8_12"
   ENCODER_B = "P8_14"

   # Initialize encoder position
   position = 0

   def encoder_callback(channel):
       global position
       if GPIO.input(ENCODER_A) == GPIO.input(ENCODER_B):
           position += 1
       else:
           position -= 1

   # Setup GPIO pins
   GPIO.setup(ENCODER_A, GPIO.IN)
   GPIO.setup(ENCODER_B, GPIO.IN)

   # Add event detection for encoder A pin
   GPIO.add_event_detect(ENCODER_A, GPIO.BOTH, callback=encoder_callback)

   try:
       while True:
           print(f"Encoder position: {position}")
           time.sleep(0.1)

   except KeyboardInterrupt:
       print("\nExiting...")

   finally:
       GPIO.cleanup()

@Middleware & OS
Was this page helpful?