开源改变世界

STM32F446RE卡顿 #49

推推 grbl 3年前 (2023-02-10) 366次浏览
关闭
McCodie 打开了这个问题 2020 年 11 月 27 日 · 23条评论
关闭

STM32F446RE卡顿#49

McCodie 打开了这个问题 2020 年 11 月 27 日 · 23条评论

评论

STM32F446RE卡顿 #49

你好,你真的用STM32F446RE测试过吗?因为在几个命令之后通信似乎停滞了。
我尝试使用 MacOS 和 Windows 构建固件,两者都给了我相同的结果。

$H 让它立即崩溃(没有任何东西连接到 Nucleo 板)。

STM32F446RE卡顿 #49
所有者
希尔德克鲁特 评论了 2020 年 11 月 27 日  

是的,我实际上是在 F446 上运行它。
崩溃是什么意思?原始终端输出是什么?你是怎么编译的?你的美元?

STM32F446RE卡顿 #49
作者

你好,

感谢您的快速回复!

我有点认为问题是由通用 gcode 发件人提交的 $J 参数。
您使用哪个应用程序提交 gcode?蜡烛?

$G
[GC:G0 G54 G17 G21 G90 G94 G98 M5 M9 T0 F0 S0]
ok
$X
[MSG:Caution: Unlocked]
ok
$$
$0 = 0(步进脉冲时间,微秒)
$1 = 50(步进空闲延迟,毫秒)
$2 = 0(步进脉冲反转,掩码)
$3 = 0(步进方向反转,掩码)
$4 = 0(反转步进使能引脚,布尔值)
$5 = 0(反转限制引脚,布尔值)
$6 = 0(反转探头引脚,布尔值)
$10 = 1(状态报告选项,掩码)
$11 = 0.010(连接偏差,毫米)
$12 = 0.001(弧度公差,毫米)
$13 = 0(以英寸为单位报告,布尔值)
$14 = 0
$20 = 0(启用软限制, 布尔值)
$21 = 0(硬限位启用,布尔值)
$22 = 1(归位循环启用,布尔值)
$23 = 0(归位方向反转,掩码)
$24 = 50.000(归位定位进给速率,毫米/分钟)
$25 = 500.000(归位搜索寻找速率,毫米/分钟)
$26 = 250(归位开关去抖动延迟,毫秒)
$27 = 1.000(归位开关牵引距离,毫米)
$30 = 3000(最大主轴速度,RPM)
$31 = 0(最小主轴速度,RPM)
$32 = 0(激光模式启用,布尔值)
$100 = 400.000(X 轴行程分辨率,步长/mm)
$101 = 400.000(Y 轴行程分辨率,步长/mm)
$102 = 400.000(Z 轴行程分辨率,步长/mm)
$103 = 10.000
$104 = 10.000
$110 = 1000.000(X 轴最大速率,毫米/分钟)
$111 = 1000.000(Y 轴最大速率,毫米/分钟)
$112 = 1000.000(Z 轴最大速率,毫米/分钟)
$113 = 10000.000
$114 = 10000.000
$120 = 30.000(X 轴加速度,毫米/秒^2)
$121 = 30.000(Y 轴加速度,毫米/秒^2)
$122 = 30.000(Z 轴加速度,毫米/秒^2)
$123 = 100.000
$124 = 100.000
$130 = 10.000(X 轴最大行程,毫米)
$131 = 50.000(Y 轴最大行程,毫米)
$132 = 500.000(Z 轴最大行程,毫米)
$133 = 360.000
$134 = 360.000
$140 = 0.010
$141 = 0.010
$142 = 0.010
143 美元 = 0.000
$144 = 0.000
正常
$J=G21G91Z-500F1
正常
$J=G21G91Z-500F1
正常
$J=G21G91Z-500F1
正常
$J=G21G91Z-500F1
正常
$J=G21G91Z-500F1
正常
$J=G21G91X500F1
正常$J=JXG20G91 $
J=J500F1
=G21G91X500F1
$J=G21G91X500F1
$J=G21G91X-500F1
$J=G21G91X-500F1

STM32F446RE卡顿 #49
所有者
希尔德克鲁特 评论了 2020 年 11 月 27 日  

你如何编译它?使用 Embitz 1.11?

STM32F446RE卡顿 #49
作者

我用 Embitz 1.11 (Windows) 编译它,也在 MacOS 上使用 Makefile 编译它,两者都给了我相同的结果。

