开源改变世界

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

推推 grbl 3年前 (2023-02-08) 228次浏览
关闭
gxdeange 打开了这个问题 2022 年 4 月 14 日 · 24条评论
关闭

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

gxdeange 打开了这个问题 2022 年 4 月 14 日 · 24条评论

评论

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

嗨 terjeio,

我希望你一切都好。

我使用 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
作者

嗨安德鲁马尔斯,

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

干杯
乔治

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
作者
gxdeange 评论了 2022 年 4 月 14 日  

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

#error 中断使能输入引脚必须具有唯一的引脚号!

每个 I/O 都是唯一的。

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

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

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

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

感谢更新。

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

干杯
乔治

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

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

任何建议将不胜感激。

干杯
乔治

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

感谢更新。

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

干杯乔治

是的,像这样。

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

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

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

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

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

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

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

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

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

干杯
乔治

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

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

这可能是由于您的电路板映射文件中的映射定义不正确。

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

好,谢谢。

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

干杯
乔治

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

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

干杯
_

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

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

是的。

STM32F401RCT6 - 6 轴配置 - 不显示轴 A、B 或 C #69
作者
gxdeange 评论了 2022 年 4 月 14 日  

好的。

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

干杯
乔治

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

贴出你的地图文件,我看看。

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

#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_PORT GPIOC
#define M5_STEP_PIN 0
#define 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_PORT GPIOB
#define M5_ENABLE_PIN 8
// #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_PORT GPIOB #define SAFETY_DOOR_PORT GPIOB
#define SAFETY_DOOR_DOOR_PIN 定义MO 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_PIN 15
#define AUXINPUT0_PINPUT1_define
AUXINPUT15 14
#define AUXINPUT2_PORT GPIOC
#define AUXINPUT2_PIN 13

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

您应该以与其他驱动程序相同的方式为 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
#结尾
//定义联动轴或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
#结尾
// Define ganged axis or C axis step pulse and step direction output pins.
#if N_ABC_MOTORS == 3
#定义 M5_AVAILABLE // E2
#定义 M5_STEP_PORT GPIOD
#定义 M5_STEP_PIN 13
#定义 M5_DIRECTION_PORT GPIOG
#定义 M5_DIRECTION_PIN 9
#定义 M5_LIMIT_PORT GPIOG
#定义 M5_LIMIT_PIN 5
#定义 M5_ENABLE_PORT GPIOF
#定义 M5_ENABLE_PIN 0
#结尾

 

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

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

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

//定义联动轴或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 GPIOC #
define_endPIN1IM1IT2

//定义联动轴或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_endPIN_LIMITif

//定义联动轴或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_LIM

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

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

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

定义 C 轴时, driver.c中会弹出一个错误:

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
作者

Legand:编译无误。

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

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

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

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

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

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

好的。

再次感谢。你帮了大忙。

干杯,周末愉快
乔治