打印
[应用相关]

【转】STM32 PWM输出总结

[复制链接]
952|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
_gege|  楼主 | 2016-11-29 20:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
学习后发现stm32的定时器功能确实很强大,小总结一下方便以后使用的时候做参考。Stm32定时器一共分为三种:tim1和tim8是高级定时器,6和7是基本定时器,2—5是通用定时器。从名字就可以看得出来主要功能上的差异。今天我主要是用定时器做pwm输出,所以总结也主要是针对pwm方面的。

       先大致说下通用和高级定时器的区别。通用的可以输出四路pwm信号互不影响。高级定时器可以输出三对互补pwm信号外加ch4通道,也就是一共七路。
所以这样算下来stm32一共可以生成4*5+7*2=30路pwm信号。接下来还有功能上的区别:通用定时器的pwm信号比较简单,就是普通的调节占空比调节频率(别的不常用到的没去深究);高级定时器的还带有互补输出功能,同时互补信号可以插入死区,也可以使能刹车功能,从这些看来高级定时器的pwm天生就是用来控制电机的。

Pwm输出最基本的调节就是频率和占空比。频率当然又和时钟信号扯上了关系。高级定时器是挂接到APB2上,而通用定时器是挂接到APB1上的。APB1和APB2的区别就要在于时钟频率不同。APB2最高频率允许72MH,而APB1最高频率为36MHZ。这样是不是通用定时器只最高36MHZ频率呢,不是的;通用定时器时钟信号完整的路线应该是下面这样的:
AHB(72mhz)→APB1分频器(默认2)→APB1时钟信号(36mhz)→倍频器(*2倍)→通用定时器时钟信号(72mhz)。
在APB1和定时器中间的倍频器起到了巨大的作用,假如红色字体的“APB1分频器”假如不为1(默认是2),倍频器会自动将APB1时钟频率扩大2倍后作为定时器信号源,这个它内部自动控制的不用配置。设置这个倍频器的目的很简单就是在APB1是36mhz的情况下通用定时器的频率同样能达到72mhz。我用的库函数直接调用函数SystemInit(); 这个函数之后时钟配置好了:通用定时器和高级定时器的时钟现在都是72mhz(你也可以自己再配置一下RCC让他的频率更低,但是不能再高了)。定时器接下来还有一个分频寄存器:TIMX_PSC经过他的分频后,才是定时器计数的频率。所以真正的时钟频率应该是72mhz/(TIMX_PSC-1)。
沙发
feiqi1| | 2016-11-29 20:27 | 只看该作者
真正的时钟频率应该是72mhz/(TIMX_PSC-1),我们设为tim_frepuency。

使用特权

评论回复
板凳
androidbus| | 2016-11-29 20:33 | 只看该作者
stm32的时钟频率弄得确实是很饶人的,所以关键就是先要把思路理清楚吧。

使用特权

评论回复
地板
litengg| | 2016-11-29 20:36 | 只看该作者
我知道pwm主要就是控制频率和占空比的。。

使用特权

评论回复
5
qiangweii| | 2016-11-29 20:43 | 只看该作者
ARR寄存器就是自动重装寄存器,也就是计数器记到这个数以后清零再开始计,这样pwm的频率就是tim_frequency/(TIMX_ARR-1)。

使用特权

评论回复
6
xia00| | 2016-11-29 20:46 | 只看该作者
在计数时会不停的和CCRX寄存器中的数据进行比较,如果小于的话是高电平或者低电平,计数值大于CCRX值的话电平极性反相。

使用特权

评论回复
7
hfdy01| | 2016-11-29 20:51 | 只看该作者
终于知道了PWM怎么控制了占空比

使用特权

评论回复
8
CallReceiver| | 2016-11-29 20:55 | 只看该作者
通用定时器和高级定时器原来还有这么大的区别呀。。

使用特权

评论回复
9
boy1990| | 2016-11-29 20:59 | 只看该作者
高级定时器的还带有互补输出功能,同时互补信号可以插入死区,也可以使能刹车功能

使用特权

评论回复
10
天灵灵地灵灵| | 2016-11-29 22:30 | 只看该作者
DMA也很强大,你可以试试看。

使用特权

评论回复
11
逍遥哥哥| | 2016-11-29 23:54 | 只看该作者
互补不是很懂。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

1357

帖子

1

粉丝