首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定单片机时钟速度要求

如何确定单片机时钟速度要求
EN

Stack Overflow用户
提问于 2021-03-29 20:41:28
回答 2查看 460关注 0票数 1

概述:

我花了一段时间想如何提出这个问题。为了缩小范围,我想以“现实生活”示例应用程序的形式提供我最初的HW需求。

我知道时钟的速度可能是相对的,因为它是一个逐个案例的基础。例如,您对某一速度的要求可能会受到MCU提供的片上外设的影响。例如,您可能会花费(n)个周期为编码器服务ISR,或者,您可以选择一个具有QEI输入的MCU (在某种程度上)为您服务,这反过来可能会放松您的需求?

我不是专家,而且还在学习,所以如果我用了一个不正确的术语,或者完全误解了什么,请叫我出来。我向你保证,欢迎反馈!

示例应用程序:

这个应用程序相对简单。它可以被认为是一台非阻塞状态机,其中机器的每一次‘迭代’必须在20 as内完成。这台机器的一次迭代有4项主要任务:

  1. 解码串行有效负载,由32个字节组成。长度固定在32个字节,有效载荷是动态的,波特值为115200bps (见下面的任务#2 ),
  2. 读取4个增量轴编码器信号,这些信号与4台直流电动机耦合,每台电动机有一个编码器(参见任务1
  3. ,4个限制开关的位置)。ISR驱动,触发在上升边缘上的每一个switch.
  4. Based上的3类输入,单片机将输出4个单独的信号@50 to (20毫秒)的电机控制器为其下一组运动。(见下面的任务#3 )

从IO的角度来看,我知道MCU正在读取8个数字信号(4个正交编码器,4个限制开关),并在UART上解码32字节的串行帧。

基于这些数据,单片机将输出4个独立的PWM信号,每台电机脉宽为1000usec-3200usec。

问题:

说到底,我正试着思考如何将我的需求映射到MCU的选择中,仅仅从速度的角度来看。

我很容易在数据表中看到这个芯片,因为它有(n) UARTS,(n) ISR输入引脚,(n) PWM输出等等,所以这个芯片满足了我的要求。但是我的项目太小了,所以我总是认为处理器“足够快”。除了我的直接外设需要,我从来没有真正观察实际的单片机速度,这是一个问题,在我的一端。

为了解决这个问题,我试图了解根据给定应用程序的需要选择特定时钟速度的原因。或者,另一种说法,这可能是错误的,但是如何量化处理器对特定应用程序的理论负载?

更多信息

任务#1:编码器:

这4台电机在系统中都有不同的任务,但不管怎么说,它们都是相同的品牌/型号电机,最大RPM为230。我的假设是,如果在最坏的情况下,其中一台电机的转速为230 RPM,那将意味着,在完全正交分辨率(A/B通道的上升/下降数),1000 per编码器将产生每转4K的中断。因此,MCU将不得不为这些中断提供服务,这可能会给系统造成瓶颈。例如,如果需要(n)个时钟周期来服务ISR,而对于一个电机的1转,我们期望4K中断,那就是…。230(RPM) * 4K (ISR / rev) ==每分钟92万次中断?呀!然后我想你可以再一次推断,在最坏的情况下,4台发动机的转速都是230 RPM,如果编码器是全分辨率的话,系统必须每分钟承受每分钟920 K的中断。那么920 K*4电机==每分钟3,680,000次中断?我百分之百地肯定我做错了什么,所以请你,让我直截了当。

任务2:串行解码

单片机将需要一个专用的HW串口来解码一个32字节的数据包,它每7ms重复一次不同的值。波特率将被设置为115200bps。

任务3:脉宽调制输出

基于任务1和任务2的信息,单片机将写入4个独立的PWM输出。每个输出的脉冲将在1000-3200 each之间,频率为50 of。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-30 07:09:14

您需要将实时关键部分从应用程序的其余部分中分离出来。例如,如果您这样做是基于中断的,那么UART帧的实际接收就有点时间紧迫了。但是协议解码一点也不重要,除非期望您在一定时间内做出响应。

解码串行有效载荷,由32个字节组成。

您可以通过中断填充缓冲区来实现这一点,也可以使用DMA查找部件,这在当今相当常见。DMA意味着您不必考虑一些烦人的、相对较低频率的UART中断干扰其他任务。

读取4个增量轴编码器信号

我没有和这样的编码器合作过,所以我不知道他们的时间有多紧迫。如果你必须捕捉每一个中断,并且你的计算是正确的,那么每分钟3,680,000次中断仍然没有那么糟糕。60*60/3680000 =978 60。因此,大约每毫秒中断一次,这不是一个“硬实时”要求。如果这是你唯一需要做的时间紧迫的事情,那么任何8兆赫的寒酸都可以跟上。

确定4个限位开关的位置

这里没有提到定时,但我假设这是可以被低优先级循环计时器循环轮询的东西。

单片机将输出4个独立的脉宽调制信号

没问题,只要选择一个有一个像样的PWM硬件外设。你应该只需要不时地更新一些PWM占空比寄存器。

总的来说,这听起来并不是所有的实时关键。我做过更糟糕的实时项目,包括8块和16块。然而,每次我这样做,我总是后悔没有选择一个更快的单片机,因为你总是想要添加的东西,随着项目/产品的继续进行。

听起来你的平均主流皮质M0+将是这个项目的一个很好的候选人。在大约48兆赫的时钟,你将有足够的CPU功率。皮质M4或更大,如果你真的期望浮点数学(我不太明白为什么你会需要它)。

考虑到目前的组件危机,要小心你选择哪个品牌!特别是不要使用STM32,因为ST现在不能生产它们,你可能要等一年多才能得到零件。

票数 2
EN

Stack Overflow用户

发布于 2021-03-30 11:11:54

这个问题的答案是“经验”。但从直觉上看,你的例子并没有特别费钱--尽管你有很多方法可以把它搞砸。我曾经在一个200 CPU的C5502数字信号处理器上运行的一个项目,几乎100%的CPU负载。该应用程序现在运行在72 M3的Cortex-M3上,仅占60%,附加功能和I/O在最初的实现中没有出现。

您的应用程序是I/O绑定的;根据数据速率(和临界中断率),I/O很少构成最高的CPU负载,并且可以使用DMA、硬件FIFO、输入捕获定时器/计数器和硬件PWM等来最小化I/O的影响。我不打算详细讲了,伦丁已经说过了。

还请注意,原始处理器的速度对于数据或信号处理和数字处理非常重要--但是I/O通常需要的是确定性的实时响应,这很少是简单的MHz或MIPS问题--运行在几个MHz上的8位AVR的响应将比运行Linux的500 MHz应用程序处理器所能保证的更确定,甚至可能更快--而且它不会花30秒启动!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66861363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档