Hardware
PCB design, board bring-up, and physical builds — mostly for the OpenServoCore smart servo platform.
Current
CH32V006 Servo Controller Dev Board (Rev. B) Bring-Up - One Trace Cut for a Fresh-Chip Bootstrap
When the first Rev B board came back from PCBWay, I hooked up the WCH-LinkE, fired up the debugger, and tried to connect. The debugger reported no target at all. The board was clearly powered (3.3 V rail LED on, no heat, no smoke), and the LinkE itself was alive, but whatever was on the other end of the SWD lines wasn’t answering. Unlike Rev A where I failed my way to debug success, I didn’t actually have to probe to know what was going on this time. It immediately hit me that the Rev B schematic puts nRST and OPN2 on the same physical pin, and is tied to ground. This means the chip is held in reset forever, no way of changing nRST to GPIO via LinkE… If you’re new here, OpenServoCore is my effort to turn cheap MG90S-class servos into networked smart actuators with sensor feedback, cascade control, and a DYNAMIXEL-style TTL bus. The CH32V006 dev board is the firmware development platform for this project. Rev B is the second revision, announced in April and fabricated and assembled by PCBWay as a sponsored run.
CH32V006 Servo Controller Dev Board (Rev. B) Designed
Rev A took board surgery to power on. Then I hit an RX line that refused to go LOW . Then I noticed a third defect I never wrote up: the differential current sensing on the OPA wasn’t actually differential. Rev B is the respin that fixes all three, plus a handful of features I was going to need anyway. If you’re new here, OpenServoCore is my effort to turn cheap MG90S-class servos into networked smart actuators with sensor feedback, cascade control, and a DYNAMIXEL-style TTL bus. The CH32V006 dev board is the firmware development platform for this project. Rev B is the second revision of that board, routed this week and ready to fab.
CH32V006 Servo Controller Dev Board (Rev. A) - UART RX Stuck High (TTL Buffer / TX_EN Gotcha)
RX wouldn’t go low. The scope showed a perfectly shaped square wave, riding on top of 3.3 V with a whopping 180 mV of swing. Something was holding the line near the rail so hard my USB UART adapter could only nudge it down a couple hundred millivolts. If you’re new here, OpenServoCore is my effort to turn cheap MG90S-class servos into networked smart actuators with sensor feedback, cascade control, and a DYNAMIXEL-style TTL bus. tinyboot is the Rust bootloader for those boards, and this post is what happened the first time I tried to bring it up on the Rev A CH32V006 dev board. The culprit turned out to be the half-duplex TTL front-end. TX_EN isn’t a transmit enable, it’s a mux select, and with it low the buffer was actively pushing 3.3 V back into RX through a 24 mA CMOS output stage. Inside: scope photos, schematic walkthrough, the absurd workaround (assert TX_EN to receive), and why Rev B gets a jumper instead of a firmware fix.
CH32V006 Servo Controller Dev Board (Rev. A) First Spin - Lessons from a Faulty Revision
Three embarrassing mistakes, two failed surgeries, one working board. The 3.3V rail sat at 0.84V, I fed reverse voltage into a $0.22 MCU across multiple power-on cycles, and somehow it still came back to life. If you’re new here, OpenServoCore is my effort to turn cheap MG90S-class servos into networked smart actuators with sensor feedback, cascade control, and a DYNAMIXEL-style TTL bus. The CH32V006 dev board is the firmware development platform for this project. This is the first-spin bringup of Rev A, generously sponsored by PCBWay for both PCB and assembly. What’s inside: PCBWay catching footprint and BOM mistakes I missed (and KiCad’s DRC missed), a wrong house number that sent the boards to my neighbor, mislabeled test points that fed 3.3V into the EN pin, the moment I realized I’d swapped VDD and VCC on the schematic, and an hour of magnet-wire surgery under a magnifier to bring one board back. The CH32V006 is, it turns out, surprisingly tough.
CH32V006 Servo Controller Dev Board - Initial Design
Swapping a $1.85 STM32F301 for a $0.22 CH32V006 sounds like a one-line BOM edit. It turned into the most complex board I’ve designed yet, weeks in KiCad, and several rounds of Reddit PCB review before I felt good about sending it out. If you’re new here, OpenServoCore is my effort to turn low-cost servos like the MG90S into smart actuators with cascade control and DYNAMIXEL-style communication over single-wire UART (DXL TTL). This board is the firmware development platform for that move, and the first dev board to actually exercise the new MCU end to end. Inside: three-way power ORing for USB-C, bench supply, and 1S/2S LiPo direct, low-side current sensing through CH32V006’s internal PGA op-amps, motor terminal voltage sensing for back-EMF, an NTC to replace the STM32’s internal temperature sensor, single-wire DXL TTL through a 74LVC2G241 buffer, and probably more test points than strictly necessary. Off to PCBWay, since JLCPCB was out of CH32V006F8P6 the day I hit submit.
Thanksgiving Night Build: Dual ITR1204 IR Sensor Test Module
The house got quiet on Thanksgiving night, so I opened KiCad and finally started the encoder board that’s been sitting in my backlog: a $0.60, dual-channel reflective IR sensor that’s the first step toward closing the loop on cheap servos. If you’re new here, OpenServoCore is my effort to turn cheap MG90S-class servos into networked smart actuators with sensor feedback, cascade control, and a DYNAMIXEL-style TTL bus. To get there I need a reliable, low-cost way to measure motor motion, and this board is Part 1 of that: a tiny ITR1204-based PCB that handles the detection stage. Part 2 will be the MCU and comparator front-end once these come back from fab. What’s in this post: the schematic and 4-layer layout, a full walk through four operating modes (5 V and 3.3 V, digital and analog) with the math behind each resistor pair, a BOM that lands at roughly $0.60 per board, and JLCPCB ordering notes for both bare-PCB and full PCBA paths. The board is intentionally retunable by swapping two resistor pairs, so the same footprint serves as a quadrature edge sensor or a direct-to-ADC analog encoder.
OpenServoCore - Open-Source Smart Servo Platform (CH32V006)
Democratize Robotics For Everyone