开源改变世界!!

STM32F401RCT6 – 6 轴配置 – 不显示轴 A、B 或 C #69

推推 grbl 2年前 (2022-10-23) 159次浏览 0个评论
关闭
gxdeange打开了这个问题 4月14日· 24 条评论
关闭

STM32F401RCT6 – 6 轴配置 – 不显示轴 A、B 或 C#69

gxdeange打开了这个问题 on 14 Apr· 24 条评论

注释

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69

嗨,特杰奥,

我希望你一切都好。

我使用 STM32F401RCT6 MCU 设计并构建了一个 6 轴板,并修改了 M3、M4 和 M5 [此时无联动输出] 的固件,该固件编译无误。

当我启动 IOSender 时,我只能看到 3 轴,并且想知道 IOSender 或核心固件是否有任何限制以允许 6 个独立轴。

干杯,祝你有美好的一天
乔治

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69

您是否更改了 config.h 中的 N_AXIS?

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
作者

gxdeange 评论 4月14日

嗨,安德鲁马尔斯,

我没有想到这一点,但我只是将其更改为 6,然后我得到一个“不支持此配置”。我怀疑因为我已经构建了一个自定义板,所以它没有与其他板链接,并且被限制构建 6 个独立轴。

干杯
乔治

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
作者

gxdeange 评论 4月14日  

我已注释掉配置错误行,但现在收到此错误:

#error 启用中断的输入引脚必须具有唯一的引脚编号!

每个 I/O 都是唯一的。

我希望有一种方法可以不局限于特定的板

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69

这不是关于董事会。这是STM32的东西,只有16个中断,每个中断都需要一个唯一的编号。IE PA2 和 PB2 不能都是中断引脚。

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
作者

gxdeange 评论 4月14日

感谢更新。

我对此不太擅长,但这是否意味着输入引脚(例如限制、探针、保持)可以在任何端口上,但只能使用 0 到 15 一次(即 PC0、PB1、PC2、PC3、PA4、 ETC)?

干杯
乔治

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
作者

gxdeange 评论 4月14日

在将引脚分配给功能(例如限制引脚)时,您知道我需要遵循的任何特定逻辑规则吗?

任何建议将不胜感激。

干杯
乔治

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69

感谢更新。

我对此不太擅长,但这是否意味着输入引脚(例如限制、探针、保持)可以在任何端口上,但只能使用 0 到 15 一次(即 PC0、PB1、PC2、PC3、PA4、 ETC)?

干杯乔治

是的,像这样。

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
贡献者

特热约 评论 4月14日

对于这个 MCU(实际上是所有支持的 STM32 MCU),一个特定的规则是

仅使用 0 到 15 一次(即 PC0、PB1、PC2、PC3、PA4 等)

用于输入引脚(控制和限制)。探针输入被轮询并且可以在任何引脚上。支持轮询 Z 限制输入,但最好避免这种情况。

UART 引脚(用于串行端口)也受到代码和 MCU 的限制。与主轴 PWM 输出相同。

仅供参考,如果您在映射文件中定义了 M3-M5,则可以配置联动轴,如果这些电机具有相应的限制输入,则自动平方也是可能的。

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
作者

gxdeange 评论 4月14日

太棒了,感谢您的反馈。我在 IDE 中尝试了一些变体,初始错误不再存在,但我收到了这个错误:

‘->’ 的无效类型参数(有 ‘uint32_t’ {aka ‘volatile long unsigned int’})driver.h /GRBL Driver STM32F401/Inc 第 46 行 C/C++ 问题

干杯
乔治

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
贡献者

特热约 评论 4月14日

‘->’ 的无效类型参数(有 ‘uint32_t’ {aka ‘volatile long unsigned int’})driver.h /GRBL Driver STM32F401/Inc 第 46 行 C/C++ 问题

这可能是由于您的电路板地图文件中定义错误的映射。

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
作者

gxdeange 评论 4月14日

好,谢谢。

我会尝试一些不同的变化。

干杯
乔治

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
作者

gxdeange 评论 4月14日

很快,如果我想将它们作为独立轴(A、B 和 C)运行,它们还需要分别定义为 M3、M4 和 M5 吗?

干杯
_

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
贡献者

特热约 评论 4月14日

它们还需要分别定义为 M3、M4 和 M5 吗?

是的。

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
作者

gxdeange 评论 4月14日  

好的。

我发现如果我取消注释轴的联动和自动正方形,则不会出现先前的错误。我想我做错了什么,但如果我想完全独立运行轴,我似乎无法解决错误。

干杯
乔治

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
贡献者

特热约 评论 4月14日

发布您的地图文件,我会看看。

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
作者

gxdeange 评论 4月14日

#define X_STEP_PORT GPIOA
#define X_STEP_PIN 1
#define Y_STEP_PORT GPIOD
#define Y_STEP_PIN 2
#define Z_STEP_PORT GPIOA
#define Z_STEP_PIN 12
#define M3_STEP_PORT GPIOC
#define M3_STEP_PIN 3
#define M4_STEP_PORT GPIOC #define M4_STEP_PIN
5 #define
M5_STEP_STEP_GPIO STEP_OUTMODE GPIO_BITBAND //#define STEP_PINMODE PINMODE_OD // 取消对开漏输出的注释

