
ShieldPCB
AErbsloeh/stimulation_genv3
Hardware Design Files for Experimental Stimulation Platform (Gen 3)

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…
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.
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.
git clone https://github.com/MITCHEL-Development/NAVMATE-Testopstelling.git
cd NAVMATE-Testopstellingpython3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txtAlle tests draaien op de host tegen een in-memory MCU-mock:
.venv/bin/python -m pytestGroen? Dan is de PC-laag correct opgezet.
De verbinding én de testparameters staan samen in config.py. Pas
het CONNECTION-blok aan op jouw poort:
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.*ofls /dev/ttyUSB*; Windows via Apparaatbeheer (COM-poorten). Flags--port/--baudoverschrijvenconfig.py.
python CLI.py pingKrijg je een OK terug, dan praat de PC met de testopstelling.
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:
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:
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 100Interactieve modus (zonder argumenten) geeft een prompt met dezelfde commando's:
python CLI.pyTyp daar help voor het volledige overzicht.
run/start opent automatisch een plot van de CSV.output/.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.
Twee manieren, met dezelfde commando's:
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.
| Groep | Commando's |
|---|---|
| Systeem | ping [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 kanaal | sh|rs|baw hold <mV> · … step <voor> <na> <ms> · … ramp <start> <eind> <start_ms> <duur_ms> · … sine <center> <amp> <periode_ms> [fase_ms] |
| Parameters | load <config.py> · show <config.py> (offline) |
| ADC | adc read [ch|all] · adc temp · adc cal … · adc hwcal · adc syscal zero|gain · adc avg [n] · adc favg [n] |
| DAC | dac set <app|all> <mV|V> · dac read · dac raw <app> <code> · dac cal … |
| I/O | switch|sw <app|all> on|off · opto [read] [ing|all] · opto hold [<ms>] |
| Simulatie | rsbaw on|off|status · bawsine on|off|amp <mV>|step <n> |
| Plot | plot 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.
De nette werkwijze loopt via config.py → PARAMS:
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:
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.pyEen 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:
python CLI.py duration 10
python CLI.py rate 100
python CLI.py sh step 0V 5V 1000
python CLI.py run 10 test.csvTweepunts (offset + gain) per kanaal is de standaard. Aanbevolen volgorde (laat het bord eerst ~5 min warmdraaien en gebruik een geijkte referentiespanning):
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 terugadc syscal zero|gain doet een hardware-systeemkalibratie (op CH0, geldt voor alle
kanalen). Volledige uitleg en de professionele werkwijze:
features/adc-kalibreren.md.
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).
CHn rms_mV (daalt met meer middeling), niet
in adc read … rms_uV (dat is een apart knopje, adc avg).favg past alleen bij een lage framerate; bij 500 Hz is er weinig
tijdbudget. Achtergrond en grenzen: features/protocol.md §8.2.run/start opent automatisch een plot (te sturen met plot on|off); plot now
toont de nieuwste CSV opnieuw.python python/plotly.py (nieuwste CSV, alles gegroepeerd) of
python python/plotly.py output/meting.csv "CH0 mV" "CH2 mV" voor losse kolommen.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.
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.
Clone de repo (zie 1. Project ophalen).
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.zip | CMSIS_CORE_LPC17xx |
ide/Examples/CMSIS_DSPLIB/CMSIS_DSPLIB_Latest.zip | CMSIS_DSPLIB_CM3 |
macOS:
/Applications/MCUXpressoIDE_<versie>/ide/Examples/…— Windows:C:\nxp\MCUXpressoIDE_<versie>\ide\Examples\…
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.
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.
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.
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 & simulatiescppcheck --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| Qty | Value | Footprint | References |
|---|---|---|---|
| 24 | 100nF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C1, C4, C10, C11, C12, C13, C14, C15, C32, C35, C37, C39, C42, C44, C46, C49 +8 |
| 10 | 0,1uF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C25, C26, C27, C30, C53, C54, C56, C57, C59, C60 |
| 9 | 10uF | Capacitor_SMD:CP_Elec_6.3x5.4 | C31, C33, C36, C38, C40, C43, C45, C47, C50 |
| 9 | LED | LED_SMD:LED_1206_3216Metric_Pad1.42x1.75mm_HandSolder | D1, D2, D3, D4, D5, D6, D7, D8, D9 |
| 8 | 180 | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R2, R3, R4, R5, R6, R7, R8, R9 |
| 8 | 4,7nF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C16, C17, C18, C19, C20, C21, C22, C23 |
| 7 | 10k | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R10, R11, R20, R21, R25, R26, R27 |
| 7 | 1755736 | Testopstelling_Navmate:1755736 | J13, J14, J16, J17, J18, J19, J20 |
| 6 | 1k | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R1, R18, R19, R22, R23, R24 |
| 5 | PS2506L-1-F3-A | Testopstelling_Navmate:SOP254P960X380-4N | U7, U8, U9, U10, U11 |
| 4 | MountingHole | MountingHole:MountingHole_4.3mm_M4 | H1, H2, H3, H4 |
| 3 | 10nF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C34, C41, C48 |
| 3 | 10uF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C2, C3, C8 |
| 3 | 1uF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C24, C28, C29 |
| 3 | 300 | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R13, R15, R17 |
| 3 | 330 | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R12, R14, R16 |
| 3 | 35pF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C52, C55, C58 |
| 3 | AD5761RARUZ-RL7 | Testopstelling_Navmate:AD5761RARUZ-RL7(SOP65P640X120-16N) | IC3, IC4, IC5 |
| 3 | ADG1419BRMZ | Testopstelling_Navmate:ADG1419BRMZ | U4, U5, U6 |
| 2 | 33pF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C5, C7 |
| 2 | LOGO | LOGO | G***, G*** |
| 2 | MC-254-26-00-ST-DIP | Testopstelling_Navmate:MC-254-26-00-ST-DIP(SHDR26W64P254_2X13_4068X910X910P) | J11, J12 |
| 1 | +15V_TP | TestPoint:TestPoint_Pad_D1.0mm | TP2 |
| 1 | -15V_TP | TestPoint:TestPoint_Pad_D1.0mm | TP1 |
| 1 | 1755752 | Testopstelling_Navmate:1755752 | J15 |
| 1 | 61201021621 | Testopstelling_Navmate:SHDR10W64P254_2X5_2036X885X925P | J22 |
| 1 | AD4111BCPZ-RL7 | Testopstelling_Navmate:AD4111BCPZ-RL7(QFN50P600X600X100-41N-D) | IC2 |
| 1 | ADC_CS0 | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | J23 |
| 1 | ADC_ERROR | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | J21 |
| 1 | ADC_MISO0 | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | J26 |
| 1 | ADC_MOSI0 | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | J25 |
| 1 | ADC_SCLK0 | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | J24 |
| 1 | Conn_01x06_Pin | Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical | J2 |
| 1 | Crystal | Crystal:Crystal_SMD_7050-2Pin_7.0x5.0mm_HandSoldering | Y1 |
| 1 | DAC_ALERT | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | J28 |
| 1 | DAC_CS1 | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | J3 |
| 1 | DAC_MISO1 | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | J6 |
| 1 | DAC_MOSI1 | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | J5 |
| 1 | DAC_OUT_BAW | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | J8 |
| 1 | DAC_OUT_RS | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | J9 |
| 1 | DAC_OUT_SH | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | J7 |
| 1 | DAC_RESET | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | J27 |
| 1 | DAC_SCLK1 | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | J4 |
| 1 | FTSH-105-01-L-DV-K | Testopstelling_Navmate:FTSH10501LDVK | J1 |
| 1 | GND_PINS | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | J10 |
| 1 | LDI1117-3.3H | Testopstelling_Navmate:LDI1117-3.3H(SOT230P700X165-4N) | U3 |
| 1 | LPC1752FBD80,551 | Testopstelling_Navmate:LPC752FBD80(QFP50P1400X1400X160-80N) | IC1 |
| 1 | TEL_3-2411 | Testopstelling_Navmate:TEL_3-2411(TEL_3-0511) | U2 |
| 1 | TEL_3-2423 | Testopstelling_Navmate:TEL_3-2423(TEL30513) | U1 |
It measures 104 × 121 mm and has 2 copper layers, 1.6 mm thick.
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.
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.
Its repository states no licence, so its author keeps all rights: ask mitaadevelop before reusing the design.

AErbsloeh/stimulation_genv3
Hardware Design Files for Experimental Stimulation Platform (Gen 3)


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


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


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