搜索
bottom↓
回复: 35

STM32的一个定时器输出4路频率是可以的

[复制链接]

出0入0汤圆

发表于 2015-7-13 16:12:17 | 显示全部楼层 |阅读模式
坛友果不我欺也

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2015-7-13 16:22:05 | 显示全部楼层
怎么做到了的??

出0入0汤圆

发表于 2015-7-13 16:29:11 | 显示全部楼层
求讲解,最近也在做这个,LZ需要用到几个定时器?

出0入0汤圆

发表于 2015-7-13 16:56:46 | 显示全部楼层
怎么做到的?难道动用了DMA?

出0入10汤圆

发表于 2015-7-13 19:15:22 | 显示全部楼层
纯硬件实现吗?

出0入0汤圆

发表于 2015-7-14 08:38:35 来自手机 | 显示全部楼层
能稍作分析吗?

出0入0汤圆

发表于 2015-7-14 09:11:24 | 显示全部楼层
频率不太高的话肯定可以了,看最下面的那个占空比还不是50%

出0入0汤圆

 楼主| 发表于 2015-7-14 10:01:39 | 显示全部楼层

看4楼  和  5楼

出100入85汤圆

发表于 2015-7-14 13:58:24 | 显示全部楼层
RAMILE 发表于 2015-7-14 10:01
看4楼  和  5楼

纯硬件,DMA ,how to?

出0入0汤圆

发表于 2015-7-15 09:02:40 | 显示全部楼层
我设想:首先CNT都是从0-999计数,假设这个计数周期为T,然后4个通道匹配时产生DMA请求,关键点来了->你将存放在RAM里的算好的占空比数组用DMA搬运到CCRx里
存放结构将是这样
struct T{
uint16_t Hight;
uint16_t Low;
};
struct T Feq[n];
假设我需要的第一个是脉冲频率正好为T(*1) 那么我就先要算好Feq[0].H=1000/2*1;Feq[0].L=1000/2*1
第二个脉冲频率为 F (*T) 那么就要算好  Feq[1].H=1000/2*F; Feq[1].L=1000/2*F
................
试问,你的RAM有多大?

出0入0汤圆

发表于 2015-7-15 09:58:16 | 显示全部楼层
我也来学习一下.

出0入0汤圆

发表于 2015-7-16 13:23:59 | 显示全部楼层
hmd420304805 发表于 2015-7-15 09:02
我设想:首先CNT都是从0-999计数,假设这个计数周期为T,然后4个通道匹配时产生DMA请求,关键点来了->你将 ...

您的这个方法可以变频率吗?

出0入0汤圆

发表于 2015-7-16 18:07:23 | 显示全部楼层
其实我想说STM32的定时器还是挺多了,如果不是考虑同步问题的话,为么不用几个定时器独立工作?

出0入10汤圆

发表于 2015-7-16 18:17:28 | 显示全部楼层
hmd420304805 发表于 2015-7-15 09:02
我设想:首先CNT都是从0-999计数,假设这个计数周期为T,然后4个通道匹配时产生DMA请求,关键点来了->你将 ...

谢谢你的点拨,我晚上写下程序,然后放上来给大家!

出0入10汤圆

发表于 2015-7-16 18:21:26 | 显示全部楼层
这里应该是要不断地更新CCRx的值,让其跟得上CNT的变化,然后不断地比较!

出0入0汤圆

 楼主| 发表于 2015-7-17 12:13:26 | 显示全部楼层
10xjzheng 发表于 2015-7-16 18:17
谢谢你的点拨,我晚上写下程序,然后放上来给大家!

这个东西就是一层窗户纸,仔细读DMA手册就发现这就是个DMA的一般功能,你放源码上来,罪同剧透

出0入0汤圆

 楼主| 发表于 2015-7-17 12:17:49 | 显示全部楼层
hmd420304805 发表于 2015-7-15 09:02
我设想:首先CNT都是从0-999计数,假设这个计数周期为T,然后4个通道匹配时产生DMA请求,关键点来了->你将 ...

定时器PWM有个匹配时候反转toggle模式可以用,count直接数到0xffff

出0入0汤圆

发表于 2015-7-17 20:16:15 | 显示全部楼层
如果确实是dma来实现的话,那就是找出四个输出频率装载值的最小公约数作为定时器溢出的基频,比如1KHZ  2KHZ  4KHZ 8KZ  用8Khz做定时器基频。那么定时器溢出8次才完成一次1KZ的输出。dma需要搬运四个定时器比较值8次。这个还是输出频率相差不大的情况下。要是1k和100K的话,unsigned long sz[100][4]   1600字节了。。

还有就是dma的优先级问题,以及总线仲裁,在很高频的时候就不适用了。。。

出100入85汤圆

发表于 2015-7-17 21:00:04 | 显示全部楼层
RAMILE 发表于 2015-7-17 12:13
这个东西就是一层窗户纸,仔细读DMA手册就发现这就是个DMA的一般功能,你放源码上来,罪同剧透 ...

