STM32-(24):PWM基础

本文详细介绍了STM32中的PWM工作原理及配置方法,包括PWM的两种输出模式、计数模式、输出管脚配置以及如何通过设置寄存器来获取所需波形等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇:STM32-(23):定时器TIM(实验) 下一篇:STM32-(25):PWM实验

PWM是Pulse Width Modulation的缩写,即脉冲宽度调制。其通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。

PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制,用来对一个具体模拟信号的电平进行编码。等效的实现是基于采样定理中的一个重要的结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。冲量即指窄脉冲的面积。这里所说的效果基本相同,是指该环节的输出响应波形基本相同。

如把各输出波形用傅里叶变换分析,则它们的低频段特性非常接近,仅在高频段略有差异。

在这里插入图片描述
为了实现a的效果,可以通过b这种正弦波去模拟达到这种效果。(通过每一段的面积相同去模拟)

PWM信号是数字的,在给定的任何时刻,满幅值的直流供电要么完全有(0N),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。

改变脉冲的周期可以达到调频的效果,改变脉冲的宽度或占空比可以达到调压的效果,因此,采用适当控制方法即可使电压或电流与频率协调变化。

PWM控制技术获得了空前的发展,并且广泛的运用在从测量、通信到功率控制与变换的许多领域中。
PWM具有很多的优点,主要优点如下:
①从处理器到被控系统信号都是数字形式的,无需进行数模转换;
②让信号保持为数字形式可将噪声影响降到最小,噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响,这是PWM用于通信的主要原因。

STM32的定时器除了 TIM6和7。其他的定时器都可以用来产生PWM输出。其中高级定时器TIM1和TIM8可以同时产生多达7路的PWM输出。而通用定时器也能同时产生多达4路的PWM输出,这样,STM32最多可以同时产生30路PWM输出!

应用举例:

步进电机驱动
舵机控制器

1) PWM输出模式

STM32的PWM输出有两种模式,模式1和模式2,由TIMx CCMRx寄存器中的OCxM位确定的(“110”为模式1, “111”为模式2)。模式i和模式2的区别如下:

110 PWM模式1一在向上计数时,一旦TIMx_CNT<TlMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(0C1REF=1)。

111: PWM模式2-在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平:在向下计数时,一旦TIMx CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。

而从计数模式上来看,PWM也和TIMX在作定时器时一样,也有向上计数模式、向下计数模式和中心对齐模式。

举例分析:
在这里插入图片描述
比如上方 自动重装载寄存器(ARR)计数器(CNT)捕获/比较1寄存器(CCR1),比如将ARR的值设为50,然后CNT由0开始数,数到50之后(这里举例默认是向上计数的),又开始从0开始数,又假设CCR1的值设定为25,PWM的输出模式为 110,当计数值CNT小于25时,输出的OC1REF 为高电平,大于25时,输出低电平。这个波形的占空比为1:1,比较有规律,可以通过控制几个寄存器的值来得到我想要的波形。

2) PWM输出管脚

PWM的输出管脚是确定好的:
23:10
不同的TIMx有分配不同的引脚,但是考虑到管脚复用功能,STM32提出了一个重映像的概念,就是说通过设置某一些相关的寄存器,来使得在其他非原始指定的管脚上也能输出PWM.
比如说TIM3的第2个通道,在没有重映像的时候,指定的管脚是 PA.7,如果设置部分重映像之后,TIM3_CH2的输出就被映射到 PB.5上了,如果设置了完全重映像的话,TIM_CH2的输出就被映射到 PC.7上了。

3) PWM输出信号

PWM输出的是一个方波信号,信号的频率是由 TIMx 的时钟频率和 TIMx_ARR 预分频器所决定的,具体设置方法在前面一个定时器中有详细介绍。而输出信号的占空比则是由 TIMx_CRRx寄存器确定的。其公式为“占空比 = (TIMx_CRRx/TIMx_ARR)*100%”,因此,可以通过向CRR中填入适当的数来输出自己所需的频率和占空比的方波信号。

4) 操作步骤

1.设罝RCC时钟;
2.设置GPIO时钟;
3.设罝TIMx定时器的相关寄存器;
4.设罝TIMx定时器的PWM相关寄存器。

第2步设置GPIO时钟时,GPIO模式应该设置为复用推挽输出GPIO_Mode_AF_PP,如果需要引脚重映像的话,则需要用GPIO_PinRemapConfig()函数进行设置。

第3步设罝TIMx定时器的相关寄存器时,和之前介绍的一样。

第4步设罝PWM相关寄存器,首先要设罝PWM模式(默认情况下PWM是冻结的),然后设置占空比(根据前面所述公式进行计算),再设置输出比较极性:当设罝为High时,输出信号不反相,当设置为Low时,输出信号反相之后再输出。最重要是是要使能TIMx的输出状态和使能TIMx的PWM输出使能。

相关设置完成之后,就可以通过TIM_Cmd()来打开TIMx定时器,从而得到PWM输出了。

边沿对齐的PWM波形(ARR=8)
在这里插入图片描述
分析:向上计数模式,比如自动重装载寄存器(ARR=8),就是计数寄存器(CNT)会从0数到8,当比较单元CCRx=4时,计数器的值小于4时,输出高电平,大于等于时会发生跳变,变为低电平,当计数到8又从0开始计数时又会跳变为高电平。
中央对齐的PWM波形(ARR=8)
在这里插入图片描述

上一篇:STM32-(23):定时器TIM(实验) 下一篇:STM32-(25):PWM实验
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值