I2SO_STREAM 错误? #245

推推 grbl 3年前 (2023-02-05) 275次浏览
关闭
snakescb 打开了这个问题 2022 年 1 月 14 日 · 20条评论
关闭

I2SO_STREAM 错误?#245

snakescb 打开了这个问题 2022 年 1 月 14 日 · 20条评论

评论

I2SO_STREAM 错误? #245
赞助

你好,

在 v3.3.0(以及之前的版本)上,我在 TMC5160 驱动器上的电机使用 I2S_STATIC 引擎运行良好。我将配置设置为 32 微步,每毫米 6400 步,每分钟 50 毫米。当我慢跑 1 毫米时,电机正好按预期转动 1 圈,一切正常。

当我只将步进引擎更改为 I2S_stream 时,慢跑 1mm 会产生 2.5 多转。我首先假设我的控制器板坏了,但我认为它与软件更相关。这个问题是已知的吗?是否有一般性建议,在什么情况下使用 I2S_STATIC,何时使用 I2S_STREAM?

问候
基督教

I2SO_STREAM 错误? #245 snakescb 添加了 漏洞 仅供开发者使用标签 2022 年 1 月 14 日
I2SO_STREAM 错误? #245
所有者

我明天会调查的。如果存在问题,则可能是设置或固件问题。

在任一模式下,硬件的使用方式相同。

I2SO_STREAM 错误? #245
所有者

我在我的机器上测试了 I2SO_Stream 和 I2SO_Static。就运动和分辨率而言,它们的行为相同。

你可以发布你使用的配置文件吗?只发布有效的。我会自己更改I2S类型。

https://github.com/bdring/FluidNC/wiki/Requesting-Help

I2SO_STREAM 错误? #245
赞助作者

当然,这是我的 config.yaml。目前在我的工作台上,电机安装在 x 轴上。所有配置的驱动程序都安装在板子上并初始化ok。

board: NCMate
name: CNC Maettenwil

start:
  must_home: false
  
stepping:
  engine: I2S_STATIC
  idle_ms: 255
  pulse_us: 10
  dir_delay_us: 1
  disable_delay_us: 0

axes:
  shared_stepper_disable_pin: NO_PIN
  
  x:
    steps_per_mm: 6400.000
    max_rate_mm_per_min: 350.000
    acceleration_mm_per_sec2: 50.00
    max_travel_mm: 400.000
    soft_limits: false
    
    homing:
      cycle: 2
      positive_direction: false
      mpos_mm: 150.000
      feed_mm_per_min: 100.000
      seek_mm_per_min: 200.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: NO_PIN
      hard_limits: false
      pulloff_mm: 1.000

      tmc_5160:
        cs_pin: i2so.7
        step_pin: i2so.6
        direction_pin: i2so.5
        disable_pin: i2so.4
        r_sense_ohms: 0.075
        run_amps: 0.8
        hold_amps: 0.4
        microsteps: 32
        stallguard: 0
        stallguard_debug: false
        toff_disable: 0
        toff_stealthchop: 5
        toff_coolstep: 3
        run_mode: StealthChop
        homing_mode: StealthChop
        use_enable: false

  y:
    steps_per_mm: 640.000
    max_rate_mm_per_min: 1500
    acceleration_mm_per_sec2: 1000
    max_travel_mm: 600.000
    soft_limits: false
    
    homing:
      cycle: 2
      positive_direction: false
      mpos_mm: 150.000
      feed_mm_per_min: 100.000
      seek_mm_per_min: 200.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: NO_PIN
      hard_limits: false
      pulloff_mm: 1.000

      tmc_5160:
        cs_pin: i2so.3
        step_pin: i2so.2
        direction_pin: i2so.1
        disable_pin: i2so.0
        r_sense_ohms: 0.075
        run_amps: 2.00
        hold_amps: 1.50
        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

    motor1:
      limit_neg_pin: NO_PIN
      limit_pos_pin: NO_PIN
      limit_all_pin: NO_PIN
      hard_limits: false
      pulloff_mm: 1.000
      
      tmc_5160:
        cs_pin: i2so.11
        step_pin: i2so.10
        direction_pin: i2so.9
        disable_pin: i2so.8
        r_sense_ohms: 0.075
        run_amps: 2.00
        hold_amps: 1.50
        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

  z:
    steps_per_mm: 640
    max_rate_mm_per_min: 1500
    acceleration_mm_per_sec2: 1000
    max_travel_mm: 200
    soft_limits: false

    homing:
      cycle: 1
      mpos_mm: 100
      positive_direction: true

    motor0:
      limit_neg_pin: NO_PIN
      limit_pos_pin: NO_PIN
      limit_all_pin: NO_PIN
      hard_limits: false
      pulloff_mm: 1.000

      tmc_5160:
        cs_pin: i2so.15
        step_pin: i2so.14
        direction_pin: i2so.13
        disable_pin: i2so.12
        r_sense_ohms: 0.075
        run_amps: 2.00
        hold_amps: 1.50
        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
        
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:
  card_detect_pin: NO_PIN
  cs_pin: gpio.5

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

