Faze4 Fully 3D-Printed Six-Axis Arm: Cycloidal Gearbox, Assembly and Two-Layer Control Stack
📌 What this guide covers
Faze4 comes from the same team as PAROL6 (Source Robotics / Petar Crnjak), but it takes a very different route:instead of simplifying the mechanics to cut cost, it takes the core mechanism of an industrial arm —the cycloidal pin-wheel reducer— recreates it by 3D printing, and packs one into every joint. The result is roughly 1000 parts, about 15 kg, with all cabling routed internally, and looks and behaves close to a small industrial arm.
Why it is worth building:Low backlash + maintainability. A cycloidal drive meshes many teeth at once and resists shock loads by nature. Printed in plastic, when the disc wears or breaks you simply print another one — something you cannot do with an off-the-shelf actuator module.
This guide runs in robot data → cycloidal principle → printing → assembly → power distribution → control stack — six sections. Accept one premise up front:the time cost of this machine is in assembly (measured in weeks), not in printing.
📐 Section 1: Robot Data (Copy These Down Before Writing Code)
| Data | Value |
|---|---|
| L1 / L2 | 0.23682 m / 0.32 m |
| L3 / L4 / L5 | 0.0735 m / 0.2507 m / 0.057 m |
| J1 | 15:1 cycloidal + 5:3 timing belt = 25:1 |
| J2 / J3 | 27:1 cycloidal / 15:1 cycloidal |
| J4 | 11:1 cycloidal + 28:26 timing belt ≈ 11.85:1 |
| J5 / J6 | 11:1 cycloidal + 1:1 timing belt / 19.19:1 planetary |
| Timing belts | J1 HTD 5M 490 mm (needs a bearing tensioner), J4 HTD 5M 430 mm (no tensioner needed), J5 HTD 5M 285 mm (needs a bearing tensioner), all 10 mm wide |
This table is the baseline for everything that follows: the controller needs it, the simulation needs it, and it must be updated whenever you change the mechanics. The team also provides Faze4_Work_Envelope.m scripts that compute the workspace envelope —run them before planning a trajectory, so the arm does not drive into itself.
🌀 Section 2: Why the Cycloidal Pin-Wheel Drive Has Low Backlash
How it works: an eccentric shaft drives the cycloidal disc in an eccentric motion; the outer teeth of the disc engage several pins of the pin ring simultaneously, and the tooth profile converts the eccentric motion into low-speed co-rotating output. It is cheap, shock resistant and gives a large reduction ratio; compared with a harmonic drive its drawbacks are slightly larger volume and tighter manufacturing tolerances.
- Sources of backlash: tooth-profile accuracy of the cycloidal disc, clearance between pins and rollers, and the fit of the output mechanism. So print quality of the cycloidal disc directly determines joint feel and noise.
- Maintainability: when it wears or breaks, printing a new disc and swapping the rollers restores it — the biggest advantage over ready-made actuator modules.
- Parametric: the official files include
cyclo_disk_STEP_files.zip, letting you tune the tooth profile to your needs — always re-check the clearances afterwards.
🖨️ Section 3: Printing Strategy
- Dial in your printer using the official 3D printing guide: it covers materials, printers and print settings. The total printed volume is large, so print one or two critical parts first to verify dimensional accuracy and interlayer strength, then batch the rest.
- Print several cycloidal discs in one run: pick the set with the tightest dimensions — a practical way to reduce backlash. Even batches from the same printer vary slightly, so spare parts never go to waste.
- Stock extra bearings and screws: the project explicitly warns that bearings and screws can be damaged or ruined during assembly. Buy screws locally (cheap and you control the quality).
- About 1000 parts in total: printing is only the start. Batch prints per joint module and sync them with your assembly pace — far less chaotic than printing everything first and assembling afterwards.
🔧 Section 4: Assembly (Modules First, Then the Whole Arm)
🔌 Section 5: Distribution PCB and First Power-Up
- Use the V2 distribution PCB: upstream states clearly that V1 is obsolete and not recommended. Check the BOM and reference designators before ordering boards, and run continuity and short checks before applying power.
- First power-up in three steps: ① supply power without motors connected and verify every rail voltage; ② connect the motors but send no motion commands, checking driver LEDs and standby current; ③ jog one joint at a time through small angles, verifying direction and limits axis by axis.
- Calibrate the zero position joint by joint: this machine has many joints and large reduction ratios, so calibration error gets amplified. To verify: rotate J1 by 90°, measure the actual end displacement and compare it with the kinematics result — a large deviation means the reduction ratio or direction parameter is wrong.
📦 V2 Distribution PCB Kit (redrawn by LateAI · ready for fabrication)
The official repository ships the V2 Gerbers and a PDF schematic; every designator and net name is buried in the drawings, so any change means hunting through the PDF.This pack is a V2 netlist plus companion files, rebuilt by checking Schematic.PDF pin by pin: 142 components, 105 nets and 429 pin connections, all in machine-readable BOM and netlist form — easy to script against and to version-diff, and usable with the bundled extension to regenerate schematic + PCB in one click inside EasyEDA Pro.
What is in the pack
| File | Description |
|---|---|
| bom.csv | 142 components with designator / model / prefix: Teensy 3.5, 24 × BSS138, 84 resistors, 18 diodes, 13 terminals |
| netlist_v2.csv | Plain-text netlist: one line per net → pin pair, easy to review by hand and to version-diff |
| netlist_v2.json | Structured netlist: board outline, component table, 105 nets, 429 pin connections, plus notes on items to double-check |
| netlist_v2.net | Protel2 netlist: import all 105 nets in EasyEDA Pro via File → Import → Netlist (footprints need reassigning) |
| board_outline.json | Board outline: 115 × 195 mm, 2 layers |
| schematic_v2.png | High-resolution V2 schematic bitmap (3998 × 3000 original) — readable without an EDA tool |
| faze4-v2-builder-1.0.2.eext | EasyEDA Pro extension package: one click to generate schematic + PCB (outline / mounting holes / auto layout and routing) |
| README.md | Extension install and usage notes, plus parameters such as trace widths |
How to use it
- You just want boards made: order parts from
bom.csvand solder by designator; the outline is115 × 195 mm, 2 layers, 1 oz copper, green solder mask / white silkscreen is enough. - You want to edit the design yourself:Use EasyEDA Pro throughout. Install the bundled
.eextextension (steps below), then click menu Faze4 V2 → ① Generate Schematic,② Generate PCB to redraw automatically; without the extension, import the includednetlist_v2.netvia the Pro version's File → Import → Netlist (select typeProtel2) to bring all 105 nets into the PCB. - Verify before committing to production: see the 3 items to review below — those three have no unique answer in the PDF, so sensible defaults were assumed.
Install the extension and redraw in one click (EasyEDA Pro)
faze4-v2-builder-1.0.2.eext. A locally signed package warns about an untrusted source — allow it, then restart the application.Note: this extension only uses internal EasyEDA APIs — no need to enable external interaction (that option is for extensions that need network access or talk to external programs; it is also settable per extension in Extension Manager).
Faze4_V2_distribution_board → new schematic → from the top menu click Faze4 V2 → ① Generate Schematic. It places all 142 components (Teensy 3.5 / 24×BSS138 / 84 resistors / 18 diodes / 13 terminals), stubs out every pin and assigns net names — all 105 nets and 429 connections complete automatically. If you have no project yet, use ③ Create Project and Generate Schematic from the same menu for a one-shot setup.autoLayout() → autoRouting().component not found: xxx — swap in your own part manually; net labels are already applied, so replacing parts loses no connections.extension.json and main.js), then click Reload after each change. Outline / hole / trace-width parameters live in main.js at the top of CFG.3 items to review
- Power pins of the KF301-6P driver terminal: assumed
1=PUL 3=DIR 5=EN,2/6=GND,4=+5V. - 21P arm harness: the 9 inputs use odd pins, even pins carry +24V.
- +24V source: connected to the 4P power terminal.
📥 Controller / Distribution Board Production Files (Full V1 / V2 / V3 Set)
The pack above is the netlist and one-click redraw tooling; this section lists every production file for all three board revisions, one download at a time (assembly drawing / drill drawing / pick-and-place / BOM / Gerber / STEP / firmware / netlist and sourcing tables). For the complete connection data, open the matching interactive page — click a net to see its pins, click a component to see its designator; the data there matches these files exactly.
V2 · Distribution Board (current upstream revision · recommended)
| File | Size | Description |
|---|---|---|
| faze4_v2_assembly_drawing.pdf | 36 KB | Assembly drawing, A4 at 1:1, top / bottom designators + values, for SMT and hand-soldering checks |
| faze4_v2_drill_drawing.pdf | 39 KB | Drill drawing with hole-size table (Ø0.80×36 / Ø0.99×48 / Ø1.00×20 / Ø1.20×76, 180 holes in total) |
| faze4_v2_nc_drill.zip | 1 KB | NC Drill (Excellon .drl) + board outline Gerber (Edge.Cuts) |
| faze4_v2_cpl.csv | 4 KB | Pick-and-place CPL file for SMT assembly |
| faze4_v2_bom.csv | 1 KB | BOM, 142 pieces / 13 line items |
| faze4_v2_kicad.zip | 87 KB | KiCad 8 project (PCB + schematic + footprints / symbols libraries) |
| faze4_v2_schematic.pdf | 774 KB | Schematic (upstream official PDF) |
| faze4_v2_board_dimensions.pdf | 545 KB | Board dimensions / designator drawing (upstream official PDF) |
| faze4_v2_step.zip | 167 KB | 3D STEP model (upstream) |
| faze4_v2_pins.h | 1 KB | FAZE4_V2_PINS.h pin definition header |
| faze4_v2_stepper_move_test.ino | 2 KB | V2 stepper test firmware (Teensy) |
V1 · Distribution Board (obsolete · not recommended upstream · reference only)
| File | Size | Description |
|---|---|---|
| faze4_v1_gerber.zip | 99 KB | Complete Gerber fabrication files (2 layers), official upstream release — ready to order as-is |
| faze4_v1_nc_drill.zip | 3 KB | NC Drill file |
| faze4_v1_pick_and_place.zip | 6 KB | Pick-and-place file (for SMT assembly) |
| faze4_v1_assembly_drawing.pdf | 54 KB | Assembly drawing (upstream) |
| faze4_v1_drill_drawing.pdf | 67 KB | Drill drawing (upstream) |
| faze4_v1_stackup.pdf | 393 KB | Stack-up report |
| faze4_v1_bom.xlsx | 11 KB | BOM (upstream original xlsx) |
| faze4_v1_bom.pdf | 207 KB | BOM(PDF) |
| faze4_v1_bom.csv | 2 KB | BOM (CSV, includes Digikey links) |
| faze4_v1_cpl.csv | 3 KB | Pick-and-place CPL file (CSV) |
| faze4_v1_kicad.zip | 279 KB | KiCad 8 project (PCB + schematic + libraries) |
| faze4_v1_step.zip | 3.3 MB | 3D STEP model |
| faze4_v1_firmware_Arduino_GUI_code.ino | 27 KB | V1 low-level firmware (source of this page's pin map, port1..port24) |
| faze4_v1_firmware_test_code_1.0.ino | 57 KB | V1 test firmware |
| faze4_schematic_v2_reference.pdf | 774 KB | Schematic (V2 revision, bundled with the V1 pack, for reference only) |
faze4_v2_pins.h and faze4_v2_stepper_move_test.ino — the two V2 firmware files are also available in the V1 pack, and listed in the V2 table above.V3 · Teensy 4.1 Controller Board (site design draft · not fabricated yet)
| File | Size | Description |
|---|---|---|
| faze4_v3_netlist.csv | 5 KB | Pin-level netlist, 151 nets / 466 connections (net, ref.pin); the reference when drawing the schematic in EasyEDA, and the baseline for a "compare netlist" check afterwards |
| faze4_v3_bom_jlc.csv | 3 KB | JLCPCB sourcing BOM, 33 line items with verified LCSC part numbers (Comment / Designator / Footprint / LCSC Part #) — import straight into PCBA "BOM sourcing" |
| faze4_v3_design_pack.zip | 3 KB | The two CSVs above bundled together for a single download |
🕹️ Section 6: Control Stack (Teensy Firmware + Matlab / ROS Upper Layer)
| Layer | Content |
|---|---|
| Low level | Runs on Teensy. Upstream splits the firmware into three variants: Matlab live-script testing,Matlab trajectory planning,ROS. Decide which upper layer you want first, then flash the matching one. |
| Upper layer | Either Matlab (live scripts for testing and trajectory planning — quick to start, good for validating the mechanics) or ROS (planning and visualisation). |
| Model | An official URDF is provided (URDF_FAZE4); import it into ROS / a simulator to check self-collision and reachability; use the official L1~L5 link dimensions. |
| Tools | Faze4_Work_Envelope.m: computes the workspace envelope — run it before any planning. |
This Teensy low level + Matlab / ROS upper layer split is the highlight of its architecture: the low layer owns real-time behaviour and servo control, the upper layer owns trajectory and planning, joined by a clean interface — simulate every new motion before running it on hardware, which saves a lot of disassembly time.
🎯 Bonus · Real 3D Trajectory Lab (explore it in your browser before building)
Building it takes roughly 1000 parts and weeks of assembly, but its kinematics can be explored right now in a browser: the Faze4 Real 3D Trajectory Lab uses real parts converted from the official STLs (base + six joint links, including the external shape of the in-joint cycloidal reducer) and solves 6-axis inverse kinematics live in the page — the end effector actually traces sine / circle / triangle on a vertical drawing board, with all six joint angles and the tracking error shown alongside; drag the target point and the whole arm repositions instantly.
q_traj.npy; feed it as a q_des schedule into the Drake Real Dynamics Guide PD + gravity-compensation controller and you will see whether the machine, under real hardware constraints, can track the same trajectory. One is pure geometry, the other includes dynamics — read them side by side and you can predict which motions will hit joint limits or torque ceilings before you build anything.🚧 Pitfalls to avoid
- Most of the time goes into assembly: progress as joint module → per-module acceptance → whole arm; do not assemble everything in one go.
- Print several cycloidal discs per run: keep the best-fitting set to noticeably cut backlash and noise.
- Use the V2 distribution PCB: upstream clearly marks V1 as not recommended; do not cut that corner to save a fabrication fee.
- Do not tension the J4 belt: adding a tensioner there only increases load.
- Route cables internally during assembly: it is what keeps the arm looking clean, and reworking it afterwards is near impossible.
- 15 kg / 1000 parts: plan your bench, supports and load capacity as you would for industrial equipment, not a desktop toy.
- Keep the URDF in sync first: if you change the mechanics without updating the URDF, simulation and hardware diverge and planning will fail.
- Inconsistent licence labels: defer to the LICENSE file in the repository and ask the author before commercial use.
- Want to weigh effort against payoff first: PAROL6 from the same team takes a similar approach, with a livelier community and more mature documentation — read up before deciding.
🔗 Official resources
- Official documentation siteNine chapters: design decisions / assembly / printing / electronics / code / first power-up / robot data
- Robot DataL1~L5 links, per-joint reduction ratios, timing belt specs
- Printing guideMaterials, printers and print settings
- Electronics · distribution PCB V2 and first power-upParts list, wiring and power-up procedure
- Code · firmware and upper-layer notesHow the three Teensy firmware variants differ
- GitHub · Faze4-Robotic-armSTL_V2 / cycloidal disc STEP / BOM / assembly manual / distribution PCB
- Same team · PAROL6A similar six-axis arm from the same author, with a more active community
❓ FAQ
Does a 3D-printed cycloidal gearbox really work?
Yes — that is Faze4's core premise. It gives low backlash, shock resistance and maintainability, at the cost of accuracy depending on print quality and assembly tolerance, and less load capacity than steel harmonic / RV reducers. It suits research, teaching and prototyping, not production-line duty.
How large a printer do I need?
The official printing guide recommends printers and settings — follow it. The key point: large parts (the arm links, for instance) need either a big build volume or a split-print-plus-join design. Before you start, cross-check the largest parts in the list against your build volume.
There are three Teensy firmware variants — which should I flash?
It depends on your upper layer. Going Matlab → flash one of the two Matlab variants (live-script testing / trajectory planning); going ROS → flash the ROS one. Flashing the wrong one means the upper layer simply will not run — the single most common place newcomers get stuck.
Faze4 or PAROL6?
Same team, similar thinking. Faze4 is the harder-core option: fully 3D printed, in-joint cycloidal reducers, roughly 1000 parts; PAROL6 has a more active community and more mature documentation. Want to go deep into mechanism design (cycloidal drives especially) → Faze4; want a working, dependable machine sooner → look at PAROL6 first.
Upstream says the project is still in development — is it usable?
Treat it as a working research object, not finished equipment: the hardware and documentation are enough for a replica, but the README explicitly warns of possible bugs and that use is at your own risk. Recommended approach: get the robot data and URDF working in simulation first, then move to hardware step by step, accepting each layer separately.
✅ Next steps
Back to project 01 in the Build Your Own Robot section, which links to this guide, the GitHub design files and the distribution PCB documentation. Suggested order: read the design decisions → copy the robot data → print and verify key parts → assemble joint modules and accept one by one → power up the V2 distribution PCB → bring up Teensy + ROS / Matlab → iterate in simulation with the URDF.