如何为我的项目列出对微控制器的要求列表?那么我怎样才能找到适合的微控制器呢?

电器工程 微控制器 控制
2022-01-22 11:24:23

我一直在 Arduino MEGA2560 上进行电动自行车控制项目。该程序运行 3 个 PID 控制回路、一个电池容量控制回路(基于查找表的插值)、一个速度计(基于簧片开关的样本)以及一个 LCD 屏幕来显示信息。它的输入是 3 个模拟信号:电池电压、电流和用户油门输入以及一个数字输入:车速表(簧片开关)开/关信号。目前,所有这些都在“长”算法上运行,Arduino 设法每秒完成 10 个循环。由于 TFT LCD 屏幕需要大量的计算能力,我正在考虑用字母数字屏幕代替它。

输出包括一个模拟油门信号到电机控制器、LCD 屏幕和可能需要模拟信号的其他一些设备。因此,ADC 转换器是必不可少的,而 DAC 将非常有用,尽管我目前正在使用带有 RC 低通滤波器的 Arduino PWM 输出。类似地,在不中断处理器的情况下读取数字和模拟信号的能力将是巨大的。

我想以此为基础制作消费产品,因此我想用不同的微控制器从头开始构建我自己的平台,该微控制器每秒可以给我至少 100 个样本(是 Arduino 实现的 10 倍)。另外,为了避免浮点数,我的计算使用长变量,因此数字大于 16 位,所以我假设 32 位 MCU 是个好主意。此外,能够进行浮点计算的 MCU 可能会有助于简化代码中的数学运算。

最后,我不确定如何开始寻找能够满足这些要求并允许从 Arduino 环境快速过渡的 MCU。任何有关如何寻找此类 MCU 的指导将不胜感激!

4个回答

(这是一个通用指南。我怀疑您也可以从代码优化中受益,但这超出了本网站的范围。)

第 1 步:粗略的规模、预算、供应商

选择以下之一:

  • 计算机(Raspberry Pi、Beagleboard、PC104 板、Intel Edison 等)。引导通用操作系统并具有强大的处理能力。更昂贵和更耗电。10-100 美元。

  • 大型单片机。ARM Cortex-A / PIC32 / dsPIC / AVR32 / TI C系列DSP等。计算能力不错,操作系统可选。〜5美元。

  • 小型单片机。皮质-M / PIC16。对于真正的操作系统来说,空间不足,也许只是一个轻量级的任务调度程序。〜2美元。

  • 微型单片机。仅适用于您关心每微安功耗的应用。〜$ 1或更少。

在这个阶段,您还应该考虑您喜欢和不喜欢哪些供应商和工具链。看看诸如在线调试设备和 IDE 之类的东西的成本。

第 2 步:最少外围设备

你需要USB之类的东西吗?PCI?HDMI?SATA?异常快速的 ADC 或 DAC?几乎所有“小型”或“小型”类别都没有这些,尽管 USB 相当广泛可用。

第 3 步:原型

选择符合上述标准的东西,如有必要,随机开始,找出它的可行性以及您需要多少空间/处理能力。你已经做了一些。用 C 语言编写应该使大部分逻辑可移植。

一旦你有了原型,你就可以对自己说,“我需要一个这样的原型,但有更多的 X”,然后让它指导你的决定。

第 4 步:收缩

从 CPU 系列中最大的(大多数闪存和 RAM)成员开始,编写应用程序的 v1,然后选择更小、更便宜的一个来适应通常更容易。您还可以将时间花在将软件安装到更少资源中的艺术上。什么是值得的取决于你要制造多少单位。

不错的项目。这里有一些提示,但是很难对每个项目进行概括。

从计算要求开始

这将告诉您您需要什么样的内核以及 MCU 的一般性能。我建议您从这个开始,因为与外围设备不同,它显然无法使用外部组件进行扩展。

首先,您似乎在循环中使用了带有大整数的繁重数学运算。因此,正如您所建议的,32 位在这里很有用,因此 ARM 是一个理想的候选者。至于运行频率:目前,您使用的是 Arduino MEGA2560(我假设运行频率为 16MHz),您可以进行 10 个循环/秒。如果你想达到 100 个循环/秒,你应该可以使用 100MHz 或更高范围内的 Cortex-M3/M4(粗略估计)。请注意,Cortex-M4F 有一个浮点单元。

我们已经缩小了选择范围。

内存要求

这很简单:为原型选择其范围内 RAM/Flash 最多的 MCU。一旦您验证了原型,就可以从具有足够 RAM/Flash 的相同系列切换到 MCU,因为您知道自己的确切要求。

请注意,我认为您的应用程序不需要惊人的内存量。

现在,外围设备