我稍微修改了 Makefile。
CFLAGS := -O2 -g1 -std=c11 -Wall -Wextra $(INCLUDE) -fno-common -fsingle-precision-constant -fdata-sections -ffunction-sections -fomit-frame-pointer -mlittle-endian -DUSE_STDPERIPH_DRIVER – DSTM32F446RE -DSTM32F446xx -D__FPU_USED -DARM_MATH_CM4 -Wimplicit-fallthrough=0
#CFLAGS := -O2 -g1 -std=c11 -Wall -Wextra $(INCLUDE) -fno-common -fsingle-precision-constant -fdata-sections -ffunction- sections -fomit-frame-pointer -mlittle-endian -DUSE_STDPERIPH_DRIVER -DSTM32F411xE -DSTM32F411RE -D__FPU_USED -DARM_MATH_CM4 -Wimplicit-fallthrough=0

STM32F446RE卡顿 #49
作者

我测试了你的十六进制文件,但它不工作。
是的,我还修改了 LDFLAGS(如前所述,我也在 Windows 中切换到 STM32F446,结果与 macos 二进制文件完全相同)。

LDFLAGS := -lm -flto -Wl,–gc-sections -T../stm32f446re_flash.ld -Wl,-Map=$(OUTPUT).map –specs=nosys.specs -nostartfiles –specs=nano。眼镜

这是库存的 NUCLEO-F446RE 板吗?X3装晶振了吗?

STM32F446RE卡顿 #49
所有者
希尔德克鲁特 评论了 2020 年 11 月 27 日  

我测试了你的十六进制文件,但它不工作。

根本不工作?垃圾输出?和你一样的行为?

STM32F446RE卡顿 #49
作者

它没有通过串行接口返回任何内容,您是否将串行设置为 115kbaud?

st-flash –format ihex write GRBL_Advanced.hex
我正在加载的另一个编译图像:
st-flash write GRBL_Advanced.bin 0x8000000

st-flash 1.6.1
2020-11-28T00:13:38 INFO common.c: F446: 128 KiB SRAM,至少 128 KiB 页中有 512 KiB 闪存。
2020-11-28T00:13:38 INFO common.c:尝试将 57748 (0xe194) 字节写入 stm32 地址:134217728 (0x8000000)
EraseFlash – 扇区:0x0 大小:0x4000 2020-11-28T00:13:38 INFO common。 c:地址处的闪存页:0x08000000 已擦除
EraseFlash – 扇区:0x1 大小:0x4000 2020-11-28T00:13:39 INFO common.c:地址处的闪存页:0x08004000 已擦除
EraseFlash – 扇区:0x2 大小:0x4000 2020-11- 28T00:13:39 INFO common.c:地址处的闪存页面:0x08008000 已擦除
EraseFlash – 扇区:0x3 大小:0x4000 2020-11-28T00:13:39 INFO common.c:地址处的闪存页面:0x0800c000 已擦除
2020-11- 28T00:13:39 INFO common.c:已完成擦除 4 页 16384 (0x4000) 字节
2020-11-28T00:13:39 信息 common.c:开始为 F2/F4/L4 写入闪存
2020-11-28T00:13:39 信息 flash_loader.c:已成功在 sram 中加载闪存加载程序,
启用 32 位闪存写入
大小:32768
大小:24980
2020-11-28T00:13:40 INFO common.c:开始验证写入完成
2020-11-28T00:13:41 INFO common.c:Flash 写入并验证!好极了!

**** 连接到 cu.usbmodem14103 @ 115000 波特 ****

STM32F446RE卡顿 #49
作者

我这里有 2 个 NUCLEO-F446RE 板都表现出相同的行为。

STM32F446RE卡顿 #49
所有者
希尔德克鲁特 评论了 2020 年 11 月 28 日  

喜欢慢跑 100 次,然后回家。由于没有任何连接,大约 1 分钟后它会失败。

STM32F446RE卡顿 #49
作者

你能告诉我你的设置吗?$$

STM32F446RE卡顿 #49

