Skip to the content
PCBKitNew board
2 layers39.2 × 110 mmPulses plus submin, the printed circuit board in 3D

Turing Machine Expander

Size
39.2 × 110 mm
Copper layers
2
Thickness
1.6 mm
Parts
87
Nets
89
Pads
286
Tracks, vias
556, 113
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
15 Aug 2026
Updated
27 Sep 2026

Overview

Pulses plus submin is an open-source printed circuit board by MissingMileModular, from the MissingMileModular/Doubleplus_Pulses repository on GitHub. It is a 2-layer board of 39.2 × 110 mm with 87 parts on 89 nets, routed with 556 tracks and 113 vias.

It is built around the CD4050BD, CD40106 and MMBT3904. Its parts include 43 diodes, 21 resistors, 10 switches, 5 connectors and 4 capacitors.

Main components

3

README

README.md

Pulses Plus

A performance-oriented gate router for the Music Thing Turing Machine. Eight pulse channels, each switchable to one of two merge buses or off; each bus computes the OR or the AND of whatever is routed to it, chosen live from the panel.

Pulses Plus front panel, v4

Built and tested. 8 HP, 128.5 × 40.16 mm.

It sits alongside a stock Pulses expander rather than replacing it, taking its signals from the Turing Machine's 16-pin expander ribbon and passing that ribbon through so other expanders can still be chained downstream.

The stock Pulses gives you seven fixed outputs plus four hard-wired AND combinations. Those AND outputs are the musical ones — ANDing two shift-register taps gives a sparser, related rhythm. This generalises that: any subset of the eight bits, OR'd or AND'd, chosen by hand, live. The four fixed ANDs become a strict subset of what the switches can do.


What's here

pulses_plus_submin.kicad_schschematic — 87 placed components
pulses_plus_submin.kicad_pcbmain board
pulses_plus_submin_panel_v4.kicad_pcbcurrent panel
pulses_plus_submin_panel.kicad_pcbv1 panel — the geometry source build_panel.py inherits holes from
pulses_plus_submin.pretty/project footprints — toggle, jack, LED, panel holes
switch_fix.kicad_symthe DPDT symbol with the pin numbering the footprint expects
3d/3D models the footprints reference
BOM.mdbill of materials, DigiKey and JLCPCB/LCSC columns
BOM_DigiKey.csvthe same BOM as a DigiKey cart upload
gerbers/fab packages — see below
tools/build_panel.pyregenerates the panel artwork
PANEL_STYLE_v1.12.mdthe panel house style
docs/pulses-plus-design.mdfull design write-up, including the diode-leak analysis and why 6 HP was abandoned
docs/sw-t2-4x-b-a2-ma2-data-sheet.pdfTaiway 200-MDP3 toggle datasheet

Which gerbers to order

gerbers/ accumulated every revision that was sent out. The panel to order is gerbers/panelv4.rar. For the board:

  • gerbers_v2/ — current plot of pulses_plus_submin_v2.kicad_pcb, including C5/C6 (see the erratum below). Not yet fabbed.
  • gerbers/controlv2.zip — what was actually fabbed and built. Boards from this package predate C5/C6 and need the two-capacitor rework.

The loose .gbr/.drl files at the top of gerbers/ are the most recent plot of the main board and the v1/v2 panels, kept unzipped for inspection.


Erratum — ghost triggers on edge-sensitive gate inputs

Any board built without C5/C6 needs a two-capacitor rework.

Symptom. On the step after a real trigger — a step where the bus should be silent — a downstream envelope fires an extra time. The bus LED never visibly flashes, and the same envelope behaves correctly on the Turing Machine's own pulse output and on a stock Pulses. A Kassutronics ASR is the known case; the affected class is any gate input that triggers on the rising edge at a low threshold (the ASR's fires from ~+1.2 V).

Cause. The Turing Machine's expander bits are stage AND clock, and the clock's rising edge opens that AND before the shift register has finished shifting — so the ribbon briefly presents the previous step's pattern. This module's two cascaded CD40106 Schmitt buffers then regenerate that soft sub-µs bump into a sharp, near-full-amplitude micro-gate. Full analysis in docs/pulses-plus-design.md.

