pounder_test/README.md

81 lines
3.1 KiB
Markdown
Raw Normal View History

[![QUARTIQ Matrix Chat](https://img.shields.io/matrix/quartiq:matrix.org)](https://matrix.to/#/#quartiq:matrix.org)
[![Continuous Integration](https://github.com/quartiq/stabilizer/actions/workflows/ci.yml/badge.svg)](https://github.com/quartiq/stabilizer/actions/workflows/ci.yml)
[![Stabilizer HITL [Nightly]](https://github.com/quartiq/hitl/actions/workflows/stabilizer-nightly.yml/badge.svg)](https://github.com/quartiq/hitl/actions/workflows/stabilizer-nightly.yml)
2020-06-16 22:54:40 +08:00
2019-03-21 02:32:23 +08:00
# Stabilizer Firmware
2019-03-10 20:08:32 +08:00
2021-03-03 18:38:28 +08:00
## Hardware
[![Hardware](https://github.com/sinara-hw/Stabilizer/wiki/Stabilizer_v1.0_top_small.jpg)](https://github.com/sinara-hw/Stabilizer)
## Applications
2019-05-09 22:05:36 +08:00
2021-03-03 18:38:28 +08:00
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
2019-05-09 22:05:36 +08:00
2021-03-03 18:38:28 +08:00
### Dual-IIR
![Flow diagram](stabilizer_pid.svg)
2019-04-12 23:43:51 +08:00
* dual channel
* SPI ADC
* SPI DAC
2021-03-03 18:38:28 +08:00
* up to 800 kHz rate, timed sampling
* down to 2 µs latency
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
2021-05-06 19:08:10 +08:00
### Lockin
2019-04-12 23:43:51 +08:00
## Minimal bootstrapping documentation
* Clone or download this
* Get [rustup](https://rustup.rs/)
* `rustup target add thumbv7em-none-eabihf`
* `cargo build --release`
2021-05-10 23:31:53 +08:00
* Minimum supported Rust version (MSRV) is 1.51.0
2021-03-03 18:38:28 +08:00
* 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.
2021-02-03 00:33:58 +08:00
### Using Cargo-embed
* Install `cargo-embed`: `cargo install cargo-embed`
* Program the device: `cargo embed --bin dual-iir --release`
### Using GDB/OpenOCD
2019-04-12 23:43:51 +08:00
* Get a recent openocd, a JTAG adapter ("st-link" or some clone) and
2019-05-29 22:25:45 +08:00
everything connected and permissions setup. Most
[Nucleo](https://www.digikey.de/short/p41h4v) boards have a
detachable ST-Link v2 and are cheap.[^swd]
2019-04-12 23:43:51 +08:00
* Get a multiarch `gdb` (or a cross arm gdb and edit `.cargo/config` accordingly)
* `openocd -f stabilizer.cfg` and leave it running
* `cargo run --release`
2019-05-28 18:15:15 +08:00
### Using USB-DFU
* Install the DFU USB tool (`dfu-util`)
* Connect to the Micro USB connector below the RJ45
* Short JC2/BOOT
2021-03-03 18:38:28 +08:00
* 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
2021-03-03 18:38:28 +08:00
* 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
2019-05-28 18:15:15 +08:00
## Protocol
2021-03-03 18:38:28 +08:00
Stabilizer can be configured via MQTT. Refer to
[`miniconf`](https://github.com/quartiq/miniconf) for more information about topics.
2021-03-03 18:38:28 +08:00
A basic command line interface is available in [`miniconf.py`](miniconf.py).