Ombouw EMCO 5 CNC naar LinuxCNC - step by step

LinuxCNC kan hier besproken worden

Moderator: Moderators

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

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door Tolp2 »

DaBit schreef: 15 jan 2021 21:23 er een extern USB-chippie in te schakelen, maar er een USB HID device van maken ipv CDC/ACM is veel mooier. HID gebruikt interrupt-transfers en daarmee heb je garanties kwa overdracht; zet de latencytimer op 1 en je kunt strak elke milliseconde 64 bytes aan data transporteren. Ik heb het nog nooit gezien dat dat niet lukt.
Met CDC kan het voorkomen dat de PC het even druk heeft en wat data opspaart of wegknikkert; je hebt exact 0 garantie op de latency. En dat heb ik wel regelmatig gezien.
Er zit een truc in de Arduino. Op het moment dat de PC er klaar voor is, stuurt hij een query-command naar de Arduino. Deze antwoord met zijn huidige state (3 counters + axis selection + scale selection + 7 knoppen = totaal 15 bytes). Als je een knop indrukt wordt dit net zolang opgeslagen totdat LinuxCNC weer de state opvraagt. Op dit moment is de update ratio ongeveer 20 keer per seconde. Dit ga ik nog oprekken naar 100 keer per seconde, wat sneller genoeg is.

Mocht je het echt willen: je kunt van de Arduino ook een HID maken, maar ik heb nog niet een idee hoe ik daarvoor een component kan maken.
DaBit schreef: 15 jan 2021 21:23 Anders dan dat is een Arduino lekker praktisch, en een HC595 ook. Toppie. Misschien gewoon de code op Github zetten?
De code komt op Github; de toolerator staat er al op. Zodra dit goed getest is, dan zet ik deze er natuurlijk ook op.
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
Gebruikersavatar
DaBit
Donateur
Berichten: 11032
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door DaBit »

Tolp2 schreef: 15 jan 2021 22:29 maar ik heb nog niet een idee hoe ik daarvoor een component kan maken.
Oh, dat is eigenlijk even simpel als serieel.

Hier de code die ik destijds voor de LinuxCNC workshop gebruikte waar ik de cursisten een STM32 bordje en stepperdrive aan een VirtualBox instantie liet knopen; dan is USB zo'n beetje de enige communicatiemogelijkheid. Is niet de netste code aller tijden, maar het was ook maar voor een doel geschreven en ik had een harde deadline :mrgreen:
Kijk effe over al dat rtapi-gedoe heen; dit is een 'echt' realtime HAL-component, bij een userspace-component hoeft dat allemaal niet.

ca. regel 165 is device openen, regel 284 is verzenden naar PC, 289 is data binnenlepelen, en het spul bonkt gewoon de inhoud van structures heen en weer. Kan niet simpeler dan dat eigenlijk, gewoon read en write.

De code voor de STM32 staat er ook; die gebruikt de ST USB library en is daarmee eigenlijk niet veel ingewikkelder.
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: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door Tolp2 »

DaBit schreef: 16 jan 2021 00:09 Oh, dat is eigenlijk even simpel als serieel.
Leuk voorbeeld, dank je. Ik was al eerder tegen je GitHib aangelopen, maar kon het nog net niet aan elkaar puzzelen. Met jouw beschrijving was het net voldoende.

Aangezien ik RTAI draai (en niet RT_PREEMT) moet nog wel het nodige verbouwd worden. Ik verbouw je code naar een comp-file, zodat hij als het goed is op beide platformen kan draaien. Waarom heb jij gekozen voor plain C in plaats van een comp-file?

Zo'n SMT bordje, is dat trouwens multi-processing? In de main loop zie ik namelijk wel het verzenden van de data. Het ontvangen en verwerken van de data kon ik niet in die loop vinden. Hoe zit dat?
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
Gebruikersavatar
DaBit
Donateur
Berichten: 11032
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door DaBit »