Fix. Tack a 4.7 nF ceramic on top of R15, and another on top of R16. Those 1206 pads are already BUSA_SEL→GND and BUSB_SEL→GND on the back of the board, so there are no trace cuts, no lifted pins, and it is fully reversible. Verified on hardware.

  • Do not use a smaller value. 1 nF was measured insufficient; 2.2 nF computes marginal.
  • Multing the output is not a workaround. It appears to help and then stops helping — cable capacitance is an order of magnitude too small to filter this.
  • The fix is in the v2 project files (pulses_plus_submin_v2.*) as C5/C6. The v1 files do not have it.

How it works

Each channel's DPDT ON-OFF-ON toggle throws left to bus A, right to bus B, or centre for off. Both poles are used: pole 1 carries only the OR diodes, pole 2 only the AND diodes. That separation is the one non-obvious constraint in the design — sharing a pole leaks current through the unselected bus and pins its OR net high.

Per bus, a second toggle picks OR, MUTE or AND. Both nets are computed continuously and in parallel, so the mode switch only selects which one reaches the output buffer and the 32 merge diodes never switch. Centre-off leaves the buffer input pulled low, which is the mute.

The EXT jack is switched (normalled): unplugged, buffered BIT8 feeds channel 8; plugged, an external gate takes its place through a transistor and Schmitt stage that squares up whatever amplitude arrives.

Full write-up: docs/pulses-plus-design.md.

Using it

The two buses are two independent reads of the same shift register. Whatever either one plays is built from the same eight bits on the same loop, so they cannot drift apart — but give them different channels, or put one in AND and the other in OR, and they come out at different densities. Related, never identical. Most of the musical mileage is in that gap.

Gates on A, note changes on B

The patch this turned out to be best at, and not one it was designed for:

  1. OUT A → your envelope or VCA gate. A few channels to bus A in OR — a busy, rhythmic gate stream.
  2. OUT B → a quantizer's trigger or sample input, with the Turing Machine's CV output feeding that quantizer's CV input. A different, smaller set of channels to bus B, in AND for something sparser again.

The quantizer only samples when bus B fires, so the note is held across every gate bus A produces in between. A melody moves on its own slow rhythm while the gates articulate underneath — and because both rhythms are subsets of one register, the note changes land on beats the gate pattern already stresses. It reads as a phrase, not as two voices running at once.

Being a Turing Machine underneath, the loop-length and randomness controls then act on the whole thing at once: lock the register for a repeating riff, open it a crack and the melody mutates while staying in its scale.

Pulse width passes straight through. The board is purely combinational: it merges what arrives on the ribbon and never looks at the clock. It does not need to — the Turing Machine's expander bus already carries each bit ANDed with the clock, so the bits arrive as pulses, and the diode merge preserves their width. Feed the TM a narrow clock and the outputs are narrow; feed it a wide one and they are wide, all the way to OUT A and OUT B.

So an AND that is true on three consecutive steps gives three pulses, one per step — each re-triggering the envelope or re-pinging the quantizer, rather than merging into one long gate. The note changes on every step the condition holds, which is why choosing a condition that comes true rarely is what makes the melody move slowly.

Things to reach for:

  • B in AND with two or three channels is the sweet spot. AND of several bits comes true rarely, which is what you want from a melody that moves every few bars rather than every step.
  • MUTE on B freezes the pitch without touching the gate pattern — drop the melody in and out by hand mid-take. That is what the centre position is for.
  • The EXT jack earns its keep here. Patch an outside rhythm into channel 8 and AND it into bus B, and the note only changes where your own pattern and the Turing Machine agree — a melody keyed to something the TM knows nothing about.
  • An AND bus with nothing routed to it sits high, held there by its 10k pull-up rather than driven by any bit, so it never pings anything. Route at least one channel to a bus you want triggers from.

Key parts

10 × Taiway 200-MDP3 sub-miniature DPDT ON-OFF-ON toggles (ø4.95 bushing), 2 × CD4050 buffers, 1 × CD40106 Schmitt, 33 × 1N4148, 10 × 3 mm LEDs, 3 × Thonkiconn jacks — J3 must be the switched variant — and 2 × 2×8 IDC headers for ribbon in and thru. See BOM.md.


Panel

The current panel is v4, pulses_plus_submin_panel_v4.kicad_pcb — white silkscreen on black soldermask, drawn to PANEL_STYLE_v1.12.md.

It is generated. tools/build_panel.py reads the v1 panel and regenerates only the artwork, inheriting every control-hole position, so the style guide's one non-negotiable rule — hole positions are inherited, never computed — holds by construction rather than by inspection:

