LitexCNC: een open-source controller voor LinuxCNC

LinuxCNC kan hier besproken worden

Moderator: Moderators

Tolp2
Donateur
Berichten: 476
Lid geworden op: 28 nov 2015 10:06
Locatie: Rotterdam
Contacteer:

Re: LitexCNC: een open-source controller voor LinuxCNC

Bericht door Tolp2 »

jand schreef: 14 nov 2023 20:09 Gelukt, ik heb een knipperende LED, maar dan zonder LED :lol:
Pin 2 van j1 staat vrolijk heen en weer te gaan van een '1' naar een '0'

[...]

hopelijk valt er nog iets te doen aan de "Unexpected realtime delay on task 0 with period 1000000"
Ik had de hoop dat het image dat je kunt downloaden op linuxcnc.org/downloads/ helemaal geoptimaliseerd zou zijn.
Moet ik dus nog even naar kijken of er wat te verbeteren valt.

De volgende stap is dan toch echt het modificeren van de print en het bestukken van de HUB75HAT.
Kijk mooi nieuws. Bedankt voor het terugkoppelen!

De 'Unexpected realtime delay' komt door de toepassing van Ethernet in dit geval. Als je straks overgaat naar SPI ben je als het goed is dit kwijt. Wat me ook wel opvalt is dat als je het programma voor de tweede keer opstart, dat dan deze vaak verdwijnt. Ik weet alleen niet waardoor. Ethernet kent gewoon veel jitter op het netwerk.
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
Gebruikersavatar
clements
Berichten: 671
Lid geworden op: 29 jul 2010 23:30
Locatie: Dordrecht
Contacteer:

Re: LitexCNC: een open-source controller voor LinuxCNC

Bericht door clements »

Ik heb nu een oude pc draaien met linuxcnc erop. Direct via de parallelle poort. Heeft het voordelen om een controller kaart ertussen te plaatsen?
ASS-U-ME
Tolp2
Donateur
Berichten: 476
Lid geworden op: 28 nov 2015 10:06
Locatie: Rotterdam
Contacteer:

Re: LitexCNC: een open-source controller voor LinuxCNC

Bericht door Tolp2 »

clements schreef: 15 nov 2023 22:06 Ik heb nu een oude pc draaien met linuxcnc erop. Direct via de parallelle poort. Heeft het voordelen om een controller kaart ertussen te plaatsen?
Er zijn drie gevallen waarbij je een kaart zou kunnen gebruiken:
  • Je hebt niet genoeg IO op de printerpoort(en) zitten. Eventueel kan je in dit geval ook besluiten om een tweede printerpoort aan je systeem toe te voegen.
  • Je machine gaat niet snel genoeg. Met een printerpoort ben je afhankelijk van de base-thread, die een frequentie zal hebben van ongeveer 50 kHz. Met externe stappengeneratie kun je dit verhogen tot 400 kHz. Dit betekent dat je machine zomaar 2 tot 8 keer zo snel kan gaan lopen (wel alles veilig houden).
  • De PC komt langzaamaan te overlijden. In mijn schuur houdt een PC het misschien een jaar vol, misschien 2.
Als je machine nu naar tevredenheid draait, dan is er zeker geen noodzaak om over te stappen.
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
Gebruikersavatar
clements
Berichten: 671
Lid geworden op: 29 jul 2010 23:30
Locatie: Dordrecht
Contacteer:

Re: LitexCNC: een open-source controller voor LinuxCNC

Bericht door clements »

Mmm die laatste 2 punten snijden wel hout. M’n de pc die nu kuren vertoont. Laatst bevroor de pc tijdens een klu, denk door een gare ram.
ASS-U-ME
Tolp2
Donateur
Berichten: 476
Lid geworden op: 28 nov 2015 10:06
Locatie: Rotterdam
Contacteer:

Re: LitexCNC: een open-source controller voor LinuxCNC

Bericht door Tolp2 »

Deel 4: Communicatie via SPI
Dit deel is specifiek voor de combinatie van Raspberry Pi en LitexCNC. Een PC heeft normaliter geen SPI-poort en kan daarom alleen via ethernet met de LED-kaart communiceren.

De voordelen van SPI boven ethernet zijn:
  • Minder overhead. Via ethernet kost het verzenden en ontvangen van data tijd. Het verzenden en ontvangen van data (een zogeheten round-trip) kost ongeveer 0,2 ms. Je kan dit controleren door ping <ip-adres> uit te voeren op een ethernet-versie van de LED-kaart. Voor iedere cyclus van LinuxCNC zijn in totaal 3 round-trips nodig: 1) lezen van gegevens van de kaart (2 round-trips) en 2) schrijven van nieuwe gegevens naar de kaart (1 round-trip). Dit betekent dat in totaal circa 0,6 ms van de cyclus wordt besteed aan communicatie! Dat is best wel veel voor een cyclus die in totaal 1 ms duurt.
  • Makkelijkere firmware. De firmware zonder ethernet is lichter, waardoor de LED-kaart op een hogere frequentie kan draaien en het compileren van de firmware sneller gaat.