coolant:
  flood_pin: i2so.23
  mist_pin: i2so.20
  delay_ms: 0

probe:
  pin: gpio.4:low
  check_mode_start: true

macros:
  startup_line0:
  startup_line1:
  macro0:
  macro1:
  macro2:
  macro3:

10V:
  forward_pin: i2so.16
  reverse_pin: i2so.17
  pwm_hz: 5000
  output_pin: gpio.16
  enable_pin: NO_PIN
  direction_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% 10000=100.000%
I2SO_STREAM 错误? #245

什么是控制板?

I2SO_STREAM 错误? #245
所有者

我将花费一些时间来使用您的所有设置进行真正的测试。

观察:对于所有其他设置,加速度看起来有点快。使用 1mm/rev 时,您对电机的要求很高。

我能够将两者都放在逻辑分析仪上,它们看起来都适合生成阶跃。信号上有大约 4us 的抖动,但在 50mm/min 的进给速率下可以忽略不计。

I2SO_STREAM 错误? #245
赞助作者
snakescb 评论了 2022 年 1 月 15 日  

嗨,不用着急,我可以很好地使用 I2S_STATIC。我降低了加速度,结果相同。附上两个视频,唯一的区别是步进引擎。真的超级奇怪。我在自己的自定义控制器上运行它,如果您愿意,我可以将其发送给您(但我无法想象它与硬件相关)。顺便说一句,带有 I2S_STREAM 的电机听起来也更刺耳

https://user-images.githubusercontent.com/10495848/149575199-c42715e4-cca3-4057-9153-9189c35509b8.mov
https://user-images.githubusercontent.com/10495848/149575210-78e3868b-6504-4e10-a082 -7308a5c269d9.mov

I2SO_STREAM 错误? #245
赞助作者

快速更新,将我的(廉价)逻辑分析仪连接到驱动器上的脉冲信号,这是我得到的:使用 STATIC,我以恒定速度获得均匀分布的脉冲,使用 STREAM,我得到丢失的脉冲,有时脉冲保持高电平,还有一些脉冲触发加倍。我在几块板上看到了同样的情况,这可能是硬件问题,但我无法想象它可能来自哪里。
I2SO_STREAM 错误? #245
I2SO_STREAM 错误? #245

I2SO_STREAM 错误? #245

您做了哪些工作来确保 I2S 总线上的信号完整性?我猜你还没有用示波器观察波形。您没有提供控制器的照片,因此我们无法衡量您的设计和布线实践的质量。

I2SO_STREAM 错误? #245
所有者

这与我见过的任何东西都不一样。即使 I2S 在测试中出现问题,也从未出现过长步进脉冲。

起初我以为可能是固件问题,但我认为现在更有可能是硬件问题。

I2SO_STREAM 错误? #245

如果时钟信号的信号质量差,振铃或边沿定时差异可能会导致各种错误触发。静态模式在时钟和数据之间可能具有不同的时序关系,这可能会隐藏此类问题。

I2SO_STREAM 错误? #245
赞助作者

谢谢您的意见。假设问题与硬件有关,我很好,并且会进一步检查。我没有采取任何复杂的措施来确保完整性。位时钟和数据线长约 50 毫米,宽约 0.254 毫米。Word 和 BCK 在每个芯片上都有一个过孔。BCK 有 10k 下拉。两种模式的时钟周期有什么不同吗?

I2SO_STREAM 错误? #245

对于快速边沿信号,接地返回路径需要在整个走线长度内物理上靠近信号路径。否则,信号/返回对的阻抗会沿路径变化,可能变化很大,从而导致可能导致错误触发的反射,有时在不同的移位寄存器芯片上会有所不同。

I2S STREAM 使用硬件自动生成边缘。I2S_STATIC 使用软件实现许多功能,这些功能是在 STREAM 模式下通过硬件引擎完成的。

