18-09-2026 · 9 min lezen

Een werktafel met ingebouwde CNC

Van een 30x30 machine op een Workmate naar een klustafel van 2000x900 waar de CNC gewoon in zit.

Mijn eerste CNC frees was een machine van 20x20 aluminiumprofiel met een 1,5 kW spindle. Een bewegend bed voor de X-as, een gantry voor Y en Z, werkoppervlak 30 bij 30 cm. Het geheel stond op een Workmate. Dit was een prima machine om op te leren hoe je een CNC machine maakt, maar samen met mijn werktafel en de serverkast nam hij onnodig veel ruimte in de schuur in. En hij stond eigenlijk altijd in de weg.

Dus heb ik het omgedraaid: de werktafel is nu de machine.

Werktafel en machine in een

Het nieuwe frame is opgebouwd uit 80x80 aluminiumprofiel:

  • werkblad van 2000 x 900 mm
  • CNC werkgebied van 1600 x 700 x 300 mm
  • een ladencompartiment
  • een compartiment voor het serverrack

De gantry doet alle drie de assen en staat naar achteren geparkeerd als hij niet in gebruik is. Dan is het gewoon een klustafel. Start je een programma, dan is dezelfde tafel een CNC frees. Hierdoor heb ik meer ruimte in de schuur en een veel groter werkoppervlak dan de oude machine.

De machine zoals hij nu in de schuur staat

Zo staat hij er nu bij. Links de laden, rechts het serverrack met de compressor ernaast, en op het blad de bankschroef, de BT30 toolholders en het scherm met LinuxCNC. De gantry staat naar achteren geparkeerd, het voorste deel van het blad is dan gewoon werkbank.

Noodstop en kabelrupsen op de gantry

Alle bekabeling naar de bewegende delen loopt door kabelrupsen. De noodstop zit op de hoek van de gantry, zodat hij altijd binnen handbereik is. De krachtstroom komt binnen via de CEE aansluiting aan de muur.

De spindelslede

De spindelslede van voren

Op de slede zit meer dan alleen een frees. Bovenaan zit de stappenmotor voor de Z-as, daaronder het pneumatiekblok met de ventielen en een eigen breakoutbordje, en onderaan de 1,5 kW spindle. De grijze motor is een 1000 watt AC servo die er via een riem naast hangt.

De spindelslede van de zijkant, met servo en riemaandrijving

Die servo is er voor de tweede kop: de spindle is handmatig te wisselen voor een BT30 spindle voor lage toeren, aangedreven door de servo via de riem. Hierdoor kan de machine automatisch tools wisselen. Zeven tools in de holder, en het wisselen gaat op luchtdruk met een pneumatische cilinder. Zo kan ik zwaarder verspanen op lage toeren en een reeks bewerkingen achter elkaar draaien zonder handmatig gereedschap te wisselen.

De watergekoelde router spindle los op de werkbank

De watergekoelde 1,5 kW router spindle los op de werkbank. Dit is de kop die eruit gaat als de BT30 erin zit. De overbrengingsverhoudingen voor de riem staan nog in potlood op het blad.

Het wisselen zelf is een paar minuten werk: twee kogelkranen dicht, de VFD kabel en de waterslangen van de spindle af (push to fit, 8 mm, met kogelkraan), spindle eraf en de BT30 erop. Al blijft de BT30 er voorlopig gewoon op zitten.

LinuxCNC, van 2.7 naar 2.9

De oude machine draaide op LinuxCNC 2.7 met een PCI kaart en een DB25 breakout. De nieuwe draait LinuxCNC 2.9 en praat via ethernet met een Mesa 7i76EU.

LinuxCNC is geen programma maar een stapel lagen:

  • onderin een realtime kernel (PREEMPT_RT) die garandeert dat de motion lus elke milliseconde draait, ook als de desktop druk is
  • daarboven de servo thread van 1 kHz: posities uitrekenen, PID regelaars, I/O lezen en schrijven
  • dan HAL, de Hardware Abstraction Layer: een virtueel breadboard waarin je componenten met signalen aan elkaar knoopt, gewoon in tekstbestanden
  • daarboven de G-code interpreter en de motion planner, die niets van de hardware weten
  • bovenop de GUI met eigen panelen

