Boss lady
Boss lady
DIIDevHeads IoT Integration Server
Created by Boss lady on 7/19/2024 in #firmware-and-baremetal
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()

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
2 replies