你绝对需要一些ADC。我们正在研究的所有 MCU 都有一些,所以这不是一个有用的标准。数字输入/输出也不是,除非您需要大量数字输入/输出(这似乎不是您的情况)。

你似乎需要一个 DAC。但是,这实际上并不容易找到,并且会过多地缩小候选人范围。所以我们不保留这个要求,我们将继续使用 PWM 和低通(实际上这当然是可以接受的)。

你没有提到任何通信接口,除了 LCD (稍后)。无论如何,如果你需要的话,所有的 MCU 都有 I2C/SPI/UART/...。

液晶显示器

这个比较棘手,因为有很多不同的解决方案对 MCU 提出了完全不同的要求。但是不要根据MCU来选择LCD。为您的产品选择所需的 LCD,然后选择能有效驱动它的 MCU。

  • 如果你想要一个字符 LCD:那么对 MCU 来说最简单、约束最小的就是通过一些串行接口(通常是 SPI)与它通信。这样它就不会使用太多的 PIN,您可以使用更小/更便宜的 MCU,而且速度不是问题。
  • 如果你想要一个图形 TFT LCD:如果它很小,串行链接仍然是合适的。但是,对于 320x200 或更大的分辨率,如果您想拥有一个漂亮的图形界面,您将开始希望使用并行界面进行通信。在这种情况下,您要么使用一些 GPIO(但这会给 MCU 带来更多负载,因为您必须对控制线进行位敲击),或者您选择具有专用 LCD 接口的 MCU(通常与外部存储器接口) 。最后一个对 MCU 的选择施加了强烈的约束,但你没有其他强烈的约束,所以......

现在,你选择

访问 ST Micro / NXP / Atmel 网站并使用他们的 MCU 选择工具。您也将花费大量时间阅读数据表。趁着这个时间。它没有浪费。您将在这里学到的任何东西,即使您不是专门用于这个项目,也会很有用。

此时,您还需要查看实际需要的 PIN 数量,并检查所选 MCU 候选的复用方案,以验证您可以使用所需的所有 PIN 功能。因为很明显,您需要采用满足您要求的引脚数最少的 MCU(出于成本/PCB 空间原因)。

在 Mouser/Digikey 上查看价格/供货情况。但是你不应该在这里需要特别昂贵的东西。也许5欧元左右。

关于 LCD 控制的最后一件事

LCD 的更新似乎是您主循环的一部分。它不应该。特别是如果你每秒循环 100 次,那是没有用的。让控制循环计算所有内容并在每次迭代时调整电机命令,但只需更新值以显示在内存中的某处。然后,当没有更重要的事情要做时,让另一个优先级较低的循环向用户显示此信息。

是的,理想情况下,它需要一些任务切换之类的东西。实际上是一个真正的操作系统(查找 FreeRTOS、Coocox OS、Nuttx ......这些非常小,主要用于 Cortex-M,并提供所需的多任务机制)。

请注意,这是一个广泛的主题,可以使用多种(主观)方法正确回答。

此外,stackexchange 格式不擅长为问题设计解决方案。例如,您很少有人为您设计硬件。相反,您提出硬件设计并提出有关它的问题。

那就是说...

从您无法更改的处理器功能开始。例如速度和内存(如果适用)大小。调查您是否需要中断以及中断处理的复杂程度。

如果您需要 ADC 或 DAC 等外设支持,情况会更加复杂。这些功能应该内置在处理器中还是在处理器外部。价格、准确性甚至噪音都是做出此决定的因素。

如果要支持外部外围设备,请考虑必要的串行通信类型。外部硬件可能需要 SPI、I2C 或其他类型的 UART。如果数据速率很高,最好找到具有与其串行通信端口相关的 DMA 功能的处理器。

最后,如果这是一个嵌入式处理器应用程序(通常是指专用于某项任务的处理器),请考虑将需求分成几组并为每组分配一个处理器。例如,GUI 显示处理器可能不需要 ADC 功能。这种解决问题的客观方法已被证明在软件中是成功的,并且随着处理器价格的下降,也可以应用于硬件。

在现实世界中,这种方法是迭代的。也就是说,许多项目从一个处理器开始,然后随着硬件和/或软件问题的发生或项目范围的变化更换不同的处理器。

我没有看到有人提到工具的成本。我的公司选择了 TI CC2541,发现它只使用 4000 美元的 IAR 编译器编译,这绝对是业余爱好者的表演障碍。还有程序员。它可以是 20 美元或更多。更便宜的工具现在似乎更常见了,所以也许这很快就会成为过去。

此外,如果您自己回流,TQFP 等封装比 BGA 更容易。根据个人经验,大型 BGA 很难做好。