Skip to the content
PCBKitNew board
2 layers104 × 121 mmNAVMATE Testopstelling, the printed circuit board in 3D

Firmware (NXP LPC1752, C) + PC-gereedschap (Python) voor een maritiem navigatie-testinstrument. De MCU leest scheepssensoren via een 24-bit ADC, stuurt drie analoge uitgangen aan via DAC's en streamt op commando van de…

Size
104 × 121 mm
Copper layers
2
Thickness
1.6 mm
Parts
154
Nets
171
Pads
565
Tracks, vias
1,400, 146
Pours
9
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
25 Mar 2026
Updated
25 Jul 2026

Overview

NAVMATE Testopstelling is an open-source printed circuit board by mitaadevelop, from the mitaadevelop/NAVMATE-Testopstelling repository on GitHub. It is a 2-layer board of 104 × 121 mm with 154 parts on 171 nets, routed with 1,400 tracks and 146 vias.

It is built around the TEL 3-2411, TEL 3-2423 and AD5761RARUZ-RL7, with the AD4111BCPZ-RL7, PS2506L-1-F3-A and ADG1419BRMZ among its other parts. Its parts include 65 capacitors, 28 connectors, 27 resistors, 16 ICs and 9 diodes. It belongs with the NXP (LPC, Kinetis, i.MX RT) boards of this library.

Main components

9

README

README.md

Testopstelling — DAC/ADC scheepsnavigatie-testinstrument

Firmware (NXP LPC1752, C) + PC-gereedschap (Python) voor een maritiem navigatie-testinstrument. De MCU leest scheepssensoren via een 24-bit ADC, stuurt drie analoge uitgangen aan via DAC's en streamt op commando van de PC testsignalen voor analyse — SH = Stuurhendel, RS = Roerstand, BAW = Bochtaanwijzer.

Dit is een getting-started. Voor hoe het systeem werkt (protocol, conversie, ontwerp) zie Meer documentatie onderaan.


Wat heb je nodig

  • Python 3.12+ (voor de PC-tooling).
  • De testopstelling-hardware verbonden via USB-serieel (alleen nodig om écht te meten — zonder hardware kun je de tests en de mock draaien).
  • Alleen voor firmware bouwen/flashen: MCUXpresso IDE + een J-Link (SWD).

1. Project ophalen

bash
git clone https://github.com/MITCHEL-Development/NAVMATE-Testopstelling.git
cd NAVMATE-Testopstelling

2. Python-omgeving opzetten

bash
python3 -m venv .venv
source .venv/bin/activate          # Windows: .venv\Scripts\activate
pip install -r requirements.txt

3. Controleren dat alles werkt (geen hardware nodig)

Alle tests draaien op de host tegen een in-memory MCU-mock:

bash
.venv/bin/python -m pytest

Groen? Dan is de PC-laag correct opgezet.

4. Seriële poort instellen

De verbinding én de testparameters staan samen in config.py. Pas het CONNECTION-blok aan op jouw poort:

python
CONNECTION = {
    "port":    "/dev/tty.usbserial-FTHKZ02P",   # bv. "COM5" op Windows
    "baud":    230400,                          # moet matchen met de firmware
    "timeout": 0.25,
    "retries": 3,
}

Vind je poort: macOS/Linux ls /dev/tty.* of ls /dev/ttyUSB*; Windows via Apparaatbeheer (COM-poorten). Flags --port / --baud overschrijven config.py.

5. Verbinding testen

bash
python CLI.py ping

Krijg je een OK terug, dan praat de PC met de testopstelling.

6. Een eerste test draaien

config.py bevat al voorbeeld-PARAMS (duur, rate, signaal per kanaal). Sinds kort worden die automatisch naar de firmware gestuurd bij start/run — een losse load of ping vooraf is niet meer nodig. Draai dus direct een meting van 10 s @ 100 Hz naar een CSV:

