Skip to content

gab-k/RP2040-Decoder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

285 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RP2040-Decoder

Designed to be a low-cost, open-source alternative to commercial DCC decoders, it utilizes the Raspberry Pi RP2040 dual-core microcontroller. The decoder features DCC protocol decoding and command interpretation alongside motor control in a compact 25x20 mm form factor.

Key Features

  • DCC Signal Decoding: Interrupt-based edge detection with full packet/protocol decoding.
  • Motor Control: 128 speed steps with configurable acceleration/deceleration ramping and v_min/v_mid/v_max; closed-loop control for consistent motor speed under varying load conditions.
  • Flexible I/O: 4x transistor-switched outputs and 6x additional GPIOs; all of them PWM capable.
  • CV Configuration: Function mapping and programming track support.
  • Standards Compliance: Implements the most important NMRA (S-9.1, S-9.2.x) and RCN (210, 212, 216) DCC standards.
  • Compact Form Factor: 25x20 mm board size.
  • Integrated Documentation: Comprehensive GitHub Pages documentation covering hardware theory and software implementation.

Architecture Overview

The system uses each of the two ARM Cortex-M0+ cores for separate tasks:

  • Core 0: Signal Processing & Management
    • DCC edge detection and packet decoding.
    • Configuration Variable (CV) management using persistent flash storage.
    • Service Mode (Programming Track) logic and acknowledgment pulse generation.
  • Core 1: Motion Control
    • PID Controller: A discrete-time PID motor controller implementation utilizing based on a bilinear transform formula.
    • Back-EMF Feedback: ADC sampling during PWM-off cycles.
    • Adaptive Control: Gain scheduling for $K_P$ and a startup controller (feed-forward) to overcome static friction.

Hardware Revisions

USB Version

Optimized for ease of use; supports UF2 drag-and-drop flashing and serial logging.

Legacy Version

Revision without USB, one sided assembly, flashed via SWD.

Getting Started

To get started, you will first need the hardware. The different options for acquiring a board are outlined here.

For the software, you have a few options: you can either build it from source or use the ready-to-flash binaries built by the CI pipeline on each release. Flashing the firmware can be done via SWD or, if you are using the USB hardware version, simply by dragging and dropping the file using your regular file explorer.

License

  • Software: MIT License
  • Hardware: CERN Open Hardware Licence Version 2 - Permissive

About

Cost effective DIY DCC Decoder for model railroad locomotives

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 8