赞
踩
PWM(Pulse Width Modulation):脉冲宽度调制
占空比:就是输出的PWM中,高电平保持的时间与该PWM的时钟周期的时间之比。
PWM调节说通俗一点就是,我们在一个时间周期里面,控制高电平持续的时间,来达到等效的电压的行为,比如下面的例子
在一个周期为1000us的波形中,我们控制输出200us的高电平,stm32的额定电压输出为3.3v,这样只控制1/5的高电平输出,就相当于3.3v*1/5,就相当于只输出了0.66v的电压,这样就可以实现电压的调制。
一般我们在使用PWM调制的时候,都是用来控制电机或者是用来控制灯光闪烁的。在做智能小车转弯的时候,需要两个电机转速不一致,这个时候就需要PWM调制来实现。
我们以通用定时器的PWM输出端口为例
我们是通过配置捕获/比较寄存器的数值来控制输出高电平的时间的;
所以我们只需要控制寄存器CCR的值,就可以来控制输出的高电平的时间,从而实现脉冲宽度的调制。
当然,不同的PWM模式下,CCR和CNT的相关比较也是不同的,具体的模式1和模式2如下图所示:
高电平为有效
低电平为无效
实验目标:利用TIM2的通道1产生PWM波形,控制IO口上的LED灯实现呼吸灯的效果。
其他配置和原来相同
其实实现PWM的效果就是去改变寄存器CCR的值,所以我们可以直接使用寄存器来改变CCR的值,代码如下
这样改变CCR的值从而产生PWM波形的代码就搞定了。
下一步我们还需要开启定时器的PWM,然后在主函数中用for循环来实现CCR数值的改变,具体代码如下
通过这段代码,我们就能实现在PA0上产生呼吸灯的效果了。
我们以通用定时器为例
通用定时器中的寄存器主要包括
由于定时器的寄存器比较多也比较杂,所以我们重点介绍几个比较常用也比较重要的寄存器,其他的寄存器及各种位感兴趣的可以去中文参考手册上查看。
这个寄存器中比较重要的是第0位和第6位。
至于允许更新中断和触发中断使能的区别如下:
更新中断,比如CNT的值计数到ARR的时候,需要重新装载CNT(也就是所谓的更新),那么就可以触发更新中断。
触发中断,比如输入捕获的时候,当触发脉冲出现的时候,那么就可以引起触发中断。
这个寄存器主要是显示定时器的相关状态
比较重要的是第0位和第6位
用来存放计数器的值,因为大部分计数器是16位的,最大存放的数值为2^16的数值,所以这个计数器寄存器也是16位的。
预分频器就是我们在给CNT脉冲时钟之前,将给定时器的系统时钟进行分频操作的寄存器,比如我们给预分频器72的值,那么它就会将系统时钟的72MHZ进行72分频,分频为1MHZ输入给CNT寄存器。
自动重装载寄存器是用来设定自动重装载值的,当CNT计数器的值技术到ARR的时候,需要进行自动重装载,这个寄存器也是16位的寄存器,最大可以存放2^16的数值。
我们以通道1的CCR1为例
当定时器配置为输入捕获模式的时候,CCR存放着上一次输入捕获事件传输的数值;
当定时器配置为输出比较模式的时候,CCR存放着下一次要输出的值,用来调节PWM波形。
上面就是定时器配置PWM和相关寄存器的内容了,希望大家多批评指正!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。