Breaker schreef:En dat is gelijk een hele goede reden.
Ja, en ik heb er nog eentje: ze zeggen dat het niet kan op een Pi en ik geloof dat niet
Een Beaglebone alleen gebruiken voor het realtime gebeuren is een beetje tè.
Zou me een zorg zijn eigenlijk; heel duur zijn ze nou ook weer niet. Maar met die L6470 dingen heb ik alleen een stelletje GPIO's nodig, dus de extra leukigheidjes van de BBB zoals de PRU's heb ik niet nodig.
Verder is half LinuxCNC Python en TCL; niet bepaald de meest performante programmeertalen, en dan heb je nog zo'n zottekop achter de knoppen die rare dingen verzint. Liever een paar MIPSen meer dan minder dus.
Is dat een speciale optie van de drives? En hoe werkt het terugkoppelsignaal dan? (Aantal stappen vanaf de driver? Positie via aparte encoder?)
In feite werken al die CNC-sturingen al zo, ook de 'normale'.
Als sturing X berekent dat een as over een seconde 1000 stappen verder moet zijn dan geeft-ie 1000 step-pulsen per seconde uit. Dus wat stuurt-ie nou eigenlijk? De snelheid. Vervolgens komt-ie er na een seconde achter dat er door een afrondingsfoutje maar 999 stapjes gedaan zijn. Simpel, dan moeten er de volgende seconde dus 1001 stapjes gedaan worden. Hoe regelt-ie dat? Met een accumulator, oftewel een 'I-controller'.
LinuxCNC
doet dat al dan niet onder water alemaal ook, zelfs met de 'stepgens' in positie-mode.
Die L6470 drives geef je via de SPI-interface commando's. Zoals 'draai nu met 200 steppen/sec rechtsom tot ik je een andere opdracht geef', 'ga naar positie 3375', 'vertel me wat je status is', etc. De positieregeling kon ik niet gebruiken, want de chip accepteert pas weer een nieuw positiecommando als de vorige afgelopen is. De snelheidsregeling daarentegen is wel bruikbaar; die kan ik op elk gewenst moment aanpassen. De chip doet dat, en dan houd-ie ook eens nog netjes rekening met maximale acceleratie/deceleratie.
Verder houd dat ding bij op welke positie die is met een resolutie van 1/128 stap. Die kun je ook weer via die SPI-bus opvragen.
En dat is dus de terugkoppeling naar de PID-controllers in LinuxCNC; die positie die de chip zelf bijhoud. Past eigenlijk naadloos in de natuurlijke gang van zaken binnen LinuxCNC.
Die PID-controller zelf is overigens heel eenvoudig om te 'tunen'; het 1e orde feedforward-coefficient staat op 1.0, dus de afgeleide van de positie (wat snelheid is) gaat direct naar de output. Verder heb ik nog een beetje P en I om afrondingsfouten te compenseren, maar die twee termen doen bijna niets.
Als je LinuxCNC HAL-files kunt lezen:
https://github.com/dabit20/rpi_cnc/blob ... rinter.hal
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'