`#define DEFAULT_X_STEPS_PER_MM 400
#define DEFAULT_Y_STEPS_PER_MM 400
#define DEFAULT_Z_STEPS_PER_MM 400
#define DEFAULT_A_STEPS_PER_DEG 10.0
#define DEFAULT_B_STEPS_PER_DEG 10.0
#define DEFAULT_X_MAX_RATE 2400.0 // mm/min
#define DEFAULT_Y_MAX_RATE 2400.0 // mm/min
#define DEFAULT_Z_MAX_RATE 2400.0 // mm/min
#define DEFAULT_A_MAX_RATE 12000.0 // °/min
#define DEFAULT_B_MAX_RATE 12000.0 // °/min
#define DEFAULT_X_ACCELERATION (100.0 60 60) // 30 60 60 mm/min^2 = 30 mm/sec^2
#define DEFAULT_Y_ACCELERATION (100.0 60 60) / / 30 6060 毫米/分钟^2 = 30 毫米/秒^2
#define DEFAULT_Z_ACCELERATION (100.0 60 60) // 30 60 60 毫米/分钟^2 = 30 毫米/秒^2
#define DEFAULT_A_ACCELERATION (200.0 60 60) // 100 60 60 mm/min^2 = 100 mm/sec^2
#define DEFAULT_B_ACCELERATION (200.0 60 60) // 100 60 60 mm/min^2 = 100 mm/sec^2
#define DEFAULT_X_MAX_TRAVEL 300.0 // mm 注意:必须是正值。
#define DEFAULT_Y_MAX_TRAVEL 400.0 // mm 注意:必须为正值。
#define DEFAULT_Z_MAX_TRAVEL 900.0 // mm 注意:必须为正值。
#define DEFAULT_A_MAX_TRAVEL 360.0 // °
#define DEFAULT_B_MAX_TRAVEL 360.0 // °
#define DEFAULT_SPINDLE_RPM_MAX 1250.0 // rpm
#define DEFAULT_SPINDLE_RPM_MIN 0.0 // rpm

#define DEFAULT_X_BACKLASH 0.05 // 毫米
#define DEFAULT_Y_BACKLASH 0.0 // 毫米
#define DEFAULT_Z_BACKLASH 0.06 // 毫米

#define DEFAULT_SYSTEM_INVERT_MASK 0x3F //
#define DEFAULT_STEPPING_INVERT_MASK 0 //
#define DEFAULT_DIRECTION_INVERT_MASK 0 //
#define DEFAULT_STEPPER_IDLE_LOCK_TIME 255 // 毫秒(0-254、255 保持步进器启用) #define DEFAULT_STATUS_REPORT_MASKdeC
// Mpos 启用#JJVIPORT_MASKde1 #define DEFAULT_ARC_TOLERANCE 0.001 // mm #define DEFAULT_REPORT_INCHES 0 // false #define DEFAULT_INVERT_ST_ENABLE 0 // false #define DEFAULT_INVERT_LIMIT_PINS 0 // false #define DEFAULT_SOFT_LIMIT_ENABLE 0 // false #define DEFAULT_HARD_LIMIT_ENABLE 1 // true

#define DEFAULT_INVERT_PROBE_PIN 0 // true
#define DEFAULT_LASER_MODE 0 // false
#define DEFAULT_HOMING_ENABLE 1 // true
#define DEFAULT_HOMING_DIR_MASK 0 // 移动正方向
#define DEFAULT_HOMING_FEED_RATE 35.0 // mm/min #define DEFAULT_HOMING_SEEK_RATE mm/min #define
mm/min 600.0 //
DEFAULT_HOMING_DEBOUNCE_DELAY 250 // 毫秒 (0-65k)
#define DEFAULT_HOMING_PULLOFF 2.0 // mm
#define DEFAULT_TOOL_CHANGE_MODE 1 // 0 = 忽略 M6;1 = 手动换刀;2 = 手动换刀 + TLS`

STM32F446RE卡顿 #49
作者

谢谢,我认为这是由于一些非常错误的设置。
似乎我有一些进步,我刚刚在通用 GCode 平台中运行了设置向导并设置了默认值。

我还没有做任何真正的配置,我会把它和我的机器连接起来并做所有真正的设置。
完成后我会更新此讨论。

非常感谢您的快速回复!

STM32F446RE卡顿 #49

你测试了我的最后一个文件吗?

STM32F446RE卡顿 #49
作者

是的,相同的结果 – 所以这很可能是由于错误的设置……如前所述,我已经用我的构建再次更新了它但是运行了设置向导。它现在不再停滞了(但我只做了一些较小的测试)
我明天将继续进行真正的布线。

STM32F446RE卡顿 #49

顺便说一句,不要写入 $0。它包含系统标志,而不是步进脉冲时间

STM32F446RE卡顿 #49
作者
麦考迪 评论了 2020 年 11 月 28 日  

mm 我刚刚用它做了一些更多的测试,但它不可靠。

