32 位 48-96 Mhz 微处理器的优点(例如在 Arduino Due 中)

电器工程 Arduino 微控制器 微处理器 建筑学
2022-01-28 01:48:09

似乎Arduino Due(32 位,84 Mhz,基于 ARM-Cortex-M3 的 SAM3X8E)今天发布了。

此外,显然有无数的处理器属于这个类别(32 位/48-96 Mhz/ARM)以及相应的原型板:

  • 恩智浦 LPC1768 / mBed
  • STM32/发现
  • PIC32 / 芯片套件
  • PIC32 / 视差螺旋桨
  • LM4F120 / TI 启动板
  • 等等。

我试图了解这些“中间”微处理器的吸引力,在我看来,它们似乎位于低端 AVR/MSP430/等之间。(优点:便宜、低功耗、小尺寸)和高端 ARM7/etc(优点:每秒能够处理更多指令)。

在哪些情况或方式下,32 位/48-96 Mhz/基于 ARM 的微处理器是合适的选择?更具体地说,我想知道它们在设计期间会在哪些应用程序或哪些参数中做出更好的选择,无论是低端 8 位微控制器还是非常高端的 ARM7 处理器。

3个回答

这是可以引起高度争议的主题之一。有很多不同的观点,不同的事情对不同的人很重要。我会尽量给出一个全面的答案,但要明白总会有人不同意。只要明白那些不同意我的人是错误的。(开玩笑。)

快速总结:

这个答案会很长,所以让我先总结一下。对于绝大多数人来说,最新的 ARM Cortex-M0/M3/M4 芯片提供了最好的解决方案,最好的功能和成本。将这些 32 位 MCU 与其 8 位和 16 位祖先(如 PIC 和 MSP430)进行比较时,情况甚至更是如此。M0 的售价低于 1 美元/个,M4 的售价低于 2 美元/个,因此除了对价格非常敏感的应用之外,ARM 解决方案都非常不错。M0 的功耗非常低,对大多数人来说应该足够了。对于那些对功率非常敏感的人来说,MSP430 可能仍然是更好的选择,但即使是这些应用,M0 也值得考虑。

如果您对更深入的分析感兴趣,请继续阅读,否则您现在可以停止阅读。

我现在将查看每个区域并比较不同的 MCU:

执行速度

当然,32 位 MCU 会更快。它们往往具有更快的时钟速度,但也为每个时钟做更多的工作。像 ARM Cortex-M4 这样的 MCU 包括 DSP 处理指令,甚至可以在硬件中支持浮点。8 位和 16 位 CPU 可以对 32 位数字进行操作,但这样做效率不高。这样做会很快消耗 CPU 寄存器、CPU 时钟周期和用于程序存储的闪存。

易于开发

在我看来,这是使用现代 32 位 MCU 最有价值的原因——但也是最被低估的原因。让我首先将其与 8 位 PIC 进行比较。这是最坏情况的比较,也是最能说明我观点的。

较小的 PIC 基本上要求用汇编语言进行编程。诚然,即使是 8 位 PIC 也有可用的 C 编译器,但这些编译器要么是免费的,要么是好的。您无法获得既好又免费的编译器。免费版编译器的缺陷在于其优化不如“Pro”版。Pro 版的价格约为 1,000 美元,仅支持一个 PIC 芯片系列(8、16 或 32 位芯片)。如果您想使用多个家庭,则必须再花 1,000 美元购买另一份。编译器的“标准”版本进行了中等程度的优化,每个芯片系列的成本约为 500 美元。按照现代标准,8 位 PIC 速度较慢,需要良好的优化。

相比之下,有许多免费的用于 ARM MCU 的优秀 C 编译器。当存在限制时,这些限制通常针对支持的闪存的最大大小。在 Freescale Codewarrior 工具上,此限制为 128Kbytes。对于这个论坛上的大多数人来说,这已经足够了。

使用 C 编译器的优点是您不必(尽可能多地)关心 CPU 内存映射的低级细节。在 PIC 上分页特别痛苦,如果可能的话最好避免。另一个优点是您不必为在 8 位 MCU 上处理 16 位和 32 位数字(或 16 位 MCU 上的 32 位数字)而烦恼。虽然用汇编语言做到这一点并不是特别困难,但它在后面很痛苦并且容易出错。

还有其他运行良好的非 ARM C 编译器。MSP430 编译器似乎做得很合理。赛普拉斯 PSoC 工具(尤其是 PSoC1)有问题。

平面内存模型

具有分页 RAM/寄存器/闪存的 MCU 只是愚蠢的。是的,我说的是 8 位 PIC。哑巴,哑巴,哑巴。这让我对图片失去了兴趣,以至于我什至懒得去看他们的新东西。(免责声明:这意味着新的图片可能会得到改进,我只是不知道。)

