Answers:
3D打印机控制器必须非常非常快地完成很多工作。在每秒发送成千上万个精确同步的步进脉冲的同时执行运动学和动力学计算非常,非常困难。较旧的3D打印机控制器中使用的8位AVR微控制器系列基本上是1990年代末Coffee处理器。仅在简单(例如笛卡尔)打印机中执行基本打印功能,它们就完全完全消耗了处理器时间,并且增加了额外的计算负荷会使它们陷入瘫痪,并导致速度降低,卡顿,暂停等。
“但是我的8位打印机工作正常,”您说。不,不是。无论您是否意识到,打印性能都受到它的限制。切片器现在可以自动向您隐藏许多固件的性能缺陷。例如,大大减慢周长打印速度的标准做法很大程度上是8位处理器在两方面资源不足的结果:
当以平滑的弧线或复杂的曲线显示一系列非常小的段时,8位固件可能会阻塞所需的命令处理速率,并给打印造成卡顿现象。这些令人难以置信的短暂停顿使挤出机中的残余压力可以挤出一些多余的塑料,从而在印刷品上产生一点点刺痛。因此,大多数切片器会自动抽取曲线并以降低的分辨率输出gcode,以减轻固件的负担。问题解决了吧?
但是还有另一个问题-所有主要的开源3D打印机控制器的GRBL运动控制算法都设计有许多捷径和技巧,可以使8位处理器执行得足够快。例如,基本算法仅查看两个线段之间拐角处的速度或速度变化,并使用其来决定何时沿运动方向减速/加速。它不计算或不考虑向心/径向加速度。在打印方形的低分辨率模型时,这是一种非常有效的技巧,但在具有许多小段的平滑曲线上却失败了。固件无法在多面曲线内的任何两个近似线性段的拐角处检测到任何明显的速度变化,因此不会降低曲线的速度。
不加急地打印复杂的边界,这意味着所要求的进给率必须非常低才能获得良好的质量。尽管在达到其他速度限制之前,能够在低复杂度填充上运行80-120mm / s,但大多数打印机在复杂边界上的速度限制为大约40mm / s或更小。
在低功率处理器要求的命令处理速率限制和运动计划程序缺点之间,实际上,打印速度必须比物理和打印机硬件严格要求的速度低得多。这些全部来自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的另一个问题是缺少硬件浮点,并且需要在高精度计算或处理大量数字上花费很多时钟周期。三角运动学,自动调平功能,大型打印机以极高的步数计算动作以及其他高级功能在8位处理器上都需要大量时钟周期。固件设计不佳或不小心添加了需要额外的平方根和触发功能的功能,可能会使处理器陷入瘫痪。随着人们对旧AVR的需求越来越多,随着时间的流逝,这种功能爬行和代码膨胀严重影响了Marlin的性能。
相比之下,32位处理器不仅具有更快的时钟和更多的时钟周期,而且还能够在更少的时钟周期内执行更复杂的数学运算,因为它具有专用的硬件功能,可以处理8bit的许多步骤处理器必须在软件中执行。
8位处理器可以工作吗?当然,它们对于它们本身以及我们对它们的要求令人惊讶地工作良好。但毫无疑问,它们限制了现代3D打印机的性能和功能。即使是当今的当今32位处理器,高速打印机和具有大量数学运算功能的设备也已被最大限度地利用。8bit处理器已经比“现代” 3D打印机控制器落后了两代。
通常,AVR实际上没有今天使用的许多ARM内核强大。大多数带有AVR的打印机都没有浮点协处理器,尽管很多步和运动控制都可以通过仅整数运算来完成(G2 / G3除外)。Marlin可以在AVR上中断每秒最多10000次的步处理,相当于每秒 40000步。如果没有可以以这些速度移动的机械组件仍然可以打印出有意义的结果(或者更精确,并且在类似的速度下具有更高的每毫米的步数),则这不是特别有用。
图形显示在低速下并不是一件特别费力的事情-高速或怪异的界面可能需要更多的电源或专用的中断。
ARM可能很重要的时期是用于更多数学运算,尤其是浮点运算繁重的设置,例如增量运算,其中每一步都需要许多浮点运算和触发操作,并描述了在16MHz AVR(atmega2560)上的菜单导航表示 “非常缓慢”,但Marlin确实成功在delta型打印机上打印出有意义的结果。
显然,执行软浮点运算速度更快或支持硬浮点运算(非常有效地执行浮点运算的硬件)的ARM内核将为此类进程带来好处。
通常,诸如AVR之类的微控制器是单核/单线程的-因此,在运行while循环以运行电机控制器时,您可能缺少执行其他操作(如有效导航菜单)的资源。
如今,许多ARM处理器现在都是多核/多线程的,这意味着您可以让一个线程处理打印,而另一个线程则对用户可能想要做的任何事情都是免费的。
例如,任何运行本地Web服务器以允许远程访问打印机的AVR处理器都是非常痛苦的基础,而ARM通常会提供更大的灵活性。
AVR处理器具有足以进行标准打印的性能。但是它缺乏性能
技术规格的比较应能自我解释。与ATmega2560相比,这种特定的ARM CPU至少快10倍:
AVR处理器是8位的-因此它们一次只能从存储器中获取8位数据-而ARM是32位的并且可以一次获取32位数据。位置解析至少需要24位值-这意味着AVR需要对该位置进行3次数据获取-而ARM需要进行1次数据获取。
更糟糕的是,AVR处理器在内部将时钟除以3,因此40 MHz AVR通常以13.3 MHz运行,而ARM每个总线事务和指令处理为1个时钟周期-这包括1的32位乘32位倍数时钟周期。
ARM处理器上的内存映射为32位宽或4 GB,而8位处理器仅具有16位或64 KB的地址总线-这意味着库切换在超过64 KB的任何程序中都起作用-这需要大量的指令和时间来完成。完成-在使用ARM时这不是问题。
成本方面与AVR大致相同-只是需要重新设计固件。
对于FPGA:
将FPGA添加到AVR的结果将比使用功能更强大的ARM处理器花费更多。
- -
and - - - -
)相当分散注意力,tbh。