Category: General LinuxCNC Questions
Hello,
I'm currently trying to retrofit a mill and a lathe. I want to avoid being dependant on copying&pasting others' configurations, but rather understand the fundamentals myself so I can tailor the retrofit to my needs. I've read the documentation, several forum posts and watched Youtube tutorials these last few days, but I don't get how everything ties together.
I am not sure if I've understood it correctly, but here is how I think Linuxcnc works conceptually. Let's use a 7i95T mesa board connected to a closed loop stepper motor, and how a position/velocity command from GUI makes the stepper motor move as an example.(I've also attached the full HAL file I'm using as a reference).
Step1) Gmoccapy GUI sends a position/velocity command ->
Step2) The joint.0.motor-pos-cmd sends the command as output, to pid.0.command which takes the command as an input ->
Step3) At pid.0.command the command input gets correction through feedback internally(by PID-component and the correlated feedback pins), and the pid.0.output sends the command as output.
Step4) hm2_[MESA](BOARD).0.stepgen.00.velocity.cmd receive the command as input, which then makes the physical pin/terminal of 7i95T(Terminal block 3, Step 0, pin 1 to pin 6) output the command as step/dir pulses to stepper driver.
Question 1) Is my thought process above correct?
Question 2) How does the GUI like Gmoccapy send position/velocity commands through G-code to a joint/axis when there is no HAL-pins connecting them. Is this done internally? Shouldn't there be a Gmoccapy-pin connected to a Joint-pin from the motion component?
Question 3) How can a jog button make a joint/axis move, when the gmoccapy-jog is a bit input, and joint-pos-cmd is a float output? I.e connecting through net command: gmoccapy.jog.axis.jog-x-plus (bit IN) to joint.N.motor-pos-cmd (OUT FLOAT)? Is Linuxcnc internally just registering True/false from Jog button, and then sending the joint/axis the position/velocity command based on INI settings?
Question 4) How does hm2_[MESA](BOARD).0.stepgen.00.velocity.cmd know which physical pin on the Mesa Board is will send step pulses to? Is this done by the Mesa Firmware when doing the MesaCT config?
Question 5) How does hm2_[MESA](BOARD).0.stepgen.00.velocity.cmd know which "physical pin/terminal" on the Mesa board it should send step pulses to, when it doesn't know if I have wired the 7i95T to the stepper driver with differential signal, or single ended with either common anode or common cathode?
Question 6) I have a difficulty knowing which HAL-pin need what input/output, without looking at other peoples config and decipher/copying them. I feel like this is the biggest part I'm missing from understanding Linuxcnc. I am not sure if I'm using the documentation the right way, because I don't find it intuitive at all. For instance, How should I know that Joint.0.motor-pos-cmd is the HAL-pin that makes a stepper motor move, and that it sends a specific output which hm2_[MESA](BOARD).0.stepgen.00.pos.cmd needs? And that pid.0.output could also be used instead of Joint.0.motor-pos-cmd to control the stepper motor? Maybe I'm just too stupid to connect everything just by reading the description provided by the component documentation.
Any tips or explanations that could help my understanding of Linuxcnc are appreciated.
Disclaimer: I have no background in Linuxcnc, electronics, programming or anything CNC related. Apologies if I'm asking the obvious.