使用 8 位 MCU 很难(但并非不可能)访问大于 256 字节的数据结构。使用 16 位 MCU,可增加到 64 kbytes 或 kwords。使用高达 4 GB 的 32 位 MCU。

一个好的 C 编译器可以对程序员(又名你)隐藏很多这些,但即便如此,它也会影响程序大小和执行速度。

有许多 MCU 应用程序对此不会有问题,但当然还有许多其他应用程序会遇到此问题。这主要是您在 RAM 或闪存中需要多少数据(数组和结构)的问题。当然,随着 CPU 速度的增加,使用更大数据结构的几率也会增加!

包装尺寸

一些小型 PIC 和其他 8 位 MCU 以非常小的封装形式提供。6针和8针!目前我所知道的最小的 ARM Cortex-M0 在 QFN-28 中。虽然 QFN-28 对大多数人来说足够小,但对所有人来说还不够小。

成本

最便宜的 PIC 大约是最便宜的 ARM Cortex-M0 价格的三分之一。但这实际上是 0.32 美元对 0.85 美元。是的,价格差异对某些人来说很重要。但我认为,这个网站上的大多数人并不关心这么小的成本差异。

同样,在将功能更强大的 MCU 与 ARM Cortex-M0/M3/M4 进行比较时,通常 ARM Cortex 的表现“大致相等”或居于首位。当考虑到其他因素(易于开发、编译器成本等)时,ARM 非常有吸引力。

第二次总结

我想真正的问题是:为什么使用 ARM Cortex-M0/M3/M4?当绝对成本非常重要时。当超低功耗至关重要时。需要最小封装尺寸时。当速度不重要时。但是对于绝大多数应用程序,这些都不适用,而 ARM 是目前最好的解决方案。

鉴于成本低,除非有充分的理由不使用 ARM Cortex,否则使用一个是有意义的。与大多数其他 MCU 相比,它将允许更快、更轻松的开发时间,更少的麻烦和更大的设计余量。

还有其他可用的非 ARM Cortex 32 位 MCU,但我也看不出它们有任何优势。采用标准 CPU 架构有很多优势,包括更好的开发工具和更快的技术创新。

当然,事情可以而且确实会发生变化。我所说的今天有效,但可能在一年甚至一个月后无效。做自己的功课。

大卫凯斯纳是正确的。我想补充以下内容。

  1. 8 位 MCU 是仅有的 PDIP 封装中现成的 MCU,易于处理且易于粘贴在原型试验板中。
  2. 32 位 MCU 实际上可以比 8 位 MCU 使用更少的功率。< 20 MHZ 8 位 MCU 不一定会比 Cortex M4 使用更少的功率。
  3. 8 位 MCU 经常被业余爱好者使用,他们通常对 MCU 的要求不高。也许几百行简单的 C 代码。

我同意现在几乎没有理由不使用 32 位 MCU。我只会使用它们 [8 位 MCU] 有两个原因:我喜欢 PDIP 封装的易用性(不需要焊接);我通常不需要比 8 位 MCU 所能提供的更多的功率/复杂性。

交易破坏者实际上是可用的工具。

我们使用相对过时的飞思卡尔 MCF52259,它是一款支持 32 位 ~80Mhz 的 MCU。

选择的原因/思考过程是:

  • 它正在替换 32 位 M.Core 设备,因此移植相对简单
  • 这也意味着我们可以坚持使用现有的 IDE (CodeWarrior)
  • 我们需要大量的 IO:控制 3 个步进电机的步进/方向、4 个 PWM 通道、3 个 UART 以及 I2C 和 SPI。
  • 发生了很多事情(见最后一点),其中一些需要及时发生,所以我们需要确保有足够的 CPU 周期来完成所有事情。
  • 遗留代码与 M.Core 的 256k 闪存大小和 32k RAM 相冲突,因此将闪存和 RAM 加倍使生活更容易快速启动和运行。

如今,过度规范/扩展硬件功能(存储、速度、IO 等)比花费宝贵的开发时间优化代码以挤进更便宜/更小的 MCU 更具成本效益(和权宜之计),除非空间或权力是大问题。

在我们的案例中,该设备是 M.Core 规格的两倍,价格是 M.Core 的一半,使用更便宜的 MCU 只会在每块板上节省几分钱,但会花费大量开发时间并限制未来开发的潜力,而无需再次更换 MCU。

如果我们要构建一百万块电路板,那么值得进行成本工程练习以减少内容,但就目前而言,这不值得花费开发时间。