OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9629|回复: 13

STM32 PWM输出频率分辨率求助

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2015-1-30
在线时间
0 小时
发表于 2015-1-30 12:47:30 | 显示全部楼层 |阅读模式
5金钱
现在正在做的一个项目,对STM32 PWM的输出频率分辨率要求很高,至少要到1Hz,既要输出18000Hz的PWM,又要输出18001Hz、18002Hz、18003Hz的,这个问题已经困扰了我好多天,希望各位大神可以帮忙。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2015-1-14
在线时间
1 小时
发表于 2015-1-30 14:18:18 | 显示全部楼层
楼主可不可以把要求说的清楚一些,是同一个timer么?对占空比什么的有什么要求
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2015-1-30
在线时间
0 小时
 楼主| 发表于 2015-1-30 14:37:11 | 显示全部楼层
可以是同一个timer,也可以是多个,我的系统里只有这一个地方会用到timer,占空比为50%,输出的PWM频率会4ms更新一次。
回复

使用道具 举报

5

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2015-1-14
在线时间
1 小时
发表于 2015-1-30 14:43:23 | 显示全部楼层
回复【3楼】zklxn:
---------------------------------
timer的时钟是多少
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2015-1-30 14:44:15 | 显示全部楼层
分辨率1/18000,目测可以做到,但是基频精度做不到,建议使用混频器。
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2015-1-30
在线时间
0 小时
 楼主| 发表于 2015-1-30 14:49:37 | 显示全部楼层
 当前用的timer时钟为64MHz,感谢您的关注!
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2015-1-30
在线时间
0 小时
 楼主| 发表于 2015-1-30 15:00:53 | 显示全部楼层
使用混频器来做的话,整个系统就完全不一样了,而且成本也会增加。
回复

使用道具 举报

5

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2015-1-14
在线时间
1 小时
发表于 2015-1-30 15:29:27 | 显示全部楼层
回复【6楼】zklxn:
---------------------------------
有一种方法不知道可以不可以  理论上应该是可以   使用死区插入
设置ARR=4,下一个周期3,一次循环下去。
设置BDTR插入死区,使第一沿上升沿延迟,达到相应频率,然后马上清空死区,下一个周期是ARR=3,在计数器到3之前设置BDTR插入死区上升沿错后,相应的死区也占用了下个周期的一部分,此时清空BDTR,依次类推下去,理论上试可以,但是实际上不知道了,楼主可以试试。

说的有点不明白,楼主可以自己体会一下
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2015-1-30
在线时间
0 小时
 楼主| 发表于 2015-1-30 16:40:59 | 显示全部楼层
回复【8楼】小萨:
---------------------------------
是没有太明白,能说的再详细点吗?谢谢!
回复

使用道具 举报

5

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2015-1-14
在线时间
1 小时
发表于 2015-1-30 19:21:04 | 显示全部楼层
回复【9楼】zklxn:
---------------------------------
 那么说吧你的时钟是64M,但是你要的是18000Hz,如果CNT计数到4,频率小于要求,但是CNT记到3的话,频率大于要求。
然后18000Hz,周期是1/18us,你的64M时钟计数器记一个数字是1/64us,计数器计数到7的话差不多正好是两个周期,所以挪动两个周期之间的沿向后或者向前移动,死区插入的话,是把上升沿延迟。
回复

使用道具 举报

5

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2015-1-14
在线时间
1 小时
发表于 2015-1-30 19:25:24 | 显示全部楼层


两个PWM的周期加起来是7个计数周期,第一个是3,第二个是4,所以需要把上升沿延迟,死区时间就是红色部分
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2015-1-30
在线时间
0 小时
 楼主| 发表于 2015-1-30 22:42:42 | 显示全部楼层
回复【11楼】小萨:
---------------------------------
 死区延时或超前的时间步长TDTS=1/64us,所以插入死区的话,也就是整个周期加上或减去1/64us,输出频率精度还是达不到要求。
回复

使用道具 举报

5

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2015-1-14
在线时间
1 小时
发表于 2015-2-1 13:37:11 | 显示全部楼层
回复【12楼】zklxn:
---------------------------------
我没仔细算   你可以试试一路一路以高频率插入死区,另一个TIMER检测上升沿,手动控制反转,我没有仔细算你可以试一下,就是一个频率比较高,另一个以较低频率。
回复

使用道具 举报

5

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2015-1-14
在线时间
1 小时
发表于 2015-2-1 16:56:00 | 显示全部楼层


看看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-26 04:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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