Go to file
2019-05-28 13:12:49 +02:00
.cargo cargo: gdb-multicarch 2019-03-20 09:48:44 +00:00
doc cargo: tweak 2019-03-29 19:34:31 +01:00
src refactor server 2019-05-28 10:59:26 +00:00
.gitignore start 2019-03-18 12:56:26 +01:00
.travis.yml travis: skip clippy 2019-04-29 20:03:34 +02:00
Cargo.lock cargo: use published serde-json-core 2019-05-28 08:40:17 +00:00
Cargo.toml cargo: use published serde-json-core 2019-05-28 08:40:17 +00:00
LICENSE readme, license 2019-03-20 18:33:35 +00:00
memory.x ethernet: tweak 2019-04-28 14:06:56 +00:00
openocd.gdb iir: tweak, add offset 2019-03-29 18:33:32 +00:00
README.md cleanup, robustify 2019-05-28 10:15:20 +00:00
stabilizer_pid.png png 2019-05-09 16:40:35 +02:00
stabilizer_pid.svg README: diagram and photo 2019-05-09 16:05:36 +02:00
stabilizer.cfg working 2019-03-18 13:10:00 +00:00
stabilizer.py cleanup, robustify 2019-05-28 10:15:20 +00:00

Stabilizer Firmware

Flow diagram

Hardware

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 running
  • cargo 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.