开源改变世界

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561

推推 grbl 3年前 (2023-01-22) 57次浏览

关闭
onekk 打开了这个问题 2014 年 12 月 24 日 · 29条评论
关闭

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL#561

onekk 打开了这个问题 2014 年 12 月 24 日 · 29条评论

注释

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561

我在互联网上找到了一些项目,但它们与 GRBL 不太同步,遗憾的是不使用/支持从 reprap 到与 CN 一起使用的广泛且廉价的电子产品。
我知道有更多的项目可以使用它,但是工作的分散是开源项目的地狱。

问候

Carlo D. (onekk)

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561
作者

谢谢,我知道了,但是源代码以一种奇怪的方式被修改,与主代码库的集成度不高。

Carlo D. (onekk)

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561
贡献者

目前 MEGA 没有被 GRBL 正式支持,我一直在尽我所能支持 MEGA 并保持 MEGA 代码的完整功能。

GRBL 被编写为非常高效地写入步进和方向端口,并使其如此高效,所有步进引脚都在一个端口上,所有方向引脚都在一个端口上。

RAMPS 板的兼容性问题是所有步进和方向引脚都在几乎随机的端口上,以最适合 PCB 的布线。

关于重写代码部分以允许步进引脚和方向引脚位于完全独立的端口(这将降低一些效率但获得兼容性)的对话正在进行中,这很可能会出现在版本 1.0 中

归根结底,这并不难,但所需的额外代码将超过 UNO(官方支持的板)的闪存空间

如果我有时间,我会调查一下。

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561

确定会超过闪光?如果是这样,那就是错误的方法。
它只需要
在做某事后添加 STEP_PORT ram 变量(uchar8_t):
STEP_PORT = (STEP_PORT & ~STEP_MASK) | (step_port_invert_mask & STEP_MASK);
update_step_pins(); // 更新引脚,必须在每次使用 STEP_PORT 后添加

在 328 分支上,update_step_pins() 没有操作,因为应该有一个
#define update_step_pins()
而不是在 mega2560 上,update_step_pins() 在 cpu_map.c 中定义
#ifdef CPU_MAP_ATMEGA2560 // (Arduino Mega 2560) 工作@EliteEng
void
update_step_pins() {
STEP_PORT&bit(X_AXIS)?bit_true(X_STEP_PORT,bit(X_STEP_PIN)):bit_false(X_STEP_PORT,bit(X_STEP_PIN));
STEP_PORT&bit(Y_AXIS)?bit_true(Y_STEP_PORT,bit(Y_STEP_PIN)):bit_false(Y_STEP_PORT,bit(Y_STEP_PIN));
//…其他轴
}
#endif

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561

也许不将其命名为 CPU_MAP_ATMEGA2560 ,而是将其命名为 PU_MAP_ATMEGA260_RAMPS_1_4
以免破坏任何东西。

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561
作者

这将是一个非常有用的改进,尽管它在市场上很容易买到,例如对于 shapeoko,从美国运来的 gshield 将花费 50 美元加上 50 美元的运费(并且它没有 Arduino)带有 Arduino MEGA 2560 的 RAMPS,加上 3 个止动器,加上电缆和风扇将花费 80 欧元加上 10 欧元的运费(从西班牙到意大利)(它有 5 个 poulu 驱动器和一个 Arduino MEGA)。

问候

卡罗·D。

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561

你能给我写下引脚映射吗,使用 ramp wiki 上的常量进行引脚分配。
格式是:假设它是 PF4 或 PORTF4 并且没有 invert ,PF4 是一个错误的假设,就像例子
#define X_STEP_PIN F,4,0
如果引脚应该被反转
#define X_STEP_PIN F,4,1

我可以编码,但无法测试。

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561
作者

是的,我可以把引出线写下来,但我无法测试它,因为我的卡还没有到,让我看看这是不是你想要的?

// 对于 RAMPS 1.4
#define X_STEP_PIN 54
#define X_DIR_PIN 55
#define X_ENABLE_PIN 38
#define X_MIN_PIN 3
#define X_MAX_PIN 2

