Fanuc Serial Pulse Coders - Red cap servos, mesa 7i76e, how to?
- jmelson
- Offline
- Moderator
-
- Posts: 512
- Thank you received: 123
Yes, Pico Systems makes a board that converts most Fanuc serial pulse coders to quadrature with index and commutation signals. One detail to note is that with high-resolution encoders, the quadrature count rate can become very high. Another detail is that these encoders can't be interrogated faster than 8 KHz. See : picosystems.store/product/fanuc-serial-e...nverter-pulse-coder/ for more details.My other option would be to output TTL incremental encoder pulses from LinuxCNC (is this conversion from absolute serial encoder data to TTL incremental possible?)
Jon
Please Log in or Create an account to join the conversation.
- bnet
-
Topic Author
- Offline
- Junior Member
-
- Posts: 39
- Thank you received: 4
#machineShopOnAShoestring
Please Log in or Create an account to join the conversation.
- bnet
-
Topic Author
- Offline
- Junior Member
-
- Posts: 39
- Thank you received: 4
Please Log in or Create an account to join the conversation.
- bnet
-
Topic Author
- Offline
- Junior Member
-
- Posts: 39
- Thank you received: 4
Within the HAL, is there a possibility of connecting the fanuc encoder data position output to the 'position in' port of Stepgen as it runs in quadrature output mode, to then output the quadrature pulses to my AB Ultra3000 drives to provide the position feedback to them? Or is there some major flaw in this concept..
Thanks
Attachments:
Please Log in or Create an account to join the conversation.
- bnet
-
Topic Author
- Offline
- Junior Member
-
- Posts: 39
- Thank you received: 4
I've decided to replace the encoders... this is probably not the answer that future readers are going to want to read, but its the least expensive and most straight-forward approach I can come up with. Either I have a digital problem or a mechanical problem to solve, and the latter is much more manageable with my skill set.
I'm trying to get better at knowing when to take a different path to the finish line. I once spent months trying to design a DC motor driver (90v 200amps) that ran on 600v 3phase for a Hardinge CHNC lathe based on open source electric vehicle schematics. Long story short, I didn't succeed and blew up a lot of expensive components along the way Once I finally decided to swap the motor for an AC one and add a VFD, the whole thing was turning in in 2 days!
More to come!
Please Log in or Create an account to join the conversation.
- M4MazakUser
- Offline
- Premium Member
-
- Posts: 155
- Thank you received: 7
Please Log in or Create an account to join the conversation.
- bnet
-
Topic Author
- Offline
- Junior Member
-
- Posts: 39
- Thank you received: 4
I have found some good encoders - I'm thinking of going with 10000 PPR for X and Z and 800 PPR for the turret and the live tooling motor as the latter won't need much in terms of resolution, while the Z and especially X will need as much as I can get/afford (maximum count rates of A-B Ultra3000 2.5 mHz).
Attachments:
Please Log in or Create an account to join the conversation.
- bnet
-
Topic Author
- Offline
- Junior Member
-
- Posts: 39
- Thank you received: 4
Turns out that the new encoder mount flanges happen to line up with some holes on the old Fanuc encoder bearing housing, so I repurposed those to serve as the encoder mounts. All mounted on the machine now, everything fits under the original red caps, with one tight fit under the smaller turret motor.
Unfortunately I have been unsuccessful in configuring the drives (AB Ultra3000) to engage in self-sensing commutation. I have tried everything I can think of including:
-swapping motor phases (every possible combination) to ensure motor direction phase relationship and encoder direction match
-adjusting self-sensing current
-swapping A / B encoder phases to see if they were backwards with relation to the motor while also trying the various motor phase connections in this A / B swapped configuration
-double checking and experimenting with Pulses Per Revolution and the corresponding Lines Per Revolution data at the drive. Encoder is listed as PPR while drive data input is LPR as it counts the rising and falling edges therefore PPR*4=LPR
Now I'm wondering if my motor configuration settings have something to do with it (within the Ultraware configurator, some numbers such as Inductance had to be guessed as I do not know how to measure that and havent found info on that yet), but it seems like an unlikely cause.
No matter what I do I get E39 (self-sensing startup error) a short period of self-sensing testing upon enabling the drive.
The motor in question is free to spin for the self-sensing routine.
Which brings me to another problem: the X-axis is HEAVILY loaded as it is a slant bed without counter spring. Currently a brake is on, so if I were to figure out this self-sensing and make it work, or even generate commutation pulses from the incremental encoder data, any startup sensing would have to take place with the X-Axis brake released and have the motor engaged in holding torque so that the whole thing doesnt come crashing down.
I think I should have bought encoders with commutation outputs I assumed that the self-sensing commutation would work as perscribed but for some reason I cant get it to work.
Now I'm starting to wonder if I should run the the buffered encoder outs (that the Ultra3000 provides) into LinuxCNC via the extra Mesa cards I got and use BLDC to generate commutation pulses, send them out to the drives. The only issue is the startup sensing: how would BLDC command the Step/Dir drives to move in order to find the index pulse if the step/dir drives need the commutation signals to run in the first place?
If anyone has any ideas, even half-baked, I'd love to hear them.
The Conquest continues.
Attachments:
Please Log in or Create an account to join the conversation.
- andypugh
-
- Offline
- Moderator
-
- Posts: 19619
- Thank you received: 4526
Now I'm starting to wonder if I should run the the buffered encoder outs (that the Ultra3000 provides) into LinuxCNC via the extra Mesa cards I got and use BLDC to generate commutation pulses, send them out to the drives. The only issue is the startup sensing: how would BLDC command the Step/Dir drives to move in order to find the index pulse if the step/dir drives need the commutation signals to run in the first place?
You are right, the bldc comp can only help where the commutation is under linuxcnc software control.
(It might have helped with the original encoders, as it can convert Fanuc 4-wire into simulate Hall sensor outputs. But you didn't want to hear that)
Please Log in or Create an account to join the conversation.
- bnet
-
Topic Author
- Offline
- Junior Member
-
- Posts: 39
- Thank you received: 4
Now onto generating commutation signals for the drives now that they have the encoder connected to them. ChatGPT seems to think its possible to do with BLDC. I've already spotted one error which is that the ultra3000s don't have an option to set low torque mode via the digital inputs.. So that leaves me unsure of if the rest of it will work.
# =======================================================
# Fanuc Redcap → Ultra3000 setup (X axis)
# Mesa 7i76e + 7i85 + 7i84
# =======================================================
# --- Load required components ---
loadrt bldc cfg=qiH
loadrt oneshot count=1
loadrt toggle count=1
addf bldc.0 servo-thread
addf oneshot.0 servo-thread
addf toggle.0 servo-thread
# =======================================================
# Encoder Input (7i85)
# =======================================================
# Encoder channel 0 on 7i85 → 800 counts per rev
net x-rawcounts hm2_7i85.0.encoder.00.rawcounts => bldc.0.rawcounts
net x-index-enable hm2_7i85.0.encoder.00.index-enable => bldc.0.index-enable
net x-index-pulse hm2_7i85.0.encoder.00.index => oneshot.0.in
setp oneshot.0.width 0.1
net x-index-detected oneshot.0.out => toggle.0.toggle
net x-index-found toggle.0.state
# =======================================================
# BLDC synthetic Hall generation
# =======================================================
setp bldc.0.scale 800 # encoder counts per mechanical rev
setp bldc.0.poles 4 # 8-pole motor = 4 pole pairs
setp bldc.0.encoder-offset 0.0 # adjust once aligned
setp bldc.0.output-pattern 25
# Output Hall states to Ultra3000 (7i84)
net hall1 bldc.0.hall1-out => hm2_7i84.0.output-00
net hall2 bldc.0.hall2-out => hm2_7i84.0.output-01
net hall3 bldc.0.hall3-out => hm2_7i84.0.output-02
# =======================================================
# Step/Dir setup (X Axis)
# =======================================================
# Step/Dir on 7i76e output 0
setp hm2_7i76e.0.stepgen.00.dirsetup 5000
setp hm2_7i76e.0.stepgen.00.dirhold 5000
setp hm2_7i76e.0.stepgen.00.steplen 2500
setp hm2_7i76e.0.stepgen.00.stepspace 2500
setp hm2_7i76e.0.stepgen.00.position-scale 10000
setp hm2_7i76e.0.stepgen.00.maxvel 60
setp hm2_7i76e.0.stepgen.00.maxaccel 300
net x-pos-cmd axis.x.motor-pos-cmd => hm2_7i76e.0.stepgen.00.position-cmd
net x-pos-fb hm2_7i76e.0.stepgen.00.position-fb => axis.x.motor-pos-fb
net x-enable axis.x.amp-enable-out => hm2_7i76e.0.stepgen.00.enable
# =======================================================
# Torque Limit Select control (7i84 output-04)
# =======================================================
# Before index found, TorqueLimitSelect = ON (low current)
# After index found, TorqueLimitSelect = OFF (normal torque)
# This drives a digital input on the Ultra3000.
net torque-low hm2_7i84.0.output-04
net torque-low <= not-x-index-found
# Use toggle to remember index found across servo cycles
net not-x-index-found toggle.0.state
# (If logic inverted, swap TRUE/FALSE below)
setp toggle.0.state 0 # default = index not found
# =======================================================
# Auto jog-to-index at startup
# =======================================================
# At boot: torque low active, start slow jog
setp hm2_7i76e.0.stepgen.00.velocity-cmd 0.05
net torque-low hm2_7i76e.0.stepgen.00.enable
# Once index found: stop motion, switch torque to normal
net x-index-found => hm2_7i76e.0.stepgen.00.enable-not
net x-index-found => hm2_7i76e.0.stepgen.00.velocity-cmd 0
Please Log in or Create an account to join the conversation.