question when using chinese servo drives with original motors

More
06 Jul 2019 13:03 #138733 by Becksvill
Hey guys.

So I'm just setting up my cnc mill with Mesa cards and step/dir

Using 5i25 and 7i76.

Chinese servos are working well.

But I just spent most of my Saturday chasing this funny stepgen joint error.

I am wanting a resolution of at least. 0.005 mm. And I want at least 12 m per min rapid speed as I'm retrofitting a high speed linear rail machine. The ballscrews are 16 mm pitch.

Does anyone know why I get a stepgen joint error? And also when moving at high speed Linux cnc rapids to about 3 mm of the end and then it slowly inches up the last little bit.

I don't think its a big problem and I'll go ahead and bolt the motors to the machine. But would appreciate some help from people.

Regards

Andrew

Please Log in or Create an account to join the conversation.

More
06 Jul 2019 13:10 #138734 by PCW
Can you post you hal/ini files? I suspect this is caused by a bug in some versions of pncconf on metric machines
The following user(s) said Thank You: Becksvill

Please Log in or Create an account to join the conversation.

More
07 Jul 2019 06:04 #138769 by Becksvill
Hey guys.

I asked on the email list how to fix this and PCW had the awesome quick fix which I will write down here with some good google keywords so the next person searching for answers like me can find this.

Joint following error in linuxcnc
stepgen error in linuxcnc with mesa cards 5i25 7i76.

So the error was when trying to move the axes at 12 m/min I get a joint following error. This was seperate to stepper drive timing problems etc. the servos I am using can take really fast signals. and the mesa board can output much high frequencies than what I need. This was a Bug in Pnccof. quite a simple one actually. basicely the default value was reasonable for imperial machines but much too accuracy for metric machines.

This sounds like an error caused by a scale problem in pncconf on metric
configurations.

PCW gave me this advice which worked a charm. I changed the value to 0.01 for now.

Check your hal file are remove any lines like:

setp pid.XXX.maxerror .0005

(this number makes sense for inch machines but not mm machines)

The rest of this post is just copied and pasted from the email chat...


PCW. I tried changing the setp pid.XXX.maxerror .0005 to .01 and that fixed the error I think. I don't get a joint error now. So thanks so much for the help.

Gene Haskin

Just a bit of info as you were asking about it.

This is a commerical vmc that I am retrofitting.. The ballscrews are single start 16 mm pitch. 40 mm dia. But this machine used to run like that and was a nice accurate machine. I have 131072 ppr encoders so heaps of resolution. But then I am running step and direction lol so I probably loose so much of that accuracy anyway. and as I understand it the actual accuracy is only as good as the tuning of the motors. The encoders are actually pretty interesting. if I connect up the batteries they are absolute encoders and don't loose their position values. But If I don't use a battery and change a parameter they work as normal incremental encoders I think. though under the hood they may be serial anyway I am picking. They were a extra 30 usd each above the normal 2500 ppr encoders so I decided to get them. And they come out of either germany or taiwan depending on what resolution I need.

anyway here are the ini files requested. you guys might be able to find some more silly stuff that I have done if you want to scan it.. But PCWs fix worked so the machine is currently working.

INI file
# Generated by PNCconf at Sun Jul 7 12:14:14 2019
# If you make changes to this file, they will be
# overwritten when you run PNCconf again

[EMC]
MACHINE = test_2
DEBUG = 0

[DISPLAY]
DISPLAY = axis
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 2.000000
MAX_SPINDLE_OVERRIDE = 1.500000
MIN_SPINDLE_OVERRIDE = 0.500000
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
PROGRAM_PREFIX = /home/andrew/linuxcnc/nc_files
INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm
POSITION_FEEDBACK = ACTUAL
DEFAULT_LINEAR_VELOCITY = 0.250000
MAX_LINEAR_VELOCITY = 100.000000
MIN_LINEAR_VELOCITY = 0.010000
DEFAULT_ANGULAR_VELOCITY = 0.250000
MAX_ANGULAR_VELOCITY = 1.000000
MIN_ANGULAR_VELOCITY = 0.010000
EDITOR = gedit
GEOMETRY = xyz

