For any product issues, please contact me first: hankecnc@gmail.com

Problem: fluidnc versions 3.9.0 and 3.9.3 dual y axis one motor rotates in same direction regardless of jog direction #1408

未分类 bolang 7个月前 (09-22) 169次浏览
@jkingdcs

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, 2024

bdring

bdring commented on Dec 19, 2024

Owner

Just to clarify

  • It it does not work with 3.9.0 and 3.9.3.
  • It works with 3.9.1
  • It works with versions earlier than 3.9.0
bdring

bdring commented on Dec 19, 2024

Owner

What closed loop motors are you using?

jkingdcs

jkingdcs commented on Dec 19, 2024

Author

Just to clarify

  • It it does not work with 3.9.0 and 3.9.3.
  • It works with 3.9.1
  • It works with versions earlier than 3.9.0

this is correct

jkingdcs

jkingdcs commented on Dec 19, 2024

Author

What closed loop motors are you using?

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

bdring commented on Dec 19, 2024

Owner

Is it possible to place an LED on the direction signal of the controller on the axis that is having trouble?

bdring

bdring commented on Dec 19, 2024

Owner

image

jkingdcs

jkingdcs commented on Dec 19, 2024

Author

Is it possible to place an LED on the direction signal of the controller on the axis that is having trouble?

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

bdring commented on Dec 19, 2024

Owner

The direction signal is persistent. just jog a few millimeters. The state of the direction signal will stay until you reverse.

MitchBradley

MitchBradley commented on Dec 19, 2024

Collaborator

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

jkingdcs commented on Dec 19, 2024

Author

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

MitchBradley commented on Dec 19, 2024

Collaborator

I presume that the voltage on the good motor socket changes depending on the command direction, while the bad one does not change?

jkingdcs

jkingdcs commented on Dec 19, 2024

Author

I presume that the voltage on the good motor socket changes depending on the command direction, while the bad one does not change?

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

MitchBradley commented on Dec 19, 2024

Collaborator

In the previous test, where the B voltage did not change, was it 3.9.0 or 3.9.3?

jkingdcs

jkingdcs commented on Dec 19, 2024

Author

In the previous test, where the B voltage did not change, was it 3.9.0 or 3.9.3?
3.9.3
(I had exactly the same motor behaviour from 3.9.0 but stopped using it when it got pulled from the releases)

59 remaining items

bdring

bdring commented on Dec 27, 2024

Owner

@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

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

MitchBradley commented on Dec 27, 2024

Collaborator

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

bdring commented on Dec 27, 2024

Owner

@jkingdcs Can you do some testing? We want to close this issue.

mattydboom

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

bdring commented on Dec 27, 2024

Owner

@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

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

jkingdcs commented on Dec 27, 2024

Author

@jkingdcs Can you do some testing? We want to close this issue.

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

jkingdcs commented on Dec 27, 2024

Author

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.

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

MitchBradley commented on Dec 27, 2024

Collaborator

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

RootCNC commented on Dec 28, 2024

Contributor

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

bdring

bdring commented on Jan 3

Owner

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

jkingdcs commented on Jan 4

Author

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.

 to join this conversation on GitHub. Already have an account? Sign in to comment
喜欢 (0)