Er is ook een nadeel: SPI loopt via de HUB75 headers van de LED-kaart en bestaat uit input en output. De buffers op de LED-kaart moeten daarom vervangen worden.

De firmware
Onderstaand is de firmware voor het voorbeeld, noem het bestand 'blink_spi.json'.

Code: Selecteer alles

{
    "board_name": "blink",
    "board_type": "5A-75E v6.0",
    "clock_frequency": 35000000,
    "connection": {
        "connection_type": "spi",
        "mosi": "j5:14",
        "miso": "j5:12", 
        "clk":  "j5:13",
        "cs_n": "j5:11"
    },
    "modules": [
        {
            "module_type": "gpio",
            "instances": [ 
                {"direction": "in", "pin":"j1:0"},
                {"direction": "out", "pin":"j1:2"},
            ]
        }
    ]
}
Bovenstaande indeling is gelijk aan de verbindingen op de HU75HAT!

De firmware kan nu gebouwd worden met het volgende commando:

Code: Selecteer alles

litexcnc build_firmware blink_spi.json --build
Flashen firmware
Na het bouwen van de firmware is de gecompileerde firmware the vinden in de map /blink_spi/gateware (relatief gezien vanaf de plaats waar de configuratie staat). Om de firmware te gebruiken we de GPIO van de Raspberry Pi. De volgende links moeten worden gelegd, dit kan met jumper wires:
  • GPIO header pin 36 -> J27 (TCK)
  • GPIO header pin 31 -> J31 (TMS)
  • GPIO header pin 35 -> J32 (TDI)
  • GPIO header pin 37 -> J30 (TDO)
  • GPIO GND naar GND van de LED kaart
Bovenstaande indeling is gelijk aan de verbindingen op de HU75HAT!

Wanneer de verbinding is gelegd kan de firmware worden geflasht met het volgende commando:

Code: Selecteer alles

litexcnc flash_firmware /blink_spi/gateware/colorlight.svf
De volgende output zal worden gegenereerd (paden kunnen verschillen) wanneer het flashen goed gaat:

Code: Selecteer alles

Open On-Chip Debugger 0.12.0+dev-00290-g2e60e2eca (2023-08-21-22:34)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
SysfsGPIO nums: swclk = 11, swdio = 25
jtag
Info : SysfsGPIO JTAG/SWD bitbang driver
Info : JTAG tap: ecp5.tap tap/device found: 0x41111043 (mfg: 0x021 (Lattice Semi.), part: 0x1111, ver: 0x4)
Warn : gdb services need one or more targets defined
svf processing file: "/home/emco5/git/emco5/firmware/emco5_spi/gateware/colorlight.svf"
95%
Bedraden
Wanneer gebruik wordt gemaakt van de HUB75HAT, dan kan deze stap worden overgeslagen: alle verbindingen worden dan geregeld door de HBU75HAT.

Onderstaande afbeelding geeft de SPI op de RasberryPi weer.

Afbeelding

De volgende links moeten worden gelegd, dit kan met jumper wires:
  • GPIO header pin 19-> J5, pin 15 (MOSI)
  • GPIO header pin 21-> J5, pin 13 (MISO)
  • GPIO header pin 23 -> J5, pin 14 (CLOCK)
  • GPIO header pin 24 -> J5, pin 12 (CS)
  • GPIO GND naar GND van de LED kaart
LET OP: In bovenstaande lijst worden pin-nummer gebruikt (start bij pin 1), terwijl in de configuratie gestart wordt bij 0!

LED aansturen met halrun
Met halrun kunnen HAL-commando's worden uitgetest en kan worden opgestart met:

Code: Selecteer alles

halrun
In de terminal die vervolgens verschijnt kunnen vervolgens commando's worden ingegeven. Om de LED aan te sturen, maken we eerst verbinding met de LED-kaart en zorgen dat deze in het proces van de HAL komt te hangen. Hierbij is het van belang dat de status LED-kaart eerst wordt gelezen, daarna kan de HAL met deze informatie de nieuwe gewenste staat berekenen, waarna deze wordt weggeschreven naar de LED-kaart.

Code: Selecteer alles

