33549793ca
341: Feature/telemetry r=ryan-summers a=ryan-summers This PR fixes #149 This PR adds the following: * A `SystemTimer` used for RTIC scheduling (required for schedule periods > ~2 seconds) * A refactor of the `src/net` directory * Addition of network stack sharing via proxy (identical to implementation from `shared-bus`) * Addition of a telemetry task This must be merged after #352 Future Work: * move `src/net/shared.rs` into `embedded-nal` or some other separate crate. * Investigate removal of shared network stack by making smoltcp sockets owned and interrupt-safe Co-authored-by: Ryan Summers <ryan.summers@vertigo-designs.com> |
||
---|---|---|
.cargo | ||
.github | ||
ad9959 | ||
doc | ||
dsp | ||
hitl | ||
src | ||
.gitignore | ||
.rustfmt.toml | ||
CHANGELOG.md | ||
Cargo.lock | ||
Cargo.toml | ||
Embed.toml | ||
LICENSE | ||
README.md | ||
cargosha256-dual-iir.nix | ||
memory.x | ||
miniconf.py | ||
openocd.gdb | ||
requirements.txt | ||
stabilizer.cfg | ||
stabilizer_pid.png | ||
stabilizer_pid.svg |
README.md
Stabilizer Firmware
Hardware
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
- dual channel
- SPI ADC
- SPI DAC
- 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
Lockin
Minimal bootstrapping documentation
- Clone or download this
- Get rustup
rustup target add thumbv7em-none-eabihf
cargo build --release
- 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
- Install
cargo-embed
:cargo install cargo-embed
- Program the device:
cargo embed --bin dual-iir --release
Using GDB/OpenOCD
- Get a recent openocd, a JTAG adapter ("st-link" or some clone) and everything connected and permissions setup. Most Nucleo boards have a detachable ST-Link v2 and are cheap.[^swd]
- Get a multiarch
gdb
(or a cross arm gdb and edit.cargo/config
accordingly) openocd -f stabilizer.cfg
and leave it runningcargo run --release
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
cargo objcopy --release --bin dual-iir -- -O binary dual-iir.bin
orarm-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
cargo objcopy --release --bin dual-iir -- -O binary dual-iir.bin
orarm-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 theNODE_H743ZI
USB disk
Protocol
Stabilizer can be configured via MQTT. Refer to
miniconf
for more information about topics.
A basic command line interface is available in miniconf.py
.