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/limit.c
#include "limit.h"
uint16_t limit_code(uint16_t ma, uint16_t vdda_mv) {
if(ma>CURRENT_LIMIT_MAX_MA || vdda_mv<2700 || vdda_mv>3600)return 0;
uint32_t code=(uint32_t)(((uint64_t)ma*8325u*4096u)/((uint32_t)vdda_mv*1000u));
return (uint16_t)(code>4095?4095:code);
}
uint16_t limit_nominal_ma(uint16_t code, uint16_t vdda_mv) {
return (uint16_t)(((uint64_t)code*vdda_mv*1000u)/(4096u*8325u));
}
bool limit_readback_ok(const uint8_t bytes[3], uint16_t code) {
/* MCP4725 Figure 6-3: RDY bit7, PD1/0 bits2/1, DAC code left aligned.
* Requiring RDY also rejects an SDA line stuck low, including at code zero. */
return (bytes[0]&0x86)==0x80 && (((uint16_t)bytes[1]<<4)|(bytes[2]>>4))==code;
}