seveibar/nema17-stepper-motor-driver-tmc2209-usb-pd
RP2040-based USB-C PD stepper-motor controller with TMC2209 drive, AS5600 position feedback, TMP102 thermal shutdown, current/voltage telemetry, RGB status LED, and protected buzzer alarm circuitry.
- Version
- 0.2.0
- License
- unset
- Stars
- 0
firmware/as5600.py
"""Read-only AS5600 single-turn angle feedback. Never burns OTP settings."""
ADDRESS = 0x36
class AS5600:
def __init__(self, bus):
self.bus = bus
self.angle_degrees = None
self.zero_raw = 0
self.raw = None
def sample(self):
self.angle_degrees = None
self.raw = None
data = self.bus.readfrom_mem(ADDRESS, 0x0B, 3)
if len(data) != 3:
raise OSError("short encoder response")
status = data[0]
if not status & 0x20 or status & 0x18:
raise ValueError("encoder magnet missing, too weak, or too strong")
self.raw = ((data[1] & 0x0F) << 8) | data[2]
self.angle_degrees = ((self.raw - self.zero_raw) & 0x0FFF) * 360 / 4096
return self.angle_degrees
def zero(self):
self.sample()
self.zero_raw = self.raw
self.angle_degrees = 0.0