Bart 和我付出了很多努力来设计和验证 Bart 销售的电路板的布局和信号完整性,并利用了数十年的 EE 经验。互联网上的许多爱好者电子教程使数字设计看起来比实际上更容易,尤其是在涉及快速边沿时。

I2SO_STREAM 错误? #245
赞助作者

谢谢。将在我正在开发的下一个版本中考虑到这一点。

I2SO_STREAM 错误? #245 snakescb 提到了这个问题 2022 年 1 月 18 日
I2SO_STREAM 错误? #245

这可能有帮助,也可能没有帮助:我有一个 DLC32,I2S_STATIC 工作 100% 可靠,而 I2S_STREAM 没有:它每毫米使用更少的步数(少 30%),向前移动 4 步,然后向后移动一次会产生一个地位的差异。所以 I2S_STREAM 是不可靠的。
我不能说这是硬件相关还是其他问题,但我可以确认此行为存在。

I2SO_STREAM 错误? #245

我注意到了这个问题,通读了它,并认为我应该补充一些数据点。我的 6-pack v1p5 在使用流时表现出类似的问题,但在静态时工作正常。我根本没有修改电路板。

name: TrugMPCNC
board: 6-pack

# MPCNC Primo J w/ dual endstops, z-max, & 1-start z screw
# 6-pack v1p5 controller
# 4@ drv8255 (XXYY), 1@ 16 microstep hacked drv8255 (z)
# 2@ quad input, 1@ RS485, 1@ 5V output, 1@ fet 12V output,
# Huanyang rs485 VFD+1.5kW spindle & PWM laser
# Pause and Start buttons

kinematics:
  Cartesian:

stepping:
  engine: I2S_static
  idle_ms: 255
  dir_delay_us: 0
  pulse_us: 4
  disable_delay_us: 0

axes:
  x:
    steps_per_mm: 200.000
    max_rate_mm_per_min: 7500.000
    acceleration_mm_per_sec2: 127.000
    max_travel_mm: 562.000
    soft_limits: true
    homing:
      cycle: 2
      mpos_mm: -562.000
      positive_direction: false
      settle_ms: 250.000
      seek_mm_per_min: 2000.000
      feed_mm_per_min: 300.000
      seek_scaler: 1.100
      feed_scaler: 5.000
    motor0:
      limit_neg_pin: gpio.33
      limit_pos_pin: NO_PIN
      limit_all_pin: NO_PIN
      hard_limits: true
      stepstick:
        direction_pin: i2so.1
        step_pin: i2so.2
        disable_pin: i2so.0
        ms3_pin: i2so.3
    motor1:
      limit_neg_pin: gpio.32
      limit_pos_pin: NO_PIN
      limit_all_pin: NO_PIN
      hard_limits: true
      stepstick:
        direction_pin: i2so.12
        step_pin: i2so.13
        disable_pin: i2so.15
        ms3_pin: i2so.14
  y:
    steps_per_mm: 200.000
    max_rate_mm_per_min: 7500.000
    acceleration_mm_per_sec2: 127.000
    max_travel_mm: 562.000
    soft_limits: true
    homing:
      cycle: 2
      mpos_mm: -562.000
      positive_direction: false
      settle_ms: 250.000
      seek_mm_per_min: 2000.000
      feed_mm_per_min: 300.000
      seek_scaler: 1.100
      feed_scaler: 5.000
    motor0:
      limit_neg_pin: gpio.35
      limit_pos_pin: NO_PIN
      limit_all_pin: NO_PIN
      hard_limits: true
      stepstick:
        direction_pin: i2so.4
        step_pin: i2so.5
        disable_pin: i2so.7
        ms3_pin: i2so.6
    motor1:
      limit_neg_pin: gpio.34
      limit_pos_pin: NO_PIN
      limit_all_pin: NO_PIN
      hard_limits: true
      stepstick:
        direction_pin: i2so.17
        step_pin: i2so.18
        disable_pin: i2so.16
        ms3_pin: i2so.19
  z:
    steps_per_mm: 1600.000
    max_rate_mm_per_min: 700.000
    acceleration_mm_per_sec2: 80.000
    max_travel_mm: 150.000
    soft_limits: true
    homing:
      cycle: 1
      mpos_mm: 0.000
      positive_direction: true
      settle_ms: 250.000
      seek_mm_per_min: 700.000
      feed_mm_per_min: 300.000
      seek_scaler: 1.100
      feed_scaler: 5.000
    motor0:
      limit_neg_pin: gpio.25
      limit_pos_pin: NO_PIN
      limit_all_pin: NO_PIN
      hard_limits: true
      stepstick:
        direction_pin: i2so.9
        step_pin: i2so.10
        disable_pin: i2so.8
        ms3_pin: i2so.11
    motor1:
      null_motor:

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

