Search Results (Searched for: stepper spindle)
06 Feb 2024 13:50 - 08 Feb 2024 01:50
Replied by spumco on topic Which Mesa Card Should I Buy?
Which Mesa Card Should I Buy?
Category: Driver Boards
6 - DRIVE COMMAND SIGNAL TYPE
Typical CNC machines require some type of motor control is required to move joints/axes. Whether they are servos or steppers (closed-loop or open), the motors need a drive to actually cause movement.
The drive will be commanded by LCNC using some type of signal. The command signal types most frequently used for steppers & servos are:
• Step & direction
• PWM
• Analog (+/-10v)
Retrofitting a CNC machine will, hopefully, include re-using the existing drives. This saves money and the original motors & drives were presumably engineered properly for the machine. These existing, perhaps older, OEM drives tend to use analog command signals, although PWM is sometimes used.
Some newer servo drives, and most stepper motor drives, use step & direction command signals.
Building a new CNC machine means the integrator (you) can select which type of drive is to be used, including the command signal type.
Infrequently, a combination of drive signal types is required for a CNC machine build. Perhaps the user has some surplus analog drives, but also has a step & direction drive for a 4th axis. For these cases multiple Mesa cards will likely be required.
Mesa documentation refers to ‘stepgens’, which can be translated to mean ‘step and direction signal generator.’ Each stepgen on a card can control one axis/joint motor drive. So ‘5 stepgens’ means 5 independent drives can be controlled.
For PWM signals, the Mesa stepgens can be converted to PWM signal generators using modified firmware. How this is done is not important for this guide, but if you need 3 stepgens and 2 PWM outputs, this can be accomplished with a 5 (or more) stepgen FPGA card.
Analog command signals cannot be created/converted from stepgens; the card hardware is different. If your drive requires an analog signal you must use an analog-out card.
Once the required drive command signal is identified, count up the number of drives - current and future - required for all joints/axes. Example:
• Stepper-driven gantry router
◦ 4 motors/drives (X, Y1, Y2, Z) - at least 4 stepgens are required
• 2-axis lathe with analog servos plus a spindle servo
◦ 3 motors/drives - at least 3 analog drive outputs are required
Typical CNC machines require some type of motor control is required to move joints/axes. Whether they are servos or steppers (closed-loop or open), the motors need a drive to actually cause movement.
The drive will be commanded by LCNC using some type of signal. The command signal types most frequently used for steppers & servos are:
• Step & direction
• PWM
• Analog (+/-10v)
Retrofitting a CNC machine will, hopefully, include re-using the existing drives. This saves money and the original motors & drives were presumably engineered properly for the machine. These existing, perhaps older, OEM drives tend to use analog command signals, although PWM is sometimes used.
Some newer servo drives, and most stepper motor drives, use step & direction command signals.
Building a new CNC machine means the integrator (you) can select which type of drive is to be used, including the command signal type.
Infrequently, a combination of drive signal types is required for a CNC machine build. Perhaps the user has some surplus analog drives, but also has a step & direction drive for a 4th axis. For these cases multiple Mesa cards will likely be required.
Mesa documentation refers to ‘stepgens’, which can be translated to mean ‘step and direction signal generator.’ Each stepgen on a card can control one axis/joint motor drive. So ‘5 stepgens’ means 5 independent drives can be controlled.
For PWM signals, the Mesa stepgens can be converted to PWM signal generators using modified firmware. How this is done is not important for this guide, but if you need 3 stepgens and 2 PWM outputs, this can be accomplished with a 5 (or more) stepgen FPGA card.
Analog command signals cannot be created/converted from stepgens; the card hardware is different. If your drive requires an analog signal you must use an analog-out card.
Once the required drive command signal is identified, count up the number of drives - current and future - required for all joints/axes. Example:
• Stepper-driven gantry router
◦ 4 motors/drives (X, Y1, Y2, Z) - at least 4 stepgens are required
• 2-axis lathe with analog servos plus a spindle servo
◦ 3 motors/drives - at least 3 analog drive outputs are required
05 Feb 2024 21:19 - 08 Feb 2024 01:45
Replied by spumco on topic Which Mesa Card Should I Buy?
Which Mesa Card Should I Buy?
Category: Driver Boards
2 - SHORT VERSION (TLDR)
Too impatient to read? The bare minimum hardware you need to easily connect LCNC to the outside world using Mesa cards is:
• An FPGA ‘main’ card
• Screw terminal connections for drives and IO (depending on selection, these may be on the FPGA card or a daughter card)
• Power supply for the FPGA card
That’s it; no network switch or other ‘stuff’ required. Below are just a couple of examples out of the numerous Mesa options:
For simple stepper machine
• You will need one step & direction ethernet FPGA main card with onboard IO
◦ Example - 7i96S
▪ 5 step/dir axes
▪ 11 inputs
▪ 6 outputs
▪ 1 analog spindle output
▪ 1 encoder input
▪ 1 Smart Serial port
▪ 1 25-pin expansion port
For analog servo machine
• You will need one analog ethernet FPGA card with onboard screw terminal IO
◦ Example - 7i97T
▪ 6 +/-10v analog axes
▪ 6 encoder inputs
▪ 16 inputs
▪ 6 outputs
▪ 1 Smart Serial port
▪ 1 25-pin expansion port
OR
• You will need one ethernet FPGA card with no screw terminal drive outputs or IO
◦ Example - 7i92TH
▪ 2x26-pin header
AND
• You will also need one daughter card with analog outputs & IO with a connector that matches the FPGA card
◦ Example - 7i77
▪ DB25 input (connects to 7i92TH 26-pin header with adapter cable)
▪ 6 +/-10v analog axes
▪ 6 encoder inputs
▪ 32 inputs
▪ 16 outputs
▪ 1 Smart Serial port
▪ 1 DB25 to 26-pin adapter cable
Do yourself a favor and go read the rest of this guide.
Too impatient to read? The bare minimum hardware you need to easily connect LCNC to the outside world using Mesa cards is:
• An FPGA ‘main’ card
• Screw terminal connections for drives and IO (depending on selection, these may be on the FPGA card or a daughter card)
• Power supply for the FPGA card
That’s it; no network switch or other ‘stuff’ required. Below are just a couple of examples out of the numerous Mesa options:
For simple stepper machine
• You will need one step & direction ethernet FPGA main card with onboard IO
◦ Example - 7i96S
▪ 5 step/dir axes
▪ 11 inputs
▪ 6 outputs
▪ 1 analog spindle output
▪ 1 encoder input
▪ 1 Smart Serial port
▪ 1 25-pin expansion port
For analog servo machine
• You will need one analog ethernet FPGA card with onboard screw terminal IO
◦ Example - 7i97T
▪ 6 +/-10v analog axes
▪ 6 encoder inputs
▪ 16 inputs
▪ 6 outputs
▪ 1 Smart Serial port
▪ 1 25-pin expansion port
OR
• You will need one ethernet FPGA card with no screw terminal drive outputs or IO
◦ Example - 7i92TH
▪ 2x26-pin header
AND
• You will also need one daughter card with analog outputs & IO with a connector that matches the FPGA card
◦ Example - 7i77
▪ DB25 input (connects to 7i92TH 26-pin header with adapter cable)
▪ 6 +/-10v analog axes
▪ 6 encoder inputs
▪ 32 inputs
▪ 16 outputs
▪ 1 Smart Serial port
▪ 1 DB25 to 26-pin adapter cable
Do yourself a favor and go read the rest of this guide.
04 Feb 2024 03:49
Replied by spacestate1 on topic Closed loop stepper driver configuration help
Closed loop stepper driver configuration help
Category: Basic Configuration
I'll try that when I can get a hold of a DTI. For now I went redid the gcode with a re-done tool table, and it seems to make the biggest difference so far. I'm now getting about +- .05 mm
I still think it can do better, but for now I don't want to take it apart it.
I probably need to test the spindle run-out as well at some point.
thanks for the advice it's been helpful.
I still think it can do better, but for now I don't want to take it apart it.
I probably need to test the spindle run-out as well at some point.
thanks for the advice it's been helpful.
03 Feb 2024 03:36
Replied by spumco on topic Closed loop stepper driver configuration help
Closed loop stepper driver configuration help
Category: Basic Configuration
I can't imagine the whole thing is flexing that much under cutting pressure, but I'd say next step is to mount a DTI on the table and touch the stylus to the spindle nose.
Then shove on the head and see if there's deflection. Repeat for Y in both directions.
How much of a cut are you taking to get that much error? Are you measuring the error by comparing the part vs. programmed size?
Then shove on the head and see if there's deflection. Repeat for Y in both directions.
How much of a cut are you taking to get that much error? Are you measuring the error by comparing the part vs. programmed size?
01 Feb 2024 15:25
Replied by Bambusbjoern on topic Setup for encoder feedback
Setup for encoder feedback
Category: General LinuxCNC Questions
How difficult is it to implement feedback via the 5i25?
Which cosed/open loop drivers would you recommend?
I figured the spindle feedback would help getting the spindle speed more consistent (had oscillations in speed, but there are several possible reasons for that)
I used to have my steppers running un only 12v which made them quite poor performing. What voltage would you recommend for my steppers?
Which cosed/open loop drivers would you recommend?
I figured the spindle feedback would help getting the spindle speed more consistent (had oscillations in speed, but there are several possible reasons for that)
I used to have my steppers running un only 12v which made them quite poor performing. What voltage would you recommend for my steppers?
31 Jan 2024 01:38
Modbus-RTU control of a MOLLUM VFD was created by echristley
Modbus-RTU control of a MOLLUM VFD
Category: HAL
I got a
Mollum VFD
. This is one of the smallest VFDs on the market. Nice when trying to pack everything in a box. I think it is the same as the
BD600 series
that StepperOnline sells. Box is the same size, and the manuals look identical.
I'm attaching the HAL file I created to allow LinuxCNC to talk to it.
My custom_postgui.hal contains,
#set up the spindle monitor with pyvcp
loadrt scale names=scale_torque,scale_power,scale_current,scale_bus_voltage,scale_freq
addf scale_torque servo-thread
addf scale_power servo-thread
addf scale_current servo-thread
addf scale_freq servo-thread
setp scale_torque.gain .01
net torque_scale scale_torque.in mb2hal.torque.torque.float
net torque scale_torque.out => pyvcp.torque
setp scale_power.gain .1
net power_scale scale_power.in mb2hal.power.power.float
net power scale_power.out => pyvcp.motor_power
setp scale_current.gain .01
net current_scale scale_current.in mb2hal.current.current.float
net current scale_current.out => pyvcp.current
#voltage doesn't need scaling
net voltage mb2hal.voltage.voltage.float => pyvcp.voltage
setp scale_bus_voltage.gain .1
net bus_voltage_scale scale_bus_voltage.in mb2hal.bus_voltage.bus_voltage.float
#net bus_voltage scale_bus_voltage.out => pyvcp.bus_voltage
setp scale_freq.gain .1
net freq_scale scale_freq.in mb2hal.freq.freq.float
#net freq scale_freq.out => pyvcp.freq
#fault messages don't need scaling
net vfd_fault mb2hal.fault.fault.int => pyvcp.fault
I'm attaching the HAL file I created to allow LinuxCNC to talk to it.
My custom_postgui.hal contains,
#set up the spindle monitor with pyvcp
loadrt scale names=scale_torque,scale_power,scale_current,scale_bus_voltage,scale_freq
addf scale_torque servo-thread
addf scale_power servo-thread
addf scale_current servo-thread
addf scale_freq servo-thread
setp scale_torque.gain .01
net torque_scale scale_torque.in mb2hal.torque.torque.float
net torque scale_torque.out => pyvcp.torque
setp scale_power.gain .1
net power_scale scale_power.in mb2hal.power.power.float
net power scale_power.out => pyvcp.motor_power
setp scale_current.gain .01
net current_scale scale_current.in mb2hal.current.current.float
net current scale_current.out => pyvcp.current
#voltage doesn't need scaling
net voltage mb2hal.voltage.voltage.float => pyvcp.voltage
setp scale_bus_voltage.gain .1
net bus_voltage_scale scale_bus_voltage.in mb2hal.bus_voltage.bus_voltage.float
#net bus_voltage scale_bus_voltage.out => pyvcp.bus_voltage
setp scale_freq.gain .1
net freq_scale scale_freq.in mb2hal.freq.freq.float
#net freq scale_freq.out => pyvcp.freq
#fault messages don't need scaling
net vfd_fault mb2hal.fault.fault.int => pyvcp.fault
30 Jan 2024 14:49
Replied by spumco on topic caxis.comp - problems
caxis.comp - problems
Category: Advanced Configuration
@Tommy,
Re-reading the PID manual, deadband should be set slightly greater than 1/2 count to stop hunting. Your example is (I suspect) referencing a linear axis where you've got a very high count-per-unit (like thousands of counts per mm or inch). Just like my X/Z axes with 1um encoders where I've got ~25400 counts/inch.
My subspindle is a direct-drive rotary axis where units = degrees. So I've got ~27 counts per degree; significantly coarser feedback per unit.
The encoder signal is output from the drive, and I've got it set as high a resolution as possible.
@Aciera,
I tried the PID autotune a couple times on my Z-axis a while ago and the results were just dumb. While I may give it a try, I haven't read a single report on the forum where someone was pleased with the results.
@smc.collins,
I have the pos-cmd and pos-fb up in halshow, but haven't yet scoped them. Nothing odd or way off during a programmed back-and-forth move. It homes to index fine and the counts/position/velocity all look like they should even when it flips out. Doesn't lose track of where it is.
I'm going to try connecting it like an open-loop stepper tonight - connect stepgen pos-fb to pid.b.feedback and joint motor-pos-fb. That should help me see if my issue is with the PID or not.
Re-reading the PID manual, deadband should be set slightly greater than 1/2 count to stop hunting. Your example is (I suspect) referencing a linear axis where you've got a very high count-per-unit (like thousands of counts per mm or inch). Just like my X/Z axes with 1um encoders where I've got ~25400 counts/inch.
My subspindle is a direct-drive rotary axis where units = degrees. So I've got ~27 counts per degree; significantly coarser feedback per unit.
The encoder signal is output from the drive, and I've got it set as high a resolution as possible.
@Aciera,
I tried the PID autotune a couple times on my Z-axis a while ago and the results were just dumb. While I may give it a try, I haven't read a single report on the forum where someone was pleased with the results.
@smc.collins,
I have the pos-cmd and pos-fb up in halshow, but haven't yet scoped them. Nothing odd or way off during a programmed back-and-forth move. It homes to index fine and the counts/position/velocity all look like they should even when it flips out. Doesn't lose track of where it is.
I'm going to try connecting it like an open-loop stepper tonight - connect stepgen pos-fb to pid.b.feedback and joint motor-pos-fb. That should help me see if my issue is with the PID or not.
26 Jan 2024 17:12
Replied by wez on topic linuxcnc-esp32 Software Stepping over Ethernet Using ESP32
linuxcnc-esp32 Software Stepping over Ethernet Using ESP32
Category: Computers and Hardware
I'm finishing up the last few bits, some basic documentation and final testing. Should be released in the next day or so.
Additionally making it functional with the W5500 SPI module so if anyone has an existing SPI ethernet setup they can use it too.
It would be nice to have a ultra low cost multi-axis stepper solution that runs fast, in hardware, for LinuxCNC, even if purely for testing or tinkering since WT32-ETH01 modules can be purchased for $15 and connected to external stepper drivers without issue (yes 3.3v STEP,DIR and EN works, not ideal but does work)
A custom board that has a I2C GPIO mux and a single interrupt driven interrupt pin connected to the ESP32 for both inputs and outputs would be straightforward to add and greatly expands the ESP32 limited pins available.
Additional ideas - adding a 2nd ESP32 that handles Bluetooth connectivity for bespoke MPG pendants or wireless peripherals - all it would have to do is pass a basic I2C struct packet to the ethernet connected one which provides comms back to LinuxCNC HAL.
Modbus/RS485 VFD native spindle integration are possibilities too - as well as the existing PWM/Analog control.
I love Remora but I wanted a cheaper solution with hardware can be more accessible and/or available.
Caution must be taken when using Arduino libraries that they do not run on the core dedicated to ethernet & servo gen tasks.
Additionally making it functional with the W5500 SPI module so if anyone has an existing SPI ethernet setup they can use it too.
It would be nice to have a ultra low cost multi-axis stepper solution that runs fast, in hardware, for LinuxCNC, even if purely for testing or tinkering since WT32-ETH01 modules can be purchased for $15 and connected to external stepper drivers without issue (yes 3.3v STEP,DIR and EN works, not ideal but does work)
A custom board that has a I2C GPIO mux and a single interrupt driven interrupt pin connected to the ESP32 for both inputs and outputs would be straightforward to add and greatly expands the ESP32 limited pins available.
Additional ideas - adding a 2nd ESP32 that handles Bluetooth connectivity for bespoke MPG pendants or wireless peripherals - all it would have to do is pass a basic I2C struct packet to the ethernet connected one which provides comms back to LinuxCNC HAL.
Modbus/RS485 VFD native spindle integration are possibilities too - as well as the existing PWM/Analog control.
I love Remora but I wanted a cheaper solution with hardware can be more accessible and/or available.
Caution must be taken when using Arduino libraries that they do not run on the core dedicated to ethernet & servo gen tasks.
24 Jan 2024 07:42
Replied by reBrick on topic Having problems with stepper enable driven relay enabled on linux boot
Having problems with stepper enable driven relay enabled on linux boot
Category: General LinuxCNC Questions
Tommy, thanks for the response.
I am using 3 PCIE to parallel port cards (SD-PEX10005). One for mill, one for lathe and one for MPG pendant. Is it possible the breakout board is causing this and not the lpt card?
I moved over to one of the 5 axis breakout boards with PWM so I can convert spindle to VFD and it behaves the same as the sainsmart bob as far as enable high. I have some spare pins on the pendant db25, but I haven't had a chance to test them isolated from board connection. I spent the day installing the refactored tower in the shop.
I have the relay on the AC input to the stepper driver PSU.
I am using 3 PCIE to parallel port cards (SD-PEX10005). One for mill, one for lathe and one for MPG pendant. Is it possible the breakout board is causing this and not the lpt card?
I moved over to one of the 5 axis breakout boards with PWM so I can convert spindle to VFD and it behaves the same as the sainsmart bob as far as enable high. I have some spare pins on the pendant db25, but I haven't had a chance to test them isolated from board connection. I spent the day installing the refactored tower in the shop.
I have the relay on the AC input to the stepper driver PSU.
23 Jan 2024 23:13 - 23 Jan 2024 23:16
Replied by gbsd86 on topic requesting help with 7i80DB-16 and C10 breakout board
requesting help with 7i80DB-16 and C10 breakout board
Category: PnCConf Wizard
missing report file.
# Generated by PNCconf at Tue Jan 23 05:23:48 2024
# Using LinuxCNC version: Master (2.9)
# If you make changes to this file, they will be
# overwritten when you run PNCconf again
loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
loadrt hostmot2
loadrt hm2_eth board_ip="192.168.1.121" config="num_encoders=0 num_pwmgens=0 num_stepgens=10"
setp [HMOT](CARD0).watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.y,pid.z,pid.a,pid.s
addf [HMOT](CARD0).read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.x.do-pid-calcs servo-thread
addf pid.y.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
addf pid.a.do-pid-calcs servo-thread
addf pid.s.do-pid-calcs servo-thread
addf [HMOT](CARD0).write servo-thread
setp [HMOT](CARD0).stepgen.timer-number 1
# external output signals
# external input signals
#*******************
# AXIS X JOINT 0
#*******************
setp pid.x.Pgain [JOINT_0]P
setp pid.x.Igain [JOINT_0]I
setp pid.x.Dgain [JOINT_0]D
setp pid.x.bias [JOINT_0]BIAS
setp pid.x.FF0 [JOINT_0]FF0
setp pid.x.FF1 [JOINT_0]FF1
setp pid.x.FF2 [JOINT_0]FF2
setp pid.x.deadband [JOINT_0]DEADBAND
setp pid.x.maxoutput [JOINT_0]MAX_OUTPUT
setp pid.x.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.x.maxerror 0.000500
net x-index-enable => pid.x.index-enable
net x-enable => pid.x.enable
net x-pos-cmd => pid.x.command
net x-pos-fb => pid.x.feedback
net x-output <= pid.x.output
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.01.dirsetup [JOINT_0]DIRSETUP
setp [HMOT](CARD0).stepgen.01.dirhold [JOINT_0]DIRHOLD
setp [HMOT](CARD0).stepgen.01.steplen [JOINT_0]STEPLEN
setp [HMOT](CARD0).stepgen.01.stepspace [JOINT_0]STEPSPACE
setp [HMOT](CARD0).stepgen.01.position-scale [JOINT_0]STEP_SCALE
setp [HMOT](CARD0).stepgen.01.step_type 0
setp [HMOT](CARD0).stepgen.01.control-type 1
setp [HMOT](CARD0).stepgen.01.maxaccel [JOINT_0]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.01.maxvel [JOINT_0]STEPGEN_MAXVEL
setp [HMOT](CARD0).stepgen.01.direction.invert_output true
# ---closedloop stepper signals---
net x-pos-cmd <= joint.0.motor-pos-cmd
net x-vel-cmd <= joint.0.vel-cmd
net x-output => [HMOT](CARD0).stepgen.01.velocity-cmd
net x-pos-fb <= [HMOT](CARD0).stepgen.01.position-fb
net x-pos-fb => joint.0.motor-pos-fb
net x-enable <= joint.0.amp-enable-out
net x-enable => [HMOT](CARD0).stepgen.01.enable
# ---setup home / limit switch signals---
net x-home-sw => joint.0.home-sw-in
net x-neg-limit => joint.0.neg-lim-sw-in
net x-pos-limit => joint.0.pos-lim-sw-in
#*******************
# AXIS Y JOINT 1
#*******************
setp pid.y.Pgain [JOINT_1]P
setp pid.y.Igain [JOINT_1]I
setp pid.y.Dgain [JOINT_1]D
setp pid.y.bias [JOINT_1]BIAS
setp pid.y.FF0 [JOINT_1]FF0
setp pid.y.FF1 [JOINT_1]FF1
setp pid.y.FF2 [JOINT_1]FF2
setp pid.y.deadband [JOINT_1]DEADBAND
setp pid.y.maxoutput [JOINT_1]MAX_OUTPUT
setp pid.y.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.y.maxerror 0.000500
net y-index-enable => pid.y.index-enable
net y-enable => pid.y.enable
net y-pos-cmd => pid.y.command
net y-pos-fb => pid.y.feedback
net y-output <= pid.y.output
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.02.dirsetup [JOINT_1]DIRSETUP
setp [HMOT](CARD0).stepgen.02.dirhold [JOINT_1]DIRHOLD
setp [HMOT](CARD0).stepgen.02.steplen [JOINT_1]STEPLEN
setp [HMOT](CARD0).stepgen.02.stepspace [JOINT_1]STEPSPACE
setp [HMOT](CARD0).stepgen.02.position-scale [JOINT_1]STEP_SCALE
setp [HMOT](CARD0).stepgen.02.step_type 0
setp [HMOT](CARD0).stepgen.02.control-type 1
setp [HMOT](CARD0).stepgen.02.maxaccel [JOINT_1]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.02.maxvel [JOINT_1]STEPGEN_MAXVEL
setp [HMOT](CARD0).stepgen.02.direction.invert_output true
# ---closedloop stepper signals---
net y-pos-cmd <= joint.1.motor-pos-cmd
net y-vel-cmd <= joint.1.vel-cmd
net y-output => [HMOT](CARD0).stepgen.02.velocity-cmd
net y-pos-fb <= [HMOT](CARD0).stepgen.02.position-fb
net y-pos-fb => joint.1.motor-pos-fb
net y-enable <= joint.1.amp-enable-out
net y-enable => [HMOT](CARD0).stepgen.02.enable
# ---setup home / limit switch signals---
net y-home-sw => joint.1.home-sw-in
net y-neg-limit => joint.1.neg-lim-sw-in
net y-pos-limit => joint.1.pos-lim-sw-in
#*******************
# AXIS Z JOINT 2
#*******************
setp pid.z.Pgain [JOINT_2]P
setp pid.z.Igain [JOINT_2]I
setp pid.z.Dgain [JOINT_2]D
setp pid.z.bias [JOINT_2]BIAS
setp pid.z.FF0 [JOINT_2]FF0
setp pid.z.FF1 [JOINT_2]FF1
setp pid.z.FF2 [JOINT_2]FF2
setp pid.z.deadband [JOINT_2]DEADBAND
setp pid.z.maxoutput [JOINT_2]MAX_OUTPUT
setp pid.z.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.z.maxerror 0.000500
net z-index-enable => pid.z.index-enable
net z-enable => pid.z.enable
net z-pos-cmd => pid.z.command
net z-pos-fb => pid.z.feedback
net z-output <= pid.z.output
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.03.dirsetup [JOINT_2]DIRSETUP
setp [HMOT](CARD0).stepgen.03.dirhold [JOINT_2]DIRHOLD
setp [HMOT](CARD0).stepgen.03.steplen [JOINT_2]STEPLEN
setp [HMOT](CARD0).stepgen.03.stepspace [JOINT_2]STEPSPACE
setp [HMOT](CARD0).stepgen.03.position-scale [JOINT_2]STEP_SCALE
setp [HMOT](CARD0).stepgen.03.step_type 0
setp [HMOT](CARD0).stepgen.03.control-type 1
setp [HMOT](CARD0).stepgen.03.maxaccel [JOINT_2]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.03.maxvel [JOINT_2]STEPGEN_MAXVEL
setp [HMOT](CARD0).stepgen.03.direction.invert_output true
# ---closedloop stepper signals---
net z-pos-cmd <= joint.2.motor-pos-cmd
net z-vel-cmd <= joint.2.vel-cmd
net z-output => [HMOT](CARD0).stepgen.03.velocity-cmd
net z-pos-fb <= [HMOT](CARD0).stepgen.03.position-fb
net z-pos-fb => joint.2.motor-pos-fb
net z-enable <= joint.2.amp-enable-out
net z-enable => [HMOT](CARD0).stepgen.03.enable
# ---setup home / limit switch signals---
net z-home-sw => joint.2.home-sw-in
net z-neg-limit => joint.2.neg-lim-sw-in
net z-pos-limit => joint.2.pos-lim-sw-in
#*******************
# AXIS A JOINT 3
#*******************
setp pid.a.Pgain [JOINT_3]P
setp pid.a.Igain [JOINT_3]I
setp pid.a.Dgain [JOINT_3]D
setp pid.a.bias [JOINT_3]BIAS
setp pid.a.FF0 [JOINT_3]FF0
setp pid.a.FF1 [JOINT_3]FF1
setp pid.a.FF2 [JOINT_3]FF2
setp pid.a.deadband [JOINT_3]DEADBAND
setp pid.a.maxoutput [JOINT_3]MAX_OUTPUT
setp pid.a.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.a.maxerror 0.000500
net a-index-enable => pid.a.index-enable
net a-enable => pid.a.enable
net a-pos-cmd => pid.a.command
net a-pos-fb => pid.a.feedback
net a-output <= pid.a.output
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.04.dirsetup [JOINT_3]DIRSETUP
setp [HMOT](CARD0).stepgen.04.dirhold [JOINT_3]DIRHOLD
setp [HMOT](CARD0).stepgen.04.steplen [JOINT_3]STEPLEN
setp [HMOT](CARD0).stepgen.04.stepspace [JOINT_3]STEPSPACE
setp [HMOT](CARD0).stepgen.04.position-scale [JOINT_3]STEP_SCALE
setp [HMOT](CARD0).stepgen.04.step_type 0
setp [HMOT](CARD0).stepgen.04.control-type 1
setp [HMOT](CARD0).stepgen.04.maxaccel [JOINT_3]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.04.maxvel [JOINT_3]STEPGEN_MAXVEL
setp [HMOT](CARD0).stepgen.04.direction.invert_output true
# ---closedloop stepper signals---
net a-pos-cmd <= joint.3.motor-pos-cmd
net a-vel-cmd <= joint.3.vel-cmd
net a-output => [HMOT](CARD0).stepgen.04.velocity-cmd
net a-pos-fb <= [HMOT](CARD0).stepgen.04.position-fb
net a-pos-fb => joint.3.motor-pos-fb
net a-enable <= joint.3.amp-enable-out
net a-enable => [HMOT](CARD0).stepgen.04.enable
# ---setup home / limit switch signals---
net a-home-sw => joint.3.home-sw-in
net a-neg-limit => joint.3.neg-lim-sw-in
net a-pos-limit => joint.3.pos-lim-sw-in
#*******************
# SPINDLE
#*******************
setp pid.s.Pgain [SPINDLE_0]P
setp pid.s.Igain [SPINDLE_0]I
setp pid.s.Dgain [SPINDLE_0]D
setp pid.s.bias [SPINDLE_0]BIAS
setp pid.s.FF0 [SPINDLE_0]FF0
setp pid.s.FF1 [SPINDLE_0]FF1
setp pid.s.FF2 [SPINDLE_0]FF2
setp pid.s.deadband [SPINDLE_0]DEADBAND
setp pid.s.maxoutput [SPINDLE_0]MAX_OUTPUT
setp pid.s.error-previous-target true
net spindle-index-enable => pid.s.index-enable
net spindle-enable => pid.s.enable
net spindle-vel-cmd-rpm => pid.s.command
net spindle-vel-fb-rpm => pid.s.feedback
net spindle-output <= pid.s.output
# ---setup spindle control signals---
net spindle-vel-cmd-rps <= spindle.0.speed-out-rps
net spindle-vel-cmd-rps-abs <= spindle.0.speed-out-rps-abs
net spindle-vel-cmd-rpm <= spindle.0.speed-out
net spindle-vel-cmd-rpm-abs <= spindle.0.speed-out-abs
net spindle-enable <= spindle.0.on
net spindle-cw <= spindle.0.forward
net spindle-ccw <= spindle.0.reverse
net spindle-brake <= spindle.0.brake
net spindle-revs => spindle.0.revs
net spindle-at-speed => spindle.0.at-speed
net spindle-vel-fb-rps => spindle.0.speed-in
net spindle-index-enable <=> spindle.0.index-enable
# ---Setup spindle at speed signals---
sets spindle-at-speed true
#******************************
# connect miscellaneous signals
#******************************
# ---HALUI signals---
net axis-select-x halui.axis.x.select
net jog-x-pos halui.axis.x.plus
net jog-x-neg halui.axis.x.minus
net jog-x-analog halui.axis.x.analog
net x-is-homed halui.joint.0.is-homed
net axis-select-y halui.axis.y.select
net jog-y-pos halui.axis.y.plus
net jog-y-neg halui.axis.y.minus
net jog-y-analog halui.axis.y.analog
net y-is-homed halui.joint.1.is-homed
net axis-select-z halui.axis.z.select
net jog-z-pos halui.axis.z.plus
net jog-z-neg halui.axis.z.minus
net jog-z-analog halui.axis.z.analog
net z-is-homed halui.joint.2.is-homed
net axis-select-a halui.axis.a.select
net jog-a-pos halui.axis.a.plus
net jog-a-neg halui.axis.a.minus
net jog-a-analog halui.axis.a.analog
net a-is-homed halui.joint.3.is-homed
net jog-selected-pos halui.axis.selected.plus
net jog-selected-neg halui.axis.selected.minus
net spindle-manual-cw halui.spindle.0.forward
net spindle-manual-ccw halui.spindle.0.reverse
net spindle-manual-stop halui.spindle.0.stop
net machine-is-on halui.machine.is-on
net jog-speed halui.axis.jog-speed
net MDI-mode halui.mode.is-mdi
# ---coolant signals---
net coolant-mist <= iocontrol.0.coolant-mist
net coolant-flood <= iocontrol.0.coolant-flood
# ---probe signal---
net probe-in => motion.probe-input
# ---motion control signals---
net in-position <= motion.in-position
net machine-is-enabled <= motion.motion-enabled
# ---digital in / out signals---
# ---estop signals---
net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in
# ---manual tool change signals---
net tool-change-request <= iocontrol.0.tool-change
net tool-change-confirmed => iocontrol.0.tool-changed
net tool-number <= iocontrol.0.tool-prep-number
# ---Use external manual tool change dialog---
loadusr -W hal_manualtoolchange
net tool-change-request => hal_manualtoolchange.change
net tool-change-confirmed <= hal_manualtoolchange.changed
net tool-number => hal_manualtoolchange.number
# ---ignore tool prepare requests---
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
# Generated by PNCconf at Tue Jan 23 05:23:48 2024
# Using LinuxCNC version: Master (2.9)
# If you make changes to this file, they will be
# overwritten when you run PNCconf again
loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
loadrt hostmot2
loadrt hm2_eth board_ip="192.168.1.121" config="num_encoders=0 num_pwmgens=0 num_stepgens=10"
setp [HMOT](CARD0).watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.y,pid.z,pid.a,pid.s
addf [HMOT](CARD0).read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.x.do-pid-calcs servo-thread
addf pid.y.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
addf pid.a.do-pid-calcs servo-thread
addf pid.s.do-pid-calcs servo-thread
addf [HMOT](CARD0).write servo-thread
setp [HMOT](CARD0).stepgen.timer-number 1
# external output signals
# external input signals
#*******************
# AXIS X JOINT 0
#*******************
setp pid.x.Pgain [JOINT_0]P
setp pid.x.Igain [JOINT_0]I
setp pid.x.Dgain [JOINT_0]D
setp pid.x.bias [JOINT_0]BIAS
setp pid.x.FF0 [JOINT_0]FF0
setp pid.x.FF1 [JOINT_0]FF1
setp pid.x.FF2 [JOINT_0]FF2
setp pid.x.deadband [JOINT_0]DEADBAND
setp pid.x.maxoutput [JOINT_0]MAX_OUTPUT
setp pid.x.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.x.maxerror 0.000500
net x-index-enable => pid.x.index-enable
net x-enable => pid.x.enable
net x-pos-cmd => pid.x.command
net x-pos-fb => pid.x.feedback
net x-output <= pid.x.output
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.01.dirsetup [JOINT_0]DIRSETUP
setp [HMOT](CARD0).stepgen.01.dirhold [JOINT_0]DIRHOLD
setp [HMOT](CARD0).stepgen.01.steplen [JOINT_0]STEPLEN
setp [HMOT](CARD0).stepgen.01.stepspace [JOINT_0]STEPSPACE
setp [HMOT](CARD0).stepgen.01.position-scale [JOINT_0]STEP_SCALE
setp [HMOT](CARD0).stepgen.01.step_type 0
setp [HMOT](CARD0).stepgen.01.control-type 1
setp [HMOT](CARD0).stepgen.01.maxaccel [JOINT_0]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.01.maxvel [JOINT_0]STEPGEN_MAXVEL
setp [HMOT](CARD0).stepgen.01.direction.invert_output true
# ---closedloop stepper signals---
net x-pos-cmd <= joint.0.motor-pos-cmd
net x-vel-cmd <= joint.0.vel-cmd
net x-output => [HMOT](CARD0).stepgen.01.velocity-cmd
net x-pos-fb <= [HMOT](CARD0).stepgen.01.position-fb
net x-pos-fb => joint.0.motor-pos-fb
net x-enable <= joint.0.amp-enable-out
net x-enable => [HMOT](CARD0).stepgen.01.enable
# ---setup home / limit switch signals---
net x-home-sw => joint.0.home-sw-in
net x-neg-limit => joint.0.neg-lim-sw-in
net x-pos-limit => joint.0.pos-lim-sw-in
#*******************
# AXIS Y JOINT 1
#*******************
setp pid.y.Pgain [JOINT_1]P
setp pid.y.Igain [JOINT_1]I
setp pid.y.Dgain [JOINT_1]D
setp pid.y.bias [JOINT_1]BIAS
setp pid.y.FF0 [JOINT_1]FF0
setp pid.y.FF1 [JOINT_1]FF1
setp pid.y.FF2 [JOINT_1]FF2
setp pid.y.deadband [JOINT_1]DEADBAND
setp pid.y.maxoutput [JOINT_1]MAX_OUTPUT
setp pid.y.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.y.maxerror 0.000500
net y-index-enable => pid.y.index-enable
net y-enable => pid.y.enable
net y-pos-cmd => pid.y.command
net y-pos-fb => pid.y.feedback
net y-output <= pid.y.output
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.02.dirsetup [JOINT_1]DIRSETUP
setp [HMOT](CARD0).stepgen.02.dirhold [JOINT_1]DIRHOLD
setp [HMOT](CARD0).stepgen.02.steplen [JOINT_1]STEPLEN
setp [HMOT](CARD0).stepgen.02.stepspace [JOINT_1]STEPSPACE
setp [HMOT](CARD0).stepgen.02.position-scale [JOINT_1]STEP_SCALE
setp [HMOT](CARD0).stepgen.02.step_type 0
setp [HMOT](CARD0).stepgen.02.control-type 1
setp [HMOT](CARD0).stepgen.02.maxaccel [JOINT_1]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.02.maxvel [JOINT_1]STEPGEN_MAXVEL
setp [HMOT](CARD0).stepgen.02.direction.invert_output true
# ---closedloop stepper signals---
net y-pos-cmd <= joint.1.motor-pos-cmd
net y-vel-cmd <= joint.1.vel-cmd
net y-output => [HMOT](CARD0).stepgen.02.velocity-cmd
net y-pos-fb <= [HMOT](CARD0).stepgen.02.position-fb
net y-pos-fb => joint.1.motor-pos-fb
net y-enable <= joint.1.amp-enable-out
net y-enable => [HMOT](CARD0).stepgen.02.enable
# ---setup home / limit switch signals---
net y-home-sw => joint.1.home-sw-in
net y-neg-limit => joint.1.neg-lim-sw-in
net y-pos-limit => joint.1.pos-lim-sw-in
#*******************
# AXIS Z JOINT 2
#*******************
setp pid.z.Pgain [JOINT_2]P
setp pid.z.Igain [JOINT_2]I
setp pid.z.Dgain [JOINT_2]D
setp pid.z.bias [JOINT_2]BIAS
setp pid.z.FF0 [JOINT_2]FF0
setp pid.z.FF1 [JOINT_2]FF1
setp pid.z.FF2 [JOINT_2]FF2
setp pid.z.deadband [JOINT_2]DEADBAND
setp pid.z.maxoutput [JOINT_2]MAX_OUTPUT
setp pid.z.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.z.maxerror 0.000500
net z-index-enable => pid.z.index-enable
net z-enable => pid.z.enable
net z-pos-cmd => pid.z.command
net z-pos-fb => pid.z.feedback
net z-output <= pid.z.output
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.03.dirsetup [JOINT_2]DIRSETUP
setp [HMOT](CARD0).stepgen.03.dirhold [JOINT_2]DIRHOLD
setp [HMOT](CARD0).stepgen.03.steplen [JOINT_2]STEPLEN
setp [HMOT](CARD0).stepgen.03.stepspace [JOINT_2]STEPSPACE
setp [HMOT](CARD0).stepgen.03.position-scale [JOINT_2]STEP_SCALE
setp [HMOT](CARD0).stepgen.03.step_type 0
setp [HMOT](CARD0).stepgen.03.control-type 1
setp [HMOT](CARD0).stepgen.03.maxaccel [JOINT_2]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.03.maxvel [JOINT_2]STEPGEN_MAXVEL
setp [HMOT](CARD0).stepgen.03.direction.invert_output true
# ---closedloop stepper signals---
net z-pos-cmd <= joint.2.motor-pos-cmd
net z-vel-cmd <= joint.2.vel-cmd
net z-output => [HMOT](CARD0).stepgen.03.velocity-cmd
net z-pos-fb <= [HMOT](CARD0).stepgen.03.position-fb
net z-pos-fb => joint.2.motor-pos-fb
net z-enable <= joint.2.amp-enable-out
net z-enable => [HMOT](CARD0).stepgen.03.enable
# ---setup home / limit switch signals---
net z-home-sw => joint.2.home-sw-in
net z-neg-limit => joint.2.neg-lim-sw-in
net z-pos-limit => joint.2.pos-lim-sw-in
#*******************
# AXIS A JOINT 3
#*******************
setp pid.a.Pgain [JOINT_3]P
setp pid.a.Igain [JOINT_3]I
setp pid.a.Dgain [JOINT_3]D
setp pid.a.bias [JOINT_3]BIAS
setp pid.a.FF0 [JOINT_3]FF0
setp pid.a.FF1 [JOINT_3]FF1
setp pid.a.FF2 [JOINT_3]FF2
setp pid.a.deadband [JOINT_3]DEADBAND
setp pid.a.maxoutput [JOINT_3]MAX_OUTPUT
setp pid.a.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.a.maxerror 0.000500
net a-index-enable => pid.a.index-enable
net a-enable => pid.a.enable
net a-pos-cmd => pid.a.command
net a-pos-fb => pid.a.feedback
net a-output <= pid.a.output
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.04.dirsetup [JOINT_3]DIRSETUP
setp [HMOT](CARD0).stepgen.04.dirhold [JOINT_3]DIRHOLD
setp [HMOT](CARD0).stepgen.04.steplen [JOINT_3]STEPLEN
setp [HMOT](CARD0).stepgen.04.stepspace [JOINT_3]STEPSPACE
setp [HMOT](CARD0).stepgen.04.position-scale [JOINT_3]STEP_SCALE
setp [HMOT](CARD0).stepgen.04.step_type 0
setp [HMOT](CARD0).stepgen.04.control-type 1
setp [HMOT](CARD0).stepgen.04.maxaccel [JOINT_3]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.04.maxvel [JOINT_3]STEPGEN_MAXVEL
setp [HMOT](CARD0).stepgen.04.direction.invert_output true
# ---closedloop stepper signals---
net a-pos-cmd <= joint.3.motor-pos-cmd
net a-vel-cmd <= joint.3.vel-cmd
net a-output => [HMOT](CARD0).stepgen.04.velocity-cmd
net a-pos-fb <= [HMOT](CARD0).stepgen.04.position-fb
net a-pos-fb => joint.3.motor-pos-fb
net a-enable <= joint.3.amp-enable-out
net a-enable => [HMOT](CARD0).stepgen.04.enable
# ---setup home / limit switch signals---
net a-home-sw => joint.3.home-sw-in
net a-neg-limit => joint.3.neg-lim-sw-in
net a-pos-limit => joint.3.pos-lim-sw-in
#*******************
# SPINDLE
#*******************
setp pid.s.Pgain [SPINDLE_0]P
setp pid.s.Igain [SPINDLE_0]I
setp pid.s.Dgain [SPINDLE_0]D
setp pid.s.bias [SPINDLE_0]BIAS
setp pid.s.FF0 [SPINDLE_0]FF0
setp pid.s.FF1 [SPINDLE_0]FF1
setp pid.s.FF2 [SPINDLE_0]FF2
setp pid.s.deadband [SPINDLE_0]DEADBAND
setp pid.s.maxoutput [SPINDLE_0]MAX_OUTPUT
setp pid.s.error-previous-target true
net spindle-index-enable => pid.s.index-enable
net spindle-enable => pid.s.enable
net spindle-vel-cmd-rpm => pid.s.command
net spindle-vel-fb-rpm => pid.s.feedback
net spindle-output <= pid.s.output
# ---setup spindle control signals---
net spindle-vel-cmd-rps <= spindle.0.speed-out-rps
net spindle-vel-cmd-rps-abs <= spindle.0.speed-out-rps-abs
net spindle-vel-cmd-rpm <= spindle.0.speed-out
net spindle-vel-cmd-rpm-abs <= spindle.0.speed-out-abs
net spindle-enable <= spindle.0.on
net spindle-cw <= spindle.0.forward
net spindle-ccw <= spindle.0.reverse
net spindle-brake <= spindle.0.brake
net spindle-revs => spindle.0.revs
net spindle-at-speed => spindle.0.at-speed
net spindle-vel-fb-rps => spindle.0.speed-in
net spindle-index-enable <=> spindle.0.index-enable
# ---Setup spindle at speed signals---
sets spindle-at-speed true
#******************************
# connect miscellaneous signals
#******************************
# ---HALUI signals---
net axis-select-x halui.axis.x.select
net jog-x-pos halui.axis.x.plus
net jog-x-neg halui.axis.x.minus
net jog-x-analog halui.axis.x.analog
net x-is-homed halui.joint.0.is-homed
net axis-select-y halui.axis.y.select
net jog-y-pos halui.axis.y.plus
net jog-y-neg halui.axis.y.minus
net jog-y-analog halui.axis.y.analog
net y-is-homed halui.joint.1.is-homed
net axis-select-z halui.axis.z.select
net jog-z-pos halui.axis.z.plus
net jog-z-neg halui.axis.z.minus
net jog-z-analog halui.axis.z.analog
net z-is-homed halui.joint.2.is-homed
net axis-select-a halui.axis.a.select
net jog-a-pos halui.axis.a.plus
net jog-a-neg halui.axis.a.minus
net jog-a-analog halui.axis.a.analog
net a-is-homed halui.joint.3.is-homed
net jog-selected-pos halui.axis.selected.plus
net jog-selected-neg halui.axis.selected.minus
net spindle-manual-cw halui.spindle.0.forward
net spindle-manual-ccw halui.spindle.0.reverse
net spindle-manual-stop halui.spindle.0.stop
net machine-is-on halui.machine.is-on
net jog-speed halui.axis.jog-speed
net MDI-mode halui.mode.is-mdi
# ---coolant signals---
net coolant-mist <= iocontrol.0.coolant-mist
net coolant-flood <= iocontrol.0.coolant-flood
# ---probe signal---
net probe-in => motion.probe-input
# ---motion control signals---
net in-position <= motion.in-position
net machine-is-enabled <= motion.motion-enabled
# ---digital in / out signals---
# ---estop signals---
net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in
# ---manual tool change signals---
net tool-change-request <= iocontrol.0.tool-change
net tool-change-confirmed => iocontrol.0.tool-changed
net tool-number <= iocontrol.0.tool-prep-number
# ---Use external manual tool change dialog---
loadusr -W hal_manualtoolchange
net tool-change-request => hal_manualtoolchange.change
net tool-change-confirmed <= hal_manualtoolchange.changed
net tool-number => hal_manualtoolchange.number
# ---ignore tool prepare requests---
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
22 Jan 2024 19:52
Having problems with stepper enable driven relay enabled on linux boot
Category: General LinuxCNC Questions
I am using a Sainsmart 5 axis breakout board (the one without pwm) to drive 5 axes on a knee mill. I am trying to use a relay to power up the stepper driver power supply on the enable pin. It seems to work ok when linuxCNC is running but when I start the machine the enable pin goes high. I tried using a 10k pulldown resistor on the relay but it had no effect, I think it is not simply floating.
Is there some way to set the parallel port pin value on startup or some other way to drive the relay besides the enable pin? I often leave linuxCNC running and power down the steppers so I can resume what I was working on later without having to rehome. I intend to use the onboard relay to drive the spindle.
Is there some way to set the parallel port pin value on startup or some other way to drive the relay besides the enable pin? I often leave linuxCNC running and power down the steppers so I can resume what I was working on later without having to rehome. I intend to use the onboard relay to drive the spindle.
22 Jan 2024 17:54 - 25 Jan 2024 21:53
mesaCT, 7i95t and SPINx was created by DK8DE
mesaCT, 7i95t and SPINx
Category: Basic Configuration
Hello,I'm new to LinuxCNC and come from an electronics background, with good familiarity in C. I installed the MesaCT tool and managed to get the three steppers for XYZ working. However, in the spindle tab of the tool, I can't select anything; all buttons are greyed out. I would like to connect the SPINx to channel 5, where I assume the PWM signal is. What settings do I need to adjust in MesaCT to implement this? Writing the .hal file still confuses me a bit. Does anyone have a sample configuration, or can anyone advise what settings I need to adjust in MesaCT to get the spindle running?
Best regards, Jörg
Edit:
On channel 5, the Dir signal switches with the change of direction, but I don't have a PWM output on Step. I have attached the configuration.Best regards, Jörg
Best regards, Jörg
Edit:
On channel 5, the Dir signal switches with the change of direction, but I don't have a PWM output on Step. I have attached the configuration.Best regards, Jörg
21 Jan 2024 18:16 - 21 Jan 2024 18:17
20 Jan 2024 06:07
Replied by jtrantow on topic Install Advice (HOME_USE_INDEX with stepper using an encoder)
Install Advice (HOME_USE_INDEX with stepper using an encoder)
Category: Installing LinuxCNC
7i96 lathe update went perfectly, but when I flash the 7i92 mill I'm getting errors running the new 7i92_7i85sx1sdid.bit file.
I tried the --reload, power cycle and the verify comes back ok. I can --readhmid.
FWIW, The mill is running linuxCNC 2.8.4. (Lathe was running 2.9.2)
However, when I run my Mill config with the new .biffile I get:
cncbox@debian:~/linuxcnc/configs/Mill7i85s$ linuxcnc Mill7i85s.ini
LINUXCNC - 2.8.4-23-g93a844ef5
Machine configuration directory is '/home/cncbox/linuxcnc/configs/Mill7i85s'
Machine configuration file is 'Mill7i85s.ini'
Starting LinuxCNC...
application-specific initialization failed: no display name and no $DISPLAY environment variable
Error in startup script: invalid command name "."
while executing
". configure -borderwidth 0 -highlightthickness 0"
(file "/usr/lib/tcltk/linuxcnc/bin/popimage" line 35)
twopass:invoked with <> options
twopass:found ./Mill7i85s.hal
twopass:found ./Spindle.hal
twopass:found ./estop-chain.hal
twopass:found ./quad_encoder.hal
twopass:found ./postgui_load.hal
twopass:pass0: loadusr -Wn spindle-vfd gs2_vfd -r 9600 -p none -s 2 --name spindle-vfd --accel-seconds 5 --decel-seconds 3 --braking-resistor --device /dev/ttyUSB0
spindle-vfd: device='/dev/ttyUSB0', baud=9600, parity='N', bits=8, stopbits=2, address=1, enabled=1
twopass:pass0: loadusr -W hal_manualtoolchange
Note: Using POSIX realtime
Traceback (most recent call last):
File "/usr/bin/hal_manualtoolchange", line 62, in <module>
app = Tkinter.Tk(className="AxisToolChanger")
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1828, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
hm2: loading Mesa HostMot2 driver version 0.15
hm2_eth: loading Mesa AnyIO HostMot2 ethernet driver version 0.2
hm2_eth: 10.10.10.10: INFO: Hardware address (MAC): 00:60:1b:13:05:4e
hm2_eth: discovered 7I92
hm2/hm2_7i92.0: Low Level init 0.15
hm2/hm2_7i92.0: Smart Serial Firmware Version 43
hm2/hm2_7i92.0: unknown stepgen MD:
hm2/hm2_7i92.0: Version = 194, expected 0-2
hm2/hm2_7i92.0: NumRegisters = 10, expected 10
hm2/hm2_7i92.0: InstanceStride = 0x00000004, expected 4
hm2/hm2_7i92.0: MultipleRegisters = 0x000001FF, expected 0x000001FF
hm2/hm2_7i92.0: failed to parse Module Descriptor 6
board fails HM2 registration
hm2_eth: in hm2_eth_reset
hm2_eth: rtapi_app_main: Invalid argument (-22)
twopass: load_the_modules cmd=<orig_loadrt hm2_eth [concat board_ip="10.10.10.10"] [concat config=" num_encoders=4 num_stepgens=4"]>
waitpid failed /usr/bin/rtapi_app hm2_eth
/usr/bin/rtapi_app exited without becoming ready
insmod for hm2_eth failed, returned -1
Shutting down and cleaning up LinuxCNC...
Running HAL shutdown script
hm2: unloading
If I flash a different .bit file the config starts up as normal.
I tried the --reload, power cycle and the verify comes back ok. I can --readhmid.
FWIW, The mill is running linuxCNC 2.8.4. (Lathe was running 2.9.2)
However, when I run my Mill config with the new .biffile I get:
cncbox@debian:~/linuxcnc/configs/Mill7i85s$ linuxcnc Mill7i85s.ini
LINUXCNC - 2.8.4-23-g93a844ef5
Machine configuration directory is '/home/cncbox/linuxcnc/configs/Mill7i85s'
Machine configuration file is 'Mill7i85s.ini'
Starting LinuxCNC...
application-specific initialization failed: no display name and no $DISPLAY environment variable
Error in startup script: invalid command name "."
while executing
". configure -borderwidth 0 -highlightthickness 0"
(file "/usr/lib/tcltk/linuxcnc/bin/popimage" line 35)
twopass:invoked with <> options
twopass:found ./Mill7i85s.hal
twopass:found ./Spindle.hal
twopass:found ./estop-chain.hal
twopass:found ./quad_encoder.hal
twopass:found ./postgui_load.hal
twopass:pass0: loadusr -Wn spindle-vfd gs2_vfd -r 9600 -p none -s 2 --name spindle-vfd --accel-seconds 5 --decel-seconds 3 --braking-resistor --device /dev/ttyUSB0
spindle-vfd: device='/dev/ttyUSB0', baud=9600, parity='N', bits=8, stopbits=2, address=1, enabled=1
twopass:pass0: loadusr -W hal_manualtoolchange
Note: Using POSIX realtime
Traceback (most recent call last):
File "/usr/bin/hal_manualtoolchange", line 62, in <module>
app = Tkinter.Tk(className="AxisToolChanger")
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1828, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
hm2: loading Mesa HostMot2 driver version 0.15
hm2_eth: loading Mesa AnyIO HostMot2 ethernet driver version 0.2
hm2_eth: 10.10.10.10: INFO: Hardware address (MAC): 00:60:1b:13:05:4e
hm2_eth: discovered 7I92
hm2/hm2_7i92.0: Low Level init 0.15
hm2/hm2_7i92.0: Smart Serial Firmware Version 43
hm2/hm2_7i92.0: unknown stepgen MD:
hm2/hm2_7i92.0: Version = 194, expected 0-2
hm2/hm2_7i92.0: NumRegisters = 10, expected 10
hm2/hm2_7i92.0: InstanceStride = 0x00000004, expected 4
hm2/hm2_7i92.0: MultipleRegisters = 0x000001FF, expected 0x000001FF
hm2/hm2_7i92.0: failed to parse Module Descriptor 6
board fails HM2 registration
hm2_eth: in hm2_eth_reset
hm2_eth: rtapi_app_main: Invalid argument (-22)
twopass: load_the_modules cmd=<orig_loadrt hm2_eth [concat board_ip="10.10.10.10"] [concat config=" num_encoders=4 num_stepgens=4"]>
waitpid failed /usr/bin/rtapi_app hm2_eth
/usr/bin/rtapi_app exited without becoming ready
insmod for hm2_eth failed, returned -1
Shutting down and cleaning up LinuxCNC...
Running HAL shutdown script
hm2: unloading
If I flash a different .bit file the config starts up as normal.
18 Jan 2024 20:38 - 18 Jan 2024 21:21
Spindle Speed display backwards was created by lucas-767
Spindle Speed display backwards
Category: Advanced Configuration
I'm trying to configure a lathe using Linuxcnc 2.9. Now I'm adding an encoder like the one in the attachments. I used the stepper config wizard, selected custom pyVCP GUI panel and the spindle speed display option. I tested the encoder using Hal Meter and the connection is fine. When I turn the spindle on the speed display starts to count, but with wrong values and when I increase the speed this value decrease until reach 0.
I tried some troubleshootings in hal files, but I'm really newbie in Linuxcnc.
I'm using a BOB like the one in attachments.
My VFD is the 9600 nflixin
Here is a video about the problem
I tried some troubleshootings in hal files, but I'm really newbie in Linuxcnc.
I'm using a BOB like the one in attachments.
My VFD is the 9600 nflixin
Here is a video about the problem
Time to create page: 1.216 seconds