//定义步进方向输出引脚。
//#define DIRECTION_PORT GPIOB
#define X_DIRECTION_PORT GPIOA
#define X_DIRECTION_PIN 4
#define Y_DIRECTION_PORT GPIOB
#define Y_DIRECTION_PIN 13
#define Z_DIRECTION_PORT GPIOA
#define Z_DIRECTION_PIN 11
#define M3_DIRECTION_PORT GPIOC
#define M3_DIRECTION_PIN 9
#define M4_DIRECTION_PORT GPIOH
#define M4_DIRECTION_PIN 1
#define M5_DIRECTION_PORT GPIOB
#define M5_DIRECTION_PIN 15
#define DIRECTION_OUTMODE GPIO_BITBAND
//#define DIRECTION_PINMODE PINMODE_OD // 取消注释开漏输出

//定义步进驱动器启用/禁用输出引脚。
//#define STEPPERS_ENABLE_PINMODE PINMODE_OD //取消对开漏输出的注释

#define X_ENABLE_PORT GPIOH
#define X_ENABLE_PIN 0
#define Y_ENABLE_PORT GPIOB
#define Y_ENABLE_PIN 14
#define Z_ENABLE_PORT GPIOC
#define Z_ENABLE_PIN 1
#define M3_ENABLE_PORT GPIOC
#define M3_ENABLE_PIN 8
#define M4_ENABLE_PORT GPIOC #define M4_ENABLE_PIN
4
#define
M5_ENABLE_GPIOB8
#define ENABLE_OUTMODE GPIO_BITBAND

//定义归位/硬限位开关输入引脚。
#define X_LIMIT_PORT GPIOB
#define X_LIMIT_PIN 7
#define Y_LIMIT_PORT GPIOB
#define Y_LIMIT_PIN 1
#define Z_LIMIT_PORT GPIOB
#define Z_LIMIT_PIN 0
#define M3_LIMIT_PORT GPIOB
#define M3_LIMIT_PIN 12
#define M4_LIMIT_PORT GPIOB
#define M4_LIMIT_PIN 10
#define M5_LIMIT_PORT GPIOB
#define M5_LIMIT_PIN 9
#define LIMIT_INMODE GPIO_BITBAND

#define M3_AVAILABLE
#define M4_AVAILABLE
#define M5_AVAILABLE

//定义主轴使能和主轴方向输出引脚。
#define SPINDLE_ENABLE_PORT GPIOA
#define SPINDLE_ENABLE_PIN 15
#define SPINDLE_DIRECTION_PORT GPIOC
#define SPINDLE_DIRECTION_PIN 10

//定义主轴PWM输出引脚。
#define SPINDLE_PWM_PORT_BASE GPIOA_BASE
#define SPINDLE_PWM_PIN 8

//定义洪水和雾冷却剂启用输出引脚。
#define COOLANT_FLOOD_PORT GPIOC
#define COOLANT_FLOOD_PIN 12
#define COOLANT_MIST_PORT GPIOC
#define COOLANT_MIST_PIN 11

// 定义用户控制控件(循环启动、复位、进给保持)输入引脚。
//#define CONTROL_PORT GPIOB
#define RESET_PORT GPIOB
#define RESET_PIN 2
#define FEED_HOLD_PORT GPIOB
#define FEED_HOLD_PIN 3
#define CYCLE_START_PORT GPIOB
#define CYCLE_START_PIN 4
//#if SAFETY_DOOR_ENABLE
#define SAFETY_DOOR_PORT GPIOB
#define SAFETY_DOOR_PIN 5
//#endif
#define GPIO_BITBAND

//定义探头开关输入引脚。
#define PROBE_PORT GPIOB
#define PROBE_PIN 6
//#if I2C_STROBE_ENABLE
//#define I2C_STROBE_PORT GPIOB
//#define I2C_STROBE_PIN 9
//#endif

#if SDCARD_ENABLE
#define SD_CS_PORT GPIOC
#define SD_CS_PIN 2
#define SPI_PORT 1 // GPIOA, SCK_PIN = 5, MISO_PIN = 6, MOSI_PIN = 7
#endif

#define HAS_IOPORTS
// AUX 输出端口
#define AUXOUTPUT0_PORT GPIOC
#define AUXOUTPUT0_PIN 6
#define AUXOUTPUT1_PORT GPIOC
#define AUXOUTPUT1_PIN 7
//#define AUX_OUTMODE GPIO_BITBAND
// AUX 输入端口
#define AUXINPUT0_PORT
GPIOC
#define AUXINPUT0_PIN_15GPIO
#define AUXINPUT1_PORT 14
#define AUXINPUT2_PORT GPIOC
#define AUXINPUT2_PIN 13

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
贡献者

特热约 评论 4月14日

您应该以与其他驱动程序相同的方式添加 M3-M5 的定义,例如:

