.cargo | ||
doc | ||
nix | ||
src | ||
.gitignore | ||
.travis.yml | ||
Cargo.lock | ||
Cargo.toml | ||
default.nix | ||
LICENSE | ||
memory.x | ||
openocd.gdb | ||
README.md | ||
release.nix | ||
stabilizer_pid.png | ||
stabilizer_pid.svg | ||
stabilizer.cfg | ||
stabilizer.py |
Stabilizer Firmware
Features
- dual channel
- SPI ADC
- SPI DAC
- 500 kHz rate, timed sampling
- 2 µs latency, unmatched between channels
- f32 IIR math
- generic biquad (second order) IIR filter
- anti-windup
- derivative kick avoidance
Limitations/TODOs
- Fixed AFE gains
- The IP and MAC address are hardcoded
- Expose configurable limits
- 100Base-T only
- Digital IO, GPIO header, AFE header, EEM header are not handled
Hardware
See https://github.com/sinara-hw/Stabilizer
Minimal bootstrapping documentation
- Clone or download this
- Get a recent openocd, a JTAG adapter ("st-link" or some clone) and everything connected and permissions setup
- Get a multiarch
gdb
(or a cross arm gdb and edit.cargo/config
accordingly) - Get rustup
rustup override add nightly
rustup target add thumbv7em-none-eabihf
openocd -f stabilizer.cfg
and leave it runningcargo run --release
Protocol
Stabilizer can be configured via newline-delimited JSON over TCP. It listens on port 1235. stabilizer.py contains a reference implementation of the protocol.