Tolp2 schreef: 17 jan 2021 09:34 Aangezien ik RTAI draai (en niet RT_PREEMT) moet nog wel het nodige verbouwd worden. Ik verbouw je code naar een comp-file, zodat hij als het goed is op beide platformen kan draaien.
Voor bedieningsdingen die geen harde realtime-eis hebben kun je er het beste een userspace-component van maken zoals je ook gedaan hebt met je huidige seriele code neem ik aan. Of je nu een /dev/ttyX device opent of een /dev/hidraw device is ook geen verschil.

(realtime component dat USB doet kan onder RTAI ook niet BTW; er zijn onder RTAI geen OHCI/EHCI drivers beschikbaar voor zover ik weet)
Waarom heb jij gekozen voor plain C in plaats van een comp-file?
Omdat het eerst niet werkte. Toen heb ik eens goed naar de hostmot2 Ethernet drivers gekeken, die structuur aangehouden, om er vervolgens achter te komen dat het niet werkte vanwege een stupid user error aan mijn kant.
Achteraf is daar geen reden meer voor; als comp zou het ook moeten werken. Als pure C code zie je enkel al dat rtapi-gehannes wat als .comp voor je verborgen word, verder is het gelijkwaardig.
Zo'n SMT bordje, is dat trouwens multi-processing? In de main loop zie ik namelijk wel het verzenden van de data. Het ontvangen en verwerken van de data kon ik niet in die loop vinden. Hoe zit dat?
STM bedoel je? Nee, dat is een enkele core. Op die Bluepill bordjes zit een 72MHz Cortex M3 processorkern. Blijven leuke bordjes, al zijn ze tegenwoordig met EUR 1,66 per stuk wel duur geworden :mrgreen:
(overigens werkt de STM32Duino bootloader erop zetten en die dingen gebruiken met de Arduino IDE of PlatformIO ook prima. Doe ik ook wel eens als ik een module of chippie wil proberen waar toevallig al een Arduino library voor beschikbaar is)

Ontvangen van data zit verstopt in de USB library van ST; als die data binnenkrijgt word er een functie aangeroepen. regel 200 ongeveer.
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Gebruikersavatar
Markus
Donateur
Berichten: 1015
Lid geworden op: 01 sep 2007 22:43
Locatie: Aduard, Groningen
Contacteer:

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door Markus »

De code voor de STM32 staat er ook; die gebruikt de ST USB library en is daarmee eigenlijk niet veel ingewikkelder.
@Dabit, ik wil ook bezig met dit bordje, welke IDE/Compiler gebruik je ??


Greezt,

Markus
Gebruikersavatar
DaBit
Donateur
Berichten: 11032
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door DaBit »

Varieert een beetje. Ik ben ooit begonnen met SW4STM32, wat nu volgens mij STM32CubeIDE is. Eigenlijk zijn dat allemaal voorgebakken Eclipse+ARM-GCC+OpenOCD installaties. En da's allemaal leuk en aardig tot Eclipse een keer krak zegt, wazige foutmeldingen produceert, en ik als omhooggevallen vonkenboer geen flauw idee heb hoe ik dat rechttrek.
Daarom doe ik tegenwoordig meestal gewoon een makefile, ARM-GCC, progeammeren met OpenOCD en als debugger gbd/gdbserver/Eclipse. Dan weet ik tenminste wat er allemaal gebeurt en ben ik wat flexibeler met spullen in de schuur aan een willekeurige PC hangen en lekker vanuit m'n luie stoel programmeren.

Maar ook VSCode+PlatformIO gebruik ik regelmatig. Eigenlijk is dat ook wel heel prettig simpel en die VSCode editor is best goed.
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Kjelt
Donateur
Berichten: 6308
Lid geworden op: 14 jun 2007 21:51
Locatie: Eindhoven

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door Kjelt »

Als je met STM32 wilt beginnen is dit wel een goed boek:

https://www.amazon.de/-/en/Warren-Gay/dp/1484236238/