sh
python3 tools/build_panel.py

Mounting is four 6.4 × 3.2 mm obround slots on Edge.Cuts, horizontal for ±1.6 mm of slide. kicad-cli pcb drc reports zero violations. Zones refill on open — refill before plotting.

Reading the panel: a ring means signal leaves there, so the two output jacks are the only closed circles. A/B beside each toggle are throw directions, not names. The mode stack is AND up, MUTE centre, OR down. Names sit below the thing they name.


Related repositories

  • Doubleplus_Pulses_VCV — a VCV Rack 2 port of this module. It reconstructs the Turing Machine's shift register locally, so it runs without the hardware.
  • Turing-Pulse-Expander — the archive: Tom Whitwell's original Rev 2 expander, plus the superseded studies this design grew out of.

Licence

CC BY-NC-SA 4.0 — see LICENSE.

Parts

87
QtyValueFootprintReferences
331N4148Diode_SMD:D_SOD-123D1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +17
104k7Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR1, R2, R3, R4, R5, R6, R7, R8, R9, R10
10LEDLED_THT:LED_D3.0mmLED1, LED2, LED3, LED4, LED5, LED6, LED7, LED8, LED9, LED10
8DPDT ON-OFF-ONpulses_plus_submin:SW_200_MDP3_DPDTSW1, SW2, SW3, SW4, SW5, SW6, SW7, SW8
610kResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR11, R12, R13, R14, R19, R21
3100nCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC1, C2, C3
21MResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR15, R16
21kResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR17, R18
2CD4050Package_DIP:DIP-16_W7.62mmU1, U2
110uCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC4
122kResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR20
1CD40106Package_DIP:DIP-14_W7.62mmU3
1CHAIN THRUConnector_IDC:IDC-Header_2x08_P2.54mm_VerticalJ2
1EXTpulses_plus_submin:Thonkiconn_PJ301MJ3
1MMBT3904Package_TO_SOT_SMD:SOT-23Q1
1OR/MUTE/AND Apulses_plus_submin:SW_200_MDP3_DPDTSW9
1OR/MUTE/AND Bpulses_plus_submin:SW_200_MDP3_DPDTSW10
1OUT Apulses_plus_submin:Thonkiconn_PJ301MJ4
1OUT Bpulses_plus_submin:Thonkiconn_PJ301MJ5
1PULSES IN EITHER HEADERConnector_IDC:IDC-Header_2x08_P2.54mm_VerticalJ1

Questions

How big is the Pulses plus submin PCB?

It measures 39.2 × 110 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Pulses plus submin use?

87 parts, built around the CD4050BD, CD40106 and MMBT3904. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Pulses plus submin KiCad files?

From the MissingMileModular/Doubleplus_Pulses repository on GitHub, at the commit this page was made from: the board is pulses_plus_submin.kicad_pcb and its schematic pulses_plus_submin.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Pulses plus submin design in my own project?

Its repository states no licence, so its author keeps all rights: ask MissingMileModular before reusing the design.

Similar boards

  • 2 layers68.6 × 53.3 mmPIDheaterUnoShield, the printed circuit board in 3D

    PIDheaterUnoShield

    diegodierick/Heater-shield

    This repository contains code and design files for a four channel Arduino based heater.

    40 parts1
  • 4 layers90.2 × 116.8 mmH732 expansion, the printed circuit board in 3D

    H732 expansion

    lisasnt/Position-and-Temperature-Controller

    Embedded Systems BSs course Project

    60 parts
  • 2 layers203.2 × 76.2 mmMotherboard, the printed circuit board in 3D

    Motherboard

    tuftselectricracing/FormulaHybrid2020

    Files and such for Hormula Hybrid 2020

    74 parts
  • 2 layers97 × 69.5 mmStm32, the printed circuit board in 3D

    Stm32

    eddyem/stm32samples

    Code samples and ready projects based on bare-metal STM32

    103 parts208
  • 2 layers65 × 100 mmJOVE, the printed circuit board in 3D

    JOVE

    minisystem/JOVE

    Eurorack multimode filter inspired by the Roland Jupiter-6

    156 parts109
  • 2 layers30 × 59.9 mmEsp32-wled level shifter, the printed circuit board in 3D

    Esp32-wled level shifter

    michd/esp32-wled-level-shifter

    PCB connecting ESP32 dev board and level shifter for hookup to 5V APA102 LED strip

    70 parts6