电子原理
登录
直播中
杨勇
7年用户
1188经验值
私信
关注
[问答]
如何对PWM寄存器进行初始化配置
开启该帖子的消息推送
PWM
寄存器
PWM的输出原理是什么?
PWM寄存器的配置步骤有哪些?
如何对PWM寄存器进行初始化配置?
回帖
(1)
赵天湖
2021-8-2 16:25:47
脉冲宽度调制PWM,实现对电机速度的控制。
1、PWM输出原理
假定定时器工作在向上计数 PWM模式,CNT为当前计数值,CCRx为捕获/比较寄存器CCRx的值(预装载值)。当 CNT《CCRx 时,GPIO口 输出低电平0,当 CNT》=CCRx 时,GPIO口 输出高电平1。当CNT达到 ARR (自动重装载值)的时候,重新归零,然后重新向上计数,依次循环。改变 CCRx 的值,就可以改变 PWM 输出的占空比,改变 ARR 的值,就可以改变 PWM 输出的频率。
2、PWM定时器
STM32 的定时器除了 TIM6 和 TIM7,其他的定时器都可以用来产生 PWM 输出。高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出,通用定时器能同时产生4路的 PWM 输出。这里我们用TIM2定时器的CH1和CH2产生两路PWM输出。
要使通用定时器 TIM2 产生两路 PWM 输出,需要配置的寄存器分别是:自动重载寄存器TIM2_ARR、预分频器TIM2_PSC、控制寄存器TIM2_CR1、 捕获/比较模式寄存器TIM2_CCMR1、捕获/比较使能寄存器TIM2_CCER、捕获/比较寄存器TIM2_CCR1和TIM2_CCR2 ,如果使用的是高级定时器TIM1和TIM8,还需配置刹车和死区寄存器TIMx_BDTR。
3、寄存器配置步骤
(1)开启 TIM2 时钟。
要使用 TIM2,必须先开启 TIM2 的时钟。通过设置APB1外设时钟使能寄存器RCC_APB1ENR对应位即可。
(2)通道CH1和CH2对应的GPIO 口时钟使能。
TIM2定时器CH1和CH2对应的GPIO口为 PA0和PA1,通过设置RCC_APB2ENR时钟使能GPIO口。
(3)PA0和PA1 端口配置
将其设置为复用推挽输出模式。
(4)TIM2_ARR和TIM2_PSC配置
ARR为定时器计数上限,是16位的寄存器,范围为1~65535。PSC为定时器的分频系数,通过这个值可以计算出PWM的频率。根据电机最适合的频率进行分配。
并将其进行预装载使能,TIM2-》CCMR1 相关位控制CCRX的预装载使能,TIM2-》CR1的APER位控制ARR自动重装载使能
(5) 设置 TIM2_CH1和TIM2_CH2的 PWM 模式及通道方向
要使电机越转越快,可以配置 TIM1_CCMR1 的相关位来控制将其设置PWM 模式1。另外,要配置 CH1和CH2 为输出,所以要设置TIM1_CCMR1 的CC1S[1:0]和 CC2S[1:0]为 00(寄存器默认就是 0,所以这里可以省略)。
(6) 使能 CH1 和 CH2 输出和使能 TIM1 。
我们需要开启 TIM2 的 CH1和CH2 的输出以及 TIM1 的时钟。前者通过 TIM2_CCER 寄存器来设置,是单个通道的开关,后者则通过 TIM2_CR1 寄存器来设置,是整个 TIM2 的总开关。只有设置了这两个寄存器,这样我们才可能在 TIM1 的 CH1和CH2 上看到 PWM 波输出。
(7) 设置 MOE 输出,使能 PWM 输出
普通定时器在完成以上设置了之后,就可以输出 PWM 了,但是高级定时器,我们还需要使能刹车和死区寄存器(TIM1_BDTR)的 MOE 位,以使能整个 OCx(即 PWM)输出。
(8) 修改 TIM2_CCR1 和 TIM2_CCR1 控制占空比
经过以上设置之后,PWM 已经开始输出了,只是其占空比和频率都是固定的,我们通过修改 TIM1_CCR1 和 TIM2_CCR2 则可以控制通道的输出占空比,进而控制电机速度。
4、下面是PWM的寄存器初始化配置
脉冲宽度调制PWM,实现对电机速度的控制。
1、PWM输出原理
假定定时器工作在向上计数 PWM模式,CNT为当前计数值,CCRx为捕获/比较寄存器CCRx的值(预装载值)。当 CNT《CCRx 时,GPIO口 输出低电平0,当 CNT》=CCRx 时,GPIO口 输出高电平1。当CNT达到 ARR (自动重装载值)的时候,重新归零,然后重新向上计数,依次循环。改变 CCRx 的值,就可以改变 PWM 输出的占空比,改变 ARR 的值,就可以改变 PWM 输出的频率。
2、PWM定时器
STM32 的定时器除了 TIM6 和 TIM7,其他的定时器都可以用来产生 PWM 输出。高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出,通用定时器能同时产生4路的 PWM 输出。这里我们用TIM2定时器的CH1和CH2产生两路PWM输出。
要使通用定时器 TIM2 产生两路 PWM 输出,需要配置的寄存器分别是:自动重载寄存器TIM2_ARR、预分频器TIM2_PSC、控制寄存器TIM2_CR1、 捕获/比较模式寄存器TIM2_CCMR1、捕获/比较使能寄存器TIM2_CCER、捕获/比较寄存器TIM2_CCR1和TIM2_CCR2 ,如果使用的是高级定时器TIM1和TIM8,还需配置刹车和死区寄存器TIMx_BDTR。
3、寄存器配置步骤
(1)开启 TIM2 时钟。
要使用 TIM2,必须先开启 TIM2 的时钟。通过设置APB1外设时钟使能寄存器RCC_APB1ENR对应位即可。
(2)通道CH1和CH2对应的GPIO 口时钟使能。
TIM2定时器CH1和CH2对应的GPIO口为 PA0和PA1,通过设置RCC_APB2ENR时钟使能GPIO口。
(3)PA0和PA1 端口配置
将其设置为复用推挽输出模式。
(4)TIM2_ARR和TIM2_PSC配置
ARR为定时器计数上限,是16位的寄存器,范围为1~65535。PSC为定时器的分频系数,通过这个值可以计算出PWM的频率。根据电机最适合的频率进行分配。
并将其进行预装载使能,TIM2-》CCMR1 相关位控制CCRX的预装载使能,TIM2-》CR1的APER位控制ARR自动重装载使能
(5) 设置 TIM2_CH1和TIM2_CH2的 PWM 模式及通道方向
要使电机越转越快,可以配置 TIM1_CCMR1 的相关位来控制将其设置PWM 模式1。另外,要配置 CH1和CH2 为输出,所以要设置TIM1_CCMR1 的CC1S[1:0]和 CC2S[1:0]为 00(寄存器默认就是 0,所以这里可以省略)。
(6) 使能 CH1 和 CH2 输出和使能 TIM1 。
我们需要开启 TIM2 的 CH1和CH2 的输出以及 TIM1 的时钟。前者通过 TIM2_CCER 寄存器来设置,是单个通道的开关,后者则通过 TIM2_CR1 寄存器来设置,是整个 TIM2 的总开关。只有设置了这两个寄存器,这样我们才可能在 TIM1 的 CH1和CH2 上看到 PWM 波输出。
(7) 设置 MOE 输出,使能 PWM 输出
普通定时器在完成以上设置了之后,就可以输出 PWM 了,但是高级定时器,我们还需要使能刹车和死区寄存器(TIM1_BDTR)的 MOE 位,以使能整个 OCx(即 PWM)输出。
(8) 修改 TIM2_CCR1 和 TIM2_CCR1 控制占空比
经过以上设置之后,PWM 已经开始输出了,只是其占空比和频率都是固定的,我们通过修改 TIM1_CCR1 和 TIM2_CCR2 则可以控制通道的输出占空比,进而控制电机速度。
4、下面是PWM的寄存器初始化配置
举报
更多回帖
rotate(-90deg);
回复
相关问答
PWM
寄存器
nRF24L01+
初始化
寄存器
配置
失败的原因是什么
2021-12-17
1929
AD7091r-4软件
初始化
失败怎么处理?
2023-12-01
231
蜂鸟内部通用
寄存器
为什么不做复位
初始化
?
2023-08-16
204
STM8串口
初始化
寄存器
配置
是怎样的?
2021-12-16
915
AD2S1210
初始化
中读写
寄存器
失败的原因?如何解决?
2023-12-04
197
请问有没有9361的
初始化
的
寄存器
配置
VHDL代码的例程?
2018-10-24
3075
如何对STM32的定时
器
进行
初始化
配置
呢
2021-11-24
2133
PWM
和定时
器
初始化
顺序为什么会影响到
pwm
的输出呢?
2018-11-21
4127
因为没有系统
初始化
函数引起的
寄存器
版本的程序PROTUES不能仿真吗?
2019-04-21
1835
AD4355-2按照
寄存器
软件值,并按datasheet的
初始化
时序
进行
设置,但信号没有
2019-04-05
1156
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分