#define Y_STEP_PIN 60
#define Y_DIR_PIN 61
#define Y_ENABLE_PIN 56
#define Y_MIN_PIN 14
#define Y_MAX_PIN 15

#define Z_STEP_PIN 46
#define Z_DIR_PIN 48
#define Z_ENABLE_PIN 62
#define Z_MIN_PIN 18
#define Z_MAX_PIN 19

#define E_STEP_PIN 26
#define E_DIR_PIN 28
#define E_ENABLE_PIN 24

#define SDPOWER -1
#define SDSS 53
#define LED_PIN 13

#define FAN_PIN 9

#define PS_ON_PIN 12
#define KILL_PIN -1

#define HEATER_0_PIN 10
#define HEATER_1_PIN 8
#define TEMP_0_PIN 13 // 模拟编号
#define TEMP_1_PIN 14 // 模拟编号

这是维基上的内容。
wiki 上的一条小注释说“RAMPS 1.4 使用与 RAMPS 1.3 相同的引脚定义”,因此这些设置可能也适用于 RAMPS 1.3。

TIA 和关注

卡罗·D。

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561

是的,这就是我用 awk 提取的内容。“//”之后是“NA”的行是错误的,因为它是 -1
只是获取文件的黑客攻击。例如 #define SDPOWER A,7,0 // NA — 就是这样一个。
SDPOWER 的功能是什么,为什么是 -1。?什么模拟通道是 TEMP_0/1
你把探针放在哪里?

// 对于 ,,0 // RAMPS —
#define X_STEP_PIN F,0,0 // 54 —
#define X_DIR_PIN F,1,0 // 55 —
#define X_ENABLE_PIN D,7,0 // 38 —
#define X_MIN_PIN D,3,0 // 3 —
#define X_MAX_PIN D,2,0 // 2 —

#define Y_STEP_PIN F,6,0 // 60 —
#define Y_DIR_PIN F,7,0 // 61 —
#define Y_ENABLE_PIN F,2,0 // 56 —
#define Y_MIN_PIN C,0,0 // 14 —
#define Y_MAX_PIN C,1,0 // 15 —

#define Z_STEP_PIN L,3,0 // 46 —
#define Z_DIR_PIN L,1,0 // 48 —
#define Z_ENABLE_PIN K,0,0 // 62 —
#define Z_MIN_PIN C,4,0 // 18 —
#define Z_MAX_PIN C,5,0 // 19 —

#define E_STEP_PIN A,5,0 // 26 —
#define E_DIR_PIN A,3,0 // 28 —
#define E_ENABLE_PIN A,7,0 // 24 —

#define SDPOWER A,7,0 // NA —
#define SDSS B,0,0 // 53 —
#define LED_PIN B,5,0 // 13 —

#define FAN_PIN B,1,0 // 9 —

#define PS_ON_PIN B,4,0 // 12 —
#define KILL_PIN B,4,0 // NA —

#define HEATER_0_PIN B,2,0 // 10 —
#define HEATER_1_PIN B,0,0 // 8 —
#define TEMP_0_PIN D,5,0 // 13 — 模拟编号
#define TEMP_1_PIN D,6,0 / / 14 — 模拟编号

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561
作者

cri-s 请这些设置作为 cpu_map.h 中 PU_MAP_ATMEGA260_RAMPS_1_4 的基础?

我查看了 hte 源代码,但没有看到其中的格式有任何相似之处,例如我有 #ifdef CPU_MAP_ATMEGA2560 // (Arduino Mega 2560) 工作@EliteEng

// 串口引脚
#define SERIAL_RX USART0_RX_vect
#define SERIAL_UDRE USART0_UDRE_vect

// 增加缓冲区以使用额外的 SRAM
//#define RX_BUFFER_SIZE 256
//#define TX_BUFFER_SIZE 128
//#define BLOCK_BUFFER_SIZE 36
//#define LINE_BUFFER_SIZE 100

