一个大型微控制器,还是很多小型微控制器?


24

相对而言,我习惯于用微控制器来做基本而直接的事情。诸如驱动LED,运行电动机,基本例程,字符LCD上的GUI等之类的东西,总是总是一项关键任务,最多还有一些其他小任务。这使我只能使用低端产品,因为在这些情况下,这确实是所有需要的东西。

我想开始设计更复杂的东西,但是微控制器连续体的上层并不是我接触过的东西。因此,在尝试选择一个微控制器同时执行许多任务的过程中,我一直处于非常困难的时期–我不能仅凭MIPS编号和令人满意的引脚排列来判断它是否具有足够的功能来执行我想要的事情去做。

例如,我想通过PI例程,一些串行和USB通讯,GUI以及一系列其他任务来控制2台BLDC电机。我很想为每个电动机配备一个微控制器,然后为其他任务配备一个微控制器,所以我可以保证杂项的开销不会增加关键的电动机功能。但是我不知道这实际上是个好主意还是幼稚的处理方式。

我想我的问题确实有两个方面:

  1. 在必须执行大量多任务处理时,多合一方法是一个好主意吗?或者细分和隔离更好,并且

  2. 如何根据任务列表直观地确定正在查看的微控制器是否具有足够的计算能力来执行所需的工作?

我一直在研究中等dsPIC33,直到运行RTOS的ARM SoC。一种系统化的方法来磨练我的需求将对我有很大帮助。




4
答案已经太多了,但是有时候在同一块板上获得全部使用相同语言的可编程微型控制器比仅仅使用单个微型控制器(可能带有一些智能外设)要耗费更多的精力。
Erik Friesen 2014年

Answers:


10

根据最终目标的不同,对问题的答案也有所不同。如果您只需要少量或更少的设备,则应使开发更容易,而不必担心零件成本。如果您要制造成千上万个,则有必要分析您的需求并降低设备硬件成本。

少量

如果您一次或少量使用这些设备,那么您的开发工作将淹没您的单项成本,而您应该关注的是最容易/最快的开发方式,而不是成本/微电子的大小。

通常,封装可以降低复杂性,从而提高生产率。如果您有一些严格的实时要求,例如BLDC控制,PID循环等,则可能会发现使用单独的控制器更快,专门用于那些与控制器通信的任务,在这些任务中您需要保留用户界面和其他非实时控制器。时间任务。

因此,在这种情况下,您的问题的答案是:

在必须执行大量多任务处理时,多合一方法是一个好主意吗?或者细分和隔离更好,并且

该天平略微趋向于分段和隔离。主要原因是调试实时系统会非常耗时,并且将此类任务保留在自己的处理器上会限制您在尝试查找无法正常运行的原因时必须测量或控制的变量。

如何根据任务列表直观地确定正在查看的微控制器是否具有足够的计算能力来执行所需的工作?

在这种情况下,具有大量资源的32位处理器与具有有限资源的8位处理器之间的成本差异相对于您要花在开发上的时间而言是很小的。几乎没有理由试图弄清楚您需要多少电量-只要获得您认为可以开发和使用的最大处理器即可。如果以后需要对设计进行成本优化,则测量实际处理器资源使用量相对容易,然后选择可以处理实际负载的出租处理器。在此之前,请使用最大的显示器,而不必担心找到“最佳选择”。

大量生产

如果您打算制造许多这样的设备,那么仔细的分析将节省大量成本。一般而言,一个较大的微控制器的成本低于能够取代单个微控制器的两个微控制器,尽管根据所需的特定任务当然会有例外。在这样的数量下,硬件的成本可能会比开发成本高得多,因此,与只进行少量生产相比,您应该期望花费更多的时间分析需求和执行开发。

当必须执行大量的多任务处理时,采用多合一的方法是一个好主意吗?还是进行细分和隔离比较好?

在整个项目的整个生命周期中,多合一方法通常比多个处理器便宜。要确保各种任务不会冲突,将需要更多的开发和调试时间,但是严格的软件设计将限制该功能几乎与使用单独的硬件一样多。

如何根据任务列表直观地确定正在查看的微控制器是否具有足够的计算能力来执行所需的工作?

您将需要了解要执行的任务以及它们占用了多少资源。假设满足以下条件:

您的BLDC PI例程每秒将消耗X个周期的处理器时间100次,每个例程需要约50字节的RAM进行操作,需要16字节的EEPROM进行调整,并需要1k闪存进行代码处理。他们每个人在微控制器中都需要3个16位PWM外设。您可能需要指定抖动,这将有特定的中断等待时间要求。

您的USB和串行例程将按需消耗Y个处理器时间周期,2k RAM,64字节EEPROM和8k闪存。需要USB和串行外围设备。

您的GUI将每秒消耗Z个周期的处理器功率30次,并且需要2k RAM,128字节EEPROM和10k闪存。它将使用19个I / O与LCD,按钮,旋钮等进行通信。

刚开始时,可​​能很难理解X,Y,Z的实际含义,这将根据处理器的体系结构而有所变化。但是,您应该能够在合理的范围内了解设计需要多少ram,eeprom和flash,以及需要哪些外围设备。您可以选择一个满足您的内存和外围设备要求并在该系列中具有多种性能选项的处理器系列。到那时,对于开发而言,您只需使用该系列中功能最强大的处理器即可。一旦实现了设计,就可以轻松地在功耗方面降低家族产品的成本,而无需更改设计或开发环境。