//定义联动轴或A轴步进脉冲和步进方向输出引脚。
#如果N_ABC_MOTORS > 0
#定义 M3_AVAILABLE // E0
#定义 M3_STEP_PORT GPIOE
#定义 M3_STEP_PIN 14
#定义 M3_DIRECTION_PORT GPIOA
#定义 M3_DIRECTION_PIN 0
#定义 M3_LIMIT_PORT GPIOE
#定义 M3_LIMIT_PIN 15
#定义 M3_ENABLE_PORT GPIOC
#定义 M3_ENABLE_PIN 3
# endif
//定义联动轴或B轴步进脉冲和步进方向输出引脚。
#如果N_ABC_MOTORS > 1
#定义 M4_AVAILABLE // E1
#定义 M4_STEP_PORT GPIOD
#定义 M4_STEP_PIN 15
#定义 M4_DIRECTION_PORT GPIOE
#定义 M4_DIRECTION_PIN 7
#定义 M4_LIMIT_PORT GPIOE
#定义 M4_LIMIT_PIN 10
#定义 M4_ENABLE_PORT GPIOA
#定义 M4_ENABLE_PIN 3
# endif
// Define ganged axis or C axis step pulse and step direction output pins.
#if N_ABC_MOTORS == 3
#define M5_AVAILABLE // E2
#define M5_STEP_PORT GPIOD
#define M5_STEP_PIN 13
#define M5_DIRECTION_PORT GPIOG
#define M5_DIRECTION_PIN 9
#define M5_LIMIT_PORT GPIOG
#define M5_LIMIT_PIN 5
#define M5_ENABLE_PORT GPIOF
#define M5_ENABLE_PIN 0
#endif

 

这是因为在幕后有一些预处理器的魔法来创建适合driver.c使用的定义。

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
作者

gxdeange 评论 4月14日

好的。地图文件已更新,但同样存在上述错误。

//定义联动轴或A轴步进脉冲和步进方向输出引脚。
#if N_ABC_MOTORS > 0
#define M3_AVAILABLE
#define M3_STEP_PORT GPIOC
#define M3_STEP_PIN 3
#define M3_DIRECTION_PORT GPIOC
#define M3_DIRECTION_PIN 9
#define M3_ENABLE_PORT GPIOC
#define M3_ENABLE_PIN 8
#define M3_LIMIT_PORT GPIOB
#define M3_LIMIT_PIN 12
#

//定义联动轴或B轴步进脉冲和步进方向输出引脚。
#if N_ABC_MOTORS > 1
#define M4_AVAILABLE
#define M4_STEP_PORT GPIOC
#define M4_STEP_PIN 5
#define M4_DIRECTION_PORT GPIOH
#define M4_DIRECTION_PIN 1
#define M4_ENABLE_PORT GPIOC
#define M4_ENABLE_PIN 4
#define M4_LIMIT_PORT GPIOB
#define M4_LIMIT_PIN 10
#

//定义联动轴或C轴步进脉冲和步进方向输出引脚。
#if N_ABC_MOTORS == 3
#define M5_AVAILABLE
#define M5_STEP_PORT GPIOC
#define M5_STEP_PIN 0
#define M5_DIRECTION_PORT GPIOB
#define M5_DIRECTION_PIN 15
#define M5_ENABLE_PORT GPIOB
#define M5_ENABLE_PIN 8
#define M5_LIMIT_PORT GPIOB
#define M5_LIMIT_PIN 9
#

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
作者

gxdeange 评论 4月14日

我刚刚将“N_AXIS 6”更改为“N_AXIS 5”,固件编译没有错误,但 M3 和 M4 显示为灰色

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
贡献者

特热约 评论 4月14日

定义 C 轴时会弹出driver.c中的 bug :

DIGITAL_OUT (C_STEP_PORT-> ODR , C_STEP_PIN, step_outbits.c ) ;

 

这是正确的代码:

DIGITAL_OUT(C_STEP_PORT, C_STEP_PIN, step_outbits.c);

对于那个很抱歉。

…但 M3 和 M4 显示为灰色

有时(通常?)您必须在更改配置后重建索引,右键单击项目并从菜单中选择索引 > 重建。

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
作者

gxdeange 评论 4月14日

Legand:编译没有错误。

我可能正在考虑将该板商业化,并想知道是否可以(通过 MCU 上的备用引脚)在 3、4、5、6 轴之间切换和/或将普通轴转换为联动轴,而无需重新刷新固件。

使用 3 个备用引脚,它可以配置多达 8 种不同的方式。

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
贡献者

特热约 评论 4月14日

我可能正在考虑将该板商业化,并想知道是否可以(通过 MCU 上的备用引脚)在 3、4、5、6 轴之间切换和/或将普通轴转换为联动轴,而无需重新刷新固件。

不,不是没有对核心和所有驱动程序进行重大重写。

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
作者

gxdeange 评论 4月14日

好的。

再次感谢。你帮了大忙。

干杯,祝乔治周末愉快

喜欢 (0)

您必须 登录 才能发表评论!