OpenEdv-开源电子网

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

stm32的pwm总结

[复制链接]

18

主题

158

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
400
金钱
400
注册时间
2011-11-23
在线时间
0 小时
发表于 2012-8-2 20:33:29 | 显示全部楼层 |阅读模式

       脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。
STM32的定时器除了TIM6和7。其他的定时器都可以用来产生PWM输出。其中高级定时器TIM1和TIM8可以同时产生多达7路的PWM输出。而通用定时器也能同时产生多达4路的PWM输出,这样,STM32最多可以同时产生30路PWM输出!这里我们仅利用TIM3的CH2产生一路PWM输出。
       要使STM32的通用定时器TIMx产生PWM输出,我们会用到3个寄存器,来控制PWM的。这三个寄存器分别是:捕获/比较模式寄存器(TIMx_CCMR1/2)、捕获/比较使能寄存器(TIMx_CCER)、捕获/比较寄存器(TIMx_CCR1~4)。(注意,还有个TIMx的ARR寄存器是用来控制pwm的输出频率)

首先是捕获/比较模式寄存器(TIMx_CCMR1/2),该寄存器总共有2个,TIMx _CCMR1和TIMx _CCMR2。TIMx_CCMR1控制CH1和2,而TIMx_CCMR2控制CH3和4。

其次是捕获/比较使能寄存器(TIMx_CCER),该寄存器控制着各个输入输出通道的开关。
最后是捕获/比较寄存器(TIMx_CCR1~4),该寄存器总共有4个,对应4个输通道CH1~4。4个寄存器都差不多,说的简单一点,这个寄存器就是用来设置pwm的占空比的。

(具体的各个寄存器的各个位,详见stm芯片手册。)

  上面提到的,TIMx_ARR寄存器是用来设置pwm的频率的,那么它的原理是怎样的呢?

   那么TIMx_ARR寄存器的值是怎样来确定pwm的频率的呢?TIM_Period(即是TIMx_ARR寄存器的值) 的大小实际上表示的是需要经过TIM_Period 次计数后才会发生一次更新或中断。接下来需要设置时钟预分频数TIM_Prescaler,这里有一个公式,我们举例来说明:例如时钟频率=72MHZ/(时钟预分频+1)。(假设72MHZ为系统运行的频率,这里的时钟频率即是产生这个pwm的时钟的频率)说明当前设置的这个TIM_Prescaler,直接决定定时器的时钟频率。
通俗点说,就是一秒钟能计数多少次。比如算出来的时钟频率是2000,也就是一秒钟会计数2000 次,而此时如果TIM_Period 设置为4000,即4000 次计数后就会中断一次。由于时钟频率是一秒钟计数2000 次,因此只要2 秒钟,就会中断一次。还有一个需要注意的,就是我们一般采用向上计数模式。

好了,累了,就写到这儿!!!

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

使用道具 举报

18

主题

158

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
400
金钱
400
注册时间
2011-11-23
在线时间
0 小时
 楼主| 发表于 2012-8-2 21:26:59 | 显示全部楼层
回复【楼主位】shuilian007:
---------------------------------
void Encoder_Init(u16 arr)
{    
RCC->APB1ENR|=1<<1;       //TIM3时钟使能    
RCC->APB2ENR|=1<<0;     //开启辅助时钟   
AFIO->MAPR&=0XF8FFFFFF; //清除MAPR的[26:24]
AFIO->MAPR|=0X04000000; //关闭JTAG
  
GPIOA->CRL&=0X00FFFFFF;//PA7.PA6输入
GPIOA->CRL|=0X88000000;//下拉输入    
GPIOA->ODR|=1<<7;//PA7上拉   
GPIOA->ODR|=1<<6;//PA7上拉

Ex_NVIC_Config(GPIO_A,7,FTIR); //上升沿触发
Ex_NVIC_Config(GPIO_A,6,FTIR);//上升沿触发

TIM3->ARR=arr;//设定计数器自动重装值 
    TIM3->CCMR1|=1<<0;  //CC1S=01
TIM3->CCMR1|=1<<8;  //CC2S=01
TIM3->CCER|=0<<1;  //CC1P=0
TIM3->CCER|=0<<5;  //CC2P=0
    TIM3->SMCR|=3<<0; //SMS=011
TIM3->CR1|=1<<0;;   //CEN使能 
TIM3->CR1|=0x01;    //使能定时器3    
}    
这是定时器3配置的编码器模式~
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-8-3 00:22:05 | 显示全部楼层
不错,顶楼主.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
发表于 2012-8-3 21:57:08 | 显示全部楼层
顶~~
回复 支持 反对

使用道具 举报

5

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2012-7-28
在线时间
6 小时
发表于 2012-8-4 13:13:33 | 显示全部楼层
好贴就要顶起来
回复 支持 反对

使用道具 举报

5

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2010-12-16
在线时间
28 小时
发表于 2012-8-6 22:16:32 | 显示全部楼层
不错!!
回复 支持 反对

使用道具 举报

14

主题

168

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
497
金钱
497
注册时间
2013-4-1
在线时间
25 小时
发表于 2013-4-7 16:31:32 | 显示全部楼层
好贴顶起来!!!
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2013-4-14
在线时间
0 小时
发表于 2013-4-22 22:12:44 | 显示全部楼层
最近在看这部分的
回复 支持 反对

使用道具 举报

3

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2011-5-10
在线时间
5 小时
发表于 2013-4-23 17:15:53 | 显示全部楼层
bu cuo
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2013-4-24
在线时间
0 小时
发表于 2013-4-24 22:13:24 | 显示全部楼层
顶起来!
回复 支持 反对

使用道具 举报

0

主题

25

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2012-9-23
在线时间
0 小时
发表于 2013-4-25 12:07:23 | 显示全部楼层
回复【2楼】shuilian007:
---------------------------------
我需要驱动半桥的两路PWM, 不用中间对齐模式(因为低分辨率),似乎用一个TIMER不好弄。你有没有什么高招?
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2013-7-22
在线时间
0 小时
发表于 2013-7-26 10:37:42 | 显示全部楼层
看懂了大部分,谢谢真情放送
回复 支持 反对

使用道具 举报

9

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2013-3-16
在线时间
0 小时
发表于 2013-7-30 09:42:56 | 显示全部楼层
mark
回复 支持 反对

使用道具 举报

13

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2012-4-19
在线时间
1 小时
发表于 2013-8-9 11:11:39 | 显示全部楼层
感谢楼主 最近开始玩玩电机了
于己于家问心无愧,旁人后人无可挑剔。
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2013-11-24
在线时间
0 小时
发表于 2013-12-10 21:50:04 | 显示全部楼层
首先是捕获/比较模式寄存器(TIMx_CCMR1/2),该寄存器总共有2个,TIMx _CCMR1和TIMx _CCMR2。TIMx_CCMR1控制CH1和2,而TIMx_CCMR2控制CH3和4。
寄存器版本的书本印错了  写成了        TIMx_CCMR1控制CH3和4。   
希望下版本能改正
加油吧!今天‘’
回复 支持 反对

使用道具 举报

12

主题

87

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-4-2
在线时间
0 小时
发表于 2015-1-24 23:56:23 | 显示全部楼层
赞,顶楼主.
回复 支持 反对

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
186
金钱
186
注册时间
2015-8-19
在线时间
42 小时
发表于 2015-9-10 21:45:13 | 显示全部楼层
顶,写的非常好
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 18:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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