脉冲宽度调制(英语:Pulse-width modulation,缩写:PWM),简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的技术。PWM技术是一种对模拟信号电平的数字编码方法,通过使用高分辨率计数器(调制频率)调制方波的占空比,从而实现对一个模拟信号的电平进行编码。
占空比:在规定的时间间隔或“周期”中接通(ON)的比例,公式为D = PW/T *100%,其中 pw为脉冲宽度(调制周期中脉冲持续时间)。100%完全打开,当数字信号的一半时间处于打开状态,而另一半时间处于关闭状态时,该数字信号的占空比为50%,类似于“方波”。 低占空比对应于低功耗,因为大多数时候电源都处于关闭状态。
简单来说,假设PWM时间周期设定为计数80,我们再设定一个比较值是10,那么从0计数到10时(这时计数器还是一直往上计数,直到计数到设定值80),单片机就会根据设定,控制某个IO口在这个时候是输出1还是输出0,因此我们只需要提供宽、窄不同的数字式脉冲,即可简单地实现改变输出电流。这里,通过改变80大小可以改变PWM的输出频率,改变10的大小就是改变占空比。PWM特别适用于运行惯性负载,这些负载不易受这种离散开关的影响,我们常用PWM来驱动LED的暗亮程度,电机的转速等。PWM也被用于某些通信系统,其占空比被用来通过通信信道传输信息。
PWM的基本原理:
脉宽调制(PWM)基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。
逆变电路是与整流电路(Rectifier)相对应,把直流电变成交流电称为逆变。
在采样控制理论中有一个重要结论:冲量(脉冲的面积)相等而形状不同窄脉冲,分别加在具有惯性环节的输入端,其输出响应波形基本相同,也就是说,尽管脉冲形状不同,但只要脉冲面积相等,其作用的效果基本相同。
根据冲量相等效果相同的原理,PWM波形和正弦半波是等效的,下图所示为正弦波PWM调制波形。
PWM的优点:
- 电源的输出电压在工作时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的。
- 在模拟电路中,电压和电流可直接用来进行控制对象。但模拟电路有诸多的问题:例如控制信号容易随时间漂移(如温度影响),难以调节;功耗大;易受噪声和环境干扰等等。与模拟电路不同,数字电路是在预先确定的范围内取值,在任何时刻,其输出只可能为ON和OFF两种状态。
- 从处理器到被控系统信号都是数字形式的,无需进行数模转换。让信号保持为数字形式可将噪声影响降到最小。
一、PWM 使用
参考STM32 参考手册
STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4路的 PWM 输出,这样, STM32 最多可以同时产生 30 路 PWM 输出!
1.1高级控制定时器(TIM1和TIM8)
1.1.1 TIM1和TIM8 定时器介绍
高级控制定时器(TIM1和TIM8)由一个16位的自动装载计数器组成,它由一个可编程的预分频器驱动(计数器时钟由预分频器分频得到)。
它适合多种用途,包含测量输入信号的脉冲宽度(输入捕获),或者产生输出波形(输出比较、PWM、嵌入死区时间的互补PWM等)。
使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。
TIM1和TIM8定时器功能:
- 16位向上、向下、向上/下自动装载计数器
- 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65535之间的任意
数值 - 多达4个独立通道:
─ 输入捕获
─ 输出比较
─ PWM生成(边缘或中间对齐模式)
─ 单脉冲模式输出 -
死区时间可编程的互补输出
死区时间是指控制不到的时间域,在变频器里一般是指功率器件输出电压、电流的“0”区,在传动控制里一般是指电机正反向转换电压、电流的过零时间。死区时间当然越小越好。但是所以设置死区时间,是为了安全。因此又不可没有。最佳的设置是:在保证安全的前提下,越小越好。以不炸功率管、输出不短路为目的。
1.1.2 TIM1和TIM8 定时器概念介绍
● 计数器寄存器(TIMx_CNT):
● 预分频器寄存器 (TIMx_PSC,prescaler):将计数器的时钟频率按1到65536之间的任意值分频。新的预分频寄存器的参数在下一次更新事件UEV(update event)时被使用。
● 自动装载寄存器 (TIMx_ARR,anto reload):预先装载,写或读自动重装载寄存器将访问预装载寄存器
● 重复次数寄存器 (TIMx_RCR)
重复次数寄存器设置后,达到重复次数产生更新时间,否则计数器寄存器每次溢出时产生更新事件。
时钟选择:
计数器时钟可由下列时钟源提供:
● 内部时钟(CK_INT)
● 外部时钟模式1:外部输入引脚
● 外部时钟模式2:外部触发输入ETR
● 内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器。如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。
1.1.3 TIM1和TIM8 定时器 捕获/比较
每一个捕获/比较通道(capture/compare channels,CCR)都是围绕着一个捕获/比较寄存器,包括捕获的输入部分(数字滤波、多路复用和预分频器),和输出部分(比较器和输出控制)。
- 输入捕获:简单的说就是通过检测 TIMx_CHx (定时器X的通道X)上的 边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT) 存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA 等。
- 输出比较模式: 用来控制一个输出波形,或者表示出一段给定的的时间已经到时。(indicating when a period time has elapsed)。
1.1.4 TIM1和TIM8 定时器 寄存器
TIM1和TIM8定时器里面有很多的寄存器,如控制寄存器CR、状态寄存器SR、捕获比较寄存器CCR等,一共21个寄存器,这里挑选与PWM密切相关的寄存器进行说明。
-
捕获/比较模式寄存器(TIMx_CCMR1/2)
位7 OC1CE:输出比较1清’0’使能 (Output Compare 1 clear enable)
0: OC1REF 不受ETRF输入的影响;
1:一旦检测到ETRF输入高电平,清除OC1REF=0。
位6:4: OC1M[2:0]:输出比较1模式 (Output Compare 1 mode)
该3位定义了输出参考信号OC1REF的动作。
其中,110: PWM模式1- 在向上计数;111: PWM模式2- 在向上计数时
位3 OC1PE: 输出比较1预装载使能 (Output Compare 1 preload enable):是否使能预装载
位2 OC1FE: 输出比较1 快速使能 (Output Compare 1 fast enable):该位用于加快CC输出对触发输入事件的响应
位1:0 CC1S[1:0]:捕获/比较1 选择(Capture/Compare 1 selection):定义通道的方向(输入/输出),及输入脚的选择
00: CC1通道被配置为输出;
01: CC1通道被配置为输入, IC1映射在TI1上;
10: CC1通道被配置为输入, IC1映射在TI2上;
11: CC1通道被配置为输入, IC1映射在TRC上。此模式仅工作在内部触发器输入被选中时(由
TIMx_SMCR寄存器的TS位选择)。
我们想要的是PWM模式,所以CCxM位必须是110/111;CCxS位为0。
-
捕获/比较使能寄存器(TIMx_CCER)
CCxE:CC1E: 输入/捕获1输出使能 (Capture/Compare 1 output enable)
位为1: 开启- OC1信号输出到对应的输出引脚
CCxP: 输入/捕获1输出极性 (Capture/Compare 1 output polarity):可以设置OCX高电平有效还是低电平有效。
输出时:0: OC1高电平有效;1: OC1低电平有效
CCxNE: CC1NE:输入/捕获1互补输出使能 (Capture/Compare 1 complementary output enable)
CCxNP:CC1NP:输入/捕获1互补输出极性 (Capture/Compare 1 complementary output polarity)
我们只要配置使能位CCxE和极性。
-
捕获/比较寄存器(TIMx_CCR)
输出模式下,该寄存器的值与CNT值进行比较,通过修改这个寄存器的值,就可以控制PWM的输出脉宽。
脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。
OCxREF:output compare signal
CCxIF: sets a flag in the interrupt status register(CCxIF bit in the TIMx_SR register)
CC1IF: 捕获/比较1中断标记 (Capture/Compare 1 interrupt flag)
如果通道CC1配置为输出模式:
当计数器值与比较值匹配时该位由硬件置1,但在中心对称模式下除外(参考TIMx_CR1寄存器的CMS位)。它由软件清’0’。
0:无匹配发生;
1: TIMx_CNT的值与TIMx_CCR1的值匹配。
当TIMx_CCR1的内容大于TIMx_APR的内容时,在向上或向上/下计数模式时计数器溢出,或向下计数模式时的计数器下溢条件下, CC1IF位变高