$$
$0 = 14(步进脉冲时间,微秒)
$1 = 25(步进空闲延迟,毫秒)
$2 = 0(步进脉冲反转,屏蔽)
$3 = 7(步进方向反转,屏蔽)
$4 = 0(反转步进使能引脚,布尔值)
$5 = 0(反转限制引脚,布尔值)
$6 = 0(反转探针引脚,布尔值)
$10 = 1(状态报告选项,掩码)
$11 = 0.010(结偏差,毫米)
$12 = 0.002(电弧公差,毫米) )
$13 = 0(以英寸为单位报告,布尔值)
$14 = 0
$20 = 0(启用软限制,布尔值)
$21 = 0(启用硬限制,布尔值)
$22 = 0(启用回零循环,布尔值)
$23 = 0(回零方向)反转,掩码)
$24 = 25.000(归位定位进给率,毫米/分钟)
$25 = 500.000(归位搜索寻道率,毫米/分钟)
$26 = 250(归位开关去抖延迟,毫秒)
$27 = 1.000(归位开关拉离距离,毫米)
$30 = 1000(最大主轴速度,RPM)
$31 = 0(最小主轴速度,RPM)
$32 = 0(激光模式启用,布尔值)
$100 = 250.000(X 轴行程分辨率,步长/mm)
$101 = 250.000(Y -轴行程分辨率,步/毫米)
$102 = 3650.000(Z 轴行程分辨率,步/毫米)
$103 = 10.000
$104 = 10.000
$110 = 3000.000(X 轴最大速率,毫米/分钟)
$111 = 1500.000(Y 轴最大速率,毫米/分钟)
$112 = 500.000(Z 轴最大速率,mm/min)
$113 = 10000.000
$114 = 10000.000
$120 = 50.000(X 轴加速度,mm/sec^2)
$121 = 1.000(Y 轴加速度,mm/sec^2)
$122 = 1.000(Z 轴加速度,毫米/秒^2)
$123 = 100.000
$124 = 100.000
$130 = 200.000(X 轴最大行程,毫米)
$131 = 200.000(Y 轴最大行程,毫米)
$132 = 200.000(Z轴最大行程,毫米)
$133 = 360.000
$134 = 360.000
$140 = 0.010
$141 = 0.010
$142 = 0.010
$143 = 0.000
$144 = 0.000
ok
$3=0
ok
$J=G21G91Z-1F1
ok
$J=G21G91Z-1F1

**** 正在取消文件传输。****

$J=G21G91Z1F1
正常
$J=G21G91Z1F1
正常

**** 正在取消文件传输。****

$J=G21G91Z1F100
正常
$J=G21G91Z-1F100
$J=G21G91Z-1F100
$J=G21G91Z-1F100
$J=G21G91Z-1F100
$J=G21G91Z-1F100
**** 连接关闭 ****
**** 已连接到 cu.usbmodem14203 @ 115000 波特 ****
**** 连接关闭 ****
**** 连接到 cu.usbmodem14203 @ 115000 波特 ****
Grbl 1.1f [‘$’寻求帮助]
$$
Grbl 1.1f [‘$’ 寻求帮助]
$G
$$
Grbl 1.1f [‘$’ 寻求帮助]
$G
$$
Grbl 1.1f [‘$’ 寻求帮助]
$G
$$
Grbl 1.1f [‘$’ 寻求帮助]
$G
$$
Grbl 1.1f [‘$’ 寻求帮助]
$G
$$
Grbl 1.1f [‘$’求助]
$G
$$
Grbl 1.1f [‘$’ 寻求帮助]
$G
$$
Grbl 1.1f [‘$’ 寻求帮助]
$G
$$
Grbl 1.1f [‘$’ 寻求帮助]
$G
$$
Grbl 1.1f [ ‘$’寻求帮助]
$G
$$
Grbl 1.1f [‘$’寻求帮助]
$G
$$

如您所见,它再次停滞。

我只是上下移动 Z 轴,我自己做了一些 STM32 固件,并且在使用相同布线的 STM32 控制器上像 10 个电机一样稳定移动(尽管我只使用了我的应用程序的一个输出)所以一些设置是弄乱它或者这只是目前不可靠。肯定不是控制器的错。

如果您有任何进一步的想法,请告诉我 :-)
我没有仔细查看 grbl 代码,脉冲是软件生成的还是基于 dma/定时器的?

为了继续前进,我还将同时设置一个 linuxcnc 系统,这样我就可以同时处理其他事情。

STM32F446RE卡顿 #49

如果您使用终端(如 hterm)并手动输入命令会怎样?