loadrt litexcnc connections="pigpio:0:1000000"
loadrt threads name1=test-thread period1=1000000

# Add litexcnc to the thread
addf blink.read test-thread
addf blink.write test-thread

start
Vervolgens kan de LED worden aangezet met het volgende commando:

Code: Selecteer alles

setp blink.gpio.00.out 1
En weer worden uitgezet met:

Code: Selecteer alles

setp blink.gpio.00.out 0
Type exit om halrun weer te verlaten.

Uitleg connection string
In bovenstaand voorbeeld wordt de connection string pigpio:0:1000000 gebruikt om verbinding te leggen via SPI. Deze string bestaat uit drie delen <driver>:<cs>:<speed>:
  • driver: voor SPI zijn er twee drivers beschikbaar. Voor de Raspberry Pi levert pigpio de beste resultaten.
  • cs: op welke CS-pin is de kaart aangesloten. De Raspberry Pi heeft twee CS pinnen: 0 en 1. In dit voorbeeld is de LED-kaart aangesloten op CS0.
  • speed: de communicatiesnelheid in Hz. In dit voorbeeld is de snelheid dus 1 MHz. Een te hoge snelheid leidt tot informatie die niet goed aankomt. Als dit het geval is, dan zal de kaart niet worden herkend en wordt een foutmelding gegeven. Aanbevolen snelheid ligt tussen 1 MHz en 2 MHz voor de huidige firmware.
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
benkr
Donateur
Berichten: 7790
Lid geworden op: 16 jun 2012 16:32
Locatie: Valkenswaard

Re: LitexCNC: een open-source controller voor LinuxCNC

Bericht door benkr »

Na wat zoeken kom ik uit bij deze Pi, zou dat een goede keuze zijn?

https://www.kiwi-electronics.com/nl/ras ... G0QAvD_BwE

En wanneer ik een PC ga gebruiken, wat zijn dan de voor- en nadelen?
jand
Donateur
Berichten: 79
Lid geworden op: 22 sep 2012 16:11
Locatie: Den Helder
Contacteer:

Re: LitexCNC: een open-source controller voor LinuxCNC

Bericht door jand »

Ik gebruik hetzelfde model. Ik heb alleen te veel jitter met de ethernet interface. Als je de snelheid van de servo thread iets verlaagt gaat het goed. Ik gebruik deze pi nu met een mesa kaart. Volgens Tolp2 gaat het beter als hij via SPI is aangesloten.

Een gewone PC mag geen probleem geven als je de jitter goed krijgt. Vooral een core2 heb ik goede ervaring mee kwa jitter. Het nadeel kan zijn dat de tutorial hier gericht is op een pi
Tolp2
Donateur
Berichten: 476
Lid geworden op: 28 nov 2015 10:06
Locatie: Rotterdam
Contacteer:

Re: LitexCNC: een open-source controller voor LinuxCNC

Bericht door Tolp2 »

benkr schreef: 19 nov 2023 23:17 Na wat zoeken kom ik uit bij deze Pi, zou dat een goede keuze zijn?

https://www.kiwi-electronics.com/nl/ras ... G0QAvD_BwE

En wanneer ik een PC ga gebruiken, wat zijn dan de voor- en nadelen?
Dit is exact dezelfde versie als ik gebruik voor de ontwikkeling van het systeem. Eventueel zou je ook kunnen overwegen om een RPi5 aan te schaffen. die zijn nog krachtiger en qua prijs vergelijkbaar.
jand schreef: 20 nov 2023 07:42 Ik gebruik hetzelfde model. Ik heb alleen te veel jitter met de ethernet interface. Als je de snelheid van de servo thread iets verlaagt gaat het goed. Ik gebruik deze pi nu met een mesa kaart. Volgens Tolp2 gaat het beter als hij via SPI is aangesloten.

Een gewone PC mag geen probleem geven als je de jitter goed krijgt. Vooral een core2 heb ik goede ervaring mee kwa jitter. Het nadeel kan zijn dat de tutorial hier gericht is op een pi
Gebruik je Buster of Bookworm? Bookworm kent iets meer jitter dan de oudere versie.

Voor een gewone PC is deze tutorial ook geschikt: je gebruikt dan alleen Ethernet in plaats van SPI; deze is behandeld in deel 2 qua configuratie. Eenmaal in de HAL van LinuxCNC is er geen onderscheidt tussen de twee versies, behalve dan de connection string. Als mensen ergens tegenaan lopen schrijf ik daar ook een tutorial voor.
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
Gebruikersavatar
hainjedaf
Donateur
Berichten: 2468
Lid geworden op: 01 aug 2011 10:01
Locatie: Amsterdam
Contacteer:

