Strange Behaviour of orient component G33 works ,.
i do have to "customers" for that spindle-index-enable
to make sure they both have same i set on the end of the hal file the enable to 1
Normally spindle.index-enable sets the signal high to indicate that it wants to zero the counts at the next index. Then encode.0 sets the signal low to indicate that it has done this.
If we set the signal high in the HAL file then motion doesn't care, but the encoder will zero itself on the next index.
The alternative might be to do a very short G33 move at the end of the homing sequence, but let's see if the HAL sets works OK first.
but my assumption with position equals degrees is correct ?
No, motion.spindle-revs is expected to count up 1.00 per spindle revolution. The "orient" component knows this and scales the angle and setpoint accordingly.
Please Log in or Create an account to join the conversation.
i now cleaned up the hal file and put all your stuff in i found some typos but finally
nothing works any more ,..
i can do normal spindle moves right left and can control the speed.
i also corrected the problem that position should not be degrees right ? it should be 1 per revolution and the orient is then calculating what lets say 30 degrees means in term of position ?
When i enter M19 it does not even start the spindle ? ,
if i do G33.1 it does nothing so somewhere i must have done something wrong because your hal file seems to be much cleaner than mine -
could you have a look and push me in the right direction ?
if not possible the question is
a) encoder posistion is it degrees or 1 per revolution ?
b) if i look into linuxcnc.org/docs/html/examples/spindle.html feedback it seems that revs and speed in is needed for synchronized move
c) what can be the reason that if i turn the spindle by hand it is counting correct means upwards if turns right counts exactly 1 per revolution and anti clockwise it decreases the numbers but when i try G33,1 or run the spindle sometimes it counts revert or it then has an - value where when i turn spindle by hand it is behaving correct ?
so any hint is welcome it looks like i run out of ideas ,.. thx thomas
Please Log in or Create an account to join the conversation.
so any hint is welcome it looks like i run out of ideas ,.. thx thomas
The first thing I notice is that you are using the General Mechatronics card for the axes, but then the spindle PWM and encoders are all connected to the parallel port.
This makes no sense at all. The gm boards have encoder counters and DACs. The spindle is very likely to move too fast for a software encoder counter to track.
I have never used one, so could you do the following, with LinuxCNC not running.
in a terminal
halrun
loadrt hal_gm
show pin
exit
Then copy and paste all the output to a file and attach it here?
Please Log in or Create an account to join the conversation.
i am not at the factory any more so i can do that only next week but
The encoders are using the gm board
# connect the HAL encoder inputs to the real encoder.
net spindle-phase-a encoder.0.phase-A <= gm.0.gpio.0.in-6
net spindle-phase-b encoder.0.phase-B <= gm.0.gpio.0.in-4
net spindle-index encoder.0.phase-Z <= gm.0.gpio.0.in-1 => encoder.0.latch-input
which is gpio board 0 6 4 and 1 are used for the encoder
And yes i control the 0..10 V and left right via the Triple beast breakout board because the gm board is not delivering that and i would have needed a extra relays block
So motor control is done via parallel board
but in my old config i have seen the G33.1 working so the error has to be somewhere in the hal
thomas
Please Log in or Create an account to join the conversation.
You need to invent some tags in the INI for the P, I, D etc gains of the velocity PID and use them in the HAL file just like you now have for the orient.
Hi,
i am not at the factory any more so i can do that only next week but
The encoders are using the gm board
# connect the HAL encoder inputs to the real encoder.
net spindle-phase-a encoder.0.phase-A <= gm.0.gpio.0.in-6
net spindle-phase-b encoder.0.phase-B <= gm.0.gpio.0.in-4
net spindle-index encoder.0.phase-Z <= gm.0.gpio.0.in-1 => encoder.0.latch-input
Yes, but you are still using a software encoder counter, and that makes no sense. The GM board has its own encoder counters.
For example, if you connect
encoder A to GM Axis 4 pin 1
encoder B to GM Axis 4 pin 3
encoder Z to GM Axis 4 pin 5
encoder GND GM Axis 4 pin 9
encoder 5V to GM Axis 4 pin 2
Then you should see the HAL pin gm.0.encoder.4.count increase as you turn the spindle.
Not only will this work better, but it will free-up some GPIO.
Similarly, there is no point in using software PWM to control the VFD. You can either use the GM board DAC outputs to drive the VFD, or if you prefer, use a spare step generator to create a freqeency output for the Triple Beast. (note that TB spindle analogue out is _frequency_ to voltage, not PWM duty-cycle to voltage, so a velocty-mode step generator is likely to work best).
So, as we seem to be using Axis 4 for the spindle.
Connect TB frequency input to GM Axis 4 Pin 7 (currently parport pin 17)
Connect VFD Fwd to a GM GPIO (curently parport pin 14)
Connect VFD Rev to a GM GPIO (currently parport pin 1)
(My German is not good enough to read the TB manual, there may be specific outputs from the TB for VFD Fwd / Rev (or ON / Rev)
I think my preference would be to use the GM DAC output to control the VFD, especially if the VFD can be configured to run Fwd for +V and reverse for -V as that makes things a lot simpler in HAL.
Attached is what I think your HAL file would look like with all these wiring changes. I haven't tested the file, and it still does not set up the velocity PID.
Please Log in or Create an account to join the conversation.
halcmd: show pin
Component Pins:
Owner Type Dir Value Name
4 bit OUT FALSE gm.0.axis.0.home-sw-in
4 bit OUT FALSE gm.0.axis.0.home-sw-in-not
4 bit OUT FALSE gm.0.axis.0.neg-lim-sw-in
4 bit OUT FALSE gm.0.axis.0.neg-lim-sw-in-not
4 bit OUT FALSE gm.0.axis.0.pos-lim-sw-in
4 bit OUT FALSE gm.0.axis.0.pos-lim-sw-in-not
4 bit OUT FALSE gm.0.axis.1.home-sw-in
4 bit OUT FALSE gm.0.axis.1.home-sw-in-not
4 bit OUT FALSE gm.0.axis.1.neg-lim-sw-in
4 bit OUT FALSE gm.0.axis.1.neg-lim-sw-in-not
4 bit OUT FALSE gm.0.axis.1.pos-lim-sw-in
4 bit OUT FALSE gm.0.axis.1.pos-lim-sw-in-not
4 bit OUT FALSE gm.0.axis.2.home-sw-in
4 bit OUT FALSE gm.0.axis.2.home-sw-in-not
4 bit OUT FALSE gm.0.axis.2.neg-lim-sw-in
4 bit OUT FALSE gm.0.axis.2.neg-lim-sw-in-not
4 bit OUT FALSE gm.0.axis.2.pos-lim-sw-in
4 bit OUT FALSE gm.0.axis.2.pos-lim-sw-in-not
4 bit OUT FALSE gm.0.axis.3.home-sw-in
4 bit OUT FALSE gm.0.axis.3.home-sw-in-not
4 bit OUT FALSE gm.0.axis.3.neg-lim-sw-in
4 bit OUT FALSE gm.0.axis.3.neg-lim-sw-in-not
4 bit OUT FALSE gm.0.axis.3.pos-lim-sw-in
4 bit OUT FALSE gm.0.axis.3.pos-lim-sw-in-not
4 bit OUT FALSE gm.0.axis.4.home-sw-in
4 bit OUT FALSE gm.0.axis.4.home-sw-in-not
4 bit OUT FALSE gm.0.axis.4.neg-lim-sw-in
4 bit OUT FALSE gm.0.axis.4.neg-lim-sw-in-not
4 bit OUT FALSE gm.0.axis.4.pos-lim-sw-in
4 bit OUT FALSE gm.0.axis.4.pos-lim-sw-in-not
4 bit OUT FALSE gm.0.axis.5.home-sw-in
4 bit OUT FALSE gm.0.axis.5.home-sw-in-not
4 bit OUT FALSE gm.0.axis.5.neg-lim-sw-in
4 bit OUT FALSE gm.0.axis.5.neg-lim-sw-in-not
4 bit OUT FALSE gm.0.axis.5.pos-lim-sw-in
4 bit OUT FALSE gm.0.axis.5.pos-lim-sw-in-not
4 bit IN FALSE gm.0.can-gm.0.enable
4 float IN 0 gm.0.can-gm.0.position-cmd
4 float OUT 0 gm.0.can-gm.0.position-fb
4 bit IN FALSE gm.0.can-gm.1.enable
4 float IN 0 gm.0.can-gm.1.position-cmd
4 float OUT 0 gm.0.can-gm.1.position-fb
4 bit IN FALSE gm.0.can-gm.2.enable
4 float IN 0 gm.0.can-gm.2.position-cmd
4 float OUT 0 gm.0.can-gm.2.position-fb
4 bit IN FALSE gm.0.can-gm.3.enable
4 float IN 0 gm.0.can-gm.3.position-cmd
4 float OUT 0 gm.0.can-gm.3.position-fb
4 bit IN FALSE gm.0.can-gm.4.enable
4 float IN 0 gm.0.can-gm.4.position-cmd
4 float OUT 0 gm.0.can-gm.4.position-fb
4 bit IN FALSE gm.0.can-gm.5.enable
4 float IN 0 gm.0.can-gm.5.position-cmd
4 float OUT 0 gm.0.can-gm.5.position-fb
4 bit IN FALSE gm.0.dac.0.enable
4 float IN 0 gm.0.dac.0.value
4 bit IN FALSE gm.0.dac.1.enable
4 float IN 0 gm.0.dac.1.value
4 bit IN FALSE gm.0.dac.2.enable
4 float IN 0 gm.0.dac.2.value
4 bit IN FALSE gm.0.dac.3.enable
4 float IN 0 gm.0.dac.3.value
4 bit IN FALSE gm.0.dac.4.enable
4 float IN 0 gm.0.dac.4.value
4 bit IN FALSE gm.0.dac.5.enable
4 float IN 0 gm.0.dac.5.value
4 s32 OUT 0 gm.0.encoder.0.counts
4 bit I/O FALSE gm.0.encoder.0.index-enable
4 float OUT 0 gm.0.encoder.0.position
4 s32 OUT 0 gm.0.encoder.0.rawcounts
4 bit IN FALSE gm.0.encoder.0.reset
4 float OUT 0 gm.0.encoder.0.velocity
4 s32 OUT 0 gm.0.encoder.1.counts
4 bit I/O FALSE gm.0.encoder.1.index-enable
4 float OUT 0 gm.0.encoder.1.position
4 s32 OUT 0 gm.0.encoder.1.rawcounts
4 bit IN FALSE gm.0.encoder.1.reset
4 float OUT 0 gm.0.encoder.1.velocity
4 s32 OUT 0 gm.0.encoder.2.counts
4 bit I/O FALSE gm.0.encoder.2.index-enable
4 float OUT 0 gm.0.encoder.2.position
4 s32 OUT 0 gm.0.encoder.2.rawcounts
4 bit IN FALSE gm.0.encoder.2.reset
4 float OUT 0 gm.0.encoder.2.velocity
4 s32 OUT 0 gm.0.encoder.3.counts
4 bit I/O FALSE gm.0.encoder.3.index-enable
4 float OUT 0 gm.0.encoder.3.position
4 s32 OUT 0 gm.0.encoder.3.rawcounts
4 bit IN FALSE gm.0.encoder.3.reset
4 float OUT 0 gm.0.encoder.3.velocity
4 s32 OUT 0 gm.0.encoder.4.counts
4 bit I/O FALSE gm.0.encoder.4.index-enable
4 float OUT 0 gm.0.encoder.4.position
4 s32 OUT 0 gm.0.encoder.4.rawcounts
4 bit IN FALSE gm.0.encoder.4.reset
4 float OUT 0 gm.0.encoder.4.velocity
4 s32 OUT 0 gm.0.encoder.5.counts
4 bit I/O FALSE gm.0.encoder.5.index-enable
4 float OUT 0 gm.0.encoder.5.position
4 s32 OUT 0 gm.0.encoder.5.rawcounts
4 bit IN FALSE gm.0.encoder.5.reset
4 float OUT 0 gm.0.encoder.5.velocity
4 bit OUT FALSE gm.0.estop.0.in
4 bit OUT FALSE gm.0.estop.0.in-not
4 bit OUT FALSE gm.0.estop.1.in
4 bit OUT FALSE gm.0.estop.1.in-not
4 bit OUT FALSE gm.0.gpio.0.in-0
4 bit OUT FALSE gm.0.gpio.0.in-1
4 bit OUT FALSE gm.0.gpio.0.in-2
4 bit OUT FALSE gm.0.gpio.0.in-3
4 bit OUT FALSE gm.0.gpio.0.in-4
4 bit OUT FALSE gm.0.gpio.0.in-5
4 bit OUT FALSE gm.0.gpio.0.in-6
4 bit OUT FALSE gm.0.gpio.0.in-7
4 bit OUT FALSE gm.0.gpio.0.in-not-0
4 bit OUT FALSE gm.0.gpio.0.in-not-1
4 bit OUT FALSE gm.0.gpio.0.in-not-2
4 bit OUT FALSE gm.0.gpio.0.in-not-3
4 bit OUT FALSE gm.0.gpio.0.in-not-4
4 bit OUT FALSE gm.0.gpio.0.in-not-5
4 bit OUT FALSE gm.0.gpio.0.in-not-6
4 bit OUT FALSE gm.0.gpio.0.in-not-7
4 bit IN FALSE gm.0.gpio.0.out-0
4 bit IN FALSE gm.0.gpio.0.out-1
4 bit IN FALSE gm.0.gpio.0.out-2
4 bit IN FALSE gm.0.gpio.0.out-3
4 bit IN FALSE gm.0.gpio.0.out-4
4 bit IN FALSE gm.0.gpio.0.out-5
4 bit IN FALSE gm.0.gpio.0.out-6
4 bit IN FALSE gm.0.gpio.0.out-7
4 bit OUT FALSE gm.0.gpio.1.in-0
4 bit OUT FALSE gm.0.gpio.1.in-1
4 bit OUT FALSE gm.0.gpio.1.in-2
4 bit OUT FALSE gm.0.gpio.1.in-3
4 bit OUT FALSE gm.0.gpio.1.in-4
4 bit OUT FALSE gm.0.gpio.1.in-5
4 bit OUT FALSE gm.0.gpio.1.in-6
4 bit OUT FALSE gm.0.gpio.1.in-7
4 bit OUT FALSE gm.0.gpio.1.in-not-0
4 bit OUT FALSE gm.0.gpio.1.in-not-1
4 bit OUT FALSE gm.0.gpio.1.in-not-2
4 bit OUT FALSE gm.0.gpio.1.in-not-3
4 bit OUT FALSE gm.0.gpio.1.in-not-4
4 bit OUT FALSE gm.0.gpio.1.in-not-5
4 bit OUT FALSE gm.0.gpio.1.in-not-6
4 bit OUT FALSE gm.0.gpio.1.in-not-7
4 bit IN FALSE gm.0.gpio.1.out-0
4 bit IN FALSE gm.0.gpio.1.out-1
4 bit IN FALSE gm.0.gpio.1.out-2
4 bit IN FALSE gm.0.gpio.1.out-3
4 bit IN FALSE gm.0.gpio.1.out-4
4 bit IN FALSE gm.0.gpio.1.out-5
4 bit IN FALSE gm.0.gpio.1.out-6
4 bit IN FALSE gm.0.gpio.1.out-7
4 bit OUT FALSE gm.0.gpio.2.in-0
4 bit OUT FALSE gm.0.gpio.2.in-1
4 bit OUT FALSE gm.0.gpio.2.in-2
4 bit OUT FALSE gm.0.gpio.2.in-3
4 bit OUT FALSE gm.0.gpio.2.in-4
4 bit OUT FALSE gm.0.gpio.2.in-5
4 bit OUT FALSE gm.0.gpio.2.in-6
4 bit OUT FALSE gm.0.gpio.2.in-7
4 bit OUT FALSE gm.0.gpio.2.in-not-0
4 bit OUT FALSE gm.0.gpio.2.in-not-1
4 bit OUT FALSE gm.0.gpio.2.in-not-2
4 bit OUT FALSE gm.0.gpio.2.in-not-3
4 bit OUT FALSE gm.0.gpio.2.in-not-4
4 bit OUT FALSE gm.0.gpio.2.in-not-5
4 bit OUT FALSE gm.0.gpio.2.in-not-6
4 bit OUT FALSE gm.0.gpio.2.in-not-7
4 bit IN FALSE gm.0.gpio.2.out-0
4 bit IN FALSE gm.0.gpio.2.out-1
4 bit IN FALSE gm.0.gpio.2.out-2
4 bit IN FALSE gm.0.gpio.2.out-3
4 bit IN FALSE gm.0.gpio.2.out-4
4 bit IN FALSE gm.0.gpio.2.out-5
4 bit IN FALSE gm.0.gpio.2.out-6
4 bit IN FALSE gm.0.gpio.2.out-7
4 bit OUT FALSE gm.0.gpio.3.in-0
4 bit OUT FALSE gm.0.gpio.3.in-1
4 bit OUT FALSE gm.0.gpio.3.in-2
4 bit OUT FALSE gm.0.gpio.3.in-3
4 bit OUT FALSE gm.0.gpio.3.in-4
4 bit OUT FALSE gm.0.gpio.3.in-5
4 bit OUT FALSE gm.0.gpio.3.in-6
4 bit OUT FALSE gm.0.gpio.3.in-7
4 bit OUT FALSE gm.0.gpio.3.in-not-0
4 bit OUT FALSE gm.0.gpio.3.in-not-1
4 bit OUT FALSE gm.0.gpio.3.in-not-2
4 bit OUT FALSE gm.0.gpio.3.in-not-3
4 bit OUT FALSE gm.0.gpio.3.in-not-4
4 bit OUT FALSE gm.0.gpio.3.in-not-5
4 bit OUT FALSE gm.0.gpio.3.in-not-6
4 bit OUT FALSE gm.0.gpio.3.in-not-7
4 bit IN FALSE gm.0.gpio.3.out-0
4 bit IN FALSE gm.0.gpio.3.out-1
4 bit IN FALSE gm.0.gpio.3.out-2
4 bit IN FALSE gm.0.gpio.3.out-3
4 bit IN FALSE gm.0.gpio.3.out-4
4 bit IN FALSE gm.0.gpio.3.out-5
4 bit IN FALSE gm.0.gpio.3.out-6
4 bit IN FALSE gm.0.gpio.3.out-7
4 bit IN FALSE gm.0.power-enable
4 bit OUT FALSE gm.0.power-fault
4 bit IN FALSE gm.0.rs485.00.relay-0
4 bit IN FALSE gm.0.rs485.00.relay-1
4 bit IN FALSE gm.0.rs485.00.relay-2
4 bit IN FALSE gm.0.rs485.00.relay-3
4 bit IN FALSE gm.0.rs485.00.relay-4
4 bit IN FALSE gm.0.rs485.00.relay-5
4 bit IN FALSE gm.0.rs485.00.relay-6
4 bit IN FALSE gm.0.rs485.00.relay-7
4 s32 OUT 0 gm.0.stepgen.0.count-fb
4 bit IN FALSE gm.0.stepgen.0.enable
4 float IN 0 gm.0.stepgen.0.position-cmd
4 float OUT 0 gm.0.stepgen.0.position-fb
4 float IN 0 gm.0.stepgen.0.velocity-cmd
4 s32 OUT 0 gm.0.stepgen.1.count-fb
4 bit IN FALSE gm.0.stepgen.1.enable
4 float IN 0 gm.0.stepgen.1.position-cmd
4 float OUT 0 gm.0.stepgen.1.position-fb
4 float IN 0 gm.0.stepgen.1.velocity-cmd
4 s32 OUT 0 gm.0.stepgen.2.count-fb
4 bit IN FALSE gm.0.stepgen.2.enable
4 float IN 0 gm.0.stepgen.2.position-cmd
4 float OUT 0 gm.0.stepgen.2.position-fb
4 float IN 0 gm.0.stepgen.2.velocity-cmd
4 s32 OUT 0 gm.0.stepgen.3.count-fb
4 bit IN FALSE gm.0.stepgen.3.enable
4 float IN 0 gm.0.stepgen.3.position-cmd
4 float OUT 0 gm.0.stepgen.3.position-fb
4 float IN 0 gm.0.stepgen.3.velocity-cmd
4 s32 OUT 0 gm.0.stepgen.4.count-fb
4 bit IN FALSE gm.0.stepgen.4.enable
4 float IN 0 gm.0.stepgen.4.position-cmd
4 float OUT 0 gm.0.stepgen.4.position-fb
4 float IN 0 gm.0.stepgen.4.velocity-cmd
4 s32 OUT 0 gm.0.stepgen.5.count-fb
4 bit IN FALSE gm.0.stepgen.5.enable
4 float IN 0 gm.0.stepgen.5.position-cmd
4 float OUT 0 gm.0.stepgen.5.position-fb
4 float IN 0 gm.0.stepgen.5.velocity-cmd
4 bit OUT FALSE gm.0.watchdog-expired
halcmd:
now i go and fix the ini
Please Log in or Create an account to join the conversation.
You should definitely switch to using the gm encoder counter not the software one.
You can't typically count above 50kHz with the software encoder, the GM hardware counter can go up to MHz.
Please Log in or Create an account to join the conversation.
yes i see it looks like i have been on an dead path here supid me ,..
The slowest the encoder can do is 48 A, B / Revolution means at 50k HZ would be rough 1041 but i do have an 1 to 1:1,5 transmission so it is 694,4 ....
means i do need to fiddle around with the 4th axis it is a little bit difficult to do that electric wise ,..
i need to see how i can achieve that , they have an RJ50 Cable for the axis i do have an Adapter for the Granite VSD-E www.generalmechatronics.com/en/productdi...s-vsd-e-rj50-adapter
(I will not now change the Left Right and speed of the motor for now of organizational reasons ) but to sum it up i need to feed the Encoder to the 4th axis
like www.generalmechatronics.com/doc/PCI_UM_eng.pdf chapter 2.4.1
Means Pin1 of Encoder A,Pin 2 to 5+ of encoder,Pin3 Encoder B, Pin 4 Encoder Index , Pin 9 Encoder ground
Then i use that gm.0.encoder.3.position ! and so on instead of my encoder.0 in my hal file ?
thank you for the hint i hope now i i can get an sensible signal ,..
best reg thomas
Please Log in or Create an account to join the conversation.
The slowest the encoder can do is 48 A, B / Revolution means at 50k HZ would be rough 1041 but i do have an 1 to 1:1,5 transmission so it is 694,4 ....
It isn't quite that bad, the numbers you are getting are RPS not RPM. 694 RPS is a lot of RPM but a higher encoder count will make spindle alignment easier.
to sum it up i need to feed the Encoder to the 4th axis
like www.generalmechatronics.com/doc/PCI_UM_eng.pdf chapter 2.4.1
Means Pin1 of Encoder A,Pin 2 to 5+ of encoder,Pin3 Encoder B, Pin 4 Encoder Index , Pin 9 Encoder ground
Then i use that gm.0.encoder.3.position ! and so on instead of my encoder.0 in my hal file ?
Yes, exactly.
You might need to make your own cables: www.ebay.at/sch/i.html?_nkw=10P10C
Please Log in or Create an account to join the conversation.
any hints how to test that
?
Please Log in or Create an account to join the conversation.