
MicrasPCB
Team-Micras/MicrasPCB
Micras micromouse PCBs as code: Zener circuits, KiCad layouts, CI checks and a design portal

Micras micromouse PCBs as code: Zener circuits, KiCad layouts, CI checks and a design portal
Encoder is an open-source printed circuit board by Team-Micras, from the Team-Micras/MicrasPCB repository on GitHub. It is a 2-layer board of 9.6 × 14.1 mm with 3 parts on 12 nets, routed with 46 tracks and 10 vias.
It is built around the AS5047U-HTSM. Its parts include 1 capacitor, 1 IC and 1 connector.
The Micras micromouse main board: a 50 x 90 mm, 4-layer, 1.04 mm board. It carries the STM32H725RGV6 controller, the battery input and power conversion, the two locomotion motor bridges and the fan driver, the IMU, four wall sensors, the slots for the two encoder boards, and the user interface.
The circuit replicates the MicrasMainBoard Altium design part for part: every part keeps its
designator, and micras-pcb previous compare main checks the netlist against that design's
connectivity (previous/board.json) plus the changes declared in
changes.toml.
The board files are in boards/main/ (this README sits in its layout/ folder);
spec/ is at the repository root.
| File | Sheet instance | Contents |
|---|---|---|
main.zen | root | IC1 (STM32H725RGV6) and its supply network (C1-C17, L1), SWD header P1, test points, M2 screw holes H1-H4, board stackup and rules |
Regulators.zen | REGULATORS | J1 battery connector, battery switch SW4/Q6/R41, 3V3 buck IC7, 20 V boost U1, USB LDO U3 |
Drivers.zen | DRIVERS | IC5 (L6205D) bridges for M1/M2 with shunts R32/R33, IC6 (STSPIN958) fan driver for M3 with shunt R31 |
Sensors.zen | SENSORS | IC2 (LSM6DSV) IMU, IC3/IC4 (TSC2020) current amplifiers, wall sensors W1-W4 with Q2-Q5, encoder slots EC1/EC2 |
Peripherals.zen | PERIPHERALS | SW1 DIP switch, SW2/SW3/SW5 buttons, BZ1 buzzer, D1/D2 addressable LEDs, D4/D5 LEDs, U2 USB-C |
passives.zen | value, package, rating and part number of every resistor, ceramic capacitor and LED line | |
changes.toml | connectivity changes against the previous revision | |
erc.toml | nets supplied from off the board (VBAT, GND, GND_BAT), the PWR_FLAG role for ERC; the ERC warnings the module sheets leave (see Known faults) | |
firmware.toml | the firmware's pin map, supply setting, battery channel and drive duties, from MicrasFirmware (micras-pcb firmware snapshot) | |
test/ | pcb test benches of the board's circuit: MCU, power, drivers, peripherals | |
layout/ | this folder: the KiCad project; main.kicad_sch is the root sheet, with one sheet per module (REGULATORS.kicad_sch, ...); the .kicad_pcb holds placement and routing | |
previous/ | the previous revision's connectivity snapshot, and the scripts that build the layout from that revision (transfer_layout.py, rework.py) | |
spec/main.toml | mechanical interface: thickness, axle origin, extents, screw holes, encoder slots, USB-C peg holes, fan hole, wheel notches |
Each sheet's docstring describes its circuit with the datasheet figure, table or equation behind
each value. Each module is its own sheet of the KiCad schematic (Project(..., layout=False) in
its .zen), and the layout is the board's. A module's signal ports take the names of the nets
they carry (Fan_Enable, not FAN_ENABLE), so the sheet pins match the root's labels; the
SPI buses and the Motor_*_Sense+/- nets, whose names are not identifiers, keep their port
names. The battery's minus, GND_BAT, is a ground port of REGULATORS: it appears on the root
only at the sheet pin, and a power symbol there needs nothing else to join it.
| Net | Source | Range | Loads |
|---|---|---|---|
VBAT | 3S LiPo on J1 | 9.9-12.6 V | buck IC7, boost U1, fan driver IC6 |
GND_BAT | pack minus on J1 | switched to GND by Q6 | |
3V3 | buck IC7 (L6981N33) and USB LDO U3 (CJA1117B-3.3) in parallel | 3.3 V | MCU, IMU, amplifiers, sensors, encoders, LEDs, logic of the drivers |
+5V | USB-C VBUS | 5 V | U3 |
+20V | boost U1 (TPS611781) | 19.63 V typ, 18.99-20.32 V | locomotion bridges IC5 |
VCORE | the MCU's on-chip SMPS through L1 | 0.95-1.40 V | MCU core (VFBSMPS, VCAP1-3) |
Power modes:
GND; the buck makes 3V3 and
the boost makes +20V from VBAT.In the USB and debugger modes 3V3 also reaches VBAT backwards through IC7, and from there the
boost and the fan driver: the design review (hw_debug/schematic_review.md C3-C5) describes
this and the bench measurements.
The VFQFPN68 STM32H725 has no VDDLDO pin: the core always runs from the on-chip SMPS, in the
"Direct SMPS supply" of ST AN5419 Figure 5 (p10). VLXSMPS drives L1 (2.2 uH), whose output is
VCORE; VFBSMPS and the three VCAP pins all sit on VCORE, with 2 x 10 uF at the inductor
(C3, C4) and 100 nF at each VCAP pin (C7, C6, C5), as AN5419 Table 2 (p7-8) requires. The
firmware selects PWR_DIRECT_SMPS_SUPPLY to match.
VBAT (pin 1), the backup-domain supply, is on 3V3 with C8 100 nF and C9 1 uF at the pin: with no backup battery, AN5419 Table 2 ties VBAT to VDD. The pin's range is 1.2-3.6 V (DS13311 Table 13 p116), absolute maximum 4.0 V (Table 10 p114).
Net names follow the firmware's pin map (Motor_Left_PWM_FW, Encoder_Left_CSn, Wall_Sensor_0,
...). Nets local to a sheet carry the sheet's prefix (REGULATORS.BOOST_FB). The IMU and both
encoder boards share SPI_SCK/SPI_MISO/SPI_MOSI, each with its own chip select.
| Function | MCU pins |
|---|---|
| Locomotion PWM, enable | PC7, PC9 (left), PA8, PA9 (right); PA10 enable |
| Motor current | PC1 (left, IC3), PC0 (right, IC4) |
| Fan | PB15 PWM, PB14 enable/fault, PB13 current-limit flag |
| Wall sensors | PB6-PB9 emitter PWM; PB1, PC4, PA6, PA4 receiver ADC |
| Encoders | PA3/PC14 CSn, PA0/PA1 and PB3/PA15 ABI A/B (left/right) |
| IMU | PD2 CS, PB5/PB4 INT1/INT2 |
| SPI | PC10 SCK, PC11 MISO, PC12 MOSI |
| USB / Bluetooth UART | PA11 D-, PA12 D+ |
| User interface | PA7 button, PC5/PB0/PB2/PB10 DIP switch, PA2 buzzer, PC6 ARGB LEDs, PB12 yellow LED |
| Debug | PA13 SWDIO, PA14 SWCLK on P1 |
PA5, PC15, PH0 and PH1 are unused.
4 copper layers, 1 oz outer and 0.5 oz inner copper, 0.2104 mm prepreg (Dk 4.4) and 0.5 mm core
(Dk 4.48), from the Altium layer stack: 1.0212 mm of copper and dielectric. The KiCad stackup adds
Zener's fixed 10 um solder mask a side, 1.0412 mm (spec/main.toml); Altium's 15.24 um resist
makes the same stack 1.0517 mm. The board is ordered as JLCPCB's 1.0 mm 4-layer board. Design
rules: 0.1 mm clearance, 0.254 mm default track, 0.45 / 0.3 mm vias (0.5 / 0.3 and 0.8 / 0.4 mm
also used), 0.2 mm copper to edge, 0.02 mm solder mask expansion, all from the Altium design
rules; rules/jlcpcb.kicad_dru adds JLCPCB's limits on top. The drill and placement origin of the
fab outputs is the Altium origin, the rear edge centre at KiCad (148.501075, 150.00362).
The layout is the Altium MicrasMainBoard.PcbDoc's, in the same KiCad coordinates: MicrasHardware
and the firmware place the board by them, with the wheel-axle midpoint (between the encoder slots)
at KiCad (148.5011, 113.5036). previous/transfer_layout.py
builds it from the KiCad conversion of that PCB and previous/rework.py
adds the copper of the two declared changes; running the script again changes nothing.
| Layer | Use |
|---|---|
| F.Cu | every part (the board is single-sided), signal routing, power pours (VBAT, +20V, GND_BAT, 3V3, GND, fan outputs) |
| In1.Cu | solid GND plane |
| In2.Cu | power planes: 3V3 under the MCU and most of the front half; VBAT, +20V and +5V behind it, VBAT reaching forward on the right to the buck IC7; the VCORE route |
| B.Cu | signal routing |
Where things are, in the robot frame (x forward, y left, from the axle midpoint; spec/main.toml):
Resistors, ceramic capacitors and the LEDs D4/D5 use KiCad's generic footprints, each centred on
its pads' positions in the Altium footprint: the routing lands on the same pad centres, up to
0.12 mm from a pad's centre where the KiCad pad pitch differs (0805/1206 capacitors). The
current-sense shunts R31-R33 keep the Altium land pattern and model
(components/micras/R2512: 1.45 x 3.45 mm pads). D4 and D5 carry
KiCad's LED model scaled to their datasheet heights, 0.80 mm (NCD0603Y2) and 0.60 mm (KT-0603R),
so the 3D export has the fitted parts' height.
Zones, as previous/transfer_layout.py sets them from the Altium polygons and rules:
The Edge.Cuts outline is the Altium one without its six duplicated vertices (lines of 1-10 nm, which KiCad reads as a malformed outline); the lines next to them meet within 10 nm of where they did.
Copper of the two changes (KiCad coordinates, as in rework.py):
Apart from C1 and C2, the board's copper, mask, paste, drills and outline match the Altium MicrasMainBoard's own Gerbers (its CAMtastic output) except where KiCad, JLCPCB's rules or the generic parts set them otherwise:
| What | This board | Altium board | Why |
|---|---|---|---|
| Pour to board edge, fan hole, encoder slots and peg holes | 0.21 mm | 0.19-0.20 mm | rules/jlcpcb.kicad_dru: JLCPCB's 0.2 mm routed-edge clearance ("Outline" table) plus 10 um for the fill's arc approximation |
| Inner-plane gap around a 0.45 / 0.3 mm via | 0.125 mm, 0.2 mm from the hole | 0.100 mm, 0.175 mm from the hole | JLCPCB capabilities, "Traces": inner-layer via hole to copper 0.2 mm. Between the five via pairs 0.76 mm apart (at (148.9, 110.9), (148.0, 66.9), (142.2, 80.8), (145.2, 86.5) and (151.0, 71.8)) the inner planes would be 0.06 mm wide, below the 0.1 mm neck width, and are not poured (0.11 mm wide on the Altium board) |
| Pour shapes elsewhere | KiCad's fill | Altium's fill | the same outlines, clearances and neck width; the fills differ in a few spots of under 0.03 mm2 each |
| Teardrop cusps | thinner than 0.1 mm left out | drawn to a point | JLCPCB's 0.1 mm minimum copper feature |
| Generic footprint pads (short x long side) | R0402 0.54 x 0.64, R0603 0.80 x 0.95, C0402 0.56 x 0.62, C0603 0.90 x 0.95, C0805 1.00 x 1.45, C1206 1.15 x 1.80, LED0603 0.875 x 0.95 mm, rounded corners | R0402 0.54 x 0.566, R0603 0.806 x 0.864, C0402 0.60 x 0.62, C0603 0.80 x 0.90, C0805 0.97 x 1.47, C1206 1.07 x 1.82, LED0603 0.80 x 0.80 mm, square | KiCad's IPC-7351 library footprints for the generic passives; same pad centres within 0.12 mm |
| Paste of the generic passives | aperture = pad (R0402: 0.54 x 0.64 mm, area ratio 1.2 for a 0.12 mm stencil) | custom stencil regions inside the pads (R0402: 0.58 mm square) | KiCad's library defaults, above IPC-7525's 0.66 area ratio for release; about 10 % more paste on the 0402 resistors |
| Mask of the generic passives | the board's 0.02 mm expansion | 0.0508 mm on the passive pads | KiCad's library footprints carry no local margin |
| Silkscreen of the generic passives | KiCad's outlines (fewer lines, no box around 0402s) | Altium's pad boxes | KiCad's library footprints |
| Wall sensor silkscreen | the lead area outline and the C/E labels; the body forward of it on User.13 only | a hatched body clipped at the board edge per instance | one package for W1-W4, which overhang the edge at different angles (components/micras/WallSensor) |
| Texts | KiCad stroke font | Altium fonts | same strings, sizes and positions |
| Passive 3D models | KiCad library models: C0402 0.50, C0805 1.25, C1206 1.60, R0603 0.45 mm tall | 0.55, 1.45, 1.80, 0.56 mm | KiCad's generic models (D4 and D5 are scaled to their datasheets, above) |
| Solder mask thickness | 10 um a side (1.0412 mm board) | 15.24 um (1.0517 mm) | Zener's stackup has no mask thickness setting; JLCPCB applies its own |
The board keeps its previous revision's circuit, so the design checks fail where that circuit is
wrong. Each failing check, the fault behind it (with its item in the design review,
hw_debug/schematic_review.md), the requirement it breaks, and the fix. Every fix listed keeps
the board's functions.
| Check (gate) | Fault | Requirement | Fix |
|---|---|---|---|
main_mcu boot0_pulled_down_without_supply_coupling (test) | C60 (100 nF) runs from BOOT0 to 3V3: the 3V3 ramp holds BOOT0 high past reset release, so the MCU starts the system bootloader, which drives PA9/PA10 (motor) and PA2 (buzzer) (M1) | BOOT0 10 kOhm to VSS (AN5419 Figure 19); sampled after the 377-550 us reset temporisation (DS13311 Table 20, RM0468 2.6) | C60 to GND, or remove it |
main_mcu debug_header_carries_reset (test) | P1 has 3V3, GND, SWDIO, SWCLK only: no connect-under-reset (m7) | AN5419 Figure 21: the debug connector's nSRST on NRST | 5-pin header with NRST |
main_mcu usb_data_lines_without_external_parts (test) | R10 1.5 kOhm D+ pull-up to 3V3; R8/R9 33 Ohm in series with D-/D+ (M11) | DS13311 Table 118: pull-up and driver impedance (28-44 Ohm) internal, no series resistors; AN4879 3.1.1: pull-up only with VBUS | remove R10; R8/R9 0 Ohm |
main_mcu usb_vbus_sensing (test) | VBUS reaches no MCU pin (M11) | AN4879 2.6: VBUS sensing mandatory on a self-powered device; 2.6.1 divider | 33 kOhm / 82 kOhm from VBUS to PH0 or PH1 |
main_power buck_output_capacitance (test) | 268.7 uF on 3V3, 220 uF of it in C56 (m1) | DS13554 Eq. 42/43: 30.5-145 uF for the internal compensation | C56 to 2 x 22 uF |
main_power boost_output_voltage (test), warnings | R39/R40 2 MOhm / 130 kOhm set +20V to 18.97-20.32 V (m2) | SLVSDA7E 7.3: VOUT at most 20 V; OVP from 20.5 V | 1.00 MOhm / 71.5 kOhm (17.95 V) |
main_power boost_feedback_divider_current (test) | RDOWN R40 is 130 kOhm (m2) | SLVSDA7E 9.2.4: RDOWN below 100 kOhm | as above |
main_power boost_inductor_ripple (test) | L2 1 uH at 1.16 MHz (R36 150 kOhm) ripples 4.22 A at 9.9 V (M4) | SLVSDA7E 9.2.4.1: below 4 A, Eq. 2-3 and 5 | R36 140 kOhm (3.96 A), or a larger inductance |
main_power boost_enable_not_from_its_input (test) | U1 EN on VBAT: the boost starts from the 2.6-2.9 V back-fed VBAT, so the motors are powered from USB or the probe (C4) | the board keeps the motor supply off in the debug modes; SLVSDA7E 7.5: UVLO 2.7 V, EN 0.4/1.2 V | EN from PH0/PH1 (800 kOhm internal pull-down), or a VBAT divider |
main_power ldo_input_capacitor (test) | nothing on +5V at U3 (M3, m5) | LM1117 9.2.2.1.1: 10 uF on the input (the CJA1117B datasheet is silent) | 10 uF on +5V |
main_power ldo_output_capacitor_esr (test) | only ceramics on U3's output (M3) | LM1117 9.2.2.1.3: output ESR 0.3-22 Ohm; AMS1117: 22 uF tantalum | 22 uF tantalum or polymer at U3, or a ceramic-stable regulator |
main_power battery_switch_slew (test) | SW4 ties Q6's gate straight to VBAT: VBAT steps onto the fan driver (M5) | DS14341 Table 1: dVS/dt at most 0.5 V/us | 100 kOhm in series with the gate and 47 nF from gate to drain (about 2.7 V/ms) |
main_drivers l6205_enable_off_in_reset (test) | Motor_Enable floats while the MCU is in reset (m12) | RM0468 11.3.1: pins in analog mode in reset; L6205 Figure 4: no input pull | 10-100 kOhm from Motor_Enable to GND |
main_drivers stspin958_phase_matches_load (test) | PWM2/PH on 3V3 with M3 between OUT and LSS (M7) | DS14341 5.6.2.2, Figure 14: that load wiring pairs with PH = 0 | PWM2/PH to GND |
main_peripherals usb_c_sbu_open (test) | SBU1/SBU2 carry 3V3 through F1 for the Bluetooth module (M6) | Type-C R2.0 4.3, Table 4-28: SBU open or at least 950 kOhm to GND | power the module through its own connector |
main_peripherals usb_esd_protection (test) | no ESD part on D+, D-, VBUS (M12, m5) | AN4879 2.3, Table 11: USBLC6-2 on D+/D-, ESDA7P60-1U1M on VBUS, at the receptacle | add both |
test_each_supply_net_has_one_source (pytest) | IC7, U3 and the probe on P1 all drive 3V3 (C5) | one source per net, or ORing; DS13554 6.6.2: the L6981N sinks up to 1.75 A | one 3V3 regulator fed through ideal diodes from the battery and VBUS; P1 pin 1 as a sense line |
test_no_source_back_feeds_another_supply (pytest) | 3V3 reaches VBAT through IC7 (U1 and IC6 powered from USB or the probe) and +5V through U3 (C3, C5) | DS13554 Figure 19, Table 3; Type-C R2.0 4.5.2.2.3.1: a sink does not drive VBUS | as above, with the buck on its own input node (L6981C33 does not sink) |
test_net_names_follow_the_firmware_labels (pytest) | PA10 Motor_Enable (firmware Motors_Enable), PB12 LED_Blue (LED_Red, a yellow LED), PB13 Fan_Overcurrent (Fan_TOFF), PC0/PC1 Current_Sensor_Right/_Left swapped (m14, m15) | net names are the firmware's pin labels | rename the nets (the previous-revision comparison then needs the renames declared) |
test_battery_voltage_is_measurable (pytest) | no path from the pack to an ADC pin: the firmware reads the VBAT pin's internal channel, and VBAT is on 3V3 (C1) | the firmware's battery reading; VBAT pin absolute maximum 4.0 V (DS13311 Table 10) | 100 kOhm / 27 kOhm + 100 nF into PA5 (2.68 V at 12.6 V); firmware on ADC1/2 channel 19 |
test_wall_emitter_resistors_at_the_firmware_duty (pytest) | R13/R17/R21/R25 (10 Ohm 0603, 100 mW) dissipate 121 mW at the firmware's 37.5 % duty (M14) | resistor rating | 1206 resistors |
test_wall_emitters_survive_a_gate_held_high (pytest) | a gate held high puts 180 mA DC through the SFH 4550 (M14) | SFH 4550 p4: 100 mA DC | AC-couple each gate (series capacitor with the 10 kOhm pull-down) |
test_buzzer_resistor_at_the_firmware_duty (pytest) | R3 (10 Ohm 0603) dissipates 151 mW at 50 % duty with a 9 Ohm coil (m16) | resistor rating; FUET-5030 coil 12 +- 3 Ohm | 0805 or 1206 resistor |
test_every_assembled_footprint_has_a_courtyard[main] (pytest) | the 38 footprints from the Altium library draw their courtyard on User layers | F.CrtYd/B.CrtYd courtyards for KiCad's overlap check | move the outlines to F.CrtYd in each component package |
test_every_smd_pad_of_an_assembled_part_has_paste[main] (pytest) | U3's SOT-89 tab and centre lead (custom pad 2) has no F.Paste opening | reflow needs paste on every SMD pad | add F.Paste to the pad in components/cj/CJA1117B |
| warnings | D1/D2 (WS2815C-2020, VDD 9.5-13.5 V) on 3V3: the LEDs never light (M13); +20V above 20 V (m2, as above) | WS2815C-2020-4P V1.0 p3 | supply D1/D2 from VBAT, or a 5 V LED with a 5 V rail and level shifter |
The layout gates (layout-check runs the same KiCad DRC as drc; its netlist sync is clean) and
the layout tests fail on these, every one from the previous layout, its conversion from Altium, the
copper of change C2, or a footprint:
| Check (gate) | Count | Cause | Fix |
|---|---|---|---|
tracks_crossing (drc, error) | 2 | zero-length GND and 3V3 track segments at (163.868, 71.137) and (144.045, 66.935): KiCad reports a degenerate segment as crossing the nearest track, here 0.5-0.6 mm away; the copper does not touch | delete the zero-length segments (15 on the board, from the conversion) |
copper_edge_clearance (drc, error); board-edge-to-copper (dfm) | 2; 1 | U2's GND pads A1B12 and B1A12 sit 0.175 and 0.190 mm from the USB-C peg holes, below JLCPCB's 0.2 mm | trim the two pads, or move the peg holes per the GT-USB-7010ASV drawing |
courtyards_overlap (drc, error) | 9 | KiCad's generic R/C footprints have courtyards wider than the previous footprints' spacing: C44-C47, C48-C51, R39/R40, C3/C4 side by side; R31's courtyard (0.25 mm around its pads) reaches C33's | space the parts, or footprints with the IPC "least" courtyard |
| copper feature width (dfm) | 2 | two teardrop zones overrun their track edges and leave 5 um wide lips at (147.6, 114.8) and (146.7, 69.9) | trim those teardrop outlines |
copper_sliver (drc, warning) | 19 | teardrop outlines overrunning their tracks or each other (F.Cu, B.Cu); the teardrops are plain zones, which KiCad does not exempt from the sliver test | trim the outlines |
track_dangling (drc, warning) | 4 | zero-length segments on USBD_N, USBD_P and Boot, as for tracks_crossing | as above |
padstack (drc, warning) | 30 | U2, Q6 and SW4 cancel each pad's own paste opening with a large negative paste margin; U2 and Q6 draw their paste apertures on F.Paste instead, and SW4's pads are through-hole: the paste is there, KiCad only flags the margin | none needed; to clear the warning, move the drawn apertures into the pads |
silk_overlap (drc, warning) | 41 | reference texts and package outlines touching: the renamed test points (FAN_PWM1...), W1-W4 (their references, and the package's C and E labels 0.03-0.08 mm from its lead outline), M2, SW4, C36/C37, J1, L1-L3 and the generic R4/R5/D4/D5 outlines | move the texts |
silk_over_copper (drc, warning) | 1 | W2's reference text lies on R17's pad | move the text |
text_height, text_thickness (drc, warning) | 154, 4 | the previous layout's reference texts are 0.5 mm high, SW1's footprint texts 0.076 mm thick, below KiCad's 0.6 / 0.08 mm defaults | larger texts, or lower the board's text limits |
test_decoupling_sits_at_its_pin[main] (pytest) | 4 | C15 sits 5.0 mm from IC1 pad 51 (VDD) and C6 3.7 mm from pad 49 (VCAP2); IC3 and IC4 have no capacitor at VCC (nearest C25, 10.3 and 7.3 mm) (M9). The datasheets ask for each at its pin; the board's reading of "close" is 3 mm | move C15 and C6; add 100 nF at each TSC2020 |
test_tracks_are_octilinear_without_acute_corners[main] (pytest) | 3 | the C2 In2.Cu VCORE segment from (155.957, 76.900) to the VCAP3 via at (153.980, 78.630) (previous/rework.py, "FB to VCAP3") runs 3.8 degrees off 45; the previous layout's 3V3 fork on B.Cu at (156.248, 133.875) and Wall_Sensor_0 fork on F.Cu at (129.439, 79.890) part at 45 degrees away from any pad or via, a wedge that traps etchant | turn the C2 route at (155.957, 76.653), so its diagonal runs at 45 degrees; join each fork's branches at 90 degrees or more, or at a pad or via |
test_encoder_slots_take_the_encoder_tab (pytest) | 4 | the 0.90 mm encoder slots are below JLCPCB's 1.0 mm minimum non-plated slot, and their 0.5 mm milled corners keep the 5.0 x 0.9 mm tab (0.8 mm board + 0.1 mm tolerance) out of the 5.10 mm length | 1.0 mm wide slots at least 5.6 mm long (the pads beside them move with the walls), or relief holes at the corners |
ERC passes with two warnings accepted in erc.toml, both from how pcb 0.4.81 labels a net that
crosses a module sheet: a global label on the root and on the sheet, beside the sheet pin and the
hierarchical label (diodeinc/pcb#1520). That gives
46 same_local_global_label, and 14 multiple_net_names where the port name is not the net's
(the SPI bus members, MOTOR_L_SENSE_P for Motor_L_Sense+). On the root, the sheet symbols sit
close enough for their pin labels to overlap the next sheet's box. The netlist is right (LVS and
previous pass); the warnings go away with a pcb release that includes
diodeinc/pcb#1522, which generates the sheet pins and
hierarchical labels alone, and the [accepted_warning] table goes with them.
Requirements without a check, and why:
capacitor_voltage_ratings); no sourced derating factor is applied.rotation_verified = true in parts/jlc.toml.| Qty | Value | Footprint | References |
|---|---|---|---|
| 1 | 100nF 10% 50V X7R | stdlib_kicad-footprints_Capacitor_SMD:C_0603_1608Metric | C1 |
| 1 | AS5047U-HTSM | Team-Micras_MicrasPCB_components_ams_AS5047U:SOP65P640X120-14N | IC1 |
| 1 | EncoderTab | Team-Micras_MicrasPCB_components_micras_EncoderTab:ENCODER_CONN | J1 |
It measures 9.6 × 14.1 mm and has 2 copper layers, 0.79 mm thick.
3 parts, built around the AS5047U-HTSM. 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.
From the Team-Micras/MicrasPCB repository on GitHub, at the commit this page was made from: the board is boards/encoder/layout/encoder.kicad_pcb and its schematic boards/bluetooth/layout/bluetooth.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask Team-Micras before reusing the design.

Gepetto/MC300A_AS5047_encoder_PCB
This is a PCB support for a AS5047 magnetic encoder to replace MC300 control board on myactuator RMD-X actuators.

LucienMorey/uni-work
A collation of my software related work and assignments while at University of Technology Sydney.

famesy/CuteSat
This is an open-source CubeSat printed circuit board (PCB) project that includes both hardware and software components.


hzeller/rpi-rgb-led-matrix
Controlling up to three chains of 64x64, 32x32, 16x32 or similar RGB LED displays using Raspberry Pi GPIO


atopile/atopile
Design circuit boards with code! ✨ Get software-like design reuse 🚀, validation, version control and collaboration in hardware; starting with electronics ⚡️
