你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
Inc_brza 发表于 2017-12-2 10:03 DMA本来是个很好的方法,但是这个方式只能用于低细分或者低速场合,因为加速过程的脉冲数不能太多,否则存 ...
自行选型一个STM32的单片机,要求输出4路可控制脉冲数的高速脉冲,必须要尽可能的节省CPU时间,而且不能频繁的进入中断(只需提供解决方案,不用代码)
nyszx 发表于 2017-11-29 21:46 题目分析:自行选择一个STM32,为啥不来点干脆的,直接指定型号,毕竟STM32产品线上有11个系列,将近800个 ...
wolfgang2015 发表于 2017-12-4 12:27 说到脉冲可控,控制的方法很种类很多,频率、数量、脉宽等等,从脉冲控制方式诞生的开始就有多种技术来实 ...
Inc_brza 发表于 2017-12-4 15:47 其实你一开始是这样回答,那样的话你可以得到名次的,可惜了!不过无论如何,机会还是有很多的! ...
nyszx 发表于 2017-12-4 16:01 之前也考虑过使用DMA+定时器方案,此方案也能设计出四路高速脉冲,但因为四路输出,同时开启DMA的话势必会 ...
wolfgang2015 发表于 2017-12-4 16:25 要算影响CPU,是使CPU能控制的部分,传输直接从内存到外设,CPU不参与运算,没有寄存器的读写判断,这块的 ...
nyszx 发表于 2017-12-4 20:05 因为我一开始也不确定,担心中断延迟会导致计数不准,所以直到我亲自验证了不会,才决定使用主从定时器方案 ...
其实期间我还专门查询了dma通道映射关系表,相对于timer来说,二者都是不可或缺的mcu资源,难道天生timer资源不足的mcu就不能做高速受控脉冲,注意审题题目没有限定说"益于加速减速"的词语,这种是电机控制特殊的应用场景。mcu的用处不应该仅限于电机这一种场景就以偏概全。
时间(timer)或者空间(通道,存储)都是不可分的重要资源,衡量一个产品可以选择最优的解决方案,但该题不止一个候选答案选择,这就限制了出题者的本意;。你说是不?
如果方法论都限制了,那么怎么有创新的灵感呢?
说到脉冲可控,控制的方法很种类很多,频率、数量、脉宽等等,从脉冲控制方式诞生的开始就有多种技术来实现,从无集成电路方案的晶体管、电子管、555、8051、再到各种ARM,应用领域不可说不广从单路再到多路控制,特别是多路互补PWM在步进电机领域有很重要的使用。
个人认为本地题的关键词
第一层为:
4路、可控制、脉冲数、高速脉冲
第二层为:
节省CPU时间
第三层为:
不能频繁的进入中断
至于是否需要“多路正交“、"用脉冲来代替正弦波" 等都不是该题目明确表达的内容及含义,因此应排除指定用途,因此这题目的答案就不能按某特定用途的解决方式来解决。
输出脉冲,最简单的就是控制PIN脚的电平高低,再计数获得电平高低输出时间长短 和 这种波形的电平周期性来获得一定数量的脉冲信号。
高速脉冲信号:那么这就需要涉及到高速脉冲的测量,拿示波器是一个方法。达到一定频度的持续脉冲就是高速脉冲。另外的一个就是用MCU自身的定时器来测量高速脉冲。
如果要测量4路就需要4个定时器来测量(这是做产品时要考虑的,现在题目没有要求测量可不考虑这项内容,但做产品时需要考虑的更多)。
可控制、脉冲数:这里要求的是脉冲数量有要求。
利用外设手段来控制脉冲数量是重点
可控的因素有,MCU计数、计数器、数组等方法。都是计数的方法,这就是一些控制数量的方法;
利用定时器来计数,那么要在判断定时器数量要求。
数组来计数,利用数组的长度来计数。
从数量感知来说,可以在脉冲输出后感知计数,另外需要在脉冲源侧进行计数输出。
接着第二层说了:节省CPU时间,
这里就排除用MCU来计数的方法,需要利用外设计数,这里就有几种方法 计数器、DMA等方法节省CPU时间。
第三层不能频繁的进入中断
这里提到了中断,不能频繁进入,不是不能进入,而是计数时进入中断的频率不能太频繁。
1、利用输出后的感知来计数时,每次计数都是一次中断,占用大量的MCU中断所以不可取;
2、利用输出源的计数,用一个计数器来计算次数、用一个计数器来控制脉冲,这里有一种技术可以利用,就是溢出,出现了溢出中断,就停止发送脉冲。好方法。。。。
3、利用DMA数组+1的方法来发送,发送的次数限制,受数组的大小,这也是好方法。。。
当需要对2和3比较二者优劣时,就要分析两者边界问题上的影响:
1、中断与数组控制范围?
2、中断与数组控制触发的时间长短,是否对脉冲数量产生影响?
3、定时器与DMA的中断是否会被拦截屏蔽,拦截屏蔽后对脉冲数量输出是否有影响?
4、在中断相同优先级下,是否能准确控制脉冲数量?
很好,最佳答案,名副其实。
ST官方其实在AN4776中都介绍了控制脉冲的方式
控制方式 大致方式可以分为以下几种图:
DMA+RAM数组方式
主/从定时器方式一:
主从定时器方式二:
脉宽调制时的RAM+DAC的模式
当然这些控制模式都是针对脉冲变化而来,针对本题的脉冲计数只是一个方向性提示,附上ST原文供大家参考
其实你一开始是这样回答,那样的话你可以得到名次的,可惜了!不过无论如何,机会还是有很多的!
之前也考虑过使用DMA+定时器方案,此方案也能设计出四路高速脉冲,但因为四路输出,同时开启DMA的话势必会影响到AHB总线占用,继而影响CPU,不符合题目要求因此放弃选择此方案,选择主从定时器,这样每通道每次发送脉冲只触发一次中断且不占用总线(APB之间通过桥接器通信,不经过AHB)。
修改原因:HPB-->APB
这只是说明和思路,在这个思路的影响下才有回答的方案选择。
说道 AHB 的影响,总线可有几十M,按照400kHz的*8路(翻倍), 3.2Mhz 这个利用的DMA通道复用,对CPU影响有限。
反观Timer中断,看看中断向量表呢?
如果在优先级相同,DMA的中断向量表比 Timer的向量表靠前,有优先顺序,在外设通过DMA传递数据与Timer中断共同作用下的时候。Timer中断会有延迟,这势必影响到脉冲的输出数量和精度。
要算影响CPU,是使CPU能控制的部分,传输直接从内存到外设,CPU不参与运算,没有寄存器的读写判断,这块的影响也忽略不计。没有过MCU,内部的操作影响也有限。
的确APB通信不经过AHB,但是一旦AHB上有中断,这不是让APB的中断优先等级太靠后而不能及时相应,当需要触发脉冲或停止脉冲时就会受到其中断的影响。何况主从定时器级联需要控制脉冲的时间很短,65535个时钟周期,对于长短脉宽不同的脉冲,数量控制精度有差别吧。
既然选择DMA是满足题目要求的,那是不是这个答案应该跟其他正确答案一视同仁的评判呢?
纠正下笔误:HPB-->APB。超过65535的可以在软件上进行分段处理,在中断中设置下一次的ARR值。极端情况下,四路完全独立,四路同时使用,速度非常高,且不能把四个定时器优先级设为最高,那解决方案应该是关闭UIE,使能UDE,通过DMA来关闭主定时器,这样就不需要中断来处理,且传输数据量小,对CPU影响最小,有条件的坛友可以验证一下是否可行。
TIMER 资源是很多,Timer1 和Timer8 ,Timer2~Timer5 基础型大部分都有
但Timer9~timer14 也不是全部分布的,不是个个单片机都跟STM32F413Zx一样定时器那么全,
也是重要的外设资源,定时器进行主从关系设置的也不是都满足进行设置。控制4路独立脉冲信号就占用了8个。在这样的情况下就占用,若还有剩下的定时器要求,明显就不足了。
DMA 是能关闭,ExtI0~ExtI4、RCC、Flash、RTC这些优先于Time的中断呢?大面积使用定时器,稍微有些定时器优先不够,那么主从会被其他优先还是不能确保中断不被其他抢占,总不能存在优先级干扰的中断都进行使能关闭吧。
虽然定时器用的是APB,随便打开一个定时器,还有APB1、APB2, 在再通过AHB耦合二者,通道占用也不小,这不同样分担AHB总线资源,中断还要到MCU那边去,这8个Timer占用的系统资源也不小。
你说的DMA与MCU的 AHB 竞争关系 与MCU的时间不是一个概念。
DAM还分DMA1和DMA2每个DMA还有8个通道,16个通道, 这里只占用1/4通道资源,还很富足。
定时器 的Timer 脉宽 是时间周期吧? 主定时器的脉宽与从定时器的分频运行到一定周期,发送的数量多了会出现耦合性Reset,这还是会影响脉冲周期的,典型案例是用步进电机的时候,脉冲发送久了会丢个几步很正常,通常用感应元器件来修正偏差。这时候就离不开感应元器件的中断。。。。。