Deze vertelt vanaf 0 hoe je een linux ontwikkelingsomgeving met libopencm3 opzet.
Libopencm3 is eigenlijk een code bibliottheek waar veel kant en klare functies in zitten om de boel snel draaiende te krijgen, een soort arduino denk ik.
Op een paar kleine veranderingen, boek is uit 2018 waarbij google je vriend is om het toch te laten werken, na werkt dat goed.
ST heeft mooie ontwikkel hardware in de vorm van Nucleo boards, deze kosten relatief niets (paar euro meer dan de losse processor) en de programmer zit er bij.

Je kunt inderdaad zelf ook met STM Cube tegenwoordig veel doen alleen wat Dabit al zegt er zitten wat haken en ogen aan.
Een van de vervelende dingen is dat de bibliotheek met code vast is. Dan mag je tussen twee commentaar lijnen zoals *enter user code here* je code er bij zetten. En dan niet raar opkijken dat als je een peripheral toevoegt of uitzet hij de code opnieuw aanmaakt en jouw code plots verdwenen is.
Dus goed versie beheer systeem gebruiken en dan is het eigenlijk best mooi spul.

Alleen ik weet niet of je al eerder met een 32 bits Arm controller hebt gewerkt.
Maar de learning curve tov een 8 bits stm8 of atmel microcontroller is best wel stevig.
Iedere peripheral heeft bv een eigen clock die je moet aktiveren, daarnaast zijn ze 10x uitgebreider als de eenvoudige peripherals etc. etc.
Dus reken even op een leercurve. Ik ben er ook alweer een tijdje uit en moet ook weer opnieuw wennen.
Gebruikersavatar
DaBit
Donateur
Berichten: 11032
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door DaBit »

Ik zou het gewoon bij de STM HAL of LL drivers houden, of de Arduino core gebruiken. Of als je grote projecten plant FreeRTOS of ChibiOS.

En misschien ben ik een vreemde eend in de bijt, maar ik vond juist bij de 8/16-bitters het goedzetten van al die registerbitjes een vervelende klus. Met een beetje dsPIC die tot op de rand van z'n kunnen gebruikt werd was ik daar zo een dag zoet mee.
Wat dat betreft vind ik die STM32CubeMX wel handig; pinnetjes toewijzen, peripherals instellen, clocktree instellen, code genereren, en tadaa. Wil ik naderhand nog wat wijzigen dan doe ik dat wel in de code; zo ingewikkeld is het ook allemaal niet. En ooit houd het verder toch op met de configurator; tegen de tijd dat comparators in moeten grijpen op timers, die op hun beurt weer een ADC triggeren en hun registerdata uit een DMA-stream krijgen dan word het toch de reference manual in duiken en zelf bitneuken, maar dat is krek hetzelfde gebitneuk als je op een dsPIC of AVR moet doen.

En dan heb je nog die ernstig handige dingen zoals een DMA controller, een fatsoenlijke interurptcontroller en een werkende debug-interface, beiden missen vaak op de 8-bitters. Ik vind het leven er alleen maar eenvoudiger op geworden, en dan ben ik niet eens een echte softwareboer.
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Gebruikersavatar
Markus
Donateur
Berichten: 1015
Lid geworden op: 01 sep 2007 22:43
Locatie: Aduard, Groningen
Contacteer:

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door Markus »

Dank voor de info
Alleen ik weet niet of je al eerder met een 32 bits Arm controller hebt gewerkt.
Ik heb al wat ervaring met de ESP32, maar daar speel ik vals. Omdat ik graag snel overzichtelijke code wil gebruik ik micropython, wat in een woord geweldig is. Micropython ondersteund ook HID en dat ziet er erg simpel uit

Maar met 32 RISC niet zoveel ervaring, wel veel met 32bits CISC , met name 386 in assembler
Maar ook VSCode+PlatformIO gebruik ik regelmatig. Eigenlijk is dat ook wel heel prettig simpel en die VSCode editor is best goed.
VScode gebruik ik ook sinds kort om remote Python te debuggen op de Raspberry Pi 4, werkt erg leuk, normaliter gebruik ik Pycharm.

