PWM介绍
PWM:(Pulse-width modulation)是脉冲宽度调制的缩写。脉冲宽度调制是一种模拟信号电平数字编码方法。脉冲宽度调制PWM是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式。所有根据面积等效法则,可以通过改变脉冲的时间宽度,来等效的获得所需要合成的相应幅值和频率的波形。实现模拟电路的数字化控制可显著降低系统成本和功耗。许多微控制器和数字信号处理器(DSP)已包括了PWM控制器芯片,因此可以更轻松地实施数字化控制,PWM信号是通过调节占空比的变化来调节信号、能量等的变化。
PWM目的
使用PWM波形,等效地实现一个模拟信号的输出。
PWM框图
PWM原理
PWM就是在合适的信号频率下,通过一个周期里改变占空比的方式来改变输出的有效电压。
以单片机为例,单片机的IO口输出的是数字信号,IO口只能输出高电平和低电平。
假设高电平为5V 低电平则为0V 那么我们要输出不同的模拟电压,就要用到PWM,通过改变IO口输出的方波的占空比从而获得使用数字信号模拟成的模拟电压信号。
我们知道,电压是以一种连接1或断开0的重复脉冲序列被夹到模拟负载上去的(例如LED灯,直流电机等),连接即是直流供电输出,断开即是直流供电断开。通过对连接和断开时间的控制,理论上来讲,可以输出任意不大于最大电压值(即0~5V之间任意大小)的模拟电压。
比方说 占空比为50% 那就是高电平时间一半,低电平时间一半,在一定的频率下,就可以得到模拟的2.5V输出电压 那么75%的占空比 得到的电压就是3.75V。
PWM的调节作用来源于对“占周期”的宽度控制,“占周期”变宽,输出的能量就会提高,通过阻容变换电路所得到的平均电压值也会上升,“占周期”变窄,输出的电压信号的电压平均值就会降低,通过阻容变换电路所得到的平均电压值也会下降。也就是,在一定的频率下,通过不同的占空比 即可得到不同的输出模拟电压。PWM就是通过这种原理实现D/A转换的。
PWM面积等效原理
面积等效原理是PWM控制技术的重要理论基础,冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同;冲量即窄脉冲的面积,所说的效果基本相同是指环节的输出波形基本相同。
PWM参数
PWM频率
1秒钟内信号从高电平>>低电平>>高电平的次数称为一个(脉冲周期T)单位:Hz。
例如:如果频率为50Hz,也就是说一个周期是20ms,一秒钟就有50次PWM周期。
50Hz = 20ms 一个周期
PWM周期
高低电平变化所需的时间,单位:ms。
T = 1 / f ; T表示周期,f表示频率。
PWM波形图
PWM占空比
是一个脉冲周期内,高电平的时间与整个周期时间的比例
单位: % (0%-100%)
表示方式:20%
如下图详解:
T:周期
T1:高电平时间
T2:低电平时间
假设周期T为 1s 那么频率就是 1Hz 那么高电平时间0.5s ,低电平时间0.5s 总的占空比就是 0.5 /1 =50%
PWM参数计算公式
PWM频率:Freq = CK_PSC / (PSC + 1) / (ARR + 1)
PWM占空比:Duty = CCR / (ARR + 1)
PWM分辨率:Reso = 1 / (ARR + 1)
Reso定义的分辨率是占空比最小的变化步距。
注:
ARR:Automatic Reload Register,自动重装寄存器。计数到该值时,会重新计数,也就是重装的意思。
CCR:Catch Compare Register,捕获比较寄存器,CC捕获/比较意思,R是Register,寄存器的意思。两个共用,输入捕获寄存器。输出比较寄存器,比较CNT与CCR的值,CNT计数自增,CCR自己给定。当CNT大于CCR(小于或者等于)时,置1置0,然后输出应该电平不断跳变的PWM波形。
PWM结构体含义
TIM_TimeBaseInitTypeDef结构体
用于配置定时器(Timer)的基本参数的结构体类型。在使用定时器时,我们需要对其进行初始化和配置,以确定定时器的工作模式、时钟源、分频系数、计数周期等参数。
- TIM_Prescaler:定时器的预分频值,用于将定时器输入时钟进行分频,以控制计数频率。(它的作用是调整定时器的计数速度,从而实现不同的定时精度和计数范围)
- TIM_CounterMode:定时器的计数模式,包括向上计数、向下计数和中央对齐计数等模式。
- TIM_Period:定时器的计数周期,决定了定时器的溢出时间。(自动重装载值,决定了定时器计数器的上限值)
- TIM_ClockDivision:定时器的时钟分频,用于进一步分频计数器的时钟。
- TIM_RepetitionCounter:重复计数器的值,用于设定计数器的重复计数次数。
TIM_OCInitTypeDef结构体
输出比较结构体 TIM_OCInitTypeDef 用于输出比较模式,与 TIM_OCxInit 函数配合使用完成指定定时器输出通道初始化配置。高级控制定时器有四个定时器通道,使用时都必须单独设置。
- TIM_OCMode:比较输出模式选择,总共有八种,常用的为PWM1/PWM2。它设定CCMRx寄存器OCxM[2:0]位的值。
- TIM_OutputState:比较输出使能,决定最终的输出比较信号OCx是否通过外部引脚输出。它设定TIMx_CCER寄存器CCxE/CCxNE位的值。
- TIM_OutputNState:比较互补输出使能,决定OCx的互补信号OCxN是否通过外部引脚输出。它设定CCER寄存器CCxNE位的值。
- TIM_Pulse:比较输出脉冲宽度,实际设定比较寄存器CCR的值,决定脉冲宽度。可设置范围为0至65535。
- TIM_OCPolarity:比较输出极性,可选OCx为高电平有效或低电平有效。它决定着定时器通道有效电平。它设定CCER寄存器的CCxP位的值。
- TIM_OCNPolarity:比较互补输出极性,可选OCxN为高电平有效或低电平有效。它设定TIMx_CCER寄存器的CCxNP位的值。
- TIM_OCIdleState:空闲状态时通道输出电平设置,可选输出1或输出0,即在空闲状态(BDTR_MOE位为0)时,经过死区时间后定时器通道输出高电平或低电平。它设定CR2寄存器的OISx位的值。
- TIM_OCNIdleState:空闲状态时互补通道输出电平设置,可选输出1或输出0,即在空闲状态(BDTR_MOE位为0)时,经过死区时间后定时器互补通道输出高电平或低电平,设定值必须与TIM_OCIdleState相反。它设定是CR2寄存器的OISxN位的值。
TIM_ICInitTypeDef结构体
输入捕获结构体TIM_ICInitTypeDef用于输入捕获模式,与TIM_ICInit函数配合使用完成定时器输入通道初始化配置。如果使用PWM输入模式需要与TIM_PWMIConfig函数配合使用完成定时器输入通道初始化配置。
- TIM_Channel:捕获通道ICx选择,可选TIM_Channel_1、TIM_Channel_2、TIM_Channel_3或TIM_Channel_4四个通道。它设定CCMRx寄存器CCxS位 的值。
- TIM_ICPolarity:输入捕获边沿触发选择,可选上升沿触发、下降沿触发或边沿跳变触发。它设定CCER寄存器CCxP位和CCxNP位的值。
- TIM_ICSelection:输入通道选择,捕获通道ICx的信号可来自三个输入通道,分别为TIM_ICSelection_DirectTI、TIM_ICSelection_IndirectTI或TIM_ICSelection_TRC,具体的区别见图 016。它设定CCRMx寄存器的CCxS[1:0]位的值。
- TIM_ICPrescaler:输入捕获通道预分频器,可设置1、2、4、8分频,它设定CCMRx寄存器的ICxPSC[1:0]位的值。如果需要捕获输入信号的每个有效边沿,则设置1分频即可。
- TIM_ICFilter:输入捕获滤波器设置,可选设置0x0至0x0F。它设定CCMRx寄存器ICxF[3:0]位的值。一般我们不使用滤波器,即设置为0。