Dit artikel beschrijft de ontwikkeling van een open-source capacitieve lineaire encoder, gebaseerd op het werkingsprincipe van digitale schuifmaten. Het project beoogt een elektrische nauwkeurigheid van ±10µm te bereiken, waarbij de huidige revisie op ongeveer 40µm zit.
De maker documenteert een reeks technische uitdagingen en oplossingen:
- Elektrische ruis: Door timing-kritische code in assembly te schrijven en data sync barriers toe te voegen, werd ruis van voedingen en motorstuurders verminderd.
- Hardware-optimalisatie: De overstap naar een ladingsintegrator en een Sallen-Key anti-alias filter verbeterde de signaal-ruisverhouding aanzienlijk.
- Mechanische factoren: Uit tests bleek dat fysieke resonanties van de testopstelling (rond 10 Hz) invloed hadden op de precisie.
- Fringing errors: Systematische fouten door gaten tussen de emitters werden opgelost door een gecontroleerde gap van 0,1 mm te creëren met Kapton-tape.
Het project is volledig open-source, inclusief PDF-schema's en validatiedata, met een geschatte bouwkost van $32.
Open-Source Capacitieve Encoder (40µm/1.6thou)
Projectomschrijving
De maker heeft een capacitieve lineaire encoder gebouwd en het volledige pakket open-source beschikbaar gesteld, inclusief instructies en validatiedata. De bouwkosten bedragen ongeveer $32 (exclusief verzendkosten).
De huidige elektrische nauwkeurigheid is ongeveer 40µm (1.6thou). Het uiteindelijke doel is om een elektrische nauwkeurigheid van ±10µm te bereiken, wat vergelijkbaar is met de claims van professionele encoders. Er wordt momenteel gewerkt aan verbeteringen voor een 'rev B' versie van het ontwerp.
Het project is momenteel niet geprofessionaliseerd; de maker streeft naar een grondigere analyse van de nauwkeurigheid en ruiscijfers en staat open voor suggesties ter verbetering. Gedetailleerde ontwerpinformatie, inclusief PDF-schema's, is beschikbaar in de bijbehorende repository.
Werking
De sensor werkt via capacitieve koppeling tussen zendpads (transmit pads), een ontvangstpad (receiving pad) en een analoge ingang:
- De microcontroller verzendt patronen van pulsen over de capaciteit.
- De capaciteit zorgt ervoor dat sommige pulsen groter en andere kleiner worden doorgelaten.
- Dit effect is lineair gerelateerd aan de positie.
Motivatie
Dit project is voortgekomen uit een langdurig persoonlijk project dat begon met het reverse-engineeren van digitale capacitieve schuifmaten. De reden voor het publiceren van deze encoder is het gebrek aan openbare informatie over dit type sensoren.
Ontwikkelingslogboeken
26 augustus 2026: Analyse van printerruis
De sensor werd gemonteerd op de Z-as van een 3D-printer en getest met stappen van 0,01 mm. Omdat het een vroege hardware-revisie betrof met een minder stabiel mechanisch ontwerp, was de opstelling erg wiebelig. De resultaten toonden de volgende foutbronnen:
- ~250 µm fout: veroorzaakt door de 8mm spoelstang (leadscrew) van de printer.
- ~150 µm elektrische ruis: hoofdzakelijk veroorzaakt door de voeding en motorstuurders van de printer.
- ~75 µm fout: periodiek per emitter.
- ~50 µm hysteresisfout: in de 3D-geprinte testbevestiging.
Om de elektrische ruis aan te pakken (veroorzaakt door de voeding die schakelt op 23 kHz), zijn de volgende softwarematige verbeteringen doorgevoerd:
- De vertraging tussen het schakelen van de emitters en het samplen van de RX-antenne is verkort, waardoor ruis naar hogere frequenties wordt verschoven.
- Timing-kritische code is omgezet naar assembly om compiler-optimalisaties te voorkomen.
- Er zijn 'data sync barriers' toegevoegd om jitter door memory-write caching te elimineren.
Hierdoor daalde de ruis van ongeveer 150 µm naar 100 µm piek-tot-piek.
12 september 2026: Verbeteringen aan de analoge hardware
Voor een resolutie van 1 µm is een signaal-ruisverhouding van 625 counts signaal per count ruis nodig. Het direct samplen van de RX-spike was onvoldoende. Drie opties werden overwogen:
- Differentiële opvangpads: In theorie effectief, maar in de praktijk werd slechts 30% onderdrukking geschat vanwege verschillen in near-field ruis.
- Switched capacitors: Goed in simulaties, maar vereist 8 tot 16 zeer nauwkeurig gematchte condensatoren.
- Ladingsintegrator (Charge integrator): Deze zet de korte spike om in een vastgehouden stap waarvan de hoogte wordt bepaald door een condensatorratio. De ADC kan dit vervolgens over een lang venster oversamplen.
Er is gekozen voor de ladingsintegrator, aangevuld met een 16 kHz, 2-pole Butterworth (Sallen-Key) anti-alias filter rond de interne opamp van de STM32. De ADC is timer-triggered en maakt gebruik van DMA voor een vaste sampling-timing. Hiermee is de fout gereduceerd tot ongeveer 20µm piek-tot-piek.
16 september 2026: Mechanische ruisproblemen
Na de hardware-updates bleef er een langzame wobble van 10 tot 20 Hz over. Na uitgebreid testen (waaronder het plotten van de ruwe positie in realtime) bleek dit geen elektrische ruis of aliasing te zijn, maar echte fysieke beweging.
Het frame van de printer resoneert op ongeveer 10 Hz (met harmonischen op 20 en 30 Hz), wat een beweging van circa 4µm piek-tot-piek veroorzaakt. Zelfs het kauwen van een hond op een bot in de buurt was genoeg om dit effect te triggeren.
11 oktober 2026: Fouten door geringe afstand (Gap)
Zonder afscherming was de puur elektrische ruis gedaald tot onder de 2 µm, wat ruim onder de nauwkeurigheidsvloer ligt. Tijdens kalibratie met een Mitutoyo-indicator bleken er echter systematische fouten over te blijven: een herhalende fout van ongeveer 80 µm piek-tot-piek per emitterbreedte.
Dit wordt veroorzaakt door de lege ruimte tussen de emitters (5mil ruimte tussen 20mil koperpads). Een stukvormige lineaire correctie (gebaseerd op theorie) verwijderde dit bijna volledig, terwijl een sinus-correctie slechter presteerde.
Om deze 'fringing error' te verminderen zonder softwarematige correctie, is besloten een gecontroleerde afstand (gap) van 0,1 mm tussen de printplaten aan te brengen. Hoewel dit resulteert in een lagere signaal-ruisverhouding (SNR), is de uiteindelijke nauwkeurigheid beter. Voor het instellen van deze afstand zijn twee lagen Kapton-tape gebruikt, wat nauwkeuriger bleek dan een 3D-geprint shimmetje.
Open-Source Capacitieve Encoder (40µm/1.6thou)
Projectomschrijving
De maker heeft een capacitieve lineaire encoder gebouwd en het volledige pakket open-source beschikbaar gesteld, inclusief instructies en validatiedata. De bouwkosten bedragen ongeveer $32 (exclusief verzendkosten).
De huidige elektrische nauwkeurigheid is ongeveer 40µm (1.6thou). Het uiteindelijke doel is om een elektrische nauwkeurigheid van ±10µm te bereiken, wat vergelijkbaar is met de claims van professionele encoders. Er wordt momenteel gewerkt aan verbeteringen voor een 'rev B' versie van het ontwerp.
Het project is momenteel niet geprofessionaliseerd; de maker streeft naar een grondigere analyse van de nauwkeurigheid en ruiscijfers en staat open voor suggesties ter verbetering. Gedetailleerde ontwerpinformatie, inclusief PDF-schema's, is beschikbaar in de bijbehorende repository.
Werking
De sensor werkt via capacitieve koppeling tussen zendpads (transmit pads), een ontvangstpad (receiving pad) en een analoge ingang:
- De microcontroller verzendt patronen van pulsen over de capaciteit.
- De capaciteit zorgt ervoor dat sommige pulsen groter en andere kleiner worden doorgelaten.
- Dit effect is lineair gerelateerd aan de positie.
Motivatie
Dit project is voortgekomen uit een langdurig persoonlijk project dat begon met het reverse-engineeren van digitale capacitieve schuifmaten. De reden voor het publiceren van deze encoder is het gebrek aan openbare informatie over dit type sensoren.
Ontwikkelingslogboeken
26 augustus 2026: Analyse van printerruis
De sensor werd gemonteerd op de Z-as van een 3D-printer en getest met stappen van 0,01 mm. Omdat het een vroege hardware-revisie betrof met een minder stabiel mechanisch ontwerp, was de opstelling erg wiebelig. De resultaten toonden de volgende foutbronnen:
- ~250 µm fout: veroorzaakt door de 8mm spoelstang (leadscrew) van de printer.
- ~150 µm elektrische ruis: hoofdzakelijk veroorzaakt door de voeding en motorstuurders van de printer.
- ~75 µm fout: periodiek per emitter.
- ~50 µm hysteresisfout: in de 3D-geprinte testbevestiging.
Om de elektrische ruis aan te pakken (veroorzaakt door de voeding die schakelt op 23 kHz), zijn de volgende softwarematige verbeteringen doorgevoerd:
- De vertraging tussen het schakelen van de emitters en het samplen van de RX-antenne is verkort, waardoor ruis naar hogere frequenties wordt verschoven.
- Timing-kritische code is omgezet naar assembly om compiler-optimalisaties te voorkomen.
- Er zijn 'data sync barriers' toegevoegd om jitter door memory-write caching te elimineren.
Hierdoor daalde de ruis van ongeveer 150 µm naar 100 µm piek-tot-piek.
12 september 2026: Verbeteringen aan de analoge hardware
Voor een resolutie van 1 µm is een signaal-ruisverhouding van 625 counts signaal per count ruis nodig. Het direct samplen van de RX-spike was onvoldoende. Drie opties werden overwogen:
- Differentiële opvangpads: In theorie effectief, maar in de praktijk werd slechts 30% onderdrukking geschat vanwege verschillen in near-field ruis.
- Switched capacitors: Goed in simulaties, maar vereist 8 tot 16 zeer nauwkeurig gematchte condensatoren.
- Ladingsintegrator (Charge integrator): Deze zet de korte spike om in een vastgehouden stap waarvan de hoogte wordt bepaald door een condensatorratio. De ADC kan dit vervolgens over een lang venster oversamplen.
Er is gekozen voor de ladingsintegrator, aangevuld met een 16 kHz, 2-pole Butterworth (Sallen-Key) anti-alias filter rond de interne opamp van de STM32. De ADC is timer-triggered en maakt gebruik van DMA voor een vaste sampling-timing. Hiermee is de fout gereduceerd tot ongeveer 20µm piek-tot-piek.
16 september 2026: Mechanische ruisproblemen
Na de hardware-updates bleef er een langzame wobble van 10 tot 20 Hz over. Na uitgebreid testen (waaronder het plotten van de ruwe positie in realtime) bleek dit geen elektrische ruis of aliasing te zijn, maar echte fysieke beweging.
Het frame van de printer resoneert op ongeveer 10 Hz (met harmonischen op 20 en 30 Hz), wat een beweging van circa 4µm piek-tot-piek veroorzaakt. Zelfs het kauwen van een hond op een bot in de buurt was genoeg om dit effect te triggeren.
11 oktober 2026: Fouten door geringe afstand (Gap)
Zonder afscherming was de puur elektrische ruis gedaald tot onder de 2 µm, wat ruim onder de nauwkeurigheidsvloer ligt. Tijdens kalibratie met een Mitutoyo-indicator bleken er echter systematische fouten over te blijven: een herhalende fout van ongeveer 80 µm piek-tot-piek per emitterbreedte.
Dit wordt veroorzaakt door de lege ruimte tussen de emitters (5mil ruimte tussen 20mil koperpads). Een stukvormige lineaire correctie (gebaseerd op theorie) verwijderde dit bijna volledig, terwijl een sinus-correctie slechter presteerde.
Om deze 'fringing error' te verminderen zonder softwarematige correctie, is besloten een gecontroleerde afstand (gap) van 0,1 mm tussen de printplaten aan te brengen. Hoewel dit resulteert in een lagere signaal-ruisverhouding (SNR), is de uiteindelijke nauwkeurigheid beter. Voor het instellen van deze afstand zijn twee lagen Kapton-tape gebruikt, wat nauwkeuriger bleek dan een 3D-geprint shimmetje.