目录
一、PWM简介
1.介绍:
2.主要参数
二、stm32PWM产生方式
1,普通IO口
2,PWM口
三、定时器复习
四、公式推导及结论
五、stm32PWM具体的运用
1.电机
2.舵机
一、PWM简介
1.介绍
脉冲调制技术(PWM Pulse Width Modulatio),百度百科上的解释是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。用普通话来解释就是通过控制一个周期中的脉宽时间(高电压时间)来实现输出电压的变化。
2.PWM的主要参数
于是为了控制PWM输出的电压值,我们就需要控制以下变量
周期T 脉宽时间T1
输出的占空比就等于T1/T
二、PWM产生方式
1,普通IO口
为了产生可控的PWM信号我们只需要产生一个周期T,然后把这个周期的一段时间T1拉高就好了。自然而然我们可以使用定时器产生一个人为的周期,例如在定时器向上计数模式中,通过定义一个变量count=0,当count小于5时给高电平,大于5时给低电平,等于10时将count重置为0,来达到模拟pwm的目的(但是由于有其他中断的干扰,不够精确)
2,PWM口
不过stm32在设计时就想到我们会使用PWM,所以T1和T8定时器有一个pwm模式,通过配置比较寄存器CRR(count),自动重装载寄存器ARR(数字10),以及预分频器TIMx_PSC(可以理解为计数的速度),捕获/比较寄存器 1TIMx_CCR1(数字5)就可以实现同样的功能。与普通IO口产生的寄存器相比更精确(说明),也耗费更少的MCU资源。
套用一下原子哥的图
最开始为低电平,CNT随着时间增加,到达CCRx时候,电平拉高,CNT继续增加,直到计数到ARR的值,电平重新拉低。
三、定时器复习
在推导出最后的公式之前,我们先简单复习一下上述的几个寄存器
-
自动装载寄存器 (TIMx_ARR) 人为设置的定时器计数最大值。计数器从0计数到自动加载值(TIMx_ARR计数器的内容),然后重新从0开始计数并且产生一个计数器溢出事件。
- TIM1 和 TIM8 捕获 / 比较寄存器 1(TIMx_CCR1):用于比较的寄存器,控制最后的占空比
- 计数器寄存器(TIMx_CNT) :此时定时器的计数值对于这两个寄存器, 我们可以在TIM1 和 TIM8 捕获 / 比较模式寄存器 1(TIMx_CCMR1)找到以下描述
-
预分频器寄存器 (TIMx_PSC) :将计数器的时钟频率按1到65536之间的任意值分频,减小频率,增加单周期的时长(计数器的时钟频率(CK_CNT)等于fCK_PSC/( PSC+1))
四、公式推导及结论
为了以下公式的简洁以及方便理解,先做以下声明
- 最大计数值: ARR
- 比较计数值(比较寄存器): CCRx
- 预分频系数: PSC
- 计数器的时钟频率 : CK_CNT
输入预分频器的时钟频率: fCK_PSC
即计数器的时钟频率(一个cpu周期时间的倒数):fCK_CNTPWM的高电平时间: T1
pwm单个的周期: T
1. fCK_CNT=fCK_PSC/( PSC+1)
2. T=(ARR+1)/fCK_CNT =(ARR+1) / (fCK_PSC/(PSC+1))
3. T1=CCRx/fCK_CNT
4. 占空比=T1/T=CCRx/ARR
备注:
- 因为PSC和ARR都是从零开始计数,所以要+1
- 有四个CCRx寄存器,分别是TIMx_CCR1,TIMx_CCR2,TIMx_CCR3,TIMx_CCR4,换句话说stm32的一个定时器可以产生四路不同的的pwm信号。
五、PWM具体运用
1.电机
控制电机的基本逻辑是:改变pwm的占空比 -> 改变电压的大小 -> 改变电机的速度
步骤如下
- pwm初始化,即确定自动装载值arr(计数最大值),预分频系数psc(不重要,但是为了方便以后舵机的控制,建议设为719,而arr设为1999),设置占空比初值TIMx_CCRx
- 通过改变TIMx_CCRx(注意不要大于ARR的值),从而改变占空比
2.舵机
舵机的角度控制仅与高电平脉宽有关,一般来说,舵机接收的PWM信号频率为50HZ,即周期为20ms。当高电平的脉宽在0.5ms-2.5ms之间时舵机就可以对应旋转到不同的角度。
综上,要控制电机需要
- 初始化:满足PWM信号频率为50HZ,即T=(ARR+1)/ fCK_CNT = (ARR+1)* (fCK_PSC/(PSC+1))要等于20ms ,所以一般设置psc=719,arr=1999。
T=2000/(72 000 000/720)=0.02s=20ms
2.T1要在0.5ms-2.5ms之间
引用STM32 PWM控制舵机_追兮兮的博客-CSDN博客_stm32pwm控制舵机的图示
- t = 0.5ms(CRR=50, 占空比=2.5%)——————-舵机会转到 0 °
- t = 1.0ms(CRR=100, 占空比=5% )——————-舵机会转到 45°
- t = 1.5ms(CRR=150, 占空比=7.5%)——————-舵机会转到 90°
- t = 2.0ms(CRR=200, 占空比=10%)——————-舵机会转到 135°
- t = 2.5ms(CRR=250, 占空比=12.5%)——————-舵机会转到 180°
参考:STM32——PWM知识详解_笛卡尔的叹息的博客-CSDN博客_stm32pwm配置详解
STM32 PWM控制舵机_追兮兮的博客-CSDN博客_stm32pwm控制舵机