Het verschil met GRBL achtige oplossingen is dat de realtime daar in een microcontroller zit, hier in de pc zelf. Hierdoor is elke laag te vervangen of uit te breiden zonder de rest te raken. De prijs is dat je alle lagen een beetje moet kennen voordat een niet standaard machine werkt. En deze machine is behoorlijk niet standaard.

Een machine bouwen in LinuxCNC is voor 80 procent HAL bedrading schrijven. De noodstop is bijvoorbeeld een fysieke ingang die via een estop latch naar de machine enable loopt, en de driver alarmen van de assen prikken via OR poorten op datzelfde latch in.

LinuxCNC met een eigen bedieningspaneel

Het scherm op de tafel draait AXIS met een eigen paneel ernaast: automatisch nulpunt zoeken met de edgefinder, een surface map voor Z-compensatie, toolwissel met vaste meetsensor en een eigen blok voor de tweede spindel. Alles wat ik eerst met losse commando's deed zit nu achter een knop. Onder de motorkap is dat pyvcp XML, G-code subroutines en een stukje Python in de AXIS opstart, voor alles wat het paneel zelf niet kan: tooltips, waardes terugschrijven en instellingen onthouden na een herstart.

Hoe de machine erop gemapt is

  • De pc doet de regeling, de Mesa kaart doet de precisie: stappulsen, encoder tellers en 48 geïsoleerde in- en uitgangen. Elke milliseconde gaat er een UDP pakketje heen en een terug. Valt de pc weg, dan bevriest een watchdog op de kaart alle uitgangen.
  • De closed loop steppers gedragen zich als servo's. LinuxCNC commandeert snelheid met een PID regelaar per as, de kaart maakt er pulsen van en de positie komt uit de teller terug.
  • Spindel 0 is de watergekoelde router aan een frequentieregelaar via RS485, met een echt op-toeren signaal uit de uitgangsfrequentie van de regelaar in plaats van een aanname.
  • Spindel 1 is de BT30 servo op een eigen stepgen kanaal, met de encoder terug naar de Mesa. Hierdoor kent LinuxCNC de werkelijke spindelstand en kan hij straks op de graad nauwkeurig oriënteren, de basis onder de toolwisselaar.
  • Omdat de koppen fysiek gewisseld worden bepaalt een vinkje in het paneel waar "de spindel" heen gaat. De verkeerde kop is vergrendeld en een programma dat hem toch aanroept wordt afgebroken. Een toerenklem voorkomt dat een oud houtprogramma met S16000 de BT30 overtoert.
  • Er draaien drie eigen realtime componenten in C: een vlakheidscompensatie die een gemeten scheefstand van het werkstuk realtime in de Z-as verrekent, een hulpje om de encoder op de indexpuls te nullen vanaf een paneelknop, en een hoekdisplay. Elk zo'n tien regels code.

Die vergrendeling klinkt misschien overdreven, maar een frequentieregelaar zonder motor meldt gewoon "op toeren". De machine freest dan met een stilstaande spindel het werkstuk in. Een AND poort en een abort signaal voorkomen dat.

De elektronica

De Mesa 7i76EU in het kastje

De Mesa 7i76EU in het kastje, met de veldbekabeling gelabeld op de klemmen. Alles zit op klemmen in plaats van een printerkabel.

Klemmenstroken en RJ45 breakouts

Alle signalen lopen via klemmenstroken, oranje en blauw gescheiden per functie. Op de RJ45 breakouts links komen de signaalkabels binnen: de proximity sensoren, de touch-off en de aansturing van de pneumatiekventielen, elk over een eigen afgeschermde netwerkkabel. Met een doordacht klemmenplan gaat troubleshooten tien keer zo snel.

De servodrive van de BT30 spindle

De 1 kW servodrive voor de BT30 kop, met de motorfasen en de encoder op hun eigen connectoren. De rode markering geeft aan waar geen remweerstand op mag.

Vier voedingen op een rij

