diff --git a/README.md b/README.md index 017ee7e..19b5a0d 100644 --- a/README.md +++ b/README.md @@ -3,42 +3,44 @@ # Stabilizer Firmware +## Hardware + +[![Hardware](https://github.com/sinara-hw/Stabilizer/wiki/Stabilizer_v1.0_top_small.jpg)](https://github.com/sinara-hw/Stabilizer) + +## Applications + +The Stabilizer firmware offeres a library of hardware and software functionality +exposing input/output, timing, and digital signal processing features. +An application can compose and configure these hardware and software components +to implement different use cases. Several applications are provides by default + +### Dual-IIR + ![Flow diagram](stabilizer_pid.svg) -![Hardware](https://github.com/sinara-hw/Stabilizer/wiki/Stabilizer_v1.0_top_small.jpg) - -## Features - * dual channel * SPI ADC * SPI DAC -* 500 kHz rate, timed sampling -* 2 µs latency, unmatched between channels +* up to 800 kHz rate, timed sampling +* down to 2 µs latency * f32 IIR math * generic biquad (second order) IIR filter * anti-windup * derivative kick avoidance -## Limitations/TODOs +### Lockin external -* Fixed AFE gains -* The IP and MAC address are [hardcoded](src/hardware/configuration.rs) -* 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 +### Lockin internal ## Minimal bootstrapping documentation * Clone or download this * Get [rustup](https://rustup.rs/) -* Get [cargo-binutils](https://github.com/rust-embedded/cargo-binutils/) * `rustup target add thumbv7em-none-eabihf` * `cargo build --release` -* Do not try the debug (default) mode. It is guaranteed to panic. +* When using debug (non `--release`) mode, increase the sample interval significantly. + The added error checking code and missing optimizations may lead to the code + missing deadlines and panicing. ### Using Cargo-embed @@ -55,30 +57,24 @@ See https://github.com/sinara-hw/Stabilizer * `openocd -f stabilizer.cfg` and leave it running * `cargo run --release` -[^swd]: Build a cable: connect a standard 8 conductor ribbon with the wires numbered - `1-8` to the pins on the St-Link v2 single row 2.54mm connector as `647513(82)` - (`(i)` marks an unused wire) - and to the [1.27mm dual row](https://www.digikey.de/short/p41h0n) on Stabilizer as `657483x2x1` - (`x` marks an unused pin, enumeration is standard for dual row, as in the - schematic). - It's just folding the ribbon between wires `5` and `6`. The signals on the ribbon - are then `NRST,TDI,TDO,TCK,TMS,3V3,GND,GND`. - ### Using USB-DFU * Install the DFU USB tool (`dfu-util`) * Connect to the Micro USB connector below the RJ45 * Short JC2/BOOT +* Get [cargo-binutils](https://github.com/rust-embedded/cargo-binutils/) * `cargo objcopy --release --bin dual-iir -- -O binary dual-iir.bin` or `arm-none-eabi-objcopy -O binary target/thumbv7em-none-eabihf/release/dual-iir dual-iir.bin` * `dfu-util -a 0 -s 0x08000000:leave -D dual-iir.bin` ### Using ST-Link virtual mass storage +* Get [cargo-binutils](https://github.com/rust-embedded/cargo-binutils/) * `cargo objcopy --release --bin dual-iir -- -O binary dual-iir.bin` or `arm-none-eabi-objcopy -O binary target/thumbv7em-none-eabihf/release/dual-iir dual-iir.bin` * Connect the ST-Link debugger * copy `dual-iir.bin` to the `NODE_H743ZI` USB disk ## Protocol -Stabilizer can be configured via MQTT under the topic `stabilizer/settings/`. Refer to +Stabilizer can be configured via MQTT. Refer to [`miniconf`](https://github.com/quartiq/miniconf) for more information about topics. +A basic command line interface is available in [`miniconf.py`](miniconf.py).