PWM

脉冲宽度调制(英语:Pulse-width modulation,缩写:PWM),简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的技术。PWM技术是一种对模拟信号电平的数字编码方法,通过使用高分辨率计数器(调制频率)调制方波的占空比,从而实现对一个模拟信号的电平进行编码。

占空比:在规定的时间间隔或“周期”中接通(ON)的比例,公式为D = PW/T *100%,其中 pw为脉冲宽度(调制周期中脉冲持续时间)。100%完全打开,当数字信号的一半时间处于打开状态,而另一半时间处于关闭状态时,该数字信号的占空比为50%,类似于“方波”。 低占空比对应于低功耗,因为大多数时候电源都处于关闭状态。


简单来说,假设PWM时间周期设定为计数80,我们再设定一个比较值是10,那么从0计数到10时(这时计数器还是一直往上计数,直到计数到设定值80),单片机就会根据设定,控制某个IO口在这个时候是输出1还是输出0,因此我们只需要提供宽、窄不同的数字式脉冲,即可简单地实现改变输出电流。这里,通过改变80大小可以改变PWM的输出频率,改变10的大小就是改变占空比。PWM特别适用于运行惯性负载,这些负载不易受这种离散开关的影响,我们常用PWM来驱动LED的暗亮程度,电机的转速等。PWM也被用于某些通信系统,其占空比被用来通过通信信道传输信息。

PWM的基本原理:

脉宽调制(PWM)基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。
逆变电路是与整流电路(Rectifier)相对应,把直流电变成交流电称为逆变。
在采样控制理论中有一个重要结论:冲量(脉冲的面积)相等而形状不同窄脉冲,分别加在具有惯性环节的输入端,其输出响应波形基本相同,也就是说,尽管脉冲形状不同,但只要脉冲面积相等,其作用的效果基本相同。
根据冲量相等效果相同的原理,PWM波形和正弦半波是等效的,下图所示为正弦波PWM调制波形。

PWM的优点:

  1. 电源的输出电压在工作时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的。
  2. 在模拟电路中,电压和电流可直接用来进行控制对象。但模拟电路有诸多的问题:例如控制信号容易随时间漂移(如温度影响),难以调节;功耗大;易受噪声和环境干扰等等。与模拟电路不同,数字电路是在预先确定的范围内取值,在任何时刻,其输出只可能为ON和OFF两种状态。
  3. 从处理器到被控系统信号都是数字形式的,无需进行数模转换。让信号保持为数字形式可将噪声影响降到最小。

一、PWM 使用

参考STM32 参考手册
STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4路的 PWM 输出,这样, STM32 最多可以同时产生 30 路 PWM 输出!

1.1高级控制定时器(TIM1和TIM8)

1.1.1 TIM1和TIM8 定时器介绍

高级控制定时器(TIM1和TIM8)由一个16位的自动装载计数器组成,它由一个可编程的预分频器驱动(计数器时钟由预分频器分频得到)
它适合多种用途,包含测量输入信号的脉冲宽度(输入捕获),或者产生输出波形(输出比较、PWM、嵌入死区时间的互补PWM等)。
使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。

TIM1和TIM8定时器功能:

  1. 16位向上、向下、向上/下自动装载计数器
  2. 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65535之间的任意
    数值
  3. 多达4个独立通道:
    ─ 输入捕获
    ─ 输出比较
    ─ PWM生成(边缘或中间对齐模式)
    ─ 单脉冲模式输出
  4. 死区时间可编程的互补输出
    死区时间是指控制不到的时间域,在变频器里一般是指功率器件输出电压、电流的“0”区,在传动控制里一般是指电机正反向转换电压、电流的过零时间。死区时间当然越小越好。但是所以设置死区时间,是为了安全。因此又不可没有。最佳的设置是:在保证安全的前提下,越小越好。以不炸功率管、输出不短路为目的。

1.1.2 TIM1和TIM8 定时器概念介绍

● 计数器寄存器(TIMx_CNT):
● 预分频器寄存器 (TIMx_PSC,prescaler):将计数器的时钟频率按1到65536之间的任意值分频。新的预分频寄存器的参数在下一次更新事件UEV(update event)时被使用。
● 自动装载寄存器 (TIMx_ARR,anto reload):预先装载,写或读自动重装载寄存器将访问预装载寄存器
● 重复次数寄存器 (TIMx_RCR)
重复次数寄存器设置后,达到重复次数产生更新时间,否则计数器寄存器每次溢出时产生更新事件。