Aparte voedingen voor de stappenmotoren, de 24 volt besturing en de rest. Zo zit niets op een gedeelde rail op elkaar te storen.

De stappendrivers met afgeschermde kabels

De stappendrivers, elk met een afgeschermde motorkabel en de afscherming op één punt aan aarde. De gele tape is tijdelijk.

De hele elektronica-la in één beeld

Alles bij elkaar in het compartiment onder het blad: Mesa, klemmenstroken, servodrive, voedingen en drivers. Ik kan erbij door een la open te trekken.

Het rack met meterkast, servers en PDU

Het serverrack compartiment. Bovenin een eigen groepenkast met aardlekautomaten per functie en een kWh meter, daaronder de rackservers en de PDU. De machine en de servers hebben elk hun eigen groep.

Twee dingen staan niet op de foto's. Onder het blad van de elektronica hangt de VFD die de router spindle aanstuurt, en achter de servers zit een radiator uit een Fiat die het koelwater van de spindle koelt.

Wat ik onderweg geleerd heb

LinuxCNC controleert bijna niets voor je. Verwissel twee encoderdraden en de positielus draait de verkeerde kant op, het systeem vindt het prima. Alles kan, dus elke fout kan ook. Een paar lessen uit deze build:

  • Vertrouw nooit een kleurcode of een pinnummer. De motorfasen van de closed loop kits bleken anders gekoppeld te zijn dan de datasheet aangeeft, encoderkleuren waren contra-intuïtief en de fabriekskabel van de servo was per ader gelabeld maar anders dan het schema in de handleiding. De regel is geworden: doorpiepen aan beide uiteinden, labels winnen van kleuren, en metingen winnen van alles.
  • Fail-safe denken loont. Een alarm uitgang die pas geleidt bij een fout heeft een blinde vlek: drive uit of draad los leest als gezond. De ready uitgang die juist geleidt als alles goed is, is de betere bewaker, want draadbreuk telt dan automatisch als fout. Dezelfde filosofie als NC noodstoppen en NC eindschakelaars.
  • Tekens en schalen zijn de helft van het inregelen. De encoder telde andersom dan de stuurrichting. Dat is één minteken in de config, maar wel het minteken dat het verschil maakt tussen een positielus die vastklikt en één die wegloopt. Ik heb een testscript gemaakt dat zelf beide draairichtingen meet en de diagnose print, en dat haalde het er in één run uit.
  • Een riemoverbrenging vraagt eenhedendiscipline. Met een 48:30 riem tussen motor en spindel moet alles weten of het over de motor of de spindel praat: S-woorden, toerentaldisplays en de toerenklem. En de indexpuls van de motor is dan geen eenduidige spindelhoek meer, dus echte spindeloriëntatie voor de toolwisselaar vraagt straks een referentie aan de spindelkant.
  • Opstartvolgorde is echt. Paneelwaarden bestaan pas als de interface draait, realtime componenten draaien vanaf seconde nul. Veilige standaardwaarden op de pinnen tot het paneel het overneemt, en de foutmeldingen zijn weg.

Waarom dan toch LinuxCNC

Alles wat hierboven lastig klinkt is ook de reden dat deze machine kan wat hij kan: twee totaal verschillende spindels achter één interface, probing routines op maat, een vlakheidscompensatie die realtime meeloopt en een toolwisselaar in aanbouw. Er is geen gesloten controller in deze prijsklasse die dat toestaat. De leercurve is de toegangsprijs. Wat je terugkrijgt is een machine waarvan je elk draadje en elke regel zelf begrijpt.

Status

De machine freest (werk in uitvoering!). De eerste tests zijn gedaan en de basis werkt: sturen, homen, nulpunt zoeken, toolwissel meten. De Z-as heeft nog te veel speling en dat hoor je terug als chatter in het werkstuk. Daar komt dus een aanpassing.

Dit project is nooit echt af, en dat is ook precies de bedoeling. Elke uitbreiding is weer een excuus om iets nieuws uit te zoeken. Vragen over de opbouw, de besturing of de keuzes onderweg? Ik hoor het graag.