[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image
PROGRAM_EXTENSION = .py Python Script
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python

[TASK]
TASK = milltask
CYCLE_TIME = 0.010

[RS274NGC]
PARAMETER_FILE = linuxcnc.var

[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
COMM_WAIT = 0.010
SERVO_PERIOD = 100000

[HOSTMOT2]
# **** This is for info only ****
# DRIVER0=hm2_pci
# BOARD0=5i25

[HAL]
HALUI = halui
HALFILE = test_2.hal
HALFILE = custom.hal
POSTGUI_HALFILE = postgui_call_list.hal
SHUTDOWN = shutdown.hal

[HALUI]

[TRAJ]
AXES = 3
COORDINATES = X Y Z
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = 20.00
MAX_LINEAR_VELOCITY = 200.00
NO_FORCE_HOMING = 1

[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl

#********************
# Axis X
#********************
[AXIS_0]
TYPE = LINEAR
HOME = 0.0
FERROR = 5.0
MIN_FERROR = 6
MAX_VELOCITY = 200.0
MAX_ACCELERATION = 1000.0
# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
STEPGEN_MAXVEL = 250.00
STEPGEN_MAXACCEL = 1250.00
P = 50.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 250.0
# these are in nanoseconds
DIRSETUP = 1000
DIRHOLD = 1000
STEPLEN = 1000
STEPSPACE = 1000
STEP_SCALE = 468.75
MIN_LIMIT = -0.01
MAX_LIMIT = 1000.0
HOME_OFFSET = 0.0

#********************
# Axis Y
#********************
[AXIS_1]
TYPE = LINEAR
HOME = 0.0
FERROR = 5.0
MIN_FERROR = 6
MAX_VELOCITY = 200.0
MAX_ACCELERATION = 750.0
# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
STEPGEN_MAXVEL = 250.00
STEPGEN_MAXACCEL = 937.50
P = 50.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 250.0
# these are in nanoseconds
DIRSETUP = 200
DIRHOLD = 200
STEPLEN = 200
STEPSPACE = 200
STEP_SCALE = 1500.0
MIN_LIMIT = -0.01
MAX_LIMIT = 500.0
HOME_OFFSET = 0.0

#********************
# Axis Z
#********************
[AXIS_2]
TYPE = LINEAR
HOME = 0.0
FERROR = 10.0
MIN_FERROR = 1.0
MAX_VELOCITY = 200.0
MAX_ACCELERATION = 750.0
# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
STEPGEN_MAXVEL = 250.00
STEPGEN_MAXACCEL = 937.50
P = 50.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 250.0
# these are in nanoseconds
DIRSETUP = 200
DIRHOLD = 200
STEPLEN = 200
STEPSPACE = 200
STEP_SCALE = 1000.0
MIN_LIMIT = -500.0
MAX_LIMIT = 0.01
HOME_OFFSET = 0.0

#********************
# Spindle
#********************
[SPINDLE_9]
P = 0
I = 0
D = 0
FF0 = 1
FF1 = 0
FF2 = 0
BIAS = 0
DEADBAND = 0
MAX_OUTPUT = 2000



Hal file:

# Generated by PNCconf at Sun Jul 7 12:14:14 2019
# If you make changes to this file, they will be
# overwritten when you run PNCconf again

loadrt trivkins
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt hostmot2
loadrt hm2_pci config=" num_encoders=1 num_pwmgens=0 num_stepgens=5 sserial_port_0=00xxxx"
setp hm2_5i25.0.watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.y,pid.z,pid.s

addf hm2_5i25.0.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.s.do-pid-calcs servo-thread
addf hm2_5i25.0.write servo-thread

# external output signals


# external input signals


# --- ESTOP-EXT ---
net estop-ext <= hm2_5i25.0.7i76.0.0.input-00-not

#*******************
# AXIS X
#*******************

setp pid.x.Pgain [AXIS_0]P
setp pid.x.Igain [AXIS_0]I
setp pid.x.Dgain [AXIS_0]D
setp pid.x.bias [AXIS_0]BIAS
setp pid.x.FF0 [AXIS_0]FF0
setp pid.x.FF1 [AXIS_0]FF1
setp pid.x.FF2 [AXIS_0]FF2
setp pid.x.deadband [AXIS_0]DEADBAND
setp pid.x.maxoutput [AXIS_0]MAX_OUTPUT
setp pid.x.error-previous-target true
setp pid.x.maxerror .0005

net x-index-enable <=> pid.x.index-enable
net x-enable => pid.x.enable
net x-pos-cmd => pid.x.command
net x-vel-cmd => pid.x.command-deriv
net x-pos-fb => pid.x.feedback
net x-output => pid.x.output

# Step Gen signals/setup

setp hm2_5i25.0.stepgen.00.dirsetup [AXIS_0]DIRSETUP
setp hm2_5i25.0.stepgen.00.dirhold [AXIS_0]DIRHOLD
setp hm2_5i25.0.stepgen.00.steplen [AXIS_0]STEPLEN
setp hm2_5i25.0.stepgen.00.stepspace [AXIS_0]STEPSPACE
setp hm2_5i25.0.stepgen.00.position-scale [AXIS_0]STEP_SCALE
setp hm2_5i25.0.stepgen.00.step_type 0
setp hm2_5i25.0.stepgen.00.control-type 1
setp hm2_5i25.0.stepgen.00.maxaccel [AXIS_0]STEPGEN_MAXACCEL
setp hm2_5i25.0.stepgen.00.maxvel [AXIS_0]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net x-pos-cmd <= axis.0.motor-pos-cmd
net x-vel-cmd <= axis.0.joint-vel-cmd
net x-output <= hm2_5i25.0.stepgen.00.velocity-cmd
net x-pos-fb <= hm2_5i25.0.stepgen.00.position-fb
net x-pos-fb => axis.0.motor-pos-fb
net x-enable <= axis.0.amp-enable-out
net x-enable => hm2_5i25.0.stepgen.00.enable

# ---setup home / limit switch signals---

net x-home-sw => axis.0.home-sw-in
net x-neg-limit => axis.0.neg-lim-sw-in
net x-pos-limit => axis.0.pos-lim-sw-in

#*******************
# AXIS Y
#*******************

setp pid.y.Pgain [AXIS_1]P
setp pid.y.Igain [AXIS_1]I
setp pid.y.Dgain [AXIS_1]D
setp pid.y.bias [AXIS_1]BIAS
setp pid.y.FF0 [AXIS_1]FF0
setp pid.y.FF1 [AXIS_1]FF1
setp pid.y.FF2 [AXIS_1]FF2
setp pid.y.deadband [AXIS_1]DEADBAND
setp pid.y.maxoutput [AXIS_1]MAX_OUTPUT
setp pid.y.error-previous-target true
setp pid.y.maxerror .0005

net y-index-enable <=> pid.y.index-enable
net y-enable => pid.y.enable
net y-pos-cmd => pid.y.command
net y-vel-cmd => pid.y.command-deriv
net y-pos-fb => pid.y.feedback
net y-output => pid.y.output

# Step Gen signals/setup

setp hm2_5i25.0.stepgen.01.dirsetup [AXIS_1]DIRSETUP
setp hm2_5i25.0.stepgen.01.dirhold [AXIS_1]DIRHOLD
setp hm2_5i25.0.stepgen.01.steplen [AXIS_1]STEPLEN
setp hm2_5i25.0.stepgen.01.stepspace [AXIS_1]STEPSPACE
setp hm2_5i25.0.stepgen.01.position-scale [AXIS_1]STEP_SCALE
setp hm2_5i25.0.stepgen.01.step_type 0
setp hm2_5i25.0.stepgen.01.control-type 1
setp hm2_5i25.0.stepgen.01.maxaccel [AXIS_1]STEPGEN_MAXACCEL
setp hm2_5i25.0.stepgen.01.maxvel [AXIS_1]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net y-pos-cmd <= axis.1.motor-pos-cmd
net y-vel-cmd <= axis.1.joint-vel-cmd
net y-output <= hm2_5i25.0.stepgen.01.velocity-cmd
net y-pos-fb <= hm2_5i25.0.stepgen.01.position-fb
net y-pos-fb => axis.1.motor-pos-fb
net y-enable <= axis.1.amp-enable-out
net y-enable => hm2_5i25.0.stepgen.01.enable

# ---setup home / limit switch signals---

net y-home-sw => axis.1.home-sw-in
net y-neg-limit => axis.1.neg-lim-sw-in
net y-pos-limit => axis.1.pos-lim-sw-in

#*******************
# AXIS Z
#*******************

setp pid.z.Pgain [AXIS_2]P
setp pid.z.Igain [AXIS_2]I
setp pid.z.Dgain [AXIS_2]D
setp pid.z.bias [AXIS_2]BIAS
setp pid.z.FF0 [AXIS_2]FF0
setp pid.z.FF1 [AXIS_2]FF1
setp pid.z.FF2 [AXIS_2]FF2
setp pid.z.deadband [AXIS_2]DEADBAND
setp pid.z.maxoutput [AXIS_2]MAX_OUTPUT
setp pid.z.error-previous-target true
setp pid.z.maxerror .0005

net z-index-enable <=> pid.z.index-enable
net z-enable => pid.z.enable
net z-pos-cmd => pid.z.command
net z-vel-cmd => pid.z.command-deriv
net z-pos-fb => pid.z.feedback
net z-output => pid.z.output

# Step Gen signals/setup

setp hm2_5i25.0.stepgen.02.dirsetup [AXIS_2]DIRSETUP
setp hm2_5i25.0.stepgen.02.dirhold [AXIS_2]DIRHOLD
setp hm2_5i25.0.stepgen.02.steplen [AXIS_2]STEPLEN
setp hm2_5i25.0.stepgen.02.stepspace [AXIS_2]STEPSPACE
setp hm2_5i25.0.stepgen.02.position-scale [AXIS_2]STEP_SCALE
setp hm2_5i25.0.stepgen.02.step_type 0
setp hm2_5i25.0.stepgen.02.control-type 1
setp hm2_5i25.0.stepgen.02.maxaccel [AXIS_2]STEPGEN_MAXACCEL
setp hm2_5i25.0.stepgen.02.maxvel [AXIS_2]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net z-pos-cmd <= axis.2.motor-pos-cmd
net z-vel-cmd <= axis.2.joint-vel-cmd
net z-output <= hm2_5i25.0.stepgen.02.velocity-cmd
net z-pos-fb <= hm2_5i25.0.stepgen.02.position-fb
net z-pos-fb => axis.2.motor-pos-fb
net z-enable <= axis.2.amp-enable-out
net z-enable => hm2_5i25.0.stepgen.02.enable

# ---setup home / limit switch signals---

net z-home-sw => axis.2.home-sw-in
net z-neg-limit => axis.2.neg-lim-sw-in
net z-pos-limit => axis.2.pos-lim-sw-in

#*******************
# SPINDLE S
#*******************

setp pid.s.Pgain [SPINDLE_9]P
setp pid.s.Igain [SPINDLE_9]I
setp pid.s.Dgain [SPINDLE_9]D
setp pid.s.bias [SPINDLE_9]BIAS
setp pid.s.FF0 [SPINDLE_9]FF0
setp pid.s.FF1 [SPINDLE_9]FF1
setp pid.s.FF2 [SPINDLE_9]FF2
setp pid.s.deadband [SPINDLE_9]DEADBAND
setp pid.s.maxoutput [SPINDLE_9]MAX_OUTPUT
setp pid.s.error-previous-target true
setp pid.s.maxerror .0005

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 <= motion.spindle-speed-out-rps
net spindle-vel-cmd-rps-abs <= motion.spindle-speed-out-rps-abs
net spindle-vel-cmd-rpm <= motion.spindle-speed-out
net spindle-vel-cmd-rpm-abs <= motion.spindle-speed-out-abs
net spindle-enable <= motion.spindle-on
net spindle-cw <= motion.spindle-forward
net spindle-ccw <= motion.spindle-reverse
net spindle-brake <= motion.spindle-brake
net spindle-revs => motion.spindle-revs
net spindle-at-speed => motion.spindle-at-speed
net spindle-vel-fb-rps => motion.spindle-speed-in
net spindle-index-enable <=> motion.spindle-index-enable

# ---Setup spindle at speed signals---

sets spindle-at-speed true


#******************************
# connect miscellaneous signals
#******************************

# ---HALUI signals---

net joint-select-a halui.joint.0.select
net x-is-homed halui.joint.0.is-homed
net jog-x-pos halui.jog.0.plus
net jog-x-neg halui.jog.0.minus
net jog-x-analog halui.jog.0.analog
net joint-select-b halui.joint.1.select
net y-is-homed halui.joint.1.is-homed
net jog-y-pos halui.jog.1.plus
net jog-y-neg halui.jog.1.minus
net jog-y-analog halui.jog.1.analog
net joint-select-c halui.joint.2.select
net z-is-homed halui.joint.2.is-homed
net jog-z-pos halui.jog.2.plus
net jog-z-neg halui.jog.2.minus
net jog-z-analog halui.jog.2.analog
net jog-selected-pos halui.jog.selected.plus
net jog-selected-neg halui.jog.selected.minus
net spindle-manual-cw halui.spindle.forward
net spindle-manual-ccw halui.spindle.reverse
net spindle-manual-stop halui.spindle.stop
net machine-is-on halui.machine.is-on
net jog-speed halui.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-ext => iocontrol.0.emc-enable-in

# ---manual tool change signals---

loadusr -W hal_manualtoolchange
net tool-change-request iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-change-confirmed iocontrol.0.tool-changed <= hal_manualtoolchange.changed
net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared

Please Log in or Create an account to join the conversation.

More
07 Jul 2019 06:12 #138770 by Becksvill
Hey guys I do have one question here.

I would like some good recommendations for what is the max step resolution I should be able get with my setup?

I have the mesa 5i25 7i76 cards. And Yuhai Chinese servos www.zjyuhai.cn/en/. I will link the website as they have been very nice to deal with and Bill was very patient with my endless questions. And there prices are very good too. I think they are a much better solution to buying off aliexpress. at least this way you get to speak to the factory. My servos were tuned for me without a load just so I can get started easier. and I will tune them again later. anyway..


I think they support step rates up to 400khz I have 131072 ppr encoders so would like the best step resolution that I can get as I may as well with those encoders. also I need a max velocity of 12 m/min I am not sure what acceleration I will end up with but that can change once I actually get the motors bolted up to the machine. and the servos tuned to the load of the table.

regards

Andrew

Please Log in or Create an account to join the conversation.

More
08 Jul 2019 10:22 #138851 by Becksvill
Not sure who is following this build thread but I will be making videos of the process as I go to hopefully help any other people trying to learn linuxcnc .

Here is one of the latest videos from a couple of nights ago when i got my motors working first.



And now I have a question if anyone has any advice for me.

I am currently deciding what to use to connect my front operator panel to the control box in the back of the machine.

Here are the options I know about. Feel free to let me know of a better solution please!

option 1: have the computer in the front with mesa 5i25 and have the 7i76 in the back. I would need a 4 metre cable to connect them..

option 2: use long 4 metre Usb cables for the keyboard and mouse and keep the computer in the back.

option 3: use a ethernet to usb adaptor cable with 3 ports keeping computer in the back still.

option 4 Use mesa 7i73 (it is showing out of stock on the mesa website..)

I currently use the 5i25 and 7i76 boards so all important IO (cycle start rapids buttons e stop) etc will have direct switches running to the field io on the 7i76. It is just the usb keyboard and mouse/trackball that I am thinking about

Anyway let me know what you think. I would love to hear some advice from the pros here.

Regards

Andrew
The following user(s) said Thank You: tommylight

Please Log in or Create an account to join the conversation.

More
08 Jul 2019 17:46 #138882 by Todd Zuercher
I would choose 1 or 4 depending on the situation.(long USB cables are never a good idea.)
The following user(s) said Thank You: Becksvill

Please Log in or Create an account to join the conversation.

More
08 Jul 2019 21:00 #138893 by rodw
From very old memory, I seem to remember the maximum parallel port cable spec was 5 metres so with a quality cable to the Mesa specs, you should be OK at 4.0m. But the 7i73 sounds a better option if it does everything you want.
The following user(s) said Thank You: Becksvill

Please Log in or Create an account to join the conversation.

More
08 Jul 2019 22:41 #138905 by Becksvill
OK thanks Todd and rod.
Is there any special parallel port cable that I need?

Please Log in or Create an account to join the conversation.

More
09 Jul 2019 09:31 #138935 by rodw

OK thanks Todd and rod.
Is there any special parallel port cable that I need?


I would get one from Mesa or at least one to their specs. I have not used a 5i25 at all.
The following user(s) said Thank You: Becksvill

Please Log in or Create an account to join the conversation.

More
09 Jul 2019 09:49 #138939 by BigJohnT

OK thanks Todd and rod.
Is there any special parallel port cable that I need?


Yes, you need to use a IEEE 1284 cable.

JT
The following user(s) said Thank You: Becksvill

Please Log in or Create an account to join the conversation.

Time to create page: 0.219 seconds
Powered by Kunena Forum