目录
定义
PWM(Pulse Width Modulation)全称为脉冲宽度调制,它通过改变信号的高电平和低电平的持续时间比例来控制输出信号的平均功率或电压。
参数
周期
高低电平变化所需要的时间,单位是ms
其中,T是周期,f是频率。
频率
在1s内,信号从高电平到低电平再回到高电平的次数,也就是说一秒PWM有多少个周期,单位是Hz。
例如:
如果频率为50Hz,也就是一个周期20ms,那么一秒钟就有50次PWM周期。
1000ms / 50 =20ms
占空比
在一个脉冲周期内,高电平的时间占整个周期时间的比例,单位是%(0%~100%)
工作原理
中文参考手册241页
TIMx_ARR 自动重装载寄存器
TIMx_CCRx 捕获/比较寄存器
TIMx_CNT 计数器寄存器
输入捕获
输入捕获可以用来捕获外部事件,比如引脚的电平变化(上升沿、下降沿),并记录下变化的时间,通常可以用来测量外部信号的频率或者电平的持续时间。
输出比较
此项功能是用来控制一个输出波形,当计数器与捕获/比较寄存器的内容相同时,输出比较功能做出相应的动作,比如电平翻转,通常用于生产PWM波形。
向上计数模式
输出过程
当0-t1这个阶段,计数寄存器的CNT的值是小于CCR,输出高电平。
当t1-t2这个阶段,计数寄存器的CNT的值是大于CCR且小于ARR的值,输出低电平。
当CNT的值达到ARR的值的时候,产生溢出事件,自动清零(重装寄存器),然后再次从零开始向上计数。
应用
呼吸灯,LED照明调光,舵机转向控制,电机。
实验:通过PWM信号调节LED灯亮度
频率:
64MHz 64分频 -->1MHz 也就是1 000 000s
即记1000为一个周期
HAL_StatusTypeDef HAL_TIM_PWM_Start (TIM_HandleTypeDef * htim, uint32_t Channel)
功能:启动PWM信号生成
参数:
htim:TIM句柄
Channel: TIM要启用的通道,该参数可以是以下值之一
XXXXXXXXX
返回值:状态
实验:呼吸灯
for(int num=1000;num>0;num-=2)
{
TIM3->CCR3 = num;
HAL_Delay(1);
}
for(int num=0;num<1000;num+=2)
{
TIM3->CCR3 = num;
HAL_Delay(1);
}