Re: LitexCNC: een open-source controller voor LinuxCNC

Bericht door hainjedaf »

Tolp2 schreef: 20 nov 2023 10:18
benkr schreef: 19 nov 2023 23:17 Na wat zoeken kom ik uit bij deze Pi, zou dat een goede keuze zijn?
En wanneer ik een PC ga gebruiken, wat zijn dan de voor- en nadelen?
Dit is exact dezelfde versie als ik gebruik voor de ontwikkeling van het systeem. Eventueel zou je ook kunnen overwegen om een RPi5 aan te schaffen. die zijn nog krachtiger en qua prijs vergelijkbaar.
Pi 5 is denk ik overkill. Pi 4 zal sterk genoeg zijn, zeker als je er alleen je CNC mee aanstuurt. Bart/DaBit heeft daar net effe meer ervaring.
jand schreef: 20 nov 2023 07:42 Ik gebruik hetzelfde model. Ik heb alleen te veel jitter met de ethernet interface. Als je de snelheid van de servo thread iets verlaagt gaat het goed. Ik gebruik deze pi nu met een mesa kaart. Volgens Tolp2 gaat het beter als hij via SPI is aangesloten.

Een gewone PC mag geen probleem geven als je de jitter goed krijgt. Vooral een core2 heb ik goede ervaring mee kwa jitter. Het nadeel kan zijn dat de tutorial hier gericht is op een pi
Gebruik je Buster of Bookworm? Bookworm kent iets meer jitter dan de oudere versie.
Maakt niet zo heel veel uit. De meeste winst valt te behalen door zelf een kernel te bouwen met de Real time extensies erin (gepatcht).

Ik ben enkele jaren geleden ooit mer Bart/DaBit samen daaraan bezig geweest toen die zijn 3D printer obv Pi 3 ging bouwen.
De meeste winst zit hem in de juiste en goed gecompileerde kernel.
PC is daar niet beter of slechter qua jitter. En de Pi heeft inmiddels ook al 4-8Gb RAM.

Daarnaast hebben Pi 4 en 5 meer cores onder de motorkap dus kan je ook wat gemakkelijker een core specifiek aan realtime loop toewijzen.
Voor een gewone PC is deze tutorial ook geschikt: je gebruikt dan alleen Ethernet in plaats van SPI; deze is behandeld in deel 2 qua configuratie. Eenmaal in de HAL van LinuxCNC is er geen onderscheidt tussen de twee versies, behalve dan de connection string. Als mensen ergens tegenaan lopen schrijf ik daar ook een tutorial voor.
Welk verschil SPI vs Ethernet, geen idee. SPI gaat meen ik tot max 10 MHz.
Wij werkten toen nog obv directe aansturing vanuit de Pi3 GPIO of serieel naar een STM32 die de functie van IO controller had.
Met vriendelijke groet,
Marout Sluijter-Borms,
Amsterdam

Prusa Mini+ Wifi & X1 Carbon met X1Plus
Sparren en tinkeren met iedereen en over alles wat techniek is.
Gebruikersavatar
DaBit
Donateur
Berichten: 11041
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: LitexCNC: een open-source controller voor LinuxCNC

Bericht door DaBit »

hainjedaf schreef: 20 nov 2023 12:49 Pi 5 is denk ik overkill. Pi 4 zal sterk genoeg zijn, zeker als je er alleen je CNC mee aanstuurt. Bart/DaBit heeft daar net effe meer ervaring.
Nee, niet zoveel. Ik heb nog nooit wat nieuwers dan een Pi 3 in mijn klauwtjes gehad.
Dat ding komt voor algemeen CNC-gebruik vooral zwaar te kort op grafisch gebied. De preview van een G-code file van een paar honderd kbytes was niet te doen. Zonder die preview was een Pi 3 al wel prima, maar voor je algemene CNC-besturing wil je dat niet.

Geen idee of de Pi 4 en 5 op dat gebied zoveel verbeterd zijn dat het wel een optie is, en of het goed genoeg is in vergelijking met een x86 van dezelfde prijsklasse. Een mini-ITX bordje met een Celeron, beetje RAM en klein SSDtje kost immers niet veel meer.
Wij werkten toen nog obv directe aansturing vanuit de Pi3 GPIO of serieel naar een STM32 die de functie van IO controller had.
Als je mijn spul bedoelde: dat van de workshop was via USB. Een HID-device doet alleen interrupt-transfers, maar wel strak 1000x per seconde. Dat was voldoende voor een servothread van 500Hz. Bluepill bordje van 1 euro nogwat (STM32F103) draaide vervolgens velocity-generatoren richting de steppers, de positie-PID's waren geimplementeerd in LinuxCNC. Werkte prima, en met dat kostenniveau kon je nog eens wat slopen.