bash
python CLI.py run 10 test.csv 100     # past config.py toe → output/test.csv (+ auto-plot)

Wil je de parameters expliciet (zonder te meten) naar de MCU sturen, dan kan dat nog steeds met python CLI.py load config.py.

Of stel zelf snel een signaal in zonder config.py te bewerken:

bash
python CLI.py duration 10
python CLI.py rate 100
python CLI.py sh step 0V 5V 1000      # SH: stap 0→5 V na 1000 ms
python CLI.py rs ramp -2V 2V 500 3000 # RS: ramp
python CLI.py baw sine 0V 1V 1000 0   # BAW: sinus
python CLI.py run 10 test.csv 100

Interactieve modus (zonder argumenten) geeft een prompt met dezelfde commando's:

bash
python CLI.py

Typ daar help voor het volledige overzicht.

7. Resultaat bekijken

  • Na een run/start opent automatisch een plot van de CSV.
  • Opgenomen CSV's staan in output/.
  • Voor diepere analyse/vergelijking: dashboard.ipynb en testview.ipynb.

Handleiding (dagelijks gebruik)

Naast de getting-started hierboven: een praktische gids voor het werken met het instrument. Alles loopt via CLI.py (one-shot of interactief) en config.py.

A. De CLI gebruiken

Twee manieren, met dezelfde commando's:

bash
python CLI.py <commando> [args]   # one-shot: één commando, dan klaar
python CLI.py                     # interactief: prompt; typ 'help' of 'exit'

--port / --baud / --timeout / --retries overschrijven config.py per aanroep.

B. Commando-overzicht

GroepCommando's
Systeemping [seq] · status · version · mem · reset · config show|save|load
Meten (test)duration <s> · rate <Hz> · start [csv] · run <s> [csv] [Hz] · stop · status
Signaal per kanaalsh|rs|baw hold <mV> · … step <voor> <na> <ms> · … ramp <start> <eind> <start_ms> <duur_ms> · … sine <center> <amp> <periode_ms> [fase_ms]
Parametersload <config.py> · show <config.py> (offline)
ADCadc read [ch|all] · adc temp · adc cal … · adc hwcal · adc syscal zero|gain · adc avg [n] · adc favg [n]
DACdac set <app|all> <mV|V> · dac read · dac raw <app> <code> · dac cal …
I/Oswitch|sw <app|all> on|off · opto [read] [ing|all] · opto hold [<ms>]
Simulatiersbaw on|off|status · bawsine on|off|amp <mV>|step <n>
Plotplot on|off|status|now

Spanningen accepteren mV of V (bv. 5000, 5000mV, 5V, -2.5V). Kanalen heten sh/rs/baw (DAC) en ch0..ch3 (ADC). Het volledige overzicht: help op de prompt.

C. Een meting configureren en draaien

De nette werkwijze loopt via config.py → PARAMS:

python
PARAMS = {
    "duration": 60,                              # seconden
    "rate":     200,                             # Hz (100, 200, 300, 400 of 500)
    "favg":     16,                              # frame-middeling (zie §E)
    "sh":  ["step", "0V", "5V", "1000"],         # SH: stap 0→5 V na 1000 ms
    "rs":  ["ramp", "-5V", "5V", "500", "2000"], # RS: ramp
    "baw": ["sine", "0V", "3V", "2000"],         # BAW: sinus
    # PC-zijdige CSV-analyse (zie §F):
    "ema_alpha": 0.2, "sigma_k": 3.0, "rms_window": 25,
}

Daarna draaien — start/run sturen config.py automatisch eerst naar de MCU:

bash
python CLI.py run 30 meting.csv      # 30 s, config.py-rate, → output/meting.csv
python CLI.py run 30 meting.csv 100  # idem, maar forceer 100 Hz
python CLI.py start meting.csv       # gebruik duur+rate uit config.py

Een lopende meting stop je met python CLI.py stop (of Ctrl-C in interactieve modus); de tot dan opgenomen CSV blijft behouden en wordt netjes afgerond.

