shibosoftwaredev/f1c100s-linux-nema17-stepper-controller
A four-layer NEMA 17 motor-controller PCB combining an Allwinner F1C100S Linux computer, USB‑PD/buck power system, W5500 Ethernet, STM32 real-time motion control, DRV8825 stepper driver, protection/temperature/current telemetry, USB interfaces, and local LED/buzzer diagnostics.
- Version
- 0.4.56
- License
- unset
- Stars
- 0
firmware/stm32/test_current.c
#include "current.h"
#include <assert.h>
#include <limits.h>
#include <stdio.h>
int main(void) {
CurrentTelemetry t={0};
CurrentSample s={.raw_a=2048,.raw_b=2047,.vdda_mv=3300,.now=100,.adc_ok=true};
current_update(&t,&s);assert(t.a_ma==0 && t.b_ma==0 && t.flags==3);
s.raw_a=3537;s.raw_b=558;current_update(&t,&s);
assert(t.a_ma==400 && t.b_ma==-400 && t.flags==3);
CurrentTelemetry snapshot=current_snapshot(&t,120);assert(snapshot.flags==3 && snapshot.age_ms==20);
snapshot=current_snapshot(&t,121);assert(snapshot.flags==0);
snapshot=current_snapshot(&t,100000);assert(snapshot.age_ms==65535);
s.now=UINT_MAX-4;current_update(&t,&s);snapshot=current_snapshot(&t,5);assert(snapshot.age_ms==10 && snapshot.flags==3);
s.raw_a=0;s.raw_b=4095;current_update(&t,&s);assert(t.flags==12 && t.a_ma==-550 && t.b_ma==550);
s.raw_a=2048;s.raw_b=2048;s.adc_ok=false;current_update(&t,&s);assert(t.flags==0);
s.adc_ok=true;s.vdda_mv=2699;current_update(&t,&s);assert(t.flags==0);
s.vdda_mv=3601;current_update(&t,&s);assert(t.flags==0);
s.vdda_mv=3300;s.raw_a=65535;current_update(&t,&s);assert(t.flags==0);
for(unsigned v=2700;v<=3600;v+=100)for(unsigned r=0;r<=4095;r++) {
s.vdda_mv=(uint16_t)v;s.raw_a=(uint16_t)r;s.raw_b=(uint16_t)(4095-r);
current_update(&t,&s);assert(t.a_ma==-t.b_ma && t.a_ma>=-600 && t.a_ma<=600);
}
puts("PASS: signed coil conversion, zero, range/clipping, invalid ADC/supply, stale data and tick wraparound");
}