为什么这是罪,我们都不懂啊,要不你来写下

出0入0汤圆

发表于 2015-7-17 21:48:29 来自手机 | 显示全部楼层
难道楼主用来做步进伺服的定位?劝你改鞋归正,用双定时器方案

出0入10汤圆

发表于 2015-7-19 10:31:18 | 显示全部楼层
hmd420304805 发表于 2015-7-17 21:48
难道楼主用来做步进伺服的定位?劝你改鞋归正,用双定时器方案

是怕消耗太多的ram吗?

出0入10汤圆

发表于 2015-7-19 10:45:46 | 显示全部楼层
大家可以看下我这个帖子,有源码。
http://www.amobbs.com/forum.php? ... p;extra=#pid8675796

出0入0汤圆

发表于 2015-7-19 13:14:17 | 显示全部楼层
这样占空比应该是0.5吧!是么。。。

出0入0汤圆

 楼主| 发表于 2016-4-9 09:50:21 | 显示全部楼层
本帖的答案在这里

http://www.amobbs.com/forum.php? ... 670&pid=9091849

出0入0汤圆

发表于 2016-4-9 23:47:34 | 显示全部楼层
好帖,做电机控制用的到,谢谢分享

出0入0汤圆

发表于 2016-4-11 10:48:12 | 显示全部楼层
我也来学习一下.

出0入0汤圆

发表于 2016-10-31 16:15:56 | 显示全部楼层
请问一下楼主的第一路脉冲的频率的改变是怎么做到的呢?我想实时的改变脉冲的频率来实时的改变步进电机的转速

出0入0汤圆

 楼主| 发表于 2016-10-31 18:41:42 | 显示全部楼层
看22楼   

出0入0汤圆

 楼主| 发表于 2016-10-31 18:42:25 | 显示全部楼层
07071624 发表于 2016-10-31 16:15
请问一下楼主的第一路脉冲的频率的改变是怎么做到的呢?我想实时的改变脉冲的频率来实时的改变步进电机的转 ...

看22楼   
那位同学给出了代码

出0入0汤圆

发表于 2016-11-2 16:55:32 | 显示全部楼层
RAMILE 发表于 2016-10-31 18:42
看22楼   
那位同学给出了代码

他给出的程序看其中的图只是实现调节占空比而没改变频率啊,我想要得是你那个贴子图中第一路的那种脉冲频率能够实时改变的效果。

出0入0汤圆

发表于 2016-11-2 17:30:45 | 显示全部楼层
各路自由启停会不会麻烦

出0入0汤圆

 楼主| 发表于 2016-11-2 20:06:22 | 显示全部楼层
本帖最后由 RAMILE 于 2016-11-2 20:08 编辑
07071624 发表于 2016-11-2 16:55
他给出的程序看其中的图只是实现调节占空比而没改变频率啊,我想要得是你那个贴子图中第一路的那种脉冲频 ...


我找不到代码了,你自己琢磨吧

建议用STM32F303 的TIM2来做这个,把脚本演算的ISR放到紧耦合RAM中,递增周期是用AVR446的公式计算的

你写好把代码发我一份,感激不尽

出0入0汤圆

 楼主| 发表于 2016-11-2 20:15:34 | 显示全部楼层
本帖最后由 RAMILE 于 2016-11-2 20:16 编辑
huangqi412 发表于 2016-11-2 17:30
各路自由启停会不会麻烦


是很麻烦,不过G代码脚本以外的即时事件应该容许一定延迟
http://www.amobbs.com/forum.php? ... p;page=1#pid9100079

出0入0汤圆

发表于 2016-11-2 20:23:20 | 显示全部楼层
RAMILE 发表于 2016-11-2 20:06
我找不到代码了,你自己琢磨吧

建议用STM32F303 的TIM2来做这个,把脚本演算的ISR放到紧耦合RAM中,递增 ...

我现在就差频率实时变化这个功能了。我之前想的是,能不能实时变化TIM中决定频率的参数,从而来改变实时的频率?

出0入0汤圆

 楼主| 发表于 2016-11-2 20:34:36 | 显示全部楼层
本帖最后由 RAMILE 于 2016-11-2 20:36 编辑
07071624 发表于 2016-11-2 20:23
我现在就差频率实时变化这个功能了。我之前想的是,能不能实时变化TIM中决定频率的参数,从而来改变实时 ...


这个帖子的方法是设置时间点脚本数组,用DMA加载时间点到CCR1,与自由累加的计数器CNT相比较,相等情况下使输出翻转,并触发DMA加载脚本数组中的一个时间点

时间点的计算非常耗费CPU,频率一高就不用去干别的了

出0入0汤圆

发表于 2018-12-12 15:47:09 | 显示全部楼层
学习定时器
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 12:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表