你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

楼主: zero99

[活动] (已公布)狂欢节答题(附加题)

 关闭 [复制链接]

41

主题

2476

回帖

282

蝴蝶豆

论坛元老

最后登录
2020-12-8
发表于 2017-11-29 22:15:59 | 显示全部楼层
附加题:
自行选型一个STM32的单片机,要求输出4路可控制脉冲数的高速脉冲,必须要尽可能的节省CPU时间,而且不能频繁的进入中断(只需提供解决方案,不用代码
一、首先,单片机的选型,因为需要高速脉冲,优先选择主频高的,STM32H743,定时器的时钟频率可达200MHz;
二、需要4路脉冲输出,可以采用TIM2的PWM CH1--CH4来输出,当然,如果所需要的4路脉冲频率不同,可以用4个独立的定时器的通道来输出;
三、节省CPU时间和不能频繁的进入中断,说明需要用单片机的硬件资源来实现。脉冲的周期、占空比由硬件PWM输出,都不是问题,主要是脉冲数量要可控。查看AN4013应用笔记定时器概览,定时器的从模式中的门控模式,可以满足要求 QQ截图20171129213235.jpg
四、那就需要另外一个定时器,作为主模式来触发TIM2的使能与关闭,采用TIM5的单脉冲模式,这个脉冲宽度设定为需要输出脉冲周期的N倍,N即为需要输出脉冲的数量。
五、通过STM32CubeMX大概配置一下,贴上部分截图(暂时未经实验验证,部分参数可能还需修改):
QQ截图20171129215637.jpg QQ截图20171129215655.jpg QQ截图20171129215707.jpg QQ截图20171129215721.jpg
六、如果4路脉冲的频率、数量等都不相同,或者都需要相互独立,则需要更换为独立的定时器来控制输出。
七、看到F3和H7系列都还有HRTIM(High-resolution timer),据说时钟倍频后可高达4点几GHz,无奈最近出差,都是抽晚上时间看看资料,也没能看懂怎么使用,说不定可以输出更高频率的脉冲,只能等以后有空再学习。

点评

虽然也指出了定时器的协助,但是并没有实际指出定时器如何具体的搭配和解决思路  发表于 2017-12-1 12:22
回复 支持 反对

使用道具 举报

61

主题

1071

回帖

17

蝴蝶豆

论坛元老

最后登录
2020-12-9
发表于 2017-11-30 07:36:35 | 显示全部楼层
方法1,用定时器级联,开启一路pwm的同时,再开启一路定时器,如用tim1作为pwM,开启TIM1作为计数器中断

方法2,采用DMA的方式,DMA中断了就可以关闭PWM了

主要用作电机控制
回复 支持 反对

使用道具 举报

91

主题

4603

回帖

4

蝴蝶豆

论坛元老

最后登录
2020-12-8
发表于 2017-11-30 21:58:41 | 显示全部楼层
厉害了啊
回复 支持 反对

使用道具 举报

13

主题

718

回帖

164

蝴蝶豆

金牌会员

最后登录
2020-5-24
发表于 2017-12-1 15:45:40 | 显示全部楼层
学习了~
回复 支持 反对

使用道具 举报

74

主题

1368

回帖

194

蝴蝶豆

版主

最后登录
2020-5-12
发表于 2017-12-1 17:12:06 | 显示全部楼层
本帖最后由 wolfgang2015 于 2017-12-1 17:20 编辑

“应用笔记AN4776”不是万能的,我也考虑过,经过思索我选择不用该方法是有原因的

虽然TIMER级联方式是解决题目之一,但考虑到这种模式下太占用Timer数量,对于通道数低的尚可,如果面对4个及以上,6个、8个的通道不是最有的选项,对MCU的TIMER资源有着要求。

用DMA虽然浪费内存资源,在内存/Flash易扩展的今天,是一个低成本的解决方案,应该是优于Timer级联,4通道已经需要8个Timer,对那些天生Timer不够用的MCU来说,就无法实现,使用DAM方式应该是最容易普及的方式(外扩SPI Flash等方法)

而且脉冲数量不受65535的限制。

用DMA方式,不会造成脉冲丢失的情况。
具体的可以参看  http://www.stmcu.com.cn   "首页 / 设计资源 / 本地化资源"板块的相关文档

STM32L053可控PWM脉冲方法之DMA
文档说明:目标要求:系统时钟8Mhz,6个PWM脉冲。实现上述目标的方法有很多种,比如两个定时器级连,定时器定时中断翻转IO口,等等,这里使用DMA的方式去实现。
STM32L053可控PWM脉冲方法之DMA.pdf





回复 支持 反对

使用道具 举报

35

主题

423

回帖

93

蝴蝶豆

版主

最后登录
2020-9-9
发表于 2017-12-2 10:03:35 | 显示全部楼层
wolfgang2015 发表于 2017-12-1 17:12
“应用笔记AN4776”不是万能的,我也考虑过,经过思索我选择不用该方法是有原因的

虽然TIMER级联方式是解 ...

DMA本来是个很好的方法,但是这个方式只能用于低细分或者低速场合,因为加速过程的脉冲数不能太多,否则存储空间够呛。固定加速模式还能放在flash,如果是动态加速模式(加速曲线每次运行可以变化)必须放在ram中就受到很大限制了。
你可以计算一下16细分下用1s加速到2000转(梯形加速)用的总脉冲数
而且,你这个数组还要设计成“0  脉冲数 0 脉冲数 0”的结构,否则你用DMA传输完成中断的方式来断开就太慢了,你必须直接硬件关闭定时器!必须以最快的速度关闭,也就是说不能用软件去操作。一个中断响应的过程就会多发几个脉冲,最可怕的是,多发多少个你还没法统计。
同时,DMA通道时很珍贵的,因为外设之间的DMA是复用的。4路高速脉冲你得用4个DMA+4个定时器通道。你这里使用了,其他更需要大数据的外设就没得用了!所以选型很关键!
不过定时器就不同了,可以看到现在STM32里存在有很多很多的定时器。
回复 支持 反对

使用道具 举报

74

主题

1368

回帖

194

蝴蝶豆

版主

最后登录
2020-5-12
发表于 2017-12-2 11:00:55 来自手机 | 显示全部楼层
Inc_brza 发表于 2017-12-2 10:03
DMA本来是个很好的方法,但是这个方式只能用于低细分或者低速场合,因为加速过程的脉冲数不能太多,否则存 ...

其实期间我还专门查询了dma通道映射关系表,相对于timer来说,二者都是不可或缺的mcu资源,难道天生timer资源不足的mcu就不能做高速受控脉冲,注意审题题目没有限定说"益于加速减速"的词语,这种是电机控制特殊的应用场景。mcu的用处不应该仅限于电机这一种场景就以偏概全。

时间(timer)或者空间(通道,存储)都是不可分的重要资源,衡量一个产品可以选择最优的解决方案,但该题不止一个候选答案选择,这就限制了出题者的本意;。你说是不?

如果方法论都限制了,那么怎么有创新的灵感呢?

回复 支持 反对

使用道具 举报

74

主题

1368

回帖

194

蝴蝶豆

版主

最后登录
2020-5-12
发表于 2017-12-2 11:17:36 来自手机 | 显示全部楼层
话说外设用到极致,难道dma通道使用到极致,内存、flash、还有dma的half传输中断等技巧的使用就不是外设使用到极致?如果率mcu的选型能力,那没有足够timer资源的方案选型就不可取了?把不可能变为可能是技术,也把外设进行了综合的合理应用。
回复 支持 反对

使用道具 举报

36

主题

1996

回帖

32

蝴蝶豆

论坛元老

最后登录
2020-12-9
发表于 2017-12-4 11:14:08 | 显示全部楼层
向大佬们学习
回复 支持 反对

使用道具 举报

74

主题

1368

回帖

194

蝴蝶豆

版主

最后登录
2020-5-12
发表于 2017-12-4 12:27:07 | 显示全部楼层
本帖最后由 wolfgang2015 于 2017-12-4 13:34 编辑
自行选型一个STM32的单片机,要求输出4路可控制脉冲数的高速脉冲,必须要尽可能的节省CPU时间,而且不能频繁的进入中断(只需提供解决方案,不用代码)

说到脉冲可控,控制的方法很种类很多,频率、数量、脉宽等等,从脉冲控制方式诞生的开始就有多种技术来实现,从无集成电路方案的晶体管、电子管、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分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版