//定义步进脉冲输出引脚。注意:所有步进位引脚必须在同一端口上。
#define STEP_DDR DDRA
#define STEP_PORT PORTA
#define STEP_PIN PINA
#define X_STEP_BIT 2 // MEGA2560 数字引脚 24
#define Y_STEP_BIT 3 // MEGA2560 数字引脚 25
#define Z_STEP_BIT 4 // MEGA2560 数字引脚 26
#define STEP_MASK ((1<< X_STEP_BIT)|(1<<Y_STEP_BIT)|(1<<Z_STEP_BIT)) // 所有步进位

等等。
我不太擅长 C 编程,(我的技能有点 pyhton,我可以从源代码编译并为我喜欢的发行版 Void-Linux 编写模板),但我可以在 cpu_map.h 中加入这样的描述映射 RAMPS 上的引脚)

非常感谢你的好意

问候

卡罗·D。

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561
作者

通过快速查看代码上的注释,以及来自 RAMPS 的引脚,我注意到“注意:所有步进位引脚必须在同一端口上。”,也许我可以使用 RAMPS 屏蔽(有 5 个驱动程序来驱动步进器)并根据 ATMEGA 2560 引脚分配用扁平电缆和两个连接器手动连接它们@EliteEng在代码中(如果它是功能性的)。
现在这似乎是可行的解决方案,不会过多干扰 GRBL 的代码库(假设 EliteEng 的 ATMEGA 2560 正在工作)
并且副作用是我也许可以驱动双 Y 轴电机,将两个步进驱动器连接到 Y 引脚(步骤 dir 和 en)端口和接线步进器反转线圈。

问候

卡罗·D。

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561

如果输入/输出引脚的操作是#defines,则应该很容易更改不同平台的底层代码,而不更改主 grbl 的任何内容

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561
作者

Langwalt,您的陈述似乎与某些帖子中的对话中所述不符:

GRBL 被编写为非常高效地写入步进和方向端口,并使其如此高效,所有步进引脚都在一个端口上,所有方向引脚都在一个端口上。

RAMPS 板的兼容性问题是所有步进和方向引脚都在几乎随机的端口上,以最适合 PCB 的布线。

我看到的唯一解决方案是接受此声明并使用扁平电缆和一些连接器手动连接步进电机的信号以及从 Mega 到 RAMPS 的限位开关,保持连接短或使用一些屏蔽电缆,也许每个 dir 和 step 信号都有一些音频屏蔽电缆,但我对其他替代方案持开放态度,Mega 2560 有一些实现,但代码以在主代码更改困难时维护它的方式进行了修改。

谢谢
Carlo D。

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561

嗨伙计们,

与其费心创建一些奇怪的电线解决方案来将 Arduino
Mega2560 板连接到 RAMPS1.4 步进板,不如看看
我目前使用的解决方案:
https ://github.com/maaadbob/ Arduino_Mega2560-RAMPS1.4

该板夹在 Arduino 和 RAMPS 之间。
可以在项目的文件夹中找到信号路由信息。
设计可以使用 Eagle 免费版进行编辑,因此您可以根据自己的
需要进行修改。
然后只需将 .brd 文件发送给您首选的 PCB 制造商,并
从 AdaFruit 获取 Arduino 接头/插座。

我这里也有 4 轴 GRBL 代码:(针对我的设置进行了修改)
https://github.com/maaadbob/openpnp-grbl

再次; 接受并修改您的要求。

我没有时间支持任何技术查询。

最好的问候,
Bob B.

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561
作者

嗨,Bob,您的解决方案非常好,将是满足我需求的非常快速的解决方案,PCB 制造商的解决方案似乎是一个可行的解决方案,但不适用于单板,如果它仅来自 pcb 或者可能是套件,这是一个很好的解决方案,也许除了我之外还有人对它感兴趣,你有没有为它做过一些营销。

非常感谢和最诚挚的问候,
Carlo D.

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561

有没有人可以将 arduino uno shield 放在 arduino mega 上,如果可以的话就可以托盘了。
没有归位。
否则我只需要更改斜坡的定义。我刚刚开始
定义那个位,只是因为在另一个问题线程上有一个非常好的表格。
我怎样才能发送十六进制文件而不是将其发布到文件共享网站上?

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561

对于 Uno 盾牌:
http ://www.datafilehost.com/d/508e96ad

