Fluid Dial (Fluid NC dial pendant by Bart Dring, using M5 Stack's M5 Dial)

Cool. I noticed that your dial is not the M5 dial from M5Stack. I hope that the firmware will still work, despite the fact that yours is apparently made by a different manufacturer, and may not have the same guts in it.

Hey, does the ā€œotherā€ dial you got have an ESP32-S3 inside it? If so, and it has a ā€œbutton clickā€ function in its rim, then perhaps the existing firmware could work for it, even though it’s a different brand than the one spec’d in the docs.

I screwed something up. I had a perfectly working LR3 using the jackpot controller before I set it up to use the FluidDial. I now can’t home my Z axis. I updated the FluidNC firmware to 3.7.13 and used the latest FluidDial firmware. I updated my yaml file to add in the uart settings as instructed.

What happens now is X and Y home and move as expected. Z on the other hand moves correctly until I try to home it. It moves down a bit and then stops. After that it won’t go back up until I restart the jackpot.

This happens whether or not the pendant is connected.

What did I miss?

Please post your config.yaml file. That’s probably the first place to carefully check.

Also, are you using a GCode script for probing? Or a built in probing feature in the WebUI? Or in the pendant? Or both WebUI and pendant?

board: Jackpot TMC2209
name: LowRider
meta: 07-31-2023 RyanZ

planner_blocks: 32

stepping:
  engine: I2S_STATIC
  idle_ms: 255
  pulse_us: 4
  dir_delay_us: 1
  disable_delay_us: 0
  
uart1:
  txd_pin: gpio.0
  rxd_pin: gpio.4
  rts_pin: NO_PIN
  baud: 115200
  mode: 8N1
  
uart2:
  txd_pin: gpio.14
  rxd_pin: gpio.13
  rts_pin: NO_PIN
  cts_pin: NO_PIN
  baud: 115200
  mode: 8N1

uart_channel2:
  uart_num: 2
  report_interval_ms:75

axes:
  shared_stepper_disable_pin: NO_PIN
  
  x:
    steps_per_mm: 50.000
    max_rate_mm_per_min: 9000.000
    acceleration_mm_per_sec2: 200.000
    max_travel_mm: 1220
    soft_limits: false
    homing:
      cycle: 3
      positive_direction: false
      mpos_mm: 0
      feed_mm_per_min: 300.000
      seek_mm_per_min: 1500.000
      settle_ms: 500
      seek_scaler: 1.100
      feed_scaler: 1.100
    #X
    motor0:
      limit_neg_pin: gpio.25:high
      limit_pos_pin: NO_PIN
      limit_all_pin: NO_PIN
      hard_limits: false
      pulloff_mm: 5.000
      tmc_2209:
        uart_num: 1
        addr: 0
        cs_pin: NO_PIN
        r_sense_ohms: 0.110
        run_amps: 0.400
        hold_amps: 0.300
        microsteps: 8
        stallguard: 0
        stallguard_debug: false
        toff_disable: 0
        toff_stealthchop: 5
        toff_coolstep: 3
        run_mode: StealthChop
        homing_mode: StealthChop
        use_enable: false
        direction_pin: I2SO.1
        step_pin: I2SO.2
        disable_pin: I2SO.0      
        
  y:
    steps_per_mm: 50.000
    max_rate_mm_per_min: 9000.000
    acceleration_mm_per_sec2: 200.000
    max_travel_mm: 2440
    soft_limits: false
    homing:
      cycle: 2
      positive_direction: false
      mpos_mm: 0
      feed_mm_per_min: 300.000
      seek_mm_per_min: 1500.000
      settle_ms: 500
      seek_scaler: 1.100
      feed_scaler: 1.100
    #Y
    motor0:
      limit_neg_pin: gpio.33:high
      limit_pos_pin: NO_PIN
      limit_all_pin: NO_PIN
      hard_limits: false
      pulloff_mm: 5.000
      tmc_2209:
        uart_num: 1
        addr: 1
        cs_pin: NO_PIN
        r_sense_ohms: 0.110
        run_amps: 0.400
        hold_amps: 0.300
        microsteps: 8
        stallguard: 0
        stallguard_debug: false
        toff_disable: 0
        toff_stealthchop: 5
        toff_coolstep: 3
        run_mode: StealthChop
        homing_mode: StealthChop
        use_enable: false
        step_pin: I2SO.5
        direction_pin: I2SO.4
        disable_pin: I2SO.7

    #A
    motor1:
      limit_neg_pin: gpio.35:high
      limit_pos_pin: NO_PIN
      limit_all_pin: NO_PIN
      hard_limits: false
      pulloff_mm: 5.000
      tmc_2209:
        uart_num: 1
        addr: 3
        cs_pin: i2so.14
        r_sense_ohms: 0.110
        run_amps: 0.400
        hold_amps: 0.300
        microsteps: 8
        stallguard: 0
        stallguard_debug: false
        toff_disable: 0
        toff_stealthchop: 5
        toff_coolstep: 3
        run_mode: StealthChop
        homing_mode: StealthChop
        use_enable: false
        step_pin: I2SO.13
        direction_pin: I2SO.12
        disable_pin: I2SO.15        
   
  z:
    steps_per_mm: 200.000
    max_rate_mm_per_min: 1200.000
    acceleration_mm_per_sec2: 80.000
    max_travel_mm: 300.000
    soft_limits: false
    homing:
      cycle: 1
      positive_direction: true
      mpos_mm: 0
      feed_mm_per_min: 300.000
      seek_mm_per_min: 800.000
      settle_ms: 500
      seek_scaler: 1.100
      feed_scaler: 1.100

    motor0:
      limit_neg_pin: NO_PIN
      limit_pos_pin: gpio.32:high
      limit_all_pin: NO_PIN
      hard_limits: false
      pulloff_mm: 7.000
      tmc_2209:
        uart_num: 1
        addr: 2
        cs_pin: NO_PIN
        r_sense_ohms: 0.110
        run_amps: 0.400
        hold_amps: 0.300
        microsteps: 8
        stallguard: 0
        stallguard_debug: false
        toff_disable: 0
        toff_stealthchop: 5
        toff_coolstep: 3
        run_mode: StealthChop
        homing_mode: StealthChop
        use_enable: false
        step_pin: I2SO.10
        direction_pin: I2SO.9
        disable_pin: I2SO.8

     #B
    motor1:
      limit_neg_pin: NO_PIN
      limit_pos_pin: gpio.34:high
      limit_all_pin: NO_PIN
      hard_limits: false
      pulloff_mm: 6.40875
      tmc_2209:
        uart_num: 1
        addr: 3
        cs_pin: i2so.19
        r_sense_ohms: 0.110
        run_amps: 0.400
        hold_amps: 0.300
        microsteps: 8
        stallguard: 0
        stallguard_debug: false
        toff_disable: 0
        toff_stealthchop: 5
        toff_coolstep: 3
        run_mode: StealthChop
        homing_mode: StealthChop
        use_enable: false
        step_pin: I2SO.18
        direction_pin: I2SO.17
        disable_pin: I2SO.16       
                 
  c:
    steps_per_mm: 80.000
    max_rate_mm_per_min: 5000.000
    acceleration_mm_per_sec2: 100.000
    max_travel_mm: 300.000
    soft_limits: false
    homing:
      cycle: 0
      positive_direction: true
      mpos_mm: 150.000
      feed_mm_per_min: 100.000
      seek_mm_per_min: 800.000
      settle_ms: 500
      seek_scaler: 1.100
      feed_scaler: 1.100

    motor0:
      limit_neg_pin: gpio.39:low
      limit_pos_pin: NO_PIN
      limit_all_pin: NO_PIN
      hard_limits: false
      pulloff_mm: 3.000
      tmc_2209:
        uart_num: 1
        addr: 3
        cs_pin: i2so.22
        r_sense_ohms: 0.110
        run_amps: .1
        hold_amps: 0.050
        microsteps: 16
        stallguard: 0
        stallguard_debug: false
        toff_disable: 0
        toff_stealthchop: 5
        toff_coolstep: 3
        run_mode: StealthChop
        homing_mode: StealthChop
        use_enable: false
        step_pin: I2SO.21
        direction_pin: I2SO.20
        disable_pin: I2SO.23


i2so:
  bck_pin: gpio.22
  data_pin: gpio.21
  ws_pin: gpio.17

spi:
  miso_pin: gpio.19
  mosi_pin: gpio.23
  sck_pin: gpio.18

sdcard:
  cs_pin: gpio.5
  card_detect_pin: NO_PIN
  frequency_hz: 20000000

probe:
  pin: gpio.36:low
  toolsetter_pin: NO_PIN
  check_mode_start: true

start:
  must_home: false

coolant:
  flood_pin: gpio.2
  mist_pin: gpio.16
  delay_ms: 0

control:
  safety_door_pin: NO_PIN
  reset_pin: NO_PIN
  feed_hold_pin: NO_PIN
  cycle_start_pin: NO_PIN
  macro0_pin: NO_PIN
  macro1_pin: NO_PIN
  macro2_pin: NO_PIN
  macro3_pin: NO_PIN  

macros:
  startup_line0:
  startup_line1:
  macro0:
  macro1:
  macro2:
  macro3:
  
user_outputs:
  analog0_pin: NO_PIN
  analog1_pin: NO_PIN
  analog2_pin: NO_PIN
  analog3_pin: NO_PIN
  analog0_hz: 5000
  analog1_hz: 5000
  analog2_hz: 5000
  analog3_hz: 5000
  digital0_pin: gpio.26
  digital1_pin: gpio.27
  digital2_pin: NO_PIN
  digital3_pin: NO_PIN

#Laser:
#  pwm_hz: 5000
#  output_pin: gpio.27
#  enable_pin: NO_PIN
#  disable_with_s0: false
#  s0_with_disable: true
#  tool_num: 0
#  speed_map: 0=0.000% 255=100.000%
#  off_on_alarm: true

# pwm:
#  pwm_hz: 5000
#  direction_pin: gpio.26
#  output_pin: gpio.27
#  enable_pin: NO_PIN
#  disable_with_s0: false
#  s0_with_disable: true
#  spinup_ms: 0
#  spindown_ms: 0
#  tool_num: 0
#  speed_map: 0=0.000% 1000=100.000%
#  off_on_alarm: false

# 5V out gpio.26/27
# VMot out gpoi.2/16
# In's left to right gpoi.25/33/32/35/34/39/36

On the original config file from V1E, the ā€œCā€ channel (axis) is commented out, but yours is uncommented and active. If that is intentional, this may not be a concern, if unintended, it may be a cause of issue.

Original from V1E:

Yours, uncommented:

On your #X axis, motor 0, you have trailing spaces at the end, which is a no-no with .YAML files.

On your #A axis, motor 1, you have trailing spaces at the end, which is a no-no with .YAML files.

On your #B axis, motor 1, you have trailing spaces at the end, which is a no-no with .YAML files.

On your ā€œcontrolā€ section as shown, there is a trailing space at the end, which is a no-no with .YAML files.

These trailing spaces have been known to cause issues. They may or may not be a cause of issue for you.

On the newly added UART code, you are missing a space between ā€œreport_interval_ms:ā€ and ā€œ75ā€ — you have ā€œreport_interval_ms:75ā€ instead of ā€œreport_interval_ms: 75ā€ — and since spaces have been known to be important, this may or may not be a cause of issue.

Screenshot 2024-02-16 at 11.49.52 AM

The above should look like this:

Screenshot 2024-02-16 at 11.51.33 AM

Note: I used the ā€œfindā€ feature in VS Code to check for presence of spaces. That’s why the spaces show up highlighted in these screen shots.

Thanks Doug. I’ll correct those issues and see what happens. I don’t know how they got there other than the missing space in the UART section. I’ve only used the original file and made none of those changes you show. I use Notepad ++ for an editor.

1 Like

If you would find it convenient, Notepad++ also has a convenient option to show whitespace characters, although spaces don’t show up as well as with the find feature.

2 Likes

Early on, there was not yet much awareness of the possible issues of trailing spaces or missing spaces. They may have been present from the start (here), and… they still may not be in a place that causes an issue (if they are from the original file, they may not be harming anyone). I unintentionally added a trailing space that caused one of my Z motors to move twice as fast as the other one!

@DougJoseph

It does have an ESP32 and rotary dial with push-switch. However it is also 2.8 inch screen, with a 3 inch overall diameter. It just woun’t work with any of the cases anyone else is using.

I may repurpose it for another project (home assistant controller) and just order the M5 dial.

It’s very low on the project priority at the moment. I need to finish LittleLR3 first.

Mike

1 Like

Coming back to the issue of coordinates not displaying correctly on the DRO. The only issue I had was the Z axis showing strange numbers in-between polls. It didn’t effect usability.

Today I’ve mounted my Kobalt router and I can’t use the dial at all while it is running. The screen goes full glitch. The router power cord is no where near the controller, M5 dial, or any of the cables for the dial.

I noticed that too. I think it’s showing the machine coordinates not the workspace coordinates so when you set zero it’s for the workspace and the machine zero is unchanged

I’m no expert. My first guesses would be whether everything is grounded, and that you may need shielded wiring cord.

1 Like

Such a strange occurrence that I’ve never experienced. I could understand if the router was wired into a relay off the controller but its completely separate. I even have a ferrite ring around the usb cord as well. Super bummed but I really only need the dial for initial setup before I turn the router on. I just don’t like unsolved things.

Would a shielded USB cord apply. I thought the same thing but that’s what I’m using.

1 Like

That M5 dial is using a separate four pin cable, right? Not the USB you were referring to? I would be inclined to check that cable to see if it is shielded.

If I remember correctly, in the kobalt thread you mentioned that your router is surging a lot and the brushes smell. That probably means the router is also generating a lot of EMF which would mess with your low voltage signals.

Well, I found the problem. I fixed the yaml and tried it again with the same results. I then noticed a message in the terminal window after I saw that it was going into alarm. It indicated that it did not detect and endstop pulloff so I suspected a limit switch and sure enough one of the z endstop switches had pulled out just enough to lose contact at the jackpot. I am now printing your clamp block. It’s been on my to-do list for a while. And a bonus is that I got my yaml file cleaned up, lol. Everything seems to be working correctly now. Thanks for your help Doug.

2 Likes

Awesome, glad you got it all sorted out!

@coinbird
I cut out my black walnut pendant holder. It’s ready for the M5 Dial and buttons.

2 Likes

Awesome! Wooden pendant holders unite! :wink:

2 Likes

Just a note: Doug added a link to the Mouser URL for the M5 Stack, which then mysterioiusly sold out :thinking:

Digikey has 96 of these in stock as well: (Will have 95 in about 30 seconds). :smile:

2 Likes