使用基于 ARM 的电子设备有什么好处?

3D打印 电子产品
2021-04-24 23:52:23

大多数电子产品都使用像 AVR 这样的微控制器,但我在新电子产品中看到了 ARM 芯片。据说ARM芯片功能更强大,但在与3D打印相关的哪些领域有帮助?AVR 有哪些特点以及 ARM 可以做得更好的地方是什么?

高速运动?台达打印机?图形显示?

AVR 真的是那里的限制吗?

4个回答

3D 打印机控制器必须非常非常快地做很多事情。在每秒发送数千个精确同步的步进脉冲的同时执行运动学和动力学计算真的非常困难老式 3D 打印机控制器中使用的 8 位 AVR 系列微控制器基本上是 1990 年代后期的 Mr Coffee 处理器。它们仅在简单(例如笛卡尔)打印机中执行基本打印功能时,处理器时间就已完全耗尽,增加额外的计算负载会使它们陷入困境并导致速度减慢、卡顿、暂停等。

“但我的 8 位打印机工作正常,”你说。不,它没有。无论您是否意识到,您的打印性能都会受到它的限制。切片器现在会自动向您隐藏许多固件的性能缺陷。例如,大大降低周边打印速度的标准做法主要是因为 8 位处理器在以下两方面的资源不足:

  1. 对跨多个 gcode 段的曲线执行向心加速度计算
  2. 跟上具有许多非常小的片段的 gcode 的 gcode 传输/处理和运动规划,例如在有机模型或平滑弧中

当以平滑的弧线或复杂的曲线呈现一系列非常小的段时,8 位固件可能会因所需的命令处理速率而窒息,并导致打印出现卡顿现象。这些令人难以置信的短暂暂停允许挤出机中的残余压力推出一些额外的塑料,在打印件上产生一点痘痘。因此,大多数切片器会自动抽取曲线并以降低的分辨率输出 gcode,以减轻固件的负载。问题解决了对吧?

但还有另一个问题——所有主要开源 3D 打印机控制器背后的 GRBL 运动控制算法设计有许多快捷方式和技巧,以允许 8 位处理器足够快地执行。例如,基本算法只查看两段之间拐角处的速度或速度变化,并使用它来决定何时沿运动方向减速/加速。它不计算或考虑向心/径向加速度。在打印四四方方的低分辨率模型时,这是一个非常有效的技巧,但它在具有许多小段的平滑曲线上却惨遭失败。固件不会在多面曲线内的任何两个近线性段的拐角处检测到任何明显的速度变化,因此不会减慢曲线的速度。

不加速打印复杂的周长意味着指令进给率必须非常低才能获得良好的质量。大多数打印机在复杂周长上的速度限制在大约 40 毫米/秒或更小,尽管在达到其他速度限制之前能够在低复杂度填充上运行大约 80-120 毫米/秒。

在低功耗处理器所需的命令处理速率限制和运动规划器缺点之间,实际打印速度必须远低于物理和打印机硬件严格要求的速度。这一切都来自于 8 位处理器。处理此问题的变通方法和最佳实践已深深融入工具链和生态系统中,以至于很少有人意识到存在问题。但这是一个可以克服的真正限制:运行更严格的运动规划器的高速处理器可以产生更高的平均打印速度和更好的打印质量。

也就是说,基于 ARM 的固件只是缓慢地转向更高级的运动规划器。这是目前一个很大的发展领域,实际上正在推动即将从低端 ARM(如 Cortex M3)转向更快的处理器。实际上,通过堆积一堆固件功能来最大化 84 MHz Arduino Due 并不是那么困难。

8 位处理器的使用也使打印机更响亮。在典型的 8 位打印机中,处理器时间的最大消耗者是步进器中断,它触发步进脉冲以使电机移动。Atmega AVR 上所有时钟周期的 60% 以上都用于触发阶跃脉冲,这是非常典型的。因为这是作为中断发生的,所以打印机必须执行的其他处理任务——比如加速度计算和加热器控制——会被挤进步进器中断事件之间的短暂空间中。

如果没有仔细的固件设计,步进脉冲将完全“挤出”其他功能,如 LCD 显示更新和加速度计算。为了在不使用所有处理器资源的情况下允许更高的运动速率,8 位固件有一种称为“步进加倍”的模式,该模式每个步进器中断触发两个(或四个或八个)步进脉冲,以便一半(或四分之一,或八分之一) ) 可以使用尽可能多的步进中断来产生相同的运动速度。这种做法消除了处理器的瓶颈,但它会导致更粗糙和更响亮的电机运动,因为步进脉冲是以突发而不是恒定频率发射的。实际上,当步进器中断触发双步或四步时,电机的微步级在功能上会下降到更粗略的模式。所以马达声音越来越大,精度越来越低,

