嵌入式学习笔记6.PWM
脉冲宽度调制(pulsewidthmodulation,PWM)是一种对模拟信号电平进行数字编码的方法。
PWM信号有两个重要的参数:周期和占空比。
周期(Period)
一个完整PWM波形所持续的时间。
占空比(Duty)
高电平持续时间(T)与周期(Period)的比值。
根据平均电压的计算公式:平均电压=峰值×占空比,
PWM信号能够进行电压调节的基本原理就是不同占空比的PWM信号等效于不同的平均电压。
捕获/比较通道由三个模块组成:输人捕获单元、捕获/比较寄存器、输出比较单元。
输入捕获单元
输入捕获单元用于捕获外部脉冲信号,捕获方式可以设置为上升沿捕获、下降沿捕获和双边沿捕获。发生捕获事件时,将计数器的当前计数值锁存到捕获/比较寄存器中,
捕获/比较寄存器
捕获/比较寄存器TIMx_CCR是捕获/比较通道中最重要的寄存器。在输人捕获模式下用于存放发生捕获事件时的计数值;在输出比较模式下用于存放预设的比较值。该寄存器具备预装载功能,由影子寄存器和预装载寄存器组成,预装载功能可由软件选择开启或关闭。
输出比较单元
输出比较单元用于信号输出。定时器通过将预设的比较值与计数器的计数值做匹配比较,从而实现各类输出,如PWM输出、电平翻转、单脉冲输出和强制输出。预设的比较值存放在捕获/比较寄存器TIMx_CCR中。
使用捕获/比较通道时需要注意以下几点:
①输入捕获功能和输出比较功能都是由定时功能衍生而来。因此,定时器工作于定时模式,时钟源为内部时钟CK_INT,时基单元的预分频时钟CK_PSC等于定时器的定时时钟TIMx_CLK。
②每个定时器具备1~4个独立的捕获/比较通道,每个通道具有独立的输入捕获单元、捕获/比较寄存器和输出比较单元,但共享同一个时基单元。
③每个捕获/比较通道都可以独立设置为捕获通道(用于输人捕获)或者比较通道(用于输出比较)但是两种功能只能选择其中之一。
④每个捕获/比较通道都有对应的通道引脚作为通道的输人/输出接口,这些通道引脚与GPIO引脚复用物理上只有一个引脚与之对应,在使用时,可以配置为输人捕获功能或者输出比较功能。
通道引脚所对应的GPIO引脚,可以查阅芯片的参考手册获取。以STM32F411芯片的定时器2为例,其四个通道引脚所对应的GPI0引脚如表所示。
PWM原理
要实现PWM信号的输出,需要用到三个寄存器:自动重载寄存器TIMx_ARR,捕获/ 比较寄存器TIMx_CCRn)以及计数器寄存器TIMx_CNT,并通过通道引脚TIMx_CHn输出PWM信号。
Pulse
用于设置捕获/比较值CCR,即捕获/比较寄存器TIMx_CCRn的内容,该寄存器用于
控制PWM信号的占空比。Pulse的取值范围由TIMxCCRn寄存器的位数决定:如果是 16位,则Pulse的取值范围为0~65535
PWM模式:
PWM1模式
递增计数时,当TIMx_CNT(计数值)<TIMx_CCR(捕获/比较值)时,输出为有效电平,否则为无效电平。递减计数模式则刚好相反。
PWM2模式
递增计数时,当TIMx_CNT(计数值)<TIMx_CCR(捕获/比较值)时,输出为无效电平,否则为有效电平。递减计数模式则刚好相反。
两种PWM模式的区别:假设定时器设置为递增计数模式,输出有
效电平的极性为高电平。
PWM1模式的初始电平为高电平,发生匹配时,翻转为低电平。·PWM2模式的初始电平为低电平,发生匹配时,翻转为高电平。
PWM1模式下的CCR用于控制高电平持续的时间;
PWM2模式下的CCR用于控制低电平持续的时间,
两种模式下的PWM信号互为互补输出。
下面以实现一个PWM周期为20ms的方波产生双向呼吸灯为例
利用Cube MX配置PWM
Keil代码
先找到两个要使用的函数
tim.c文件里
main.c文件里
实验现象
PWM实现双向呼吸灯