2019-03-21 02:32:23 +08:00
|
|
|
# Stabilizer Firmware
|
2019-03-10 20:08:32 +08:00
|
|
|
|
2019-05-21 23:55:01 +08:00
|
|
|
![Flow diagram](stabilizer_pid.svg)
|
2019-05-09 22:05:36 +08:00
|
|
|
|
|
|
|
![Hardware](https://github.com/sinara-hw/Stabilizer/wiki/Stabilizer_v1.0_top_small.jpg)
|
|
|
|
|
2019-04-12 23:43:51 +08:00
|
|
|
## Features
|
|
|
|
|
|
|
|
* dual channel
|
|
|
|
* SPI ADC
|
|
|
|
* SPI DAC
|
2019-05-28 18:15:15 +08:00
|
|
|
* 500 kHz rate, timed sampling
|
|
|
|
* 2 µs latency, unmatched between channels
|
2019-04-12 23:43:51 +08:00
|
|
|
* f32 IIR math
|
|
|
|
* generic biquad (second order) IIR filter
|
|
|
|
* anti-windup
|
|
|
|
* derivative kick avoidance
|
2019-05-28 18:15:15 +08:00
|
|
|
|
|
|
|
## Limitations/TODOs
|
|
|
|
|
|
|
|
* Fixed AFE gains
|
|
|
|
* The IP and MAC address are [hardcoded](src/main.rs)
|
|
|
|
* Expose configurable limits
|
|
|
|
* 100Base-T only
|
|
|
|
* Digital IO, GPIO header, AFE header, EEM header are not handled
|
2019-04-12 23:43:51 +08:00
|
|
|
|
|
|
|
## 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](https://rustup.rs/)
|
|
|
|
* `rustup override add nightly`
|
|
|
|
* `rustup target add thumbv7em-none-eabihf`
|
|
|
|
* `openocd -f stabilizer.cfg` and leave it running
|
|
|
|
* `cargo run --release`
|
2019-05-28 18:15:15 +08:00
|
|
|
|
|
|
|
|
|
|
|
## Protocol
|
|
|
|
|
|
|
|
Stabilizer can be configured via newline-delimited JSON over TCP.
|
|
|
|
It listens on port 1235. [stabilizer.py](stabilizer.py) contains a reference
|
|
|
|
implementation of the protocol.
|