不错的项目。这里有一些提示,但是很难对每个项目进行概括。
从计算需求开始
这将告诉您所需的内核以及MCU的一般性能。我建议您从此开始,因为与外围设备不同,它显然无法使用外部组件进行扩展。
首先,似乎您在循环中使用了带有大整数的繁重数学运算。因此,正如您所建议的那样,此处32位将很有用,因此ARM是理想的选择。至于操作频率:目前,您使用的是Arduino MEGA2560(我假设运行频率为16MHz),您可以进行10次循环/秒。如果要达到100个循环/秒,则Cortex-M3 / M4的频率应在100MHz或更高(粗略估计)范围内。请注意,Cortex-M4F具有浮点单元。
我们已经缩小了选择范围。
内存需求
这很容易:为原型选择具有其最大RAM /闪存范围的MCU。一旦您验证了原型,现在就知道您的确切要求,然后从具有足够RAM /闪存的相同范围切换到MCU。
请注意,我认为您的应用程序不需要大量的内存。
现在,外围设备
您绝对需要一些ADC。我们正在寻找的所有MCU系列都有一些,因此这不是一个有用的标准。数字输入/输出都不是,除非您需要大量的输入/输出(这似乎不是您的情况)。
您似乎需要一个DAC。但是,这实际上是您不容易找到的,并且会缩小候选人的范围。因此,我们不会满足该要求,而将继续使用PWM和低通(实际上可以接受)。
除了LCD(此后),您没有提及任何通信接口。无论如何,如果需要,所有的MCU都有I2C / SPI / UART /...。
液晶屏
这很棘手,因为有很多不同的解决方案对MCU提出了完全不同的要求。但不要根据MCU选择LCD。选择产品所需的LCD,然后选择可以有效驱动产品的MCU。
- 如果您要使用字符LCD:那么MCU的最简单,最少的限制就是通过某个串行接口(通常是SPI)与之对话。这样,它就不会使用太多的PIN,可以使用更小/更便宜的MCU,而且速度也不是问题。
- 如果您需要图形TFT LCD:如果是小型LCD LCD,则串行链接仍然合适。但是,对于320x200或更大的尺寸,如果您想拥有一个不错的图形界面,您将开始希望与并行界面进行通信。在这种情况下,您可以使用一些GPIO(但是这会给MCU带来更多的负载,因为您必须稍微碰一下控制线),或者选择具有专用LCD接口的MCU(通常与LCD接口相同)。外部存储器接口)。这最后一个对MCU选择施加了很大的约束,但是您没有其他强大的约束,因此...
现在,您选择
请访问ST Micro / NXP / Atmel网站并使用其MCU选择工具。您还将花费大量时间阅读数据表。慢慢来 它没有浪费。即使您没有将其专门用于此项目,您在这里学到的任何内容也可能会有用。
此时,您还需要查看实际需要的PIN数量,并检查所选MCU候选者的复用方案,以验证您可以使用所需的所有PIN功能。因为很明显,您将需要采用满足您要求的最少引脚数的MCU(出于成本/ PCB占用空间的原因)。
在Mouser / Digikey上检查价格/可用性。但是您在这里不需要特别昂贵的东西。大概5欧元左右。
关于LCD控制的最后一件事
LCD的更新似乎是您主循环的一部分。不应该这样 尤其是如果您每秒循环100次,那将毫无用处。使控制循环计算所有内容并在每次迭代中调整电动机命令,但只需更新值以显示在内存中的某个位置即可。然后,当没有其他事情要做时,让另一个低优先级的循环向用户显示此信息。
是的,理想情况下,它需要一些任务切换和其他工作。实际上,是一个真正的OS(查找FreeRTOS,Coocox OS,Nuttx等……非常小,它们在Cortex-M上大量使用,并提供所需的多任务机制)。