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/status_led.py
"""TZ-0807Z1RGB-5V-I4-MS(5mA), GPIO25, GRB, deliberately dim."""
MAX_CHANNEL = 8 # 8/255 duty; ~0.16 mA average per color at the 5 mA rating.
TIMING_NS = (300, 950, 950, 300) # Manufacturer T0H/T1L 0.2–0.35 us.
def grb_frame(red, green, blue):
return bytes(max(0, min(MAX_CHANNEL, int(c))) for c in (green, red, blue))
class StatusLED:
def __init__(self):
from machine import Pin, bitstream
from time import sleep_us
self.pin = Pin(25, Pin.OUT, value=0)
self.bitstream = bitstream
self.sleep_us = sleep_us
self.last = None
self.set(0, 0, 0)
def set(self, red, green, blue):
frame = grb_frame(red, green, blue)
if frame != self.last:
self.bitstream(self.pin, 0, TIMING_NS, frame)
self.sleep_us(100) # Datasheet reset >80 us.
self.last = frame
def update(self, stopped, warm, now_ms):
if stopped:
self.set(8 if (now_ms // 250) % 2 else 0, 0, 0)
elif warm:
self.set(8, 3, 0)
else:
self.set(0, 4, 0)