Wil je los, zonder config.py te bewerken, snel iets instellen:

bash
python CLI.py duration 10
python CLI.py rate 100
python CLI.py sh step 0V 5V 1000
python CLI.py run 10 test.csv

D. ADC kalibreren

Tweepunts (offset + gain) per kanaal is de standaard. Aanbevolen volgorde (laat het bord eerst ~5 min warmdraaien en gebruik een geijkte referentiespanning):

bash
python CLI.py adc avg 64             # veel middelen tijdens het ijken
python CLI.py adc hwcal              # ADC-kern offset (geen signaal nodig)
# Per kanaal: 0 V aanleggen → offset; daarna een bekende spanning → gain:
python CLI.py adc cal ch0 offset
python CLI.py adc cal ch0 gain 9000  # 'gain <gemeten_mV>' = de echt aangelegde spanning
#   … herhaal voor ch1, ch2, ch3 …
python CLI.py adc cal show           # controleer de offset/gain-waarden
python CLI.py config save            # borg in flash
python CLI.py adc avg 16             # werkinstelling terug

adc syscal zero|gain doet een hardware-systeemkalibratie (op CH0, geldt voor alle kanalen). Volledige uitleg en de professionele werkwijze: features/adc-kalibreren.md.

E. Oversampling & ruis (favg)

favg middelt meerdere ADC-samples per frame → minder ruis (~√favg). Instelbaar via config.py (favg) of live met python CLI.py adc favg <n> (1..64).

  • Het effect zie je in de CSV-kolom CHn rms_mV (daalt met meer middeling), niet in adc read … rms_uV (dat is een apart knopje, adc avg).
  • Grote favg past alleen bij een lage framerate; bij 500 Hz is er weinig tijdbudget. Achtergrond en grenzen: features/protocol.md §8.2.

F. Resultaten plotten

  • Na run/start opent automatisch een plot (te sturen met plot on|off); plot now toont de nieuwste CSV opnieuw.
  • Los: python python/plotly.py (nieuwste CSV, alles gegroepeerd) of python python/plotly.py output/meting.csv "CH0 mV" "CH2 mV" voor losse kolommen.
  • Opgenomen CSV's staan in output/; de plot wordt als .html ernaast geschreven.

De grafiek toont per eenheid een eigen subplot: DAC-uitgang, ADC-spanning (mV), ruwe code, en de PC-afgeleide statistiek rms/ema/clip, plus de optocouplers en event-flags. Wat elke reeks betekent en hoe hij berekend wordt staat in features/_software.md §10.


Firmware bouwen & flashen (optioneel)

Alleen nodig als je de C-firmware zelf wilt aanpassen. Het is een MCUXpresso IDE (Eclipse CDT) project voor de LPC1752. Part-support voor deze MCU zit ingebakken in de IDE — er hoeft geen SDK gedownload te worden. Het project hangt af van twee CMSIS-projecten die als voorbeeld-archief met elke MCUXpresso-installatie meekomen.

Importeren in MCUXpresso IDE

  1. Clone de repo (zie 1. Project ophalen).

  2. Importeer de twee CMSIS-projecten (eenmalig per workspace) via File → Import… → General → Existing Projects into Workspace → Select archive file:

    Archief (in de MCUXpresso-installatiemap)Selecteer alleen
    ide/Examples/Legacy/CMSIS_CORE/CMSIS_CORE_Latest.zipCMSIS_CORE_LPC17xx
    ide/Examples/CMSIS_DSPLIB/CMSIS_DSPLIB_Latest.zipCMSIS_DSPLIB_CM3

    macOS: /Applications/MCUXpressoIDE_<versie>/ide/Examples/… — Windows: C:\nxp\MCUXpressoIDE_<versie>\ide\Examples\…

  3. Importeer dit project: File → Import… → General → Existing Projects into Workspace → kies als root de gecloonde map → laat "Copy projects into workspace" uitgevinkt (anders werk je in een losse kopie en volgt git je wijzigingen niet). Het project verschijnt als navmate-testopstelling.

  4. Build de Debug-configuratie (hamer-icoon). De Debug/-map en het linker-script worden automatisch gegenereerd, en de CMSIS-projecten worden als referenced projects vanzelf meegebouwd.

  5. Flash/debug via J-Link: gebruik de meegeleverde launch-config navmate-testopstelling JLink Debug.launch (rechtsklik → Debug As). Hiervoor moeten de SEGGER J-Link drivers geïnstalleerd zijn.

