提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于有效电平的时间占据整个信号周期的百分比。PWM是脉冲宽度调制。有效电平持续的时间占整个周期的百分比称为占空比
一、pwm是什么?
脉冲宽度调制(PWM) 是一种数字信号,最常用于控制电路。该信号在预定义的时间和速度中设置为高(5v或3.3v)和低(0v)。通常,我们将PWM的高电平称为1,低电平为0。
二、使用步骤
代码如下(示例):
话不多说,我们直接开始
我使用的是stm32f103rct6这块板子,我们直接开始
首先打开cubemx
创建工程
到这里我们开始对工程的基本配置
首先开启晶振,
然后开始配置时钟树
接下来我们开始pwm
开启定时器二频道一的pwm
接下来我们
接下来我们基本配置完成了
下面开始保存工程,打开工程了
完成创建过后
打开工程
我们需要在这里添加如下代码
uint16_t pwmVal = 0; //占空比大小(CCRx的大小)
uint8_t direction = 1; //呼吸灯方向: 1. 越来越亮 2. 越来越暗
在这里添加如下
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
这里添加如下
HAL_Delay(3); //控制呼吸灯呼吸速率
//控制占空比大小,即修改CCRx的大小
if(direction){
pwmVal++;
}else{
pwmVal--;
}
//设置了ARR为499,因此每计数500为一个周期
if(pwmVal > 500){
direction = 0; //改变呼吸灯方向
}else if(pwmVal == 0){
direction = 1; //改变呼吸灯方向
}
//修改定时器4通道三的PWM的占空比
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_1,pwmVal);
到这里就配置好了
我们就完成了一个pwm呼吸灯的配置了
采用的定时器二频道二
三、pwm理解
io口如何产生一个pwm,无非就是做一个高低电平周期性的变化,这种思想很重要,确定频率就可以确定周期(T=1/f)也就是在一个周期内产生pwm的时间可以确定下来了,如何改变占空比确定了时间,高电平的时间不就是想要的占空比么,比如要产生一个频率1khz,占空比为70%的pwm,根据频率我们知道了周期为1ms,产生一个占空比为70%的不就是0.7ms的时间给高电平么,我们用定时器中断的方式,使0.1ms产生一次中断,计数中断次数,中断处理函数前七次中断都给高电平就ok了
总结
本人在学习STM32过程中发现网上的PWM相关知识比较散乱,对于小白或新手而言会有很多不了解的地方。因此,这里结合自己的学习过程,将PWM这一版块的知识整合,如有错误之处,请批评指正!方法。