Search Results (Searched for: raspberry pi 3)
My Cable Robot CNC Foam Cutter is running!
Category: Show Your Stuff
I thought I’d share a quick video showing the status of our Linux CNC foam-cutter project. I’m brand new to LinuxCNC and basically just took this on as a fun project to learn a bit.
photos.app.goo.gl/ksw5mnEoJEibSiqs5
The drive drums are custom designed 3D printed hypocycloidal drives running a pair of cables to a hot wire knife. The 3D printed drives are a bit janky but actually work surprisingly well. Not sure how durable they’d be in the long term.
While this test-bed is quite small, the objective is to be able to mount the drum modules on a wall some 12 feet apart and in doing so be able to cut shapes out of large foam sheets. The objective is to be able to build an ultra-low cost CNC foam cutter for less than $200. I could then manually stack the cut sheets together like a loaf of bread and build very large 3D printed objects ala a huge FDM (albiet with 2” thick layers).
Given the lower speed we’re running the unit on a Raspberry Pi. I’m sure the latency is a mess but it appears to be tracking. The forward and inverse kinematics functions were the majority of the challenge - I made life much more difficult by running the cables tangential to the drums instead of through a fixed ferrule but I was eventually able to solve the kinematics. The inverse kinematics were just trig but the forward kinematics required numerical methods (Newton-Raphson) which I only sort of understand but seem to work.
More to come to make this more useful. If there is any interest I’ll likely open-source the whole thing when it’s a bit more stable and refined.
Thanks to all of you who helped on here through my rough patches.
Linuxcnc 2.9.2 and 2.93 images for Raspberry Pi 4b & 5
Category: Installing LinuxCNC
Try this, otherwise it is a mess to sift through endless posts on several forums to get the right answer, been there and done that, twice.Can you tell me how can I rotate the touch part of the screen too?
gist.github.com/mildmojo/48e9025070a2ba40795c
Linuxcnc 2.9.2 and 2.93 images for Raspberry Pi 4b & 5
Category: Installing LinuxCNC
It looks great!
Finally i can rotate the screen! Also there is sound on the mini HDMI monitor .
Can you tell me how can I rotate the touch part of the screen too?
LitexCNC: firmware and driver for 5A-75B and 5A-75E
Category: Driver Boards
many thanks for the great work you are puting into this Project.
I have some issues, maybe somebody can guide me into debugging it.
I bought a 5A-75B V8.2 and managed to flash it without issues using a Raspberry Pi 4. The JSON used was the example from the documentation , 5a-75b_v8.0_i12o14p6s6e6 . I have not made any changes to it yet, as I just wanted to test the whole process first and see if I get into issues down the road. Now, I don't know if using the json for version 8.0 is causing the issues that I have.
The board is pingable over network, and can also be loaded into halrun:
halcmd: loadrt litexcnc connections="eth:10.0.0.10"Note: Using POSIX realtimelitexcnc: Loading Litex CNC driver version 1.2.4
litexcnc: Loading and registering default modules:
litexcnc: Registered module gpio
litexcnc: Registered module pwm
litexcnc: Registered module encoder
litexcnc: Registered module step
litexcnc: Setting up board drivers:
litexcnc: Registered driver eth
LitexCNC-eth: connected to board on '10.0.0.10:1234'
litexcnc: Setting up modules...
litexcnc: Reading 36 bytes
litexcnc: - Watchdog
litexcnc: - Wallclock
litexcnc: - gpio ... done!
litexcnc: - pwm ... done!
litexcnc: - encoder ... done!
litexcnc: - step ... done!
litexcnc: Creating read and write buffers...
litexcnc: Base addresses: init: 00000000, reset: 00000044, config: 00000048, write: 0000004C, read: 000000C8
litexcnc: - Write buffer: 124 bytes
litexcnc: - Read buffer: 116 bytes
litexcnc: Exporting functions...
Show Pin works :
halcmd: show pin
Component Pins:
Owner Type Dir Value Name
4 s32 OUT 0 5A-75B:V8.0.encoder.00.counts
4 bit IN FALSE 5A-75B:V8.0.encoder.00.index-enable
4 bit OUT FALSE 5A-75B:V8.0.encoder.00.index-pulse
4 bit OUT FALSE 5A-75B:V8.0.encoder.00.overflow-occurred
4 float OUT 0 5A-75B:V8.0.encoder.00.position
4 s32 OUT 0 5A-75B:V8.0.encoder.00.raw-counts
4 bit I/O FALSE 5A-75B:V8.0.encoder.00.reset
4 float OUT 0 5A-75B:V8.0.encoder.00.velocity
4 float OUT 0 5A-75B:V8.0.encoder.00.velocity-rpm
4 s32 OUT 0 5A-75B:V8.0.encoder.01.counts
4 bit IN FALSE 5A-75B:V8.0.encoder.01.index-enable
4 bit OUT FALSE 5A-75B:V8.0.encoder.01.index-pulse
4 bit OUT FALSE 5A-75B:V8.0.encoder.01.overflow-occurred
4 float OUT 0 5A-75B:V8.0.encoder.01.position
4 s32 OUT 0 5A-75B:V8.0.encoder.01.raw-counts
4 bit I/O FALSE 5A-75B:V8.0.encoder.01.reset
4 float OUT 0 5A-75B:V8.0.encoder.01.velocity
4 float OUT 0 5A-75B:V8.0.encoder.01.velocity-rpm
4 s32 OUT 0 5A-75B:V8.0.encoder.02.counts
4 bit IN FALSE 5A-75B:V8.0.encoder.02.index-enable
4 bit OUT FALSE 5A-75B:V8.0.encoder.02.index-pulse
4 bit OUT FALSE 5A-75B:V8.0.encoder.02.overflow-occurred
4 float OUT 0 5A-75B:V8.0.encoder.02.position
4 s32 OUT 0 5A-75B:V8.0.encoder.02.raw-counts
4 bit I/O FALSE 5A-75B:V8.0.encoder.02.reset
4 float OUT 0 5A-75B:V8.0.encoder.02.velocity
4 float OUT 0 5A-75B:V8.0.encoder.02.velocity-rpm
4 s32 OUT 0 5A-75B:V8.0.encoder.03.counts
4 bit IN FALSE 5A-75B:V8.0.encoder.03.index-enable
4 bit OUT FALSE 5A-75B:V8.0.encoder.03.index-pulse
4 bit OUT FALSE 5A-75B:V8.0.encoder.03.overflow-occurred
4 float OUT 0 5A-75B:V8.0.encoder.03.position
4 s32 OUT 0 5A-75B:V8.0.encoder.03.raw-counts
4 bit I/O FALSE 5A-75B:V8.0.encoder.03.reset
4 float OUT 0 5A-75B:V8.0.encoder.03.velocity
4 float OUT 0 5A-75B:V8.0.encoder.03.velocity-rpm
4 s32 OUT 0 5A-75B:V8.0.encoder.04.counts
4 bit IN FALSE 5A-75B:V8.0.encoder.04.index-enable
4 bit OUT FALSE 5A-75B:V8.0.encoder.04.index-pulse
4 bit OUT FALSE 5A-75B:V8.0.encoder.04.overflow-occurred
4 float OUT 0 5A-75B:V8.0.encoder.04.position
4 s32 OUT 0 5A-75B:V8.0.encoder.04.raw-counts
4 bit I/O FALSE 5A-75B:V8.0.encoder.04.reset
4 float OUT 0 5A-75B:V8.0.encoder.04.velocity
4 float OUT 0 5A-75B:V8.0.encoder.04.velocity-rpm
4 s32 OUT 0 5A-75B:V8.0.encoder.05.counts
4 bit IN FALSE 5A-75B:V8.0.encoder.05.index-enable
4 bit OUT FALSE 5A-75B:V8.0.encoder.05.index-pulse
4 bit OUT FALSE 5A-75B:V8.0.encoder.05.overflow-occurred
4 float OUT 0 5A-75B:V8.0.encoder.05.position
4 s32 OUT 0 5A-75B:V8.0.encoder.05.raw-counts
4 bit I/O FALSE 5A-75B:V8.0.encoder.05.reset
4 float OUT 0 5A-75B:V8.0.encoder.05.velocity
4 float OUT 0 5A-75B:V8.0.encoder.05.velocity-rpm
4 bit IN FALSE 5A-75B:V8.0.gpio.00.out
4 bit IN FALSE 5A-75B:V8.0.gpio.01.out
4 bit IN FALSE 5A-75B:V8.0.gpio.02.out
4 bit IN FALSE 5A-75B:V8.0.gpio.03.out
4 bit IN FALSE 5A-75B:V8.0.gpio.04.out
4 bit IN FALSE 5A-75B:V8.0.gpio.05.out
4 bit OUT FALSE 5A-75B:V8.0.gpio.06.in
4 bit OUT FALSE 5A-75B:V8.0.gpio.06.in-not
4 bit OUT FALSE 5A-75B:V8.0.gpio.07.in
4 bit OUT FALSE 5A-75B:V8.0.gpio.07.in-not
4 bit OUT FALSE 5A-75B:V8.0.gpio.08.in
4 bit OUT FALSE 5A-75B:V8.0.gpio.08.in-not
4 bit OUT FALSE 5A-75B:V8.0.gpio.09.in
4 bit OUT FALSE 5A-75B:V8.0.gpio.09.in-not
4 bit OUT FALSE 5A-75B:V8.0.gpio.10.in
4 bit OUT FALSE 5A-75B:V8.0.gpio.10.in-not
4 bit OUT FALSE 5A-75B:V8.0.gpio.11.in
4 bit OUT FALSE 5A-75B:V8.0.gpio.11.in-not
4 bit OUT FALSE 5A-75B:V8.0.gpio.12.in
4 bit OUT FALSE 5A-75B:V8.0.gpio.12.in-not
4 bit OUT FALSE 5A-75B:V8.0.gpio.13.in
4 bit OUT FALSE 5A-75B:V8.0.gpio.13.in-not
4 bit OUT FALSE 5A-75B:V8.0.gpio.14.in
4 bit OUT FALSE 5A-75B:V8.0.gpio.14.in-not
4 bit OUT FALSE 5A-75B:V8.0.gpio.15.in
4 bit OUT FALSE 5A-75B:V8.0.gpio.15.in-not
4 bit OUT FALSE 5A-75B:V8.0.gpio.16.in
4 bit OUT FALSE 5A-75B:V8.0.gpio.16.in-not
4 bit OUT FALSE 5A-75B:V8.0.gpio.17.in
4 bit OUT FALSE 5A-75B:V8.0.gpio.17.in-not
4 bit IN FALSE 5A-75B:V8.0.gpio.18.out
4 bit IN FALSE 5A-75B:V8.0.gpio.19.out
4 bit IN FALSE 5A-75B:V8.0.gpio.20.out
4 bit IN FALSE 5A-75B:V8.0.gpio.21.out
4 bit IN FALSE 5A-75B:V8.0.gpio.22.out
4 bit IN FALSE 5A-75B:V8.0.gpio.23.out
4 float OUT 0 5A-75B:V8.0.pwm.00.curr_dc
4 u32 OUT 0x00000000 5A-75B:V8.0.pwm.00.curr_period
4 float OUT 0 5A-75B:V8.0.pwm.00.curr_pwm_freq
4 u32 OUT 0x00000000 5A-75B:V8.0.pwm.00.curr_width
4 bit IN FALSE 5A-75B:V8.0.pwm.00.dither_pwm
4 bit IN FALSE 5A-75B:V8.0.pwm.00.enable
4 float IN 1 5A-75B:V8.0.pwm.00.max_dc
4 float IN 0 5A-75B:V8.0.pwm.00.min_dc
4 float IN 0 5A-75B:V8.0.pwm.00.offset
4 float IN 100000 5A-75B:V8.0.pwm.00.pwm_freq
4 float IN 1 5A-75B:V8.0.pwm.00.scale
4 float IN 0 5A-75B:V8.0.pwm.00.value
4 float OUT 0 5A-75B:V8.0.pwm.01.curr_dc
4 u32 OUT 0x00000000 5A-75B:V8.0.pwm.01.curr_period
4 float OUT 0 5A-75B:V8.0.pwm.01.curr_pwm_freq
4 u32 OUT 0x00000000 5A-75B:V8.0.pwm.01.curr_width
4 bit IN FALSE 5A-75B:V8.0.pwm.01.dither_pwm
4 bit IN FALSE 5A-75B:V8.0.pwm.01.enable
4 float IN 1 5A-75B:V8.0.pwm.01.max_dc
4 float IN 0 5A-75B:V8.0.pwm.01.min_dc
4 float IN 0 5A-75B:V8.0.pwm.01.offset
4 float IN 100000 5A-75B:V8.0.pwm.01.pwm_freq
4 float IN 1 5A-75B:V8.0.pwm.01.scale
4 float IN 0 5A-75B:V8.0.pwm.01.value
4 float OUT 0 5A-75B:V8.0.pwm.02.curr_dc
4 u32 OUT 0x00000000 5A-75B:V8.0.pwm.02.curr_period
4 float OUT 0 5A-75B:V8.0.pwm.02.curr_pwm_freq
4 u32 OUT 0x00000000 5A-75B:V8.0.pwm.02.curr_width
4 bit IN FALSE 5A-75B:V8.0.pwm.02.dither_pwm
4 bit IN FALSE 5A-75B:V8.0.pwm.02.enable
4 float IN 1 5A-75B:V8.0.pwm.02.max_dc
4 float IN 0 5A-75B:V8.0.pwm.02.min_dc
4 float IN 0 5A-75B:V8.0.pwm.02.offset
4 float IN 100000 5A-75B:V8.0.pwm.02.pwm_freq
4 float IN 1 5A-75B:V8.0.pwm.02.scale
4 float IN 0 5A-75B:V8.0.pwm.02.value
4 float OUT 0 5A-75B:V8.0.pwm.03.curr_dc
4 u32 OUT 0x00000000 5A-75B:V8.0.pwm.03.curr_period
4 float OUT 0 5A-75B:V8.0.pwm.03.curr_pwm_freq
4 u32 OUT 0x00000000 5A-75B:V8.0.pwm.03.curr_width
4 bit IN FALSE 5A-75B:V8.0.pwm.03.dither_pwm
4 bit IN FALSE 5A-75B:V8.0.pwm.03.enable
4 float IN 1 5A-75B:V8.0.pwm.03.max_dc
4 float IN 0 5A-75B:V8.0.pwm.03.min_dc
4 float IN 0 5A-75B:V8.0.pwm.03.offset
4 float IN 100000 5A-75B:V8.0.pwm.03.pwm_freq
4 float IN 1 5A-75B:V8.0.pwm.03.scale
4 float IN 0 5A-75B:V8.0.pwm.03.value
4 float OUT 0 5A-75B:V8.0.pwm.04.curr_dc
4 u32 OUT 0x00000000 5A-75B:V8.0.pwm.04.curr_period
4 float OUT 0 5A-75B:V8.0.pwm.04.curr_pwm_freq
4 u32 OUT 0x00000000 5A-75B:V8.0.pwm.04.curr_width
4 bit IN FALSE 5A-75B:V8.0.pwm.04.dither_pwm
4 bit IN FALSE 5A-75B:V8.0.pwm.04.enable
4 float IN 1 5A-75B:V8.0.pwm.04.max_dc
4 float IN 0 5A-75B:V8.0.pwm.04.min_dc
4 float IN 0 5A-75B:V8.0.pwm.04.offset
4 float IN 100000 5A-75B:V8.0.pwm.04.pwm_freq
4 float IN 1 5A-75B:V8.0.pwm.04.scale
4 float IN 0 5A-75B:V8.0.pwm.04.value
4 float OUT 0 5A-75B:V8.0.pwm.05.curr_dc
4 u32 OUT 0x00000000 5A-75B:V8.0.pwm.05.curr_period
4 float OUT 0 5A-75B:V8.0.pwm.05.curr_pwm_freq
4 u32 OUT 0x00000000 5A-75B:V8.0.pwm.05.curr_width
4 bit IN FALSE 5A-75B:V8.0.pwm.05.dither_pwm
4 bit IN FALSE 5A-75B:V8.0.pwm.05.enable
4 float IN 1 5A-75B:V8.0.pwm.05.max_dc
4 float IN 0 5A-75B:V8.0.pwm.05.min_dc
4 float IN 0 5A-75B:V8.0.pwm.05.offset
4 float IN 100000 5A-75B:V8.0.pwm.05.pwm_freq
4 float IN 1 5A-75B:V8.0.pwm.05.scale
4 float IN 0 5A-75B:V8.0.pwm.05.value
4 s32 OUT 0 5A-75B:V8.0.read.time
4 float IN 0 5A-75B:V8.0.stepgen.00.acceleration-cmd
4 u32 OUT 0x00000000 5A-75B:V8.0.stepgen.00.counts
4 bit IN FALSE 5A-75B:V8.0.stepgen.00.debug
4 bit IN FALSE 5A-75B:V8.0.stepgen.00.enable
4 float IN 0 5A-75B:V8.0.stepgen.00.position-cmd
4 float OUT 0 5A-75B:V8.0.stepgen.00.position-feedback
4 float OUT 0 5A-75B:V8.0.stepgen.00.position-prediction
4 float IN 0 5A-75B:V8.0.stepgen.00.velocity-cmd
4 float OUT 0 5A-75B:V8.0.stepgen.00.velocity-feedback
4 bit IN FALSE 5A-75B:V8.0.stepgen.00.velocity-mode
4 float OUT 0 5A-75B:V8.0.stepgen.00.velocity-prediction
4 float IN 0 5A-75B:V8.0.stepgen.01.acceleration-cmd
4 u32 OUT 0x00000000 5A-75B:V8.0.stepgen.01.counts
4 bit IN FALSE 5A-75B:V8.0.stepgen.01.debug
4 bit IN FALSE 5A-75B:V8.0.stepgen.01.enable
4 float IN 0 5A-75B:V8.0.stepgen.01.position-cmd
4 float OUT 0 5A-75B:V8.0.stepgen.01.position-feedback
4 float OUT 0 5A-75B:V8.0.stepgen.01.position-prediction
4 float IN 0 5A-75B:V8.0.stepgen.01.velocity-cmd
4 float OUT 0 5A-75B:V8.0.stepgen.01.velocity-feedback
4 bit IN FALSE 5A-75B:V8.0.stepgen.01.velocity-mode
4 float OUT 0 5A-75B:V8.0.stepgen.01.velocity-prediction
4 float IN 0 5A-75B:V8.0.stepgen.02.acceleration-cmd
4 u32 OUT 0x00000000 5A-75B:V8.0.stepgen.02.counts
4 bit IN FALSE 5A-75B:V8.0.stepgen.02.debug
4 bit IN FALSE 5A-75B:V8.0.stepgen.02.enable
4 float IN 0 5A-75B:V8.0.stepgen.02.position-cmd
4 float OUT 0 5A-75B:V8.0.stepgen.02.position-feedback
4 float OUT 0 5A-75B:V8.0.stepgen.02.position-prediction
4 float IN 0 5A-75B:V8.0.stepgen.02.velocity-cmd
4 float OUT 0 5A-75B:V8.0.stepgen.02.velocity-feedback
4 bit IN FALSE 5A-75B:V8.0.stepgen.02.velocity-mode
4 float OUT 0 5A-75B:V8.0.stepgen.02.velocity-prediction
4 float IN 0 5A-75B:V8.0.stepgen.03.acceleration-cmd
4 u32 OUT 0x00000000 5A-75B:V8.0.stepgen.03.counts
4 bit IN FALSE 5A-75B:V8.0.stepgen.03.debug
4 bit IN FALSE 5A-75B:V8.0.stepgen.03.enable
4 float IN 0 5A-75B:V8.0.stepgen.03.position-cmd
4 float OUT 0 5A-75B:V8.0.stepgen.03.position-feedback
4 float OUT 0 5A-75B:V8.0.stepgen.03.position-prediction
4 float IN 0 5A-75B:V8.0.stepgen.03.velocity-cmd
4 float OUT 0 5A-75B:V8.0.stepgen.03.velocity-feedback
4 bit IN FALSE 5A-75B:V8.0.stepgen.03.velocity-mode
4 float OUT 0 5A-75B:V8.0.stepgen.03.velocity-prediction
4 float IN 0 5A-75B:V8.0.stepgen.04.acceleration-cmd
4 u32 OUT 0x00000000 5A-75B:V8.0.stepgen.04.counts
4 bit IN FALSE 5A-75B:V8.0.stepgen.04.debug
4 bit IN FALSE 5A-75B:V8.0.stepgen.04.enable
4 float IN 0 5A-75B:V8.0.stepgen.04.position-cmd
4 float OUT 0 5A-75B:V8.0.stepgen.04.position-feedback
4 float OUT 0 5A-75B:V8.0.stepgen.04.position-prediction
4 float IN 0 5A-75B:V8.0.stepgen.04.velocity-cmd
4 float OUT 0 5A-75B:V8.0.stepgen.04.velocity-feedback
4 bit IN FALSE 5A-75B:V8.0.stepgen.04.velocity-mode
4 float OUT 0 5A-75B:V8.0.stepgen.04.velocity-prediction
4 float IN 0 5A-75B:V8.0.stepgen.05.acceleration-cmd
4 u32 OUT 0x00000000 5A-75B:V8.0.stepgen.05.counts
4 bit IN FALSE 5A-75B:V8.0.stepgen.05.debug
4 bit IN FALSE 5A-75B:V8.0.stepgen.05.enable
4 float IN 0 5A-75B:V8.0.stepgen.05.position-cmd
4 float OUT 0 5A-75B:V8.0.stepgen.05.position-feedback
4 float OUT 0 5A-75B:V8.0.stepgen.05.position-prediction
4 float IN 0 5A-75B:V8.0.stepgen.05.velocity-cmd
4 float OUT 0 5A-75B:V8.0.stepgen.05.velocity-feedback
4 bit IN FALSE 5A-75B:V8.0.stepgen.05.velocity-mode
4 float OUT 0 5A-75B:V8.0.stepgen.05.velocity-prediction
4 u32 I/O 0x00000000 5A-75B:V8.0.wallclock.ticks_lsb
4 u32 OUT 0x00000000 5A-75B:V8.0.wallclock.ticks_msb
4 bit I/O FALSE 5A-75B:V8.0.watchdog.has_bitten
4 s32 OUT 0 5A-75B:V8.0.write.time
and also Show Param:
halcmd: show param
Parameters:
Owner Type Dir Value Name
4 bit RW FALSE 5A-75B:V8.0.debug
4 float RW 0 5A-75B:V8.0.encoder.00.position-scale
4 bit RW FALSE 5A-75B:V8.0.encoder.00.x4-mode
4 float RW 0 5A-75B:V8.0.encoder.01.position-scale
4 bit RW FALSE 5A-75B:V8.0.encoder.01.x4-mode
4 float RW 0 5A-75B:V8.0.encoder.02.position-scale
4 bit RW FALSE 5A-75B:V8.0.encoder.02.x4-mode
4 float RW 0 5A-75B:V8.0.encoder.03.position-scale
4 bit RW FALSE 5A-75B:V8.0.encoder.03.x4-mode
4 float RW 0 5A-75B:V8.0.encoder.04.position-scale
4 bit RW FALSE 5A-75B:V8.0.encoder.04.x4-mode
4 float RW 0 5A-75B:V8.0.encoder.05.position-scale
4 bit RW FALSE 5A-75B:V8.0.encoder.05.x4-mode
4 bit RW FALSE 5A-75B:V8.0.gpio.00.invert_output
4 bit RW FALSE 5A-75B:V8.0.gpio.01.invert_output
4 bit RW FALSE 5A-75B:V8.0.gpio.02.invert_output
4 bit RW FALSE 5A-75B:V8.0.gpio.03.invert_output
4 bit RW FALSE 5A-75B:V8.0.gpio.04.invert_output
4 bit RW FALSE 5A-75B:V8.0.gpio.05.invert_output
4 bit RW FALSE 5A-75B:V8.0.gpio.18.invert_output
4 bit RW FALSE 5A-75B:V8.0.gpio.19.invert_output
4 bit RW FALSE 5A-75B:V8.0.gpio.20.invert_output
4 bit RW FALSE 5A-75B:V8.0.gpio.21.invert_output
4 bit RW FALSE 5A-75B:V8.0.gpio.22.invert_output
4 bit RW FALSE 5A-75B:V8.0.gpio.23.invert_output
4 s32 RW 0 5A-75B:V8.0.read.tmax
4 bit RO FALSE 5A-75B:V8.0.read.tmax-increased
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.00.dir-hold-time
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.00.dir-setup-time
4 float RO 0 5A-75B:V8.0.stepgen.00.frequency
4 float RW 0 5A-75B:V8.0.stepgen.00.max-acceleration
4 float RW 0 5A-75B:V8.0.stepgen.00.max-velocity
4 float RW 0 5A-75B:V8.0.stepgen.00.position-scale
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.00.steplen
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.00.stepspace
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.01.dir-hold-time
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.01.dir-setup-time
4 float RO 0 5A-75B:V8.0.stepgen.01.frequency
4 float RW 0 5A-75B:V8.0.stepgen.01.max-acceleration
4 float RW 0 5A-75B:V8.0.stepgen.01.max-velocity
4 float RW 0 5A-75B:V8.0.stepgen.01.position-scale
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.01.steplen
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.01.stepspace
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.02.dir-hold-time
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.02.dir-setup-time
4 float RO 0 5A-75B:V8.0.stepgen.02.frequency
4 float RW 0 5A-75B:V8.0.stepgen.02.max-acceleration
4 float RW 0 5A-75B:V8.0.stepgen.02.max-velocity
4 float RW 0 5A-75B:V8.0.stepgen.02.position-scale
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.02.steplen
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.02.stepspace
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.03.dir-hold-time
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.03.dir-setup-time
4 float RO 0 5A-75B:V8.0.stepgen.03.frequency
4 float RW 0 5A-75B:V8.0.stepgen.03.max-acceleration
4 float RW 0 5A-75B:V8.0.stepgen.03.max-velocity
4 float RW 0 5A-75B:V8.0.stepgen.03.position-scale
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.03.steplen
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.03.stepspace
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.04.dir-hold-time
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.04.dir-setup-time
4 float RO 0 5A-75B:V8.0.stepgen.04.frequency
4 float RW 0 5A-75B:V8.0.stepgen.04.max-acceleration
4 float RW 0 5A-75B:V8.0.stepgen.04.max-velocity
4 float RW 0 5A-75B:V8.0.stepgen.04.position-scale
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.04.steplen
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.04.stepspace
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.05.dir-hold-time
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.05.dir-setup-time
4 float RO 0 5A-75B:V8.0.stepgen.05.frequency
4 float RW 0 5A-75B:V8.0.stepgen.05.max-acceleration
4 float RW 0 5A-75B:V8.0.stepgen.05.max-velocity
4 float RW 0 5A-75B:V8.0.stepgen.05.position-scale
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.05.steplen
4 u32 RW 0x00000000 5A-75B:V8.0.stepgen.05.stepspace
4 u32 RO 0x00000000 5A-75B:V8.0.watchdog.timeout_cycles
4 u32 RW 0x00000000 5A-75B:V8.0.watchdog.timeout_ns
4 s32 RW 0 5A-75B:V8.0.write.tmax
4 bit RO FALSE 5A-75B:V8.0.write.tmax-increased
But no matter which out pin I set to enable with setp command,, there are no changes measured on the board, and I measured ALL pins.
The 5A-75B:V8.0.watchdog.has_bitten is FALSE.
halcmd: setp 5A-75B:V8.0.gpio.00.out 1
halcmd: getp 5A-75B:V8.0.gpio.00.out
TRUE
Thanks again for your help.
NativeCam on LinuxCNC 2.9.3
Category: NativeCAM
There are some problems and Gtk deprecations to fix. but it works.
On my Raspberry Pi machine it runs enbedded in LinuxCNC too.
I think all of you could run it as embedded configuring paths etc...
Regards
Giovanni
Linuxcnc 2.9.2 and 2.93 images for Raspberry Pi 4b & 5
Category: Installing LinuxCNC
Blazing fast compared to the img I had loaded up earlier, lcnc boots up faster than I thought was possible
I wish PiClone was already on there because no Ethernet in the garage and the pi is a pain to remove from the cnc haha
NativeCam on LinuxCNC 2.9.3
Category: NativeCAM
Since at this moment I have no much time I attach a text I have found recently.
Maybe the author is Fernand.
You have a standalone version of NativeCAM working, so I think you have only to made changes to embed it in LinuxCNC.
And I suppose you can run ncam from any place in the terminal simply by typing ncam.
You could follow that guide in the first 4 points to try to have NativeCAM in a LinuxCNC tab.
Remember to verify your paths.
In my case they were different respect those writtten in the guide and I had to adjust them.
One of the differences is the path:
/usr/share/pyshared/gladevcp
on my Raspberry is:
/usr/lib/python3/dists-packages/gladevcp
You can firstly verify the situation listing the directories.
If you write down the changes you make (I haven't... ) the guide could be written by you.
Regards
Giovanni
NativeCam on LinuxCNC 2.9.3
Category: NativeCAM
I am happy to ear that my little fixes are useful to someone.
To me is useful your feedback and I think it would be useful to test NativeCAM on various computers.
I have a question for you real users: if you input numbers in the fields by doing calculations, is the result correct or a huge number is given?
I ask you that because I am testing NativeCAM on two machines: standalone on a iMac and embedded in LinuxCNC on a Raspberry Pi (the real LinuxCNC machine).
Calculations on the Mac are correct, but on Raspberry Pi are wrong.
I am not a Python or a NativeCAM expert (I am learning Python while trying to fix Native CAM), but I hope to be able to fix some problem.
Regards
Giovanni
Getting LinuxCNC as an option to RPi Imager
Category: Installing LinuxCNC
That policy might have changed in the meantime.
16th September 2020:
"Andy
Thank you for your interest in Raspberry Pi.
We're currently not adding many external OSes to the Imager, but please add your suggestion to the github issues and we'll decide what we do about third party OSes. github.com/raspberrypi/rpi-imager/issues
Regards"
Struggling with custom kinematics...
Category: Advanced Configuration
correctNever the less - I believe I have correctly ascertained the math necessary to compute the left and right drum rotation (from home position of 0,0) to achieve a desired X,Y location for the truncation of the two cables. I believe these are inverse kinematics, correct?
hal pins are used to connect signals in the hal layer. If your kinematic does do not need real time information from hal (eg tool length) then you do not need to add any pins.I honestly don't really understand what a hal pin is and whether these are required. I'm running my code on a Raspberry pi if it matters.
I believe in your case the forward kinematic is only used until the machine is homed. (ie to calculate the initial XY position) But I might be wrong about that.I don't have any feedback in my device so what does LinuxCNC do with the Forward kinematics?
Note: Looks like it is possible to also run either inverse / forward kinematics only (but I have never used that or seen it used):
linuxcnc.org/docs/devel/html/motion/kine...rward-transformation
KINEMATICS_IDENTITY (each joint number corresponds to an axis letter)
KINEMATICS_BOTH (forward and inverse kinematics functions are provided)
KINEMATICS_FORWARD_ONLY
KINEMATICS_INVERSE_ONLY
That is correct, for HOME = (0,0) and provided you have not built any offsets into your model (eg a tool-offset)My inverse kinematics routine computes the drum rotations FROM HOME to a desired X,Y. Is this correct?
So what is the error you are getting?My CableKins.comp file is attached. I'm basically breaking out of the forward kinematics since that was erroring out but I'm not getting expected results. If you see any glaring issues I'd appreciate any guidance.
Struggling with custom kinematics...
Category: Advanced Configuration
LinuxCNC newby here - please be gentle... I'm clearly over my head here...
I am trying to learn to use LinuxCNC to run a 2-axis cable robot - each joint features a "drum" of known diameter. The cables from two drums truncate at a single point.
Eventually I hope to turn this into a low-cost hot-wire foam cutter that would allow you to use G-code to cut out shapes from large sheets of foam. Here is my crude prototype (not working in cartesian coordinates yet).
photos.app.goo.gl/z3gUimXLRd3yP33W6
I have my mechanism up and running using "trivial" kinematics and if I simply hang a weight from the left drum (mapped to the X axis in trivial kinematics) and instruct it to move 10mm, the drum will indeed wrap up enough cable to move the weight up 10mm - so I believe I have correctly computed the parameters to account for the various gear reductions, drum diameter, etc.
So my understanding is that I need to use a custom kinematics file to provide the kinematics / math needed to translate from the desired cartesian coordinates to the resulting joint rotations. The math is a bit complicated because the cables wrap around the drum and I need to account for both the length of the tangent line as well as the part of the cable wrapped around the drum.
Never the less - I believe I have correctly ascertained the math necessary to compute the left and right drum rotation (from home position of 0,0) to achieve a desired X,Y location for the truncation of the two cables. I believe these are inverse kinematics, correct?
Beyond this, I understand LinuxCNC is looking for the "Forward" kinematics - (given a left and right cable length, what is the resulting X,Y location. This math is a bit more complicated and required numerical methods (Newton Raphison - basically "guess and check").
I believe I have "solve" both forward and inverse kinematics conceptually - I have verified that my math is basically working - I wrote a simple program using Processing and I can feed in a desired X,Y location and my Processing program will correctly spit back the change in cable length from home of 0,0. Likewise, I have confirmed that my Forward kinematics seem to be working - I can input the change in cable lengths (from home) and my processing program will output the resulting X,Y.
My custom kinematics (attached) will compile but It's not working yet but I have some conceptual blocks that I could use some assistance on that might help me debug.
the man file states: 3) If required, add hal pins following examples in
the template code
I honestly don't really understand what a hal pin is and whether these are required. I'm running my code on a Raspberry pi if it matters.
I don't really understand why LinuxCNC requires Forward kinematics (even though I think I've solved them). I will be feeding this program G-Code with desired cartesian coordinates and relying on LinuxCNC and my kinematics to resolve these to the desired drum rotations (Inverse kinematics, right?). I don't have any feedback in my device so what does LinuxCNC do with the Forward kinematics?
My inverse kinematics routine computes the drum rotations FROM HOME to a desired X,Y. Is this correct?
I'm not sure how all of this works with "homing" With a conventional CNC I understand you would use limit switches to "home" each of the axis but I don't really have that option since there is no physical "home" for either drum (both of which turn multiple turns). My general approach was going to be to manually "drive" the two drums to the known 0,0 and then manually "home" . Is this viable? Any advice?
My CableKins.comp file is attached. I'm basically breaking out of the forward kinematics since that was erroring out but I'm not getting expected results. If you see any glaring issues I'd appreciate any guidance.
Thanks for any nudges in the right direction!
I need your experience for my new setup. Mesa, Beckhoff or Raspberry pi?
Category: Driver Boards
It gets expensive when the step driving involved...
I'm going to work with other two options...
Do you have any opinion about raspberry pi's gpio pins? Will I have any problems while working with 5 stepper motors?
No 7c81 board found
Category: General LinuxCNC Questions
Notes from installation of ethercat on Raspberry Pi 4
Category: EtherCAT
Thank you for this image, it works very well. Unfortunately it is impossible to update my system & therefore impossible to install additional packages, which is a big inconvenience. I just bought a Mesa 7i96s and I need to update my system.
Do you have a solution?
Thanks for your help
Linuxcnc 2.9.2 and 2.93 images for Raspberry Pi 4b & 5
Category: Installing LinuxCNC