注释
我已经开始将 GRBL 移植到 Arduino Due 和 Arduino IDE。 很抱歉,但我现在要从头开始,不使用 arduino IDE。 不要误会我的意思,IDE 在某些情况下很棒,它会进行很多错误检查(无论您是否想要) 我正在实施 CMSIS(http://cmsis.arm.com),所以它应该可以在大多数基于 arm 的板上使用。 代码完成后,我将不得不找到一种用户友好的上传方式。 |
@bobalony1: 我还没有使用过Teensy的乐趣,但它看起来很强大并且得到了很好的支持。我认为缺少的 EEPROM 问题并不是一个障碍。您可以购买大约 1-2 美元的 EEPROM 芯片,可以连接到 Arduino Due 的一些引脚。或者可以有一个带有 GUI 的握手协议,要求在任何事情开始之前上传设置。 Grbl 不使用 Arduino IDE,而是出于几乎相同的原因使用所有(Atmel 的 EEPROM 源除外)自己的代码@EliteEng为ARM做的。IDE 源代码虽然很棒,但非常缓慢且效率低下。它提供了一个很好的起点,但并不比 IMO 更多。 @EliteEng: 我很好奇你们的 ARM 端口进展如何。即使它还没有完成,你能创建一个 Github 存储库并打开你的代码供人们查看吗?通过推送查看事情的进展总是很有价值,所以如果人们遇到类似的问题,有一个记录的历史可以比较事情。 |
我刚刚完成了 grbl 到 teensy 3.0 的移植——事实上,teensy 3.x 是非常棒的目标硬件,而且 K20 系列看起来非常可扩展。移植的一件重要的事情是构建系统。我目前正在使用官方 Teensy 3.x 环境(链接器脚本、寄存器定义、初始化代码和 USB 堆栈)的主要精简版本,它是功能性的,但在一个奇怪的许可下提供。 我刚刚开源了port。一切都是超级 alpha,我所做的任何更改都没有得到特别详细的记录。至少,这证明 Grbl 在 ARM 上运行得非常好,并且大多数所需的修改要么是微不足道的,要么实际上简化了代码库。 |
一年前,我构建了带有 5″ TFT LCD 显示屏(800×480+触摸)和 SD 卡支持(SPI 模式)的 STM32F103 (CortexM3) 步进控制器。固件的 CNC 部分没有规划,加速不像 grbl 项目那样强大。 |
@bronek999: 棒极了!我很高兴这是一项简单的任务,因为我们一直在尝试编写代码以使其可移植。听起来我们有。您可以发布您的代码供其他人查看和使用吗?我认为这对我们以后转移到 ARM 时会非常有帮助。 |
我/我是这里的新手 我怎样才能发布它? Dňa Thu,2014 年 2 月 27 日 16:07:02 +0100 Sonny Jeon notifications@github.com
小号pozdravom Branislav Drengubiak |
@bronek999: 如果你有 Mac 或 Windows,下载 Github 程序并设置你自己的 repo。这相当简单,Github 的帮助页面会引导您完成整个过程。你几乎已经成功了一半,因为你有一个 Github 帐户。 |
我通过 Modbus 命令(开始、停止、左、右、SetRPM)实现了主轴转速控制,但我不知道如何解决紧急停止。我认为基本方式是带有减速和停止的中断控制引脚。并带有“中止或继续?”的问题。 我该怎么做?引脚更改中断有效(中断优先级低于 grbl planner 中断),gui 问题也有效 但我不知道如何确保(不失步)停止或暂停 grbl 计划 PS:我的代码是用于 Keil ARM,gui 是我的小部件(按钮、标签、触摸)代码和带有 ADS7843 的 SSD1963 LCD 驱动程序。SD 卡连接 SPI 模式 ChansFATfs。现在我在模拟操纵杆上工作。 |
Atmel SAM4 是否相当于 Teensy 3.1 cpu? |
@matthewSorensen您是否考虑过使用 Atmel Studio IDE?非常易于使用且非常高效。支持所有 Atmel 芯片,包括 ARM |
@langwadt,谢谢。这看起来非常有用。 @bronek999感谢分享代码。自上次以来有任何进展吗?! 我想知道将 GRBL 移植到 M4,这应该可以节省一些时间。STM32F4Discovery 有一个板载 QVGA 触摸屏,但它不是 ardiuno 引脚布局,因此需要一些原型引脚适配器板现在,如果我能将所有这些线程整合在一起,它应该会提供一个廉价、超强大的 CNC 解决方案。 一旦 GRBL 在 M4 上出现,一个全新的可能性世界就会打开。 |
@bronek999包含源代码的 .zip 文件的链接已损坏。404 错误。 了不起的工作家伙! |
你好 0.8 版适用于我的开发板(STM32F103+5inch LCD+SD 卡)。 目前我正在移植 TinyG2。它是基于 Arduino Due 的(AT91SAM3S8E 在 18.03.2015 15:26,J-Dunn 写道:
|
嘿,我们肯定在同一条路上。我正在考虑移植 TinyG2,但是当我在这里看到这个帖子时,我认为 GRBL 可能是让一些硬件旋转的一个很好的第一步。 我有点担心 TinyG 代码的复杂性。我可以想象调试是一场噩梦。 移植 v0.9 是否存在重大问题,还是因为所有更改而太像从头开始? Tiny 板没有足够的驱动电流来满足我的需要,所以我一直在寻找替代步进板一段时间。这就是为什么我很高兴看到@langwadt 提供的链接。那些 ST 板为价格提供了相当多的优势。 现在让在 STM32 M4 上运行的 TinyG2 代码连接到其中一些电路板将非常符合要求。 |
我想你会发现 TinyG 代码很容易使用。它的组织和评论都非常好。请看一下。让我们在这里玩得很开心。 |
我的问题是(现在仍然是)自适应多轴步进平滑(AMASS)。 现在我发现它支持安全门开关(v0.9i)……我正在寻找一个想法…… TinyG2 是 arduino 风格的代码。我不喜欢它。我的方法是只修改 main.cpp-通过 FatFS 添加 SD 卡支持(现在可以使用)并添加带有触摸支持的 LCD ……它需要最少的 TinyG2 代码更改(用于下一个版本的支持) |
@bronek999:您可以通过 config.h 定义禁用 AMASS,stepper.c 代码中的 ifdef 应该告诉您可以删除的内容。这应该有助于简化移植。至于描述 AMASS 是如何工作的,我一直想写一些关于它的东西,但这不仅仅是一篇问题文章。 |
“TinyG2 是 arduino 风格的代码。我不喜欢它。”这也是我的印象。这就是为什么我认为调试起来可能是一场噩梦的原因之一。 另一个原因是它看起来像一些漂亮的切割器编码,但一点也不容易阅读。对不起,Aldan,这不是玩得好。我确实花了很多时间阅读它,发现它非常不透明,变量和函数命名完全令人困惑,无法记住。(清除变量名不需要内存,每次读取都会清除)。 再说一次,不要觉得我在破坏 TinyG,它实际上在技术上看起来非常令人印象深刻,但我的感觉是我会花更多的时间来尝试理解它,使其达到我可以维护/调试的水平,而不是我会写我自己的代码。 这种情况经常发生,并且是一个尴尬的权衡。 现在我敢肯定,如果我只是购买一块电路板并使用它,它是一个非常好的产品。脱帽致敬!;) |
chamnit 所做的吸引人的地方在于,他似乎已经抛弃了糟糕的 Arduino 库并写了一些干净而明智的东西。 |
@J-Dunn– 感谢您的反馈 – 风格是个人问题。 澄清一点 – 代码中没有 Arduino 库(从来没有)。C++ 代码编写在硬件抽象层 (Motate) 之上,可在不牺牲性能的情况下实现高度的平台可移植性。 |
可能这就是他们说“Arduino 风格的代码”时的意思 他们指的是 C++,对于来自一个只看到 C 和 ASM 的世界的人来说,这有点可怕。 |
很公平。Motate 的基础是 C++ – 上层几乎是直接的 C 代码 |
另外,关于 S 曲线的事情,我现在也在做同样的事情,但并不明显。现在,我知道我的 [math-] 智能水平并不是什么特别的东西,但即便如此,为了获得一个可以读取运动命令和输出脉冲的正确端到端管道,必须投入大量的东西——使用 S – 中间的曲线 – 远非微不足道。 |
的确。这是一口比较深的井。 |
我再次复制了所需的文件… 我有问题 – uint32_t Cycles = ceil( (TICKS_PER_MICROSECOND_1000000_60)*inv_rate ); |
这段代码是不可移植的。 最好这样做: 因为之后不使用inv_rate,你可以这样做,只需添加 #endif 2015-03-19 10:26 GMT+01:00,bronek999通知@github.com :
|
langwadt 于 2014 年 11 月 22 日发表评论 1 \* http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1847/PF260320 3 \* http://www.st.com/web/en/catalog/tools/PF260715 3 轴 3Amp 驱动器,100MHz Cortex M4 约 40 美元 您需要做的就是移动一些电阻并堆叠电路板,无需使用电位计或跳线来设置微步进或电流,这一切都通过 SPI 完成 这看起来是一个非常有趣的前景。因为它是与 arduino 兼容的引脚排列,所以它应该在 Uno 上的 grbl 之上工作。 我想在两侧运行 X 轴驱动,因此将其中两个具有相同电阻设置的板堆叠起来应该可以提供该功能。 使用 bronek999 的代码(谢谢),我们至少将 v0.8 移植到了 stm32。它应该只是为核板设置的引脚配置的情况。 据推测,进一步的工作可以完成 v0.9 的移植。 |
我的“端口”与 grbl 没有 100% 兼容。它是基于 grbl 的项目,没有 uart,支持触摸 lcd 和 sd 卡。 Odoslané zo služ来自 Samsung Mobile ——– Pôvodná správa ——– langwadt 于 2014 年 11 月 22 日发表评论 1 * http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1847/PF260320 3 轴 3Amp 驱动器,100MHz Cortex M4 约 40 美元 您需要做的就是移动一些电阻并堆叠电路板,无需使用电位计或跳线来设置微步进或电流,这一切都通过 SPI 完成 这看起来是一个非常有趣的前景。因为它是与 arduino 兼容的引脚排列,所以它应该在 Uno 上的 grbl 之上工作。 我想在两侧运行 X 轴驱动,因此将其中两个具有相同电阻设置的板堆叠起来应该可以提供该功能。 使用 bronek999 的代码(谢谢),我们至少将 v0.8 移植到了 stm32。它应该只是为核板设置的引脚配置的情况。 据推测,进一步的工作可以完成 v0.9 的移植。 — |
感谢您的澄清。 一旦基础工作正常,触摸屏和 SD 是我想要的方式。如果没有 UART,您的意思是您从 SD 而不是 UASB 获取 gcode? |
太好了,所以您可以在使用 grbl 运行电机的同时保持屏幕上的实时输出?达到什么样的速度,这是否可靠地工作? 这很有趣。 |
“基本”图形操作在“主”程序上运行。grbl 通过中断运行。所以它是独立的。定时器中断仅绘制实际位置像素。它有一个缺点 – 读取 SD 卡时我无法触摸 LCD 显示器。它使用一个SPI,文件读取在主程序中,触摸检测在中断中。现在我有另一个带有 SPI 触摸面板的 pcb 和 SD 是 SDIO 的。 |
谢谢,这是我所期望的。我认为这种外围设备的组合需要建立在像 Chibios 这样的 RTOS 之上。 |
我已经购买了上面链接的一堆 X-NUCLEO-IHM01A1 板。它们基本上是功能强大的 L6474 芯片的分线板。但是,该芯片的大部分设置和控制都是通过 SPI 进行的。 最终我打算将 GRBL 移植到 STM32-M4 并且我已经有一个 ST 板,但是为了避免一次性完成所有事情,因为这造成了一个巨大的硬件+软件调试头痛,我想利用 Arduino 引脚这些板的格式,以使至少一个电机在具有相当标准的 GRBL v0.9 的工作台上运行 是否有足够的空间来添加基本的 SPI 功能以便对 L6474 进行编程,或者它已经被塞得太紧以至于不值得尝试? 感谢您提供任何可以节省我一些时间的提示。 |
afaict st 板不直接与 GRBL 兼容,step/dir 引脚分布在两个端口上,因此您必须编写一些代码来设置引脚,但无论如何您都必须为 STM 端口执行此操作 |
谢谢。是的,如果意识到它主要需要一些摆弄来释放限位开关输入使用的 SPI 端口。 我对输入的“PINOUT”引脚有点困惑!我对“引脚排列”的理解是芯片的引脚布局,与输入或输出无关,所以你不能有“引脚排列引脚”。我不知道这个命名的逻辑是什么,但它非常令人困惑并且没有真正的意义。也许它在瑞典语中意味着别的东西:? 我的游戏计划是将限位开关移至 ADC 端口 2、3、4,并将 z-probe 保持在 5。Reset 和 Feedhold 保持在 0,1,然后我失去 Cycle_start。(无论如何我都不需要那个)。 代码中有一些关于不混合这些的注释,但它们都是输入,我认为这只是意味着在引脚更改中断 ISR 的第一行测试它是限制 sw 输入还是具有改变了。 要运行其中三个 SPI 板,需要另外两条线用于额外的 CS 引脚。看来我将不得不对三个限位开关进行接线或连接。如果它一次归位一个轴就足够了。如果任何轴在操作期间达到限制 sw,则它是相同的错误响应和手动干预。所以这似乎也可以。 这显然对 Arduino Uno 的有限引脚有点挤压,但我认为这应该是可能的。 你觉得这个方案有什么问题吗? |
还有一些关于以菊花链方式连接这些板的讨论,但它的文档记录很差,而且看起来很头疼要锻炼它应该做什么并正确实施它。避免为单个 CS 引脚使用两条额外的线似乎是一种低效的技巧。 由于这只是将其移植到 M4 的垫脚石,我认为这是我可以完全跳过的内容。 |
@J-Dunn: 我很遗憾听到命名约定令人困惑。其中一些是在我眼花缭乱的时候写的,后来就卡住了。其中很多最近都进行了更新,以减少混乱和更具描述性。请指出或提供有关更新我错过的一些命名约定的请求请求。对于像你这样为自己的目的审查代码的人,我尽量让所有内容都得到很好的注释和整洁的编写。(仅供参考,我不是瑞典人或挪威人。我是居住在新墨西哥州的美国出生的公民)。 至于菊花链,它的文档记录很差,因为它不受支持。在安装其他更高优先级的项目之前,不会直接支持它。也就是说,工具都在那里。您只需要像 GUI 一样通过串行接口与 Grbl 通信。它并不比这复杂得多。 |
“ step/dir 引脚分布在两个端口上” 嗯?这不是我在 cpu_map.h 中看到的,似乎所有六行都在 portB 上。 我希望降价会费不会把这搞砸……
|
今天我已经将 7 英寸 LCD(SPI 模式)、SD 卡(SPI 模式)和电容式多点触摸屏(TWI)连接到运行 TinyG2 的 Arduino Due(SAM3X8E)。硬件工作,我可以开始写软件了。 |
谢谢查姆尼特。首先,菊花链是对 ST 板的引用,而不是 GRBL,如果更清楚它应该如何工作,它实际上可能有助于将这些板安装到 GRBL 上(因为它节省了两行),但我不是倾向于把我的头撞到那个上。 我不认为你是瑞典人,但我认为原作者是,并猜测这些名字可能有很长的历史。在我对代码进行更多工作并更好地理解这些引脚的用途之前,我犹豫是否提出更好的命名约定的建议。它们似乎用于手动硬件输入,因此最好摆脱“OUT”部分。 如果它们可以被描述为外部输入,则可能是 EXT_INPUT_PORT 、 EXT_INPUT_MASK 等或类似的东西。 我非常感谢你写这篇文章的方式:简单、清晰、高效,你可以在这里发表评论和帮助。只需扫描代码,我就大致了解了我需要如何处理这个问题。任何我自欺欺人的评论都可能会有所帮助。我还没有完全考虑将额外的 CS 线混合到 ADC 端口的想法.. |
菊花链很简单,我在另一个项目中使用它。 关于引脚分布在两个端口上的评论与 ST 板有关,其中一个步进引脚在端口 B 中,其余在端口 D 中,因此它与 GRBL 要求它们位于一个端口中的要求不直接兼容 |
哦,所以它就像一个移位寄存器,直到公共 CS 变高,此时每个芯片都解码它拥有的东西。那么不同的东西可以被发送到每个芯片,还是必须是相同的东西进出每个芯片? 所有这些记录在哪里?我只在 L6474 数据表中找到了最简短的提及。 我刚刚发现了关于他们将 CS 和 SCK 引脚放在哪里的东西,这是一个奇怪的选择,而且有点不方便。因为 Arduino SPI 默认情况下都在一个端口上,这会很好。也许他们有技术上的理由来传播它。 看起来像另一个并发症。:( |
应该说他们打算将其与他们的 Nucleo 板一起使用,但采用 Arduino 引脚排列会使遵循 Arduino 引脚使用更合乎逻辑。 |
是的,它就像一个移位寄存器,您可以将不同的东西发送到不同的芯片。字里行间读一读,这一切都在数据表中,可能有一个应用程序。注意我不记得了 我只是敲了一下 spi,无论如何,用硬件 spi 获得的收益并不多,通常你只需要在设置 FLAG 时设置当前和可能的读出错误 |
我也有一些 X-NUCLEO-IHM01A1,我将使用 ATMEGA1284P 构建一个设置,以便为 SPI 实现提供更多 Ram。 这是关于如何使用菊花链的应用说明:http: 并且有一个 arduino 示例:http: |
好的 Michel_F ,他为这些 ST 板编写了一个 arduino 库,帮助我解决了这个菊花链的问题。电机驱动器/L6474#1(注释) 基本上,使用多个芯片所需的信息包含在单独的“应用说明”中,而不是芯片的数据表中。大多数制造商将应用笔记用于工作示例,而不是用于基本芯片规格数据。ST似乎另有想法。还有一些不正确的信息表。 现在我回到一个 CS pin ,这对 grbl 的破坏性较小。;) 他们似乎通过 PWM 控制步进引脚,这就是他们同时使用端口 B 和 D 的原因。希望在将其转换为 grbl 时,我只需弯曲最低板上的几个引脚并跳来跳去。 是时候对 grbl 代码卷起袖子了…… |
chamnit :“其中很多最近都进行了更新,以减少混乱和更具描述性。请指出或提供有关更新我错过的一些命名约定的请求请求。” 由于这些引脚似乎是外部的,因此手动输入 EXT_INPUT 可能是一个更清晰的前缀。如果这不适合某些实际或潜在的功能,则可能会有更好的名称。避免使用暗示输出的名称来调用输入将是主要目标。 以下似乎捕获了所有实例:
|
可能也想照顾评论:
|
@J-Dunn: 谢谢。完成下一个功能推送后,我会更新此内容。应该很快。 |
凉爽的。新版本即将推出吗?我将在代码上倾注一段时间,但我不想开始移植太多东西,只是为了发现我必须在一周内重做所有内容;)
|
@J-Dunn:不。这些东西更特定于 OEM,但是那里的代码已经进行了足够多的重构,以保证有一个审查期。在此之后我还需要安装其他东西。简而言之,短期内不会有新的主版本。 |
谢谢,我一直在详细研究Grbl。这很容易使用,干得好。
我认为 shift 3 对应于默认最快时间 CPU/8 。我看到 2us 是一个经验性调整,时间损失在哪里,是 Uno 上的 ISR 开销吗?! 节省几个字节,并在 ISR 中循环:
一些更明确的变量可能会有所帮助,我会列出一个清单。
sed -i ‘s/busy/Timer1_ISR_busy /g’ cpu_map.h stepper.c |
@J-Dunn: 谢谢。
|
来自 ATmega328P 数据表:中断需要 4+3 个时钟周期,从一个中断返回需要 4 个周期。在 16MHz 时,一个时钟周期为 62.5ns,因此其中 7 个为 437.5ns。这留下了 1562.5ns(25 个时钟周期),我猜是 GCC 引入的开销,因为它在堆栈上推送内容以准备 ISR 上下文以供执行。 |
很久以前我做了一些测试,修改了源代码,我记得,简单的未修改代码在时间上减少了 5uS。如果您愿意,我可以为实际固件计时,请注明您感兴趣的内容。克里斯干杯。
|
大约有 14 个寄存器需要被压入然后弹出;堆栈指针被压入;一些额外的东西;reti 等。这将接近 32 个时钟周期。当我看到 2us 时我有点惊讶,但它是一个缓慢的芯片,在计算时钟周期后,它就像 2us 非常接近。 Arduino 库充满了垃圾,做同样的事情可能需要两倍的时间,效率非常低。 |
@J-Dunn:我不确定效率低下在哪里,但 Grbl 不使用任何 Arduino IDE 库(或除标准 AVR 库之外的任何其他库)。Grbl 仅使用 IDE 提供的 GCC 编译器和工具。 也就是说,我从来没有费心去查看程序集,看看步进器 ISR 在被调用并且 ISR 正在做它的事情时到底在做什么。自从我开始从事 Grbl 项目以来,步进 ISR 的核心设计没有改变。如果你们都对如何以不同的方式、更有效地完成它有任何其他见解,或者知道更好的“良好实践”,我全都听好了。 |
可能可以进行一些调整,但您误解了我的评论。Grbl 可能接近该芯片上的最快速度。我的意思是使用 Arduino 库(你没有;))会使它的速度大约是实际速度的两倍。IIRC 使用 non_IDE 提供的库使 LED 闪烁大约需要 4us。 |
是否有任何版本或端口可以使用?我以为我在网上看到它会按原样工作……但是在创建终端板并将所有内容焊接到无头到期后,我无法让它工作,现在我知道为什么了,因为发布的版本是针对 avr 而不是 sam,但是那里有一个,还是正在制作中? |
bobalony1 评论 on 9 Feb 2014
我知道迁移到新硬件的想法已经被很多人提出来了。主要是由于 20mhz 的限制。但诸如 Due 缺乏 eeprom 之类的事情也阻碍了新硬件的发展。
我的建议是类似于 Teensy 3.1(开发人员也在开发一种 ++ 模型来突破底部焊接安装垫,所以希望很快就会出现)
sparkfun
3.3v 电源
32 位 ARM Cortex-M4 72 MHz CPU(M4 = DSP 扩展)(可超频至 96mhz)
256K 闪存、64K RAM、2K EEPROM
21 高分辨率模拟输入(13 位可用, 16 位硬件)
34 个数字 I/O 引脚(数字输入上的 5V 容差)
12 个 PWM 输出
7 个用于间隔/延迟的定时器,独立于 PWM
带有专用 DMA 存储器传输的 USB
3 个 UART(串行端口)
SPI、I2C、I2S、CAN 总线, IR 调制器
I2S(用于高质量音频接口)
实时时钟(带有用户添加的 32.768 晶体和电池)
4 个通用 DMA 通道(与 USB 分开)
触摸传感器输入
它使用 arduino IDE 和所有库。如果我没记错的话,我看到有人正在制作 GRBL 草图。所以这可能是将两者放在一起的一个很好的简单方法。
价格明智,它只有 20 美元
开发页面在这里
http://www.pjrc.com/teensy/teensy31.html
一个缺点是它不是开源的
说实话,我对硬件的了解还不够,无法正确评估它以满足 GRBL 的需求,但我想我会把它放在这里给你们的。