AnasSarkiz/rp2040-usb-c-single-axis-dm542t-motion-controller--01a0e89c

A USB‑C RP2040 controller board with external QSPI flash, crystal clock, regulated 3.3/1.1/5 V power, boost-converted motor-driver supply, protected USB and limit inputs, status LEDs, reset/boot switches, and AO3400A MOSFET outputs for stepper-control signals.

Version
0.1.0-prototype.19
License
unset
Stars
0

firmware/power_policy.c

#include "power_policy.h"
void power_policy_update(PowerPolicy *power, PowerInputs inputs) {
    if (!inputs.mounted) {
        *power = (PowerPolicy){0};
        return;
    }
    if (power->ready && inputs.overcurrent) power->fault_latched = true;
    if (inputs.suspended || !inputs.supply_ok || power->fault_latched) {
        bool fault_latched = power->fault_latched;
        *power = (PowerPolicy){.fault_latched = fault_latched};
        return;
    }
    if (!power->switch_on) {
        power->switch_on = true;
        power->started_ms = inputs.milliseconds;
    }
    uint32_t elapsed_ms = inputs.milliseconds - power->started_ms;
    // Allow the current-limited input reservoir 20 ms to charge, then
    // another 20 ms for the converter before accepting ENABLE.
    power->regulator_on = elapsed_ms >= 20;
    power->ready = elapsed_ms >= 40;
    if (power->ready && inputs.overcurrent) {
        *power = (PowerPolicy){.fault_latched = true};
    }
}