不错的项目。这里有一些提示,但是很难对每个项目进行概括。
从计算要求开始
这将告诉您您需要什么样的内核以及 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,并提供所需的多任务机制)。