Daarna kan het ook vanaf de commandoregel (toolchain in het pad), nadat de IDE de Debug/-map eenmaal heeft gegenereerd: make -C Debug all.


Repository-indeling

text
NAVMATE-Testopstelling/
├── src/  inc/          Firmware (C) + headers (inc/protocol.h = PC↔MCU-contract)
├── CLI.py              Hoofd-CLI vanaf de PC (one-shot + interactief)
├── config.py           Verbinding + testparameters (bewerk dit)
├── python/             PC-Python-pakket (protocol, commands, analyse, mock)
├── requirements.txt    Python-afhankelijkheden
├── tests/              Pytest-suites (PC-laag + C-firmware via ctypes)
├── output/             Opgenomen test-CSV's (niet in git)
├── notebooks/  *.ipynb Visualisatie & simulaties
bash
cppcheck --enable=all \
  --inconclusive \
  --check-level=exhaustive \
  --std=c99 --platform=unix32 \
  --suppress=missingIncludeSystem \
  --suppress=missingInclude \
  --suppress=unusedFunction \
  --suppress=checkersReport \
  -I inc \
  -i src/lpc1752 -i src/cr_startup_lpc175x_6x.c \
  src/ 2> cppcheck_rapport.txt

Parts

154
QtyValueFootprintReferences
24100nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC1, C4, C10, C11, C12, C13, C14, C15, C32, C35, C37, C39, C42, C44, C46, C49 +8
100,1uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC25, C26, C27, C30, C53, C54, C56, C57, C59, C60
910uFCapacitor_SMD:CP_Elec_6.3x5.4C31, C33, C36, C38, C40, C43, C45, C47, C50
9LEDLED_SMD:LED_1206_3216Metric_Pad1.42x1.75mm_HandSolderD1, D2, D3, D4, D5, D6, D7, D8, D9
8180Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR2, R3, R4, R5, R6, R7, R8, R9
84,7nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC16, C17, C18, C19, C20, C21, C22, C23
710kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR10, R11, R20, R21, R25, R26, R27
71755736Testopstelling_Navmate:1755736J13, J14, J16, J17, J18, J19, J20
61kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR1, R18, R19, R22, R23, R24
5PS2506L-1-F3-ATestopstelling_Navmate:SOP254P960X380-4NU7, U8, U9, U10, U11
4MountingHoleMountingHole:MountingHole_4.3mm_M4H1, H2, H3, H4
310nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC34, C41, C48
310uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC2, C3, C8
31uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC24, C28, C29
3300Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR13, R15, R17
3330Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR12, R14, R16
335pFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC52, C55, C58
3AD5761RARUZ-RL7Testopstelling_Navmate:AD5761RARUZ-RL7(SOP65P640X120-16N)IC3, IC4, IC5
3ADG1419BRMZTestopstelling_Navmate:ADG1419BRMZU4, U5, U6
233pFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC5, C7
2LOGOLOGOG***, G***
2MC-254-26-00-ST-DIPTestopstelling_Navmate:MC-254-26-00-ST-DIP(SHDR26W64P254_2X13_4068X910X910P)J11, J12
1+15V_TPTestPoint:TestPoint_Pad_D1.0mmTP2
1-15V_TPTestPoint:TestPoint_Pad_D1.0mmTP1
11755752Testopstelling_Navmate:1755752J15
161201021621Testopstelling_Navmate:SHDR10W64P254_2X5_2036X885X925PJ22
1AD4111BCPZ-RL7Testopstelling_Navmate:AD4111BCPZ-RL7(QFN50P600X600X100-41N-D)IC2
1ADC_CS0Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ23
1ADC_ERRORConnector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ21
1ADC_MISO0Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ26
1ADC_MOSI0Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ25
1ADC_SCLK0Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ24
1Conn_01x06_PinConnector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalJ2
1CrystalCrystal:Crystal_SMD_7050-2Pin_7.0x5.0mm_HandSolderingY1
1DAC_ALERTConnector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ28
1DAC_CS1Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ3
1DAC_MISO1Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ6
1DAC_MOSI1Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ5
1DAC_OUT_BAWConnector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ8
1DAC_OUT_RSConnector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ9
1DAC_OUT_SHConnector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ7
1DAC_RESETConnector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ27
1DAC_SCLK1Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ4
1FTSH-105-01-L-DV-KTestopstelling_Navmate:FTSH10501LDVKJ1
1GND_PINSConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ10
1LDI1117-3.3HTestopstelling_Navmate:LDI1117-3.3H(SOT230P700X165-4N)U3
1LPC1752FBD80,551Testopstelling_Navmate:LPC752FBD80(QFP50P1400X1400X160-80N)IC1
1TEL_3-2411Testopstelling_Navmate:TEL_3-2411(TEL_3-0511)U2
1TEL_3-2423Testopstelling_Navmate:TEL_3-2423(TEL30513)U1