control:
  feed_hold_pin: gpio.36:pu
  cycle_start_pin: gpio.2:pu
  
Huanyang:
  uart:
    txd_pin: gpio.26
    rxd_pin: gpio.16
    rts_pin: gpio.4
    baud: 9600
    mode: 8N1
  modbus_id: 1
  tool_num: 0
  speed_map: 0=0% 0=25% 6000=25% 24000=100%
  
coolant:
  flood_pin: i2so.24
  mist_pin: gpio.15
  delay_ms: 1000.000

probe:
  pin: gpio.39
  check_mode_start: false

macros:
  startup_line0: 
  startup_line1: 
  macro0: 
  macro1: 
  macro2: 
  macro3: 

start:
  must_home: true
  check_limits: true
  deactivate_parking: false

user_outputs:
  digital0_pin: i2so.25

laser:
  spinup_ms: 0
  spindown_ms: 0
  tool_num: 1
  speeds: 0=0.0% 1000=100.0%
  output_pin: gpio.13
  enable_pin: gpio.14
  disable_with_s0: false
  s0_with_disable: false
  pwm_hz: 5000
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 

如果我可以提供任何其他数据,请告诉我。

I2SO_STREAM 错误? #245

@truglodite当使用 I2S_STREAM 并将电机移动到例如 100mm、200mm、300mm 和 400mm,然后移回 0mm 时,您会得到偏移量吗?就我而言,它保持在大约。10 毫米。使用 I2S_STATIC 时,它 100% 准确并返回到原始 0mm 位置/
此外,当使用 I2S_STREAM 时,与 I2S_STATIC 相比,我必须多使用大约 30% 的步数/mm。
如果是这种情况,并且由于您使用的是非常不同的电路板,那么硬件(ESP32 之外)就不是问题的一个很好的例子。

I2SO_STREAM 错误? #245
石英石 评论了 2022 年 6 月 12 日  

在我的案例中,我不能说它一直在抵消 Xmm,但它绝对没有遵循预期的时间/位置计划。这发生在今年二月,当我从 GRBL_ESP32 切换到 fluidnc 时,翻译器将我的配置从静态更改为流。当时我有一个激光蚀刻工作,由于主轴在不正确的位置发射,导致出现模糊的双像。最后,结果可能与您使用正常的非光栅移动的结果相同。我不想研究这个问题,所以我从那以后就使用了静态。静态效果完美地用于在路由器上切割和刻录激光光栅图像。

已经有一段时间了,但我依稀记得在 github 上的一个问题中提到过这个……但似乎找不到它。我同意你的看法,这不是硬件问题……或者如果是,那么甚至 Bart 的主板也会受到影响。再一次,在我的情况下,也许只是主轴命令没有同步,但它在其他方面是否正确跟踪位置?不管怎样,这对我来说似乎有点粗略。

让我知道是否有任何进一步的测试可能对这里有所帮助。如果需要,我确实有望远镜。

I2SO_STREAM 错误? #245

I2S_STREAM 不适用于激光器,因为在调制激光功率的时间和步进到达电机的时间之间存在排队延迟。这很难修复,因此我们不太可能很快更改它。

I2SO_STREAM 错误? #245

这发生在今年二月,当我从 GRBL_ESP32 切换到 fluidnc 时,翻译器将我的配置从静态更改为流。

我想我找到了您的翻译 – 是第 1078 期吗?有点难找,因为你没有在标题中替换你的名字。我们要求人们这样做是有原因的。为我们节省时间的任何事情都是我们可以花更多的时间来实际修复错误和添加功能。

无论如何,从那个问题开始,我在 .h 文件中看到了这个:

// I2S (steppers & other output-only pins)
#define USE_I2S_OUT
#define USE_I2S_STEPS
//#define DEFAULT_STEPPER ST_I2S_STATIC

所以我不认为翻译者把 I2S_Stream 弄错了,因为 I2S_STATIC 在 .h 文件中被注释掉了。

I2SO_STREAM 错误? #245

因陈旧而关闭。没有更多可做或可说的了。