sorry voor de off topic

Greezt,

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

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door Tolp2 »

Markus schreef: 17 jan 2021 21:07
sorry voor de off topic
Geeft niks, alleen maar mooi dit soort discussies! Keep it going.
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: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door Tolp2 »

Met dank aan de inspiratie van DaBit: het rawhid component staat op Gitlab.
rawhid is an LinuxCNC userspace component to provide access to own created USB HID RAW devices. One can easily create their own HID device using a cheap Arduino and some buttons or encoders to suit their needs, with minimal coding required.

Why another HID interface component when LinuxCNC already has hidcomp, hal_input and hal_joystick?
  • rawhid was written to support my home made USB pendant for my gantry router and the control panel for my Emco 5 CNC Retrofit. Both applications have a different number of inputs, while I still want to only maintain one codebase.
  • rawhid supports digital inputs, buttons with built-in debounce, quadrature encoders, digital output (both direct and with a 74HC595 shift/latch register), analog in and analog out (PWM). Configuration is done using a simple Arduino sketch, defining the number and type of inputs and their pins. Future expansions can be easily made by creating new data-packages and code in the component to create the required pins.
  • rawhid exports only pins which are available on the device.
  • rawhid makes it easy to find and configure HID devices. Only the VID and PID of the device are required. NOTE: at this moment multiple devices with the same VID and PID are not supported yet. In the future the Arduino sketch will be expanded with a Serial Number, to prevent awkward changing the VID and PID for the board.
  • rawhid does not rely on any external library.
rawhid is based on the assumption that you create your own pendant based on an Arduino or compatible platform. To connect existing products, such as joysticks, gamepads, multimedia controllers (like the Shuttle Pro), please consider to use hidcomp.
Op dit moment kun je met een paar regels code je eigen pendant of bedieningspaneel maken met maximaal 4 encoders, 32 digitale inputs (optioneel met debounce en single-click, double-click en long-press detectie). Voor mijn pendant van mijn router is dit voldoende op dit moment.

Uiteindelijk moet dit nog verder uitgebouwd worden naar 32 digitale outputs, 12 analoge outputs (PWM) en 12 analoge inputs. Voor mijn Emco heb ik in ieder geval de digitale outputs nog nodig, dus die ga ik binnenkort programmeren.
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
Gebruikersavatar
DaBit
Donateur
Berichten: 11032
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door DaBit »

Grappig.. :P
Dat gaat vast nog wel eens van pas komen.

Ik kan inderdaad zien dat je mijn code goed bekeken hebt :mrgreen:
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: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door Tolp2 »

DaBit schreef: 27 jan 2021 14:39 Ik kan inderdaad zien dat je mijn code goed bekeken hebt
Voor de te versturen pakketjes zeker :roll: . Voel je vrij om weer die delen die je goed kan gebruiken weer over te nemen, zoals bijvoorbeeld de ondersteuning voor meerdere devices.

Ik ben blij dat je denkt dat dit van pas gaat komen! Dan wordt het tenminste op meer dan 2 machines gebruikt.
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
Gebruikersavatar
DaBit
Donateur
Berichten: 11032
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door DaBit »

Tolp2 schreef: 27 jan 2021 14:46 Voor de te versturen pakketjes zeker :roll: .
Daarvoor staat het ook op Github ;-)
Ik ben blij dat je denkt dat dit van pas gaat komen! Dan wordt het tenminste op meer dan 2 machines gebruikt.
Voorlopig nog niet hoor. Jij mag eerst alle bugs eruit vissen :mrgreen:
Maar ik vond stiekum dit wel een geinig dingetje in een ToT videootje:
https://youtu.be/O_Fo7mfZg7k?t=1001

Misschien wel grappig om een keer te proberen; 2 handwielen bevallen me op de draaibank prima. Aan de andere kant: de X/Y/Z schakelaar en handwiel op de frees werkt ook wel prima.
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Plaats reactie