对于坡道:
http ://www.datafilehost.com/d/40a2811b

uno 版本修改较少。
如果可能的话,先把它放在托盘上。

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561
作者

嗨,cri-s,我已经注意到了链接,但现在我还没有董事会,你能给我一个来源的链接吗,你可能已经在 github 上修改了,所以我可以看到它们,等待真正的董事会到达?

TIA 和问候。

卡罗·D。

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561

实际上我只制作了 step、dir 和 enable 引脚。
还有进一步的工作需要做,但移动应该首先修改。
它使用预处理,因此如果所有引脚都在同一个端口上,则处理性能更高。
实际上 step 和 dir 引脚是耦合的。
如果您想查看源代码,这是差异。

189a190,216

static void enable(char c) {
#ifdef STEPPER_DISABLE_PORT
STEPPERS_DISABLE_DDR |= 1<<STEPPERS_DISABLE_BIT;
if(c)
//if (bit_istrue(settings.flags,BITFLAG_INVERT_ST_ENABLE))
bit_true(STEPPERS_DISABLE_PORT,STEPPERS_DISABLE_BIT);
否则
bit_false(STEPPERS_DISABLE_PORT,STEPPERS_DISABLE_BIT);
#else
#ifdef X_ENABLE_PIN
pin_out(X_ENABLE_PIN);
如果(c)pin_hi(X_ENABLE_PIN);否则pin_lo(X_ENABLE_PIN);
#endif
#ifdef Y_ENABLE_PIN
pin_out(Y_ENABLE_PIN);
如果(c)pin_hi(Y_ENABLE_PIN);否则pin_lo(Y_ENABLE_PIN);
#endif
#ifdef Z_ENABLE_PIN
pin_out(Z_ENABLE_PIN);
如果(c)pin_hi(Z_ENABLE_PIN);否则pin_lo(Z_ENABLE_PIN);
#endif
#ifdef A_ENABLE_PIN
pin_out(A_ENABLE_PIN);
如果(c)pin_hi(A_ENABLE_PIN);否则pin_lo(A_ENABLE_PIN);
#endif
#endif
}
196,197c223
< if (bit_istrue(settings.flags,BITFLAG_INVERT_ST_ENABLE)) { STEPPERS_DISABLE_PORT |= (1<<STEPPERS_DISABLE_BIT); }

< else { STEPPERS_DISABLE_PORT &= ~(1<<STEPPERS_DISABLE_BIT); }

启用(bit_istrue(settings.flags,BITFLAG_INVERT_ST_ENABLE));
238,239c264
< if (pin_state) { STEPPERS_DISABLE_PORT |= (1<<STEPPERS_DISABLE_BIT); }

< else { STEPPERS_DISABLE_PORT &= ~(1<<STEPPERS_DISABLE_BIT); }

启用(pin_state);
296a322
#ifdef STEP_PORT
297a324,331
#else
if(st.dir_outbits&bit(X_AXIS)) pin_hi(X_DIR_PIN); 否则pin_lo(X_DIR_PIN);
如果(st.dir_outbits&位(Y_AXIS))pin_hi(Y_DIR_PIN);否则pin_lo(Y_DIR_PIN);
如果(st.dir_outbits&bit(Z_AXIS))pin_hi(Z_DIR_PIN);否则pin_lo(Z_DIR_PIN);
#ifdef A_STEP_PIN
if(st.dir_outbits&bit(A_AXIS)) pin_hi(A_DIR_PIN); 否则pin_lo(A_DIR_PIN);
#endif
#endif
301c335

< st.step_bits = (STEP_PORT & ~STEP_MASK) | st.step_outbits;// 存储 out_bits 以防止覆盖。

// 移动
302a337
#ifdef STEP_PORT
303a339,346
#else
if(st.step_outbits&bit(X_AXIS)) pin_hi(X_STEP_PIN);
如果(st.step_outbits&bit(Y_AXIS))pin_hi(Y_STEP_PIN);
如果(st.step_outbits&bit(Z_AXIS))pin_hi(Z_STEP_PIN);
#ifdef A_STEP_PIN
if(st.step_outbits&bit(A_AXIS)) pin_hi(A_STEP_PIN);
#endif
#endif
430a474
#ifdef STEP_PORT
431a476,483
#else
pin_lo(X_STEP_PIN);
pin_lo(Y_STEP_PIN);
pin_lo(Z_STEP_PIN);
#ifdef A_STEP_PIN
pin_lo(A_STEP_PIN);
#endif
#endif
442c494,503

