Description
Wiki Search Terms
none
Controller Board
rootcnc v3
Machine Description
foxalien vasto with rootcnc controller, all motors upgraded to closed loop.
dual y axis motors, single motors on x and z
limit switches for x and z axis. y axis has limit switches for one side only
Input Circuits
machine works fine with 3.9.1 and not 3.9.1 or 3.9.3 so I don't think its a wiring error.
Configuration file
board: Root Controller ISO
name: VFD hard limits
meta:
arc_tolerance_mm: 0.002
junction_deviation_mm: 0.010
verbose_errors: false
report_inches: false
enable_parking_override_control: false
use_line_numbers: false
planner_blocks: 16
#NOTE pin 20 is relay 1
#NOTE pin 21 is relay 2
# BUG status outputs are not set until after first physical movement!!
status_outputs:
report_interval_ms: 500
# idle seems to work on relays and motor output pins. idle ONLY when nothing else is happening including jogging
#
# idle_pin: I2SO.15:high
#run pin is NOT active during jog. IS active on other gcode commands
# run_pin: I2SO.15:high
#hold pin works when feed hold is pressed i.e. ! and goes back to 0 when ~ is pressed
# hold_pin: I2SO.15:high
# ALARM DOES NOT SEEM TO WORK. homing fail does not activate. E stop does not activate
alarm_pin: I2SO.15:high
start:
must_home: true
check_limits: false
stepping:
engine: I2S_STREAM
idle_ms: 255
pulse_us: 4
dir_delay_us: 4
disable_delay_us: 4
axes:
shared_stepper_disable_pin: NO_PIN
x:
steps_per_mm: 320.000
max_rate_mm_per_min: 4000.000
acceleration_mm_per_sec2: 500.000
# was
max_travel_mm: 422.000
# max travel from home 0 to 1mm before end crash
# max_travel_mm: 445.000
soft_limits: true
homing:
cycle: 2
positive_direction: false
# note once machine is hommed soft limits do not allow movement to the left of the home position regardless of mpos.
# i.e. mpos does not allow you to set a soft limit to the left of the home X axis switch
mpos_mm: 0.000
feed_mm_per_min: 25.000
seek_mm_per_min: 1500.000
settle_ms: 500
seek_scaler: 1.100
feed_scaler: 1.100
motor0:
limit_neg_pin: NO_PIN
limit_pos_pin: NO_PIN
limit_all_pin: gpio.34
hard_limits: true
pulloff_mm:1.100
standard_stepper:
step_pin: I2SO.7:low
direction_pin: I2SO.5:high
disable_pin: I2SO.3:high
y:
steps_per_mm: 320.000
max_rate_mm_per_min: 4000.000
acceleration_mm_per_sec2: 500.000
# was
max_travel_mm: 435.000
# max travel from home 0 to 1mm before end crash
# max_travel_mm: 457.000
soft_limits: true
homing:
cycle: 2
positive_direction: false
mpos_mm: 0.000
feed_mm_per_min: 25.000
seek_mm_per_min: 1500.000
settle_ms: 500
seek_scaler: 1.100
feed_scaler: 1.100
# motor 0 on labelled y output
motor0:
limit_neg_pin: NO_PIN
limit_pos_pin: NO_PIN
#limit switches on y input
limit_all_pin: gpio.32
hard_limits: true
pulloff_mm:1.000
standard_stepper:
step_pin: I2SO.12:low
direction_pin: I2SO.10:high
disable_pin: I2SO.8:high
# motor 1 on labelled b output
motor1:
limit_neg_pin: NO_PIN
limit_pos_pin: NO_PIN
limit_all_pin: NO_PIN
hard_limits: true
pulloff_mm: 1.000
standard_stepper:
step_pin: I2SO.13:low
direction_pin: I2SO.11:high
disable_pin: I2SO.9:high
z:
steps_per_mm: 800.000
max_rate_mm_per_min: 2000.000
acceleration_mm_per_sec2: 500.000
max_travel_mm: 105.000
soft_limits: true
homing:
cycle: 1
positive_direction: true
mpos_mm: 0.000
feed_mm_per_min: 25.000
seek_mm_per_min: 1500.000
settle_ms: 500
seek_scaler: 1.100
feed_scaler: 1.100
# motor 0 on labelled z output
motor0:
limit_neg_pin: NO_PIN
limit_pos_pin: NO_PIN
limit_all_pin: gpio.27
hard_limits: true
pulloff_mm: 1.000
standard_stepper:
step_pin: I2SO.18:low
direction_pin: I2SO.16:high
disable_pin: I2SO.14:high
i2so:
bck_pin: gpio.22
data_pin: gpio.12
ws_pin: gpio.21
spi:
miso_pin: gpio.19
mosi_pin: gpio.23
sck_pin: gpio.18
sdcard:
card_detect_pin: NO_PIN
cs_pin: gpio.5
control:
safety_door_pin: NO_PIN
# emergency stop connected to * input.
estop_pin: gpio.15
# reset uses A input
reset_pin: gpio.26
macro0_pin: NO_PIN
macro1_pin: NO_PIN
macro2_pin: NO_PIN
macro3_pin: NO_PIN
feed_hold_pin: gpio.25
cycle_start_pin: gpio.36
# closed loop controller fault pins high when all is ok in parallel on input axis limit B
fault_pin: gpio.35:high
coolant:
flood_pin: NO_PIN
mist_pin: NO_PIN
delay_ms: 0
# both probe and toolsetter generate probe notifications.
probe:
# probe uses P input
pin: gpio.02
# toolsetter uses C input
toolsetter_pin: gpio.14: high
check_mode_start: true
macros:
startup_line0:
startup_line1:
macro0:
macro1:
macro2:
macro3:
after_homing:
after_reset:
after_unlock:
user_outputs:
# M67 E0 Q23.87 would enable output analog0_pin with 23.87% duty cycle. Q0 would it turn off.
analog0_pin: gpio.13
analog1_pin: NO_PIN
analog2_pin: NO_PIN
analog3_pin: NO_PIN
analog0_hz: 5000
analog1_hz: 5000
analog2_hz: 5000
analog3_hz: 5000
# M62 P0 Would turn digital0 pin on. M63 P0 Would turn digital0 pin off
# relay 1 is on pin i2so.21 ?
digital0_pin: i2so.21
# relay 2 is on pin i2so.20 ?
digital1_pin: i2so.20
# fet 2 is on pin i2so.22 ?
digital2_pin: i2so.22
uart1:
txd_pin: gpio.17
rxd_pin: gpio.16
rts_pin: gpio.4
baud: 9600
mode: 8N1
atc_manual:
safe_z_mpos_mm: -1.000000
probe_seek_rate_mm_per_min: 200.000000
probe_feed_rate_mm_per_min: 25.000000
change_mpos_mm: 200.000 200.000 -1.000
ets_mpos_mm: 400.000 400.000 -85.000
ets_rapid_z_mpos_mm: -65.000000
Huanyang:
uart_num: 1
modbus_id: 1
tool_num: 0
spinup_ms: 10000
spindown_ms: 10000
off_on_alarm: true
# speed map or linear??
speed_map: 0=0% 0=20% 4800=20% 24000=100%
atc: atc_manual
Startup Messages
since 3.9.1 IS working fine and 3.9.3 is NOT working correctly I will include startup message from both versions:
startup message from v 3.9.1 (working FINE)
[MSG:INFO: FluidNC v3.9.1 https://github.com/bdring/FluidNC]
[MSG:INFO: Compiled with ESP32 SDK:v4.4.7-dirty]
[MSG:INFO: Local filesystem type is spiffs]
[MSG:INFO: Configuration file:foxalienVFD.yaml]
[MSG:INFO: Machine VFD hard limits]
[MSG:INFO: Board Root Controller ISO]
[MSG:INFO: UART1 Tx:gpio.17 Rx:gpio.16 RTS:gpio.4 Baud:9600]
[MSG:INFO: I2SO BCK:gpio.22 WS:gpio.21 DATA:gpio.12]
[MSG:INFO: SPI SCK:gpio.18 MOSI:gpio.23 MISO:gpio.19]
[MSG:INFO: SD Card cs_pin:gpio.5 detect:NO_PIN freq:8000000]
[MSG:INFO: Stepping:I2S_STREAM Pulse:4us Dsbl Delay:4us Dir Delay:4us Idle Delay:255ms]
[MSG:INFO: User Digital Output: 0 on Pin:I2SO.21]
[MSG:INFO: User Digital Output: 1 on Pin:I2SO.20]
[MSG:INFO: User Digital Output: 2 on Pin:I2SO.22]
[MSG:INFO: User Analog Output: 0 on Pin:gpio.13 Freq:5000Hz]
[MSG:INFO: Axis count 3]
[MSG:INFO: Axis X (0.000,422.000)]
[MSG:INFO: Motor0]
[MSG:INFO: standard_stepper Step:I2SO.7:low Dir:I2SO.5 Disable:I2SO.3]
[MSG:INFO: X All Limit gpio.34]
[MSG:INFO: Axis Y (0.000,435.000)]
[MSG:INFO: Motor0]
[MSG:INFO: standard_stepper Step:I2SO.12:low Dir:I2SO.10 Disable:I2SO.8]
[MSG:INFO: Y All Limit gpio.32]
[MSG:INFO: Motor1]
[MSG:INFO: standard_stepper Step:I2SO.13:low Dir:I2SO.11 Disable:I2SO.9]
[MSG:INFO: Axis Z (-105.000,0.000)]
[MSG:INFO: Motor0]
[MSG:INFO: standard_stepper Step:I2SO.18:low Dir:I2SO.16 Disable:I2SO.14]
[MSG:INFO: Z All Limit gpio.27]
[MSG:INFO: reset_pin gpio.26]
[MSG:INFO: feed_hold_pin gpio.25]
[MSG:INFO: cycle_start_pin gpio.36]
[MSG:INFO: fault_pin gpio.35]
[MSG:INFO: estop_pin gpio.15]
[MSG:INFO: Kinematic system: Cartesian]
[MSG:INFO: Connecting to STA SSID:VM0210584]
[MSG:INFO: Connecting.]
[MSG:INFO: Connecting..]
[MSG:INFO: Connected - IP is 192.168.0.57]
[MSG:INFO: WiFi on]
[MSG:INFO: Start mDNS with hostname:http://fluidnc.local/]
[MSG:INFO: HTTP started on port 80]
[MSG:INFO: Telnet started on port 23]
[MSG:INFO: Status outputs Interval:500 Idle:NO_PIN Cycle:NO_PIN Hold:NO_PIN Alarm:I2SO.15]
[MSG:INFO: ATC:atc_manual]
[MSG:INFO: Huanyang Spindle Tx:gpio.17 Rx:gpio.16 RTS:gpio.4 Baud:9600]
[MSG:INFO: Probe gpio.2]
[MSG:INFO: Toolsetter gpio.14]
startup message from 3.9.3 (DOES NOT WORK AS EXPECTED)
[MSG:INFO: FluidNC v3.9.3 https://github.com/bdring/FluidNC]
[MSG:INFO: Compiled with ESP32 SDK:v4.4.7-dirty]
[MSG:INFO: Local filesystem type is spiffs]
[MSG:INFO: Configuration file:foxalienVFD.yaml]
[MSG:INFO: Machine VFD hard limits]
[MSG:INFO: Board Root Controller ISO]
[MSG:INFO: UART1 Tx:gpio.17 Rx:gpio.16 RTS:gpio.4 Baud:9600]
[MSG:INFO: I2SO BCK:gpio.22 WS:gpio.21 DATA:gpio.12]
[MSG:INFO: SPI SCK:gpio.18 MOSI:gpio.23 MISO:gpio.19]
[MSG:INFO: SD Card cs_pin:gpio.5 detect:NO_PIN freq:8000000]
[MSG:INFO: Stepping:I2S_STREAM Pulse:4us Dsbl Delay:4us Dir Delay:4us Idle Delay:255ms]
[MSG:INFO: User Digital Output: 0 on Pin:I2SO.21]
[MSG:INFO: User Digital Output: 1 on Pin:I2SO.20]
[MSG:INFO: User Digital Output: 2 on Pin:I2SO.22]
[MSG:INFO: User Analog Output: 0 on Pin:gpio.13 Freq:5000Hz]
[MSG:INFO: Axis count 3]
[MSG:INFO: Axis X (0.000,422.000)]
[MSG:INFO: Motor0]
[MSG:INFO: standard_stepper Step:I2SO.7:low Dir:I2SO.5 Disable:I2SO.3]
[MSG:INFO: X All Limit gpio.34]
[MSG:INFO: Axis Y (0.000,435.000)]
[MSG:INFO: Motor0]
[MSG:INFO: standard_stepper Step:I2SO.12:low Dir:I2SO.10 Disable:I2SO.8]
[MSG:INFO: Y All Limit gpio.32]
[MSG:INFO: Motor1]
[MSG:INFO: standard_stepper Step:I2SO.13:low Dir:I2SO.11 Disable:I2SO.9]
[MSG:INFO: Axis Z (-105.000,0.000)]
[MSG:INFO: Motor0]
[MSG:INFO: standard_stepper Step:I2SO.18:low Dir:I2SO.16 Disable:I2SO.14]
[MSG:INFO: Z All Limit gpio.27]
[MSG:INFO: reset_pin gpio.26]
[MSG:INFO: feed_hold_pin gpio.25]
[MSG:INFO: cycle_start_pin gpio.36]
[MSG:INFO: fault_pin gpio.35]
[MSG:INFO: estop_pin gpio.15]
[MSG:INFO: Kinematic system: Cartesian]
[MSG:INFO: Connecting to STA SSID:VM0210584]
[MSG:INFO: Connecting.]
[MSG:INFO: Connecting..]
[MSG:INFO: Connected - IP is 192.168.0.57]
[MSG:INFO: WiFi on]
[MSG:INFO: Start mDNS with hostname:http://fluidnc.local/]
[MSG:INFO: HTTP started on port 80]
[MSG:INFO: Telnet started on port 23]
[MSG:INFO: Status outputs Interval:500 Idle:NO_PIN Cycle:NO_PIN Hold:NO_PIN Alarm:I2SO.15]
[MSG:INFO: ATC:atc_manual]
[MSG:INFO: Huanyang Spindle with atc_manual Tx:gpio.17 Rx:gpio.16 RTS:gpio.4 Baud:9600]
[MSG:INFO: Probe gpio.2]
[MSG:INFO: Toolsetter gpio.14]
User Interface Software
using web gui or gsender in grbl or grbl hal mode
What happened?
machine works fine with fluidnc 3.9.1 and multiple earlier versions.
But with version 3.9.0 and 3.9.3, if I jog the dual motor y axis in the negative direction i.e. towards the front of the machine both y axis motors turn the correct way BUT when jogging the y axis in the positive direction i.e. towards the back of the machine one of the dual y axis motors (the one on the right hand side of the machine) turns the correct way and the other (on the left side of the machine) turns to move the axis towards the front of the machine skewing the gantry. . i.e. the left Y axis motor always turns the same way regardless of the requested y axis travel direction. It is always the same motor turning the wrong way. Reseting does not help, switching on and off does not help. This is 100% repeatable, using webui or gsender for jogging makes no difference. Eventually the left hand y axis hits the homing switch and that is ignored too. If I keep jogging the y axis eventually it will crash into the bearing support housing and the closed loop stepper driver detects the missing steps and errors out setting the fault pin, but no error is reported by fluidnc. If I hit the reset button then the controller says fault pin on startup. Z and X (both axis have single motors) work fine. Just downgrading the firmware to 3.9.1 with no config or other changes restores correct operation. The issue is 100% reproducible over multiple upgrade and downgrade cycles.
I therefore do not believe it is a problem with the hardware, wiring or gsender and is a problem triggered by some code changes in fluidnc versions 3.9.3 and 3.9.0.
GCode File
any Y axis jog at any stepping speed and any length in mm
Other Information
No response
Activity
changed the title
[-]Problem: fluidnc versions 3.9.0 and 3.9.3 dual y axis one motor rotates in same direction[/-][+]Problem: fluidnc versions 3.9.0 and 3.9.3 dual y axis one motor rotates in same direction regardless of jog direction[/+] on Dec 19, 2024bdring commented on Dec 19, 2024
Just to clarify
bdring commented on Dec 19, 2024
What closed loop motors are you using?
jkingdcs commented on Dec 19, 2024
this is correct
jkingdcs commented on Dec 19, 2024
nema 23 from stepper online 3nm model 23HS45-4204D-E1000 closed loop motors 4.2A per phase. motor controller is cl57T v4.1 closed loop drivers
bdring commented on Dec 19, 2024
Is it possible to place an LED on the direction signal of the controller on the axis that is having trouble?
bdring commented on Dec 19, 2024
jkingdcs commented on Dec 19, 2024
yes, I can put an led, oscilloscope or multimeter
(I can jog for about 10-20mm before the gantry skews so much it jams)
bdring commented on Dec 19, 2024
The direction signal is persistent. just jog a few millimeters. The state of the direction signal will stay until you reverse.
MitchBradley commented on Dec 19, 2024
It is very strange that there is different behavior between 3.9.0 and 3.9.1. The changes between those versions are in an area that is very far removed from the step/direction generation code.
jkingdcs commented on Dec 19, 2024
Y motor connected to motor socket B on rootcnc : (bad motor always turns same way)
multimeter negative on dir and positive on ref = -4.95V (motor connector B)
Y motor connected to motor socket Y on rootcnc : (good motor operates as expected)
multimeter negative on dir and positive on ref = -0V (motor connector Y)
MitchBradley commented on Dec 19, 2024
I presume that the voltage on the good motor socket changes depending on the command direction, while the bad one does not change?
jkingdcs commented on Dec 19, 2024
correct the motor on socket B has -5V dir to ref regardless of the direction of travel Y requested,.
I just put 3.9.1 back on, switched off and on the power and jogged in the y positive direction and BOTH motors work correctly and both motors have 0V between dir and ref when moving positive Y and -5V when moving negative Y.
MitchBradley commented on Dec 19, 2024
In the previous test, where the B voltage did not change, was it 3.9.0 or 3.9.3?
jkingdcs commented on Dec 19, 2024
59 remaining items
bdring commented on Dec 27, 2024
@mattydboom Try a lot of jogs in both direction on all axes. Make sure all moves go the right way. If any go the wrong way, let us know ASAP
mattydboom commented on Dec 27, 2024
I must have just jogged a hundred or so times is whole host of directions and hasn’t placed a step in the wrong direction. Also reset the controller a few times, and re-run. Seems rock solid to me.
MitchBradley commented on Dec 27, 2024
Thanks for doing the test. This is a good data point to support my belief that the direction problem was caused by overclocking the 74HC595 shift registers that both MKS DLC32 and Root Controller use, contrary to our recommendation fo 74AHCT595 parts which are 5x faster than their HC counterparts.
bdring commented on Dec 27, 2024
@jkingdcs Can you do some testing? We want to close this issue.
mattydboom commented on Dec 27, 2024
Glad to be of help, and will continue testing on this branch of firmware over the next few days. Hope it puts the issue to bed and can then be brought over to the main branch.
bdring commented on Dec 27, 2024
@mattydboom Can you ask on the Root CNC support forum to see if anyone else has seem the issue?
I think both you and @jkingdcs use the Root.
mattydboom commented on Dec 27, 2024
Yes, I already had this thought so will follow up with Pete from RootCNC to make him aware (if he isn’t already). I suspect this will affect more RootISO users if/as/when they update their version of Fluidnc to these newer builds.
jkingdcs commented on Dec 27, 2024
I certainly will as soon as I am back at my cnc machine – which I am afraid will not be until will be early Jan.
Since I was getting motor port C direction fails with all release versions of 3.9.x I tried including 3.9.1 it should be relatively reliable to test the better clocking code. For me the direction fails are almost always consistent with version and occur straight from boot rather than breaking randomly and so testing should give reliable solid data (I hope).
jkingdcs commented on Dec 27, 2024
I highly agree. I think when I am in a position to do some testing, if the new clocking code works for me then I think there will be very strong evidence that the current rootcnc build needs better shift registers. Looking at the circuit diagram for the older version 2 rootcnc, it looks like the HC shift registers are powered from 3.3V. The faster hct variant requires 5V – which is going to mean more changes to the rootcnc pcb than just a direct shift register chip swap.
MitchBradley commented on Dec 27, 2024
You can run AHCT (and HCT) from 3.3V, despite the data sheet. http://wiki.fluidnc.com/en/support/controller_design_guidelines#i2so-chips, which, apparently, no one reads, explains why. The manufacturer doesn’t bother to characterize the parts at 3.3V because their purpose in life is to interoperate with TTL, so why bother to spec at 3.3V? But the chip is identical except for the doping on one of the input transistors (which modifies the input threshold), so the otherwise-identical rest of the circuit can run at 3.3V just like the non-T variants.
HCT is not hugely faster than HC. It is the “A” prefix that gets you the speedup.
The build with the min_pulse_us fix will work with existing Root Controllers and DLC32s, because it defaults to a clock rate that is okay for HC. You have to boost the clock rate by setting min_pulse_us:1 in order to get the fastest clock that only works with AHC(T).
If Pete changes to faster chips, that might just make the situation worse because then there would be two versions and of course nobody who files a bug report will bother to tell us which version they have. So it will just waste more time when we have to ask and they have to try and figure out which.
What I really wish is that more Root Controller users would sponsor the project. Ideally the vendor would contribute too.
RootCNC commented on Dec 28, 2024
Hey All,
@mattydboom thank you for sending me a message and pointing me into the direction of this issue, I wasn’t aware of this happening. I can confirm the shift registers used on all batches of the Rev 3 is the 74HC_HCT595.
https://assets.nexperia.com/documents/data-sheet/74HC_HCT595.pdf
mentioned this on Dec 29, 2024
bdring commented on Jan 3
The new I2S clocking is now in v3.9.4. Try using 2 or 4 for the
min_pulse_us:If that does not work for you, there is not much more we can do.closed this as completedon Jan 3
jkingdcs commented on Jan 4
initial testing of 3.9.4 looks good!
Motor channel C of the rootcnc now works correctly with min_pulse_us set to 4 over multiple moves, and multiple controller resets and controller reboots. ALL previous 3.9.x including 3.9.1 would consistently not step correctly with motor channel C and so I believe this to be a reliable test.
Thank you for adding the min_pulse_us to provide support for those of us with inferior shift registers.
P.S
A small amount of testing also seems to indicate that min_pulse_us set to 2 works. However I intend to run the CNC with min_pulse_us set to 4 to be on the safe side.