- Configuring LinuxCNC
- Advanced Configuration
- EtherCAT
- Setting up the Stepperonline A6 battery encoder cable
Setting up the Stepperonline A6 battery encoder cable
- spumco
- Offline
- Platinum Member
-
- Posts: 2126
- Thank you received: 882
I'm inferring that the HAL file has the home switches connected to both LCNC and the drives' digital input:
net X-home-sw <= lcec.0.10.din-4 #physical digital input on Beckhoff EL1018?
net X-home-sw => joint.0.home-sw-in #LCNC joint home switch pin (motion.comp)
net X-home-sw => lcec.0.5.dout-0 #physical digital output on Beckhoff EL2008?
@Andrax has not mentioned any drive connections explicitly, but the only reason I can imagine sending the home switch signal to a physical output is to signal the drive. Unless I'm mistaken, a drive's digital input is the only way a drive 'knows' when the home switch is triggered.
Which begs the question - why is the home switch also connected to LCNC joint.N.home-sw-in?
Maybe to do LCNC homing first, then move on to cia402 (internal) homing, and finally absolute encoder homing?
Please Log in or Create an account to join the conversation.
- fer662
- Offline
- New Member
-
- Posts: 17
- Thank you received: 5
- This repo is the best one I found for both homecomp implementation and linuxCNC config for these servos github.com/nickstewartroc/linuxcnc-a6-servo , and it is a fork from the one mentioned by @andrax (though the files he posted are not from there or are modified at least). Only one thing from there didn't work for me which is the binding of the di pins to see their state, they didn't reflect the way they are setup there. This is how each servo looks and what worked for seeing the home switches change state ( see
- Wire the home switch per page 26 of the manual. You need to tie either COM- or COM+ to your external PSU's negative output depending on the sensor type (NPN or PNP). I had tied COM- instead of COM+ for PNP and that wasn't working. Make sure DI3 flips when the sensor toggles before proceeding any further.<slave idx="3" type="generic" vid="0x00400000" pid="0x00000715" configPdos="true">
<dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="300000"/>
<watchdog divider="2498" intervals="1000" />
<sdoConfig idx="2004" subIdx="0a"><sdoDataRaw data="01 00"/></sdoConfig>
<syncManager idx="2" dir="out">
<pdo idx="1600">
<pdoEntry idx="6040" subIdx="00" bitLen="16" halPin="control-word" halType="u32" />
<pdoEntry idx="6060" subIdx="00" bitLen="8" halPin="control-mode" halType="s32" />
<pdoEntry idx="607A" subIdx="00" bitLen="32" halPin="target-position" halType="s32" />
<pdoEntry idx="60FF" subIdx="00" bitLen="32" halPin="target-velocity" halType="s32"/>
<pdoEntry idx="607C" subIdx="00" bitLen="32" halPin="home-offset" halType="s32"/>
<pdoEntry idx="6098" subIdx="00" bitLen="8" halPin="homing-method" halType="s32" />
<pdoEntry idx="6099" subIdx="01" bitLen="32" halPin="homing-high-velocity" halType="u32"/>
<pdoEntry idx="6099" subIdx="02" bitLen="32" halPin="homing-low-velocity" halType="u32"/>
<pdoEntry idx="609A" subIdx="00" bitLen="32" halPin="homing-acceleration" halType="u32"/>
</pdo>
</syncManager>
<syncManager idx="3" dir="in">
<pdo idx="1A00">
<pdoEntry idx="6041" subIdx="00" bitLen="16" halPin="status-word" halType="u32" />
<pdoEntry idx="6061" subIdx="00" bitLen="8" halPin="mode-display" halType="s32" />
<pdoEntry idx="6064" subIdx="00" bitLen="32" halPin="actual-position" halType="s32" />
<pdoEntry idx="606C" subIdx="00" bitLen="32" halPin="actual-velocity" halType="s32"/>
<pdoEntry idx="6077" subIdx="00" bitLen="16" halPin="actual-torque" halType="s32"/>
<pdoEntry idx="60FD" subIdx="00" bitLen="32" halPin="digital-inputs" halType="u32"/>
<pdoEntry idx="2040" subIdx="05" bitLen="16" halType="complex">
<complexEntry bitLen="1" halPin="di-1" halType="bit"/>
<complexEntry bitLen="1" halPin="di-2" halType="bit"/>
<complexEntry bitLen="1" halPin="di-3" halType="bit"/>
<complexEntry bitLen="1" halPin="di-4" halType="bit"/>
<complexEntry bitLen="1" halPin="di-5" halType="bit"/>
<complexEntry bitLen="11"/>
</pdoEntry>
</pdo>
</syncManager>
</slave>
- Depending on whether your sensor is NC or NO, you need to change your home switch between active low and active high, documentation for this is in page 209. (<sdoConfig idx="2004" subIdx="0a"><sdoDataRaw data="01 00"/></sdoConfig> in my config for NC switch). Also on page 209 is the function selection for DI3. It's set correctly by default, but one of my drives had it wrong and i presume this was the result of debugging changes made via dcConf entries that got removed. Check that all yours drives have it on the correct setting which is 5. You could technically use any of the DI pins that have function selection as the home switch changing stuff around this PDO. By this time the sensor pin should light up in halshow when triggered no matter whether the sensor is NO or NC.
- At this point it should be possible (though i haven't tested, i did have it working with the pins wired to the beckoff inputs though) to configure regular homing using the drive pins as input if you wished to test it out for sanity checking.
- Assuming that works or you skip it, copy the relevant bits of the hal in the referenced repo. I didn't have to change anything there since i dumped my XML (which was already very close but had slightly different property names) so i could just copypaste as it was.
- I used homing mode 4 like @Andrax but that might not be right for you. On Page 74 there's ample documentation for how each home mode works.
- When trying things out you might use low speeds for the 2 speeds involved in homing. Beware homing has a timeout that defaults to 60 seconds on the servo config. Homecomp doesn't catch this timeout and gets stuck forever, leading you to have to close linuxCNC and power cycle the drives (Page 215).
- Presumably once you're happy you'd comment the homing stuff and add HOME_ABSOLUTE_ENCODER to the joints like the initial post suggests.
I hope this helps someone, and please let me know if your know what the amplifier faults i'm getting after homing might be. This is my first time using linuxCNC. My config is attached for whoever finds it useful or can help me with the little bit i think i have left to fix.
Please Log in or Create an account to join the conversation.
- andrax
-
Topic Author
- Offline
- Elite Member
-
- Posts: 313
- Thank you received: 82
Yes, you're right,
CIA homing isn't really well documented yet.
In principle, it works like this:
The CIA-home function triggers the servos' internal homing routine and monitors the status. Once the servos report completion, CIA-home signals to LinuxCNC that homing is finished.
The drive error after homing is normal.
This happens when CIA-home hands control back to LinuxCNC.
Make sure the lowest feed rate is set; the axes will then synchronize without errors.
Please Log in or Create an account to join the conversation.
- fer662
- Offline
- New Member
-
- Posts: 17
- Thank you received: 5
@andrax are you on an XYYZ machine like your posted config suggests? can you respond regarding how the Ys sync up with the absolute encoder? The other thing i'm concerned about is if I should use homing mode 20 instead of 4 for Y, because otherwise the z pulse step becomes something that'll mess up your parallelism without you being able to adjust by adjusting the sensor triggers
Please Log in or Create an account to join the conversation.
- andrax
-
Topic Author
- Offline
- Elite Member
-
- Posts: 313
- Thank you received: 82
Just use CN1.
Simply connect the home switch DI3 and COM pin 13 here. Use the wiring diagram on page 47 for the external power supply.
Use homing mode 4 or 6, depending on where your home switch is located.
If everything works and you have encoder cables with batteries, you can switch everything over to multiturn absolute encoders—which don’t require homing—by following the instructions above.
I wrote these instructions because there are issues with XYYZ (gantry) axes.
Explanation:
During CIA402 homing, control and monitoring of the axes are taken away from LinuxCNC. The internal servo homing is triggered. You can only see the current position of the axes and how they are moving. Once the axes have found their home position and report that they are ready, control is returned to LinuxCNC. This results in several problems that can become dangerous!
1. After homing is complete, the axes may jump, leading to an error. This has already happened to you.
2. With gantry axes, there are synchronization issues. It can happen that one axis starts moving late or not at all. In the worst case, the gantry will be crooked or break.
3. Once homing has started, it cannot be interrupted.
Neither an emergency stop, a reset, nor disabling the enable signal will help. The servos will start moving on their own once they’re enabled again. The only solution is to turn the servos off and then back on!
Using LinuxCNC homing isn’t an option either.
The Z-index pulse isn’t output by the servos and isn’t available. Of course, you can also use LinuxCNC homing by moving to the home switch or limit switch the traditional way, but that’s imprecise and suitable only for a cheese cutter at best.
That’s why I wrote this guide.
Here are the steps again:
1. Get everything up and running. If you run into problems, there are many threads here that can help, or you can start a new thread.
2. Get CIA homing to work with the servos removed.
3. Convert the servos to multiturn absolute encoders following my instructions.
4. Install the servos and, on the gantry, make sure they don’t twist—otherwise your gantry will be crooked.
Please Log in or Create an account to join the conversation.
- Configuring LinuxCNC
- Advanced Configuration
- EtherCAT
- Setting up the Stepperonline A6 battery encoder cable