Questions

How big is the NAVMATE Testopstelling PCB?

It measures 104 × 121 mm and has 2 copper layers, 1.6 mm thick.

What parts does the NAVMATE Testopstelling use?

154 parts, built around the TEL 3-2411, TEL 3-2423, AD5761RARUZ-RL7 and AD4111BCPZ-RL7. 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 NAVMATE Testopstelling KiCad files?

From the mitaadevelop/NAVMATE-Testopstelling repository on GitHub, at the commit this page was made from: the board is PCB/Navmate_Testopstelling.kicad_pcb and its schematic PCB/ADC.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the NAVMATE Testopstelling design in my own project?

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

Similar boards

  • 4 layers147.2 × 96.3 mmShieldPCB, the printed circuit board in 3D

    ShieldPCB

    AErbsloeh/stimulation_genv3

    Hardware Design Files for Experimental Stimulation Platform (Gen 3)

    142 partsMIT
  • 6 layers54 × 29 mmADC7177M1, the printed circuit board in 3D

    ADC7177M1

    BehrensG/ADC7177M1

    ADC module based on AD7177-2.

    133 parts
  • 4 layers160 × 100.2 mmCsa ultracpu, the printed circuit board in 3D

    Csa ultracpu

    fachat/csa_ultracpu

    The CPU board for a 17MHz Colour-PET clone with modern interfaces

    175 parts9GPL-3.0
  • 2 layers70 × 40 mmLoRaptor, the printed circuit board in 3D

    LoRaptor

    smegg99/LoRaptor

    LoRaptor is an open-source LoRa P2P mesh messaging platform with custom hardware, firmware and a chat app.

    40 parts5MIT
  • 4 layers52.5 × 30.3 mmSDI-12, the printed circuit board in 3D

    SDI-12

    z4ika/sdi12-adapter

    STM32F103CBT6 based SDI-12 to USB2.0 adapter board

    41 parts5AGPL-3.0
  • 4 layers389.8 × 179.5 mmCbm ultipet v1, the printed circuit board in 3D

    Cbm ultipet v1

    fachat/cbm_ultipet

    Note: this is a part of a larger set of repositories, with upetfamily as the main repository.

    466 parts3GPL-3.0
  • 2 layers308.1 × 146 mmMigrane, the printed circuit board in 3D

    Migrane

    AfonsoLopo/migrane-kbd

    Board prepared to be used with qmk firmware.

    304 parts