一个有趣的副作用是,如果您将基于 Marlin 的打印机从 1/16 微步切换到 1/32 微步,并保持相同的打印速度,固件将简单地开始双步,将有效微步级别降低到1/16。

基于 ARM 的固件也使用步进加倍,但在使用双/四步进之前,允许的步进速率通常高约 8 倍。这可能意味着更高的速度和/或更平滑的运动。

8 位 AVR 的另一个问题是缺乏硬件浮点数,需要在高精度计算或处理非常大的数字上花费许多时钟周期。Delta 运动学、自动调平功能、为大型打印机计算具有极高步数的移动以及其他高级功能都在 8 位处理器上占用大量时钟周期。糟糕的固件设计或不小心添加了需要一些额外平方根和三角函数的功能可能会使处理器完全陷入困境。随着人们对旧 AVR 的要求越来越高,随着时间的推移,这种功能蔓延和代码膨胀严重影响了 Marlin 的性能。

相比之下,32 位处理器不仅具有更快的时钟和更多的时钟周期,它还能够在更少的时钟周期内进行更复杂的数学运算,因为它具有专用的硬件功能,可以处理 8 位处理器的许多步骤处理器必须在软件中完成。

8位处理器能用吗?当然,对于它们的本质以及我们对它们的要求,它们的效果出奇地好。但它们无疑限制了现代 3D 打印机的性能和功能。即使是当今最新一代的 32 位处理器,也已经被高速打印机和大量数学运算所利用。8 位处理器已经比“现代”3D 打印机控制器落后了两代。

一般来说,AVR 实际上不如当今使用的许多 ARM 内核强大。大多数带有 AVR 的打印机没有浮点协处理器,尽管很多步进和移动控制可以在纯整数数学中完成(G2/G3 除外)。Marlin 可以在 AVR 上每秒中断处理多达 10000 次,转换为每秒 40000 步。如果没有机械组件可以以这些速度移动并仍然打印有意义的结果(或者更精确并且在类似速度下每毫米步数更高),这并不是特别有用。

图形显示在低速并不是一件特别费力的事情——高速或奇怪的界面可能需要更多的功率或专用的中断。

ARM 可能很重要的时间是对于更多的数学运算,尤其是浮点运算繁重的设置,例如 delta,其中每一步都需要许多浮点和触发运算,并且描述了 16MHz AVR (atmega2560) 上的菜单导航作为“痛苦地缓慢”,但 Marlin 确实成功地在 delta 式打印机上打印了有意义的结果。

显然,执行软浮点运算速度更快或支持硬浮点运算(非常有效地执行浮点运算的硬件)的 ARM 内核将受益于此类进程。

通常,诸如 AVR 之类的微控制器是单核/单线程的——因此在 while 循环中工作以运行电机控制器时,您可能缺乏执行其他任何操作的资源,例如有效地导航菜单。

现在许多 ARM 处理器都是多核/多线程的,这意味着您可以让一个线程处理您的打印,而另一个线程则可以免费用于用户可能想做的任何其他事情。

即任何运行本地网络服务器以允许远程访问打印机的 AVR 处理器都是非常基础的,而 ARM 通常允许更大的灵活性。

AVR 处理器对于标准打印具有足够的性能。但它缺乏性能

  • delta 打印机(请参阅hexafraction 答案
  • 显示菜单(在我使用 ATmega2560 的 RepRap 打印机上速度非常慢)
  • 网络界面(以太网)

技术规格的比较应该是不言自明的。与 ATmega2560 相比,这个特定的 ARM CPU 至少快 10 倍:

CPU ARM-Cortex M3 LPC1769(用于Smoothieboard

  • CPU:Cortex-M3,1
  • 架构:ARMv7-M(32位)
  • 频率:96-120 Mhz
  • 记忆
    • 闪存:512 KB
    • 内存:64KB

微控制器ATmega2560

  • 架构:8位
  • 频率:16MHz
  • 记忆
    • 闪存 256 KB 其中 8 KB 由引导加载程序使用
    • SRAM:8 KB
    • EEPROM:4 KB