关闭 MakeMagazinDE 开启了这个issue 2017 年 2 月 28 日 · 1条评论 关闭 步进器移动缓慢时 SPI 故障#144 MakeMagazinDE 开启了这个issue 2017 年 2 月 28 日 · 1条评论 注释 MakeMagazinDE 评论了 2017 年 2 月 28 日 • 编辑 你好, 我即将完成我的 GRBL 1.1f 端口到 ATmega644,以及一些不错的附加功能(CNC 手轮/拨号盘和用于慢跑的模拟操纵杆连接,将 XYZ 位置数据实时 SPI 传输到外部 16×2 显示器,通过移位增加 32 个 I/O连接到 SPI 的寄存器、用于覆盖的按钮接口等)。由于您在源代码文档方面的巨大努力,现在一切正常。 但是:我不得不为经典的 SPI 传输实现一个变通方法(写 SPDR,轮询 SPIF 传输完成标志被设置)。 当步进器移动非常慢时,SPIF 将(随机地)不由处理器内核设置,尽管传输很久以前就完成了(用逻辑分析仪检查过)。所以我做了一个超时循环来防止在轮询 SPIF 时冻结。绝对不涉及 ISR,是的,我将 SS 端口位 DDR 设置为输出。我还检查了您的代码中是否使用了 SPI 寄存器。没有。 这也发生在斜坡开始/结束时以加快移动速度。为了进行测试,我删除了所有添加的固件,只是为了仅在 for(;;) 之后直接在 protocol_main_loop() 中测试 SPI 问题、SPI tx 和 SPIF 轮询循环。仍然在那里,它甚至发生在普通的 GRBL 上。也许是因为中断嵌套(sei();在步进 ISR 中)?任何的想法? 当我完成我的项目时,我肯定会发布我的资源。 顺便说一句:是否允许将 gc_state.position 传递给 mc_line?这简化了我的手轮代码: gc_state.position[dial_axis] += dial_delta_f; // update selected axis pos. mc_line(gc_state.position, pl_data); if (sys.state == STATE_IDLE) { ... if (plan_get_current_block() != NULL) { ... 这同样适用于我的操纵杆代码,我将 ADC 值传递给进给覆盖,以便在 mc_line() 开始移动后连续控制点动速度: loop... if (adc_value_has_changed) { sys.f_override = adc_value_scaled; plan_update_velocity_profile_parameters(); plan_cycle_reinitialize(); ... ..until joystick released 问候,卡斯滕 贡献者 香奈儿 评论了 2017 年 2 月 28 日 @heise: 抱歉帮不了你。我对 SPI 如何在 AVR 上工作还不够熟悉,无法给你任何建议。鉴于这与具有自定义功能的端口有关,我将关闭此问题,因为它与主要 Grbl 代码无关。如果您找出导致触发器失败的原因,请告诉我。 chamnit已完成 关闭 2017 年 2 月 28 日 喜欢 (0) 归位周期冻结 #181 关于连接光学限位开关的问题 #182 GRBL/UGS 问题,已知硬件可以工作,但没有运行 Grbl 的步进运动 XY 绘图仪 – 将 Word 文档转换为 GRBL 文件 grbl 随机在中间停止 Arduino Uno GRBL 问题 GRBL/UGS 问题,已知硬件可以工作,但没有运行 Grbl 的步进运动XY 绘图仪 – 将 Word 文档转换为 GRBL 文件grbl 随机在中间停止Arduino Uno GRBL 问题为什么这会“崩溃”我的 3018 CNCFusion 360 / Grbl – 最后毁掉了工作?!使用 Grbl Shield,必须采取哪些接地预防措施?GRBL 安装挑战(在 cnc 3018 pro 上)
你好,
我即将完成我的 GRBL 1.1f 端口到 ATmega644,以及一些不错的附加功能(CNC 手轮/拨号盘和用于慢跑的模拟操纵杆连接,将 XYZ 位置数据实时 SPI 传输到外部 16×2 显示器,通过移位增加 32 个 I/O连接到 SPI 的寄存器、用于覆盖的按钮接口等)。由于您在源代码文档方面的巨大努力,现在一切正常。
但是:我不得不为经典的 SPI 传输实现一个变通方法(写 SPDR,轮询 SPIF 传输完成标志被设置)。
当步进器移动非常慢时,SPIF 将(随机地)不由处理器内核设置,尽管传输很久以前就完成了(用逻辑分析仪检查过)。所以我做了一个超时循环来防止在轮询 SPIF 时冻结。绝对不涉及 ISR,是的,我将 SS 端口位 DDR 设置为输出。我还检查了您的代码中是否使用了 SPI 寄存器。没有。
这也发生在斜坡开始/结束时以加快移动速度。为了进行测试,我删除了所有添加的固件,只是为了仅在 for(;;) 之后直接在 protocol_main_loop() 中测试 SPI 问题、SPI tx 和 SPIF 轮询循环。仍然在那里,它甚至发生在普通的 GRBL 上。也许是因为中断嵌套(sei();在步进 ISR 中)?任何的想法?
当我完成我的项目时,我肯定会发布我的资源。
顺便说一句:是否允许将 gc_state.position 传递给 mc_line?这简化了我的手轮代码:
这同样适用于我的操纵杆代码,我将 ADC 值传递给进给覆盖,以便在 mc_line() 开始移动后连续控制点动速度:
问候,卡斯滕