< STEP_PORT = st.step_bits; //开始步进脉冲。

#ifdef STEP_PORT
STEP_PORT =(STEP_PORT & ~STEP_MASK) | st.step_outbits;// 存储 out_bits 以防止覆盖。
#else
if(st.step_outbits&bit(X_AXIS)) pin_hi(X_STEP_PIN);
如果(st.step_outbits&bit(Y_AXIS))pin_hi(Y_STEP_PIN);
如果(st.step_outbits&bit(Z_AXIS))pin_hi(Z_STEP_PIN);
#ifdef A_STEP_PIN
if(st.step_outbits&bit(A_AXIS)) pin_hi(A_STEP_PIN);
#endif
#endif
478a540
#ifdef STEP_PORT
480a543,562
#else
pin_lo(X_STEP_PIN);
pin_lo(Y_STEP_PIN);
pin_lo(Z_STEP_PIN);
引脚输出(X_STEP_PIN);
引脚输出(Y_STEP_PIN);
引脚输出(Z_STEP_PIN);
#ifdef A_STEP_PIN
pin_lo(A_STEP_PIN);
pin_lo(A_DIR_PIN);
引脚输出(A_STEP_PIN);
引脚输出(A_DIR_PIN);
#endif
pin_lo(X_DIR_PIN);
pin_lo(Y_DIR_PIN);
pin_lo(Z_DIR_PIN);
引脚输出(X_DIR_PIN);
引脚输出(Y_DIR_PIN);
引脚输出(Z_DIR_PIN);
#endif
487a570
#ifdef STEP_PORT
489d571
< STEPPERS_DISABLE_DDR |= 1<<STEPPERS_DISABLE_BIT;
490a573,574
#endif
启用(0);
861a946

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561
作者

谢谢,明天见

卡罗·D。

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561
作者

cri-s 你在修改什么文件,Markdown 中的代码粘贴太蹩脚了,你能给我一个文件的要点吗?

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561
作者

cri-s 我在github上找到了这个版本,也许它会成为未来发展的基础?

https://github.com/LETARTARE/Grbl-xx_with_Arduino/tree/master/Grbl9fMega2560

问候

卡罗·D。

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561
作者

cri-s
我已经看过你的代码了,但我还是想不通很多东西,因为它与主要代码隔离开来(你在修补什么版本?)我非常喜欢它。

最好的祝福

卡罗·D。

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561
成员

@cri-s@onekk: 虽然很有趣,但这个线程有点失控了。能否请您直接就细节相互沟通并简单更新进度?谢谢你。

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561
作者

chamnit 对我来说没问题。

问候
Carlo D.

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561
作者

我刚刚购买了 Arduino Uno 解决方案,目前 Mega2560 是一个停滞不前的项目,也许我会用 marlin 在其上构建一个 reprap。

Many thanks, to all, but the Mega and the ramps seemed to be a good idea, but from now i want to have a ready made solution, the machine is intended to be a work horse so to be ready without pains is the most viable solution.

Regards
Carlo D.

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561
Contributor

Please see my repo https://github.com/EliteEng/grbl master branch.

I have added the ability to have the step and direction pins on different port which will allow the use of the RAMPS board.

I have started adding the RAMPS board to the cpu_map.h but it still needs a bit of work to get all the pins in the correct location.

有一些官方项目使用 RAMPS 在 Arduino Mega 上移植 GRBL #561
Author

非常感谢您的回复,当我收到电路板和机器时(eShapeoko 还没有回答我,也不知道什么时候),我会尝试您的解决方案。正如版主告诉我的那样,这段话变得太长了,而且往往会跑题,还有另一种交流方式吗?

问候

卡罗·D。

喜欢 (0)