Project to add wired connectivity to a Wahoo Kick by emulating the ANT wireless protocol within an emulated ANT USB stick; the host believes it is communicating to an ANT+ wireless device.
Fed up with wireless connectivity issues, I decided to come up with a solution. The ergo trainer and inertial measurement stems from the work done by Budget Trainer Build
Broader scope for this project is to become an open-source firmware alternative for inertial trainers.
The project is very much a work in progress and not top of my priority - I'm open to collaboration. See the GitHub discussions board for upto date progress.
- Create ANT USB device.
- Emulate ANT control.
- Emulate ANT+ power meter and fitness control profiles.
- CI tests for the above - more as develop.
- Light sensor speed reading: TIM counter input capture, I’ve got most of this just need to test.
- Moment of inertia based power measurement: based on work done by Budget trainer build
- Back EMF resistance control: PID controller based on measured power to setpoint error.
- Spin-down routine: fit curve of energy loss with rps.
- ADC sampling: vsense, emf sense - the ADC is initialised but thinking DMA circular buffer.
- LED routines 💄: basic but also thinking WS2812B for power level indication.
arm-none-eabi-gcc
(version 10 used) and a SWD flashing tool (Black Magic Probe, STLINK or similar) for development.make upload
assumes a Black Magic Probe is being used with Tagconnect TC2030 CTX.- An STM32F4 dev board: I'm using the Feather STM32F4. Will probably make custom PCB at some point to replace Kickr board.
- STM32CubeMX if changing chip setup
make # compile with debug flags
make upload # upload to board via SWD
make attach # attach for GDB debug
I started this project around the Wahoo Kick V4. It should be possible to port this to any moment of inertia based trainer (or otherwise for that matter):
- trainer.h has many defines specific to the trainer: inertia of system, dimensions etc. If you want to develop for another trainer, I suggest we break these into trainer specific header files.
- The timer counter capture (tim.c/.h) setup might require changing depending on the expected frequency of the flywheel speed measurement.
- Inevitably other bits to be added here.