De 3D printer gebruikte ST STSPIN stepperdrives op SPI, wederom in velocity-mode met de PIDs in LinuxCNC. Buiten de Pi geen extra hardware nodig voor de steppers en eventueel een paar limietschakelaars. Ik gebruikte de L6470, maar met de powerSTEP01 kun je tot 85V en 10A per motor gaan.

Maargoed, dat is allemaal wat offtopic voor hier. Litexcnc is flexibeler en krachtiger.
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Tolp2
Donateur
Berichten: 476
Lid geworden op: 28 nov 2015 10:06
Locatie: Rotterdam
Contacteer:

Re: LitexCNC: een open-source controller voor LinuxCNC

Bericht door Tolp2 »

DaBit schreef: 20 nov 2023 16:22 Geen idee of de Pi 4 en 5 op dat gebied zoveel verbeterd zijn dat het wel een optie is, en of het goed genoeg is in vergelijking met een x86 van dezelfde prijsklasse. Een mini-ITX bordje met een Celeron, beetje RAM en klein SSDtje kost immers niet veel meer.
De Pi4 is een heel stuk sterker dan de Pi3. Grootste verschil is het geheugen (1 Gb vs. 4 Gb) en een nieuwere processor. Wanneer je kijkt naar de benchmarks, dan is de Pi4 een factor 3 tot 4 krachtiger.

Het verschil tussen een Pi4 en een Pi5 is minder groot, ongeveer 20%. Maar de Pi5 heeft de mogelijkheid tot het booten vanaf een NVME-drive en daarmee is de betrouwbaarheid verbeterd.
DaBit schreef: 20 nov 2023 16:22 Maargoed, dat is allemaal wat offtopic voor hier
Ik denk dat dit soort overwegingen wel bijdragen aan dit topic. En daarnaast worden straks de relevante delen omgezet naar de kennisbank.
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
benkr
Donateur
Berichten: 7790
Lid geworden op: 16 jun 2012 16:32
Locatie: Valkenswaard

Re: LitexCNC: een open-source controller voor LinuxCNC

Bericht door benkr »

Peter, kun je ook eens iets vertellen over het gebruik van een PC i.p.v. die Pi?
Ik heb meerdere kleine PC's liggen en totaal geen ervaring met een Pi.
Tolp2
Donateur
Berichten: 476
Lid geworden op: 28 nov 2015 10:06
Locatie: Rotterdam
Contacteer:

Re: LitexCNC: een open-source controller voor LinuxCNC

Bericht door Tolp2 »

benkr schreef: 20 nov 2023 23:22 Peter, kun je ook eens iets vertellen over het gebruik van een PC i.p.v. die Pi?
Ik heb meerdere kleine PC's liggen en totaal geen ervaring met een Pi.
Welke onderwerpen zie je dan het liefst:
  • Installeren LinuxCNC op de PC;
  • Installeren LitexCNC
  • Bouwen en flashen van de firmware
Wel even een belangrijke check: zijn de PC's 32-bit of 64-bit? Voor het bouwen van de firmware is namelijk geen image beschikbaar voor x86 (32-bit) systemen. In dat geval zou de firmware op een ander systeem moeten gebeuren.
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
Tolp2
Donateur
Berichten: 476
Lid geworden op: 28 nov 2015 10:06
Locatie: Rotterdam
Contacteer:

Re: LitexCNC: een open-source controller voor LinuxCNC

Bericht door Tolp2 »

hainjedaf schreef: 20 nov 2023 12:49 Welk verschil SPI vs Ethernet, geen idee. SPI gaat meen ik tot max 10 MHz.
Het grote verschil tussen SPI en Ethernet is een trip naar userland, waar jitter op kan voorkomen. Hierin is SPI veel beter, omdat de GPIO pinnen direct worden aangestuurd. Dat deel van de driver was nog een kleine uitdaging :mrgreen: . Er bestaan technisch gezien twee drivers: spidev en pigpio. De pigpio is specifiek voor de RPi geschreven en heeft niks met userspace te maken en kan daardoor sneller. De spidev loopt via een generieke file-descriptor en is daardoor veel langzamer (maar kan bijvoorbeeld wel gebruikt worden op een ODroid).

De bandbreedte van Ethernet ligt veel hoger dan SPI (125 MHz vs 10 MHz, 4 data-paren vs 1 kanaal). Maar het is juist de omweg via de userspace die dit allemaal teniet doet.
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
Plaats reactie