预分频1到4时序图

时钟选择
计数器时钟可由下列时钟源提供:
● 内部时钟(CK_INT)
● 外部时钟模式1:外部输入引脚
● 外部时钟模式2:外部触发输入ETR
● 内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器。如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。

1.1.3 TIM1和TIM8 定时器 捕获/比较

每一个捕获/比较通道(capture/compare channels,CCR)都是围绕着一个捕获/比较寄存器,包括捕获的输入部分(数字滤波、多路复用和预分频器),和输出部分(比较器和输出控制)。

  1. 输入捕获:简单的说就是通过检测 TIMx_CHx (定时器X的通道X)上的 边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT) 存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA 等。
  2. 输出比较模式: 用来控制一个输出波形,或者表示出一段给定的的时间已经到时。(indicating when a period time has elapsed)。

1.1.4 TIM1和TIM8 定时器 寄存器

TIM1和TIM8定时器里面有很多的寄存器,如控制寄存器CR、状态寄存器SR、捕获比较寄存器CCR等,一共21个寄存器,这里挑选与PWM密切相关的寄存器进行说明。

  1. 捕获/比较模式寄存器(TIMx_CCMR1/2)


    TIMx_CCMR1

位7 OC1CE:输出比较1清’0’使能 (Output Compare 1 clear enable)
0: OC1REF 不受ETRF输入的影响;
1:一旦检测到ETRF输入高电平,清除OC1REF=0。

位6:4: OC1M[2:0]:输出比较1模式 (Output Compare 1 mode)
该3位定义了输出参考信号OC1REF的动作。
其中,110: PWM模式1- 在向上计数;111: PWM模式2- 在向上计数时

位3 OC1PE: 输出比较1预装载使能 (Output Compare 1 preload enable):是否使能预装载

位2 OC1FE: 输出比较1 快速使能 (Output Compare 1 fast enable):该位用于加快CC输出对触发输入事件的响应

位1:0 CC1S[1:0]:捕获/比较1 选择(Capture/Compare 1 selection):定义通道的方向(输入/输出),及输入脚的选择
00: CC1通道被配置为输出;
01: CC1通道被配置为输入, IC1映射在TI1上;
10: CC1通道被配置为输入, IC1映射在TI2上;
11: CC1通道被配置为输入, IC1映射在TRC上。此模式仅工作在内部触发器输入被选中时(由
TIMx_SMCR寄存器的TS位选择)。


image.png

我们想要的是PWM模式,所以CCxM位必须是110/111;CCxS位为0。

  1. 捕获/比较使能寄存器(TIMx_CCER)


    TIMx_CCER

    CCxE:CC1E: 输入/捕获1输出使能 (Capture/Compare 1 output enable)
    位为1: 开启- OC1信号输出到对应的输出引脚
    CCxP: 输入/捕获1输出极性 (Capture/Compare 1 output polarity):可以设置OCX高电平有效还是低电平有效。
    输出时:0: OC1高电平有效;1: OC1低电平有效
    CCxNE: CC1NE:输入/捕获1互补输出使能 (Capture/Compare 1 complementary output enable)
    CCxNP:CC1NP:输入/捕获1互补输出极性 (Capture/Compare 1 complementary output polarity)

我们只要配置使能位CCxE和极性。

  1. 捕获/比较寄存器(TIMx_CCR)


    TIMx_CCR1

输出模式下,该寄存器的值与CNT值进行比较,通过修改这个寄存器的值,就可以控制PWM的输出脉宽。
脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。

PWM举例

OCxREF:output compare signal
CCxIF: sets a flag in the interrupt status register(CCxIF bit in the TIMx_SR register)
CC1IF: 捕获/比较1中断标记 (Capture/Compare 1 interrupt flag)
如果通道CC1配置为输出模式:
当计数器值与比较值匹配时该位由硬件置1,但在中心对称模式下除外(参考TIMx_CR1寄存器的CMS位)。它由软件清’0’。
0:无匹配发生;
1: TIMx_CNT的值与TIMx_CCR1的值匹配。
当TIMx_CCR1的内容大于TIMx_APR的内容时,在向上或向上/下计数模式时计数器溢出,或向下计数模式时的计数器下溢条件下, CC1IF位变高

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容