在完成足够多的这些设计之后,您将能够更好地估计X,Y和Z。您会知道,BLDC PI例程虽然经常运行,但却很小,并且需要很少的周期。USB和串行例程需要很多周期,但是很少发生。用户界面经常需要几个周期来查找更改,但是例如,不经常需要很多周期来更新显示。


11

我将分离出电动机控制,并有一个单独的微控制器,其中包括两个BLDC电动机中的每一个的PWM(也许是PIC18),因为PI控制器一旦启动,并且一旦编写代码,便是一项隔离任务。可以在两个micros上使用它。您可以通过I²C之类的接口将它们连接回主微控制器,并根据需要从那里下载PI控制的参数。这样您就可以在GUI中对其进行修改。

然后,我将在主单片机中运行其他所有内容,例如PIC24(根据您列出的任务,PIC32可能会过分杀伤)。另外,最快的PIC24E的运行速度几乎可以与PIC32一样快。

选择微控制器时,我首先估算所需的闪存和RAM数量,然后查看字长和处理器速度。对于后者,通常最难满足的要求是您希望处理的最快中断。例如,如果您要输出16 KHz的声音,并且每62.5 µs中断一次,那么您最好使微控制器的指令时间缩短几十纳秒,否则您将无法对其进行维修并获得任何其他完成工作。


7

您可以使用半正式的方法来帮助您生成答案。我强烈建议您阅读White的“设计嵌入式系统”的第2章,其中大多数内容都可以在Google图书中找到

本章讨论设计系统架构,并提供一种半正式的方法来最好地封装任务。尽管本章主要涉及一个控制器系统,但它很容易扩展到多个控制器。这将帮助您设想需要共享哪些资源,并帮助您为每个任务选择封装级别。

她提供了多种考虑的观点,我在下面显示其中一种,但是有许多有用的操作。当然,这本身并没有多大意义,但我希望它鼓励您阅读本章。

White撰写的《嵌入式系统的制作》第2章

至于“我怎么知道我是否有足够的控制器”,我自己的偏好是在设计沙箱中投入尽可能多的力量,然后弄清楚一旦设计得当,我可以减少多少资源。道路。10美元的微控制器和3美元的用于原型设计的微控制器之间的价格差异可能只是数周的重新组装和使您的拇指摇晃以等待新零件,而如果您有足够的功率,则设计可以始终保持运转。


5

我使用的系统大致上就是您所描述的系统-电机,IO,显示器,3x UART + SPI + I2C在Coldfire 52259(中端32位〜80MHz微型)上运行,并且虽然不是很困难正确的软件体系结构很重要-我们有很多东西在硬件和中断上运行(硬件可以自行处理的任何事情,我们都在硬件和带有中断的服务上运行),离开main()循环来完成所有内部工作。

我个人不喜欢我所见过的大多数RTOS,在低端他们they肿了一个项目,增加了另一件事要学习,您将通过直接做事(使用可用的硬件功能+中断)来从硬件中获得更好的性能。而不是伪造软件。

在高端市场上,如今,那些足以真正受益于RTOS 的复杂而强大的MCU与仅运行嵌入式Linux的产品(SoC)之间的利润似乎很小。

但是,在那种情况下,我想说的是,在主“大脑” CPU的命令下,使用小型廉价的微控制器来处理关键功能(例如,对时序或在极限处停止至关重要的EG电机控制)具有一定的价值,因此您不必依赖在“非实时”操作系统上及时执行某些操作。


3

其他人的答案都更好,但我想补充一点可能有用。这可能不合常理,我很乐意将其添加为评论,但有一个50代表规则:(

简短的答案取决于它,请参见上文,但为什么也不要考虑处理器的好处。

1个1个-p+ps

当然,成本高,易于实施;等等是重要的,甚至还要考虑。


1

答案可能取决于实现细节。某些任务在单独的微控制器上更容易以干净,可靠的方式实现。功耗也可能是一个考虑因素-通常来说,一个微处理多个任务的功率将比几个微处理单个任务的功率低。


1

“马力”是您能否满足实时约束的第二要务。

如果您有两个PWM输出,并且都需要在同一时间进行切换,那么您需要具有必要的并行度才能做到这一点。如果您有一个专用的PWM控制器来照顾确切的时序,即使使用很小的微控制器也可以使用,而即使有大量计算能力,基于GPIO的解决方案也会非常复杂。

对于大多数协议,现代MCU都嵌入了协议中具有实时限制的那些部分的实现,因此,如果您发现具有所需外围设备并具有所需CPU速度来处理数据流的MCU(即,硬实时需求会退化)将其转换为软实时要求,即“将能够在FIFO装满之前从FIFO中读取数据,并且比其填满要快”,这将是最佳选择。

如果不存在这样的解决方案,则您的选择是使用CPU + FPGA解决方案(例如,具有硬ARM内核的FPGA)将功能移至单独的控制器中,或者使用纯FPGA解决方案(根据复杂性要求,可选地具有软CPU)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.