一天一个设计实例-GPIO PWM应用
GPIO PWM
1.1.1PWM简介
脉冲宽度调制脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
图5‑78 脉冲宽度调制脉冲宽度调制
脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶 体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。
PWM控制技术以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。由于当今科学技术的发展已经没有了学科之间的界限,结合现代控制理论思想或实现无谐振软开关技术将会成为PWM控制技术发展的主要方向之一。
1.1.2PWM(脉冲宽度调制)的基本原理
随着电子技术的发展,出现了多种PWM技术,其中包括:相电压控制PWM、脉宽PWM法、随机PWM、SPWM法、线电压控制PWM等,而在镍氢电池智能充电器中采用的脉宽PWM法,它是把每一脉冲宽度均相等的脉冲列作为PWM波形,通过改变脉冲列的周期可以调频,改变脉冲的宽度或占空比可以调压,采用适当控制方法即可使电压与频率协调变化。可以通过调整PWM的周期、PWM的占空比而达到控制充电电流的目的。
脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。
PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。
1.1.3PWM(脉冲宽度调制)基本控制原理
PWM(Pulse Width Modulation)控制——脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。
PWM控制技术在逆变电路中应用最广,应用的逆变电路绝大部分是PWM型,PWM控制技术正是有赖于在逆 变电路中的应用,才确定了它在电力电子技术中的重要地位。
理论基础:
冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。冲量指窄脉冲的面积。效果基本相同,是指环节的输出响应波形基本相同。低频段非常接近,仅在高频段略有差异。
图5‑79 形状不同而冲量相同的各种窄脉冲
面积等效原理:
分别将如图5‑79所示的电压窄脉冲加在一阶惯性环节(R-L电路)上,如图5‑80a所示。其输出电流i(t)对不同窄脉冲时的响应波形如图5‑80b所示。从波形可以看出,在i(t)的上升段,i(t)的形状也略有不同,但其下降段则几乎完全相同。脉冲越窄,各i(t)响应波形的差异也越小。如果周期性地施加上述脉冲,则响应i(t)也是周期性的。用傅里叶级数分解后将可看出,各i(t)在低频段的特性将非常接近,仅在高频段有所不同。
图5‑80 冲量相同的各种窄脉冲的响应波形
用一系列等幅不等宽的脉冲来代替一个正弦半波,正弦半波N等分,看成N个相连的脉冲序列,宽度相等,但幅值不等;用矩形脉冲代替,等幅,不等宽,中点重合,面积(冲量)相等,宽度按正弦规律变化。
SPWM波形——脉冲宽度按正弦规律变化而和正弦波等效的PWM波形。
图5‑81 用PWM波代替正弦半波
要改变等效输出正弦波幅值,按同一比例改变各脉冲宽度即可。
PWM电流波:电流型逆变电路进行PWM控制,得到的就是PWM电流波。
PWM波形可等效的各种波形:
直流斩波电路:等效直流波形
SPWM波:等效正弦波形,还可以等效成其他所需波形,如等效所需非正弦交流波形等,其基本原理和SPWM控制相同,也基于等效面积原理。
随着电子技术的发展,出现了多种PWM技术,其中包括:相电压控制PWM、脉宽PWM法、随机PWM、SPWM法、线电压控制PWM等,而本文介绍的是在镍氢电池智能充电器中采用的脉宽PWM法。它是把每一脉冲宽度均相等的脉冲列作为PWM波形,通过改变脉冲列的周期可以调频,改变脉冲的宽度或占空比可以调压,采用适当控制方法即可使电压与频率协调变化。可以通过调整PWM的周期、PWM的占空比而达到控制充电电流的目的。
简而言之,PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。
图5‑82 三种不同的PWM信号
图5‑82显示了三种不同的PWM信号。图1a是一个占空比为10%的PWM输出,即在信号周期中,10%的时间通,其余90%的时间断。图5‑82b和图5‑82c显示的分别是占空比为50%和90%的PWM输出。这三种PWM输出编码的分别是强度为满度值的10%、50%和90%的三种不同模拟信号值。例如,假设供电电源为9V,占空比为10%,则对应的是一个幅度为0.9V的模拟信号。
图5‑83 使用PWM进行驱动的简单电路
图5‑83是一个可以使用PWM进行驱动的简单电路。图中使用9V电池来给一个白炽灯泡供电。如果将连接电池和灯泡的开关闭合50ms,灯泡在这段时间中将得到9V供电。如果在下一个50ms中将开关断开,灯泡得到的供电将为0V。如果在1秒钟内将此过程重复10次,灯泡将会点亮并象连接到了一个4.5V电池(9V的50%)上一样。这种情况下,占空比为50%,调制频率为10Hz。
大多数负载(无论是电感性负载还是电容性负载)需要的调制频率高于10Hz。设想一下如果灯泡先接通5秒再断开5秒,然后再接通、再断开……。占空比仍然是50%,但灯泡在头5秒钟内将点亮,在下一个5秒钟内将熄灭。要让灯泡取得4.5V电压的供电效果,通断循环周期与负载对开关状态变化的响应时间相比必须足够短。要想取得调光灯(但保持点亮)的效果,必须提高调制频率。在其他PWM应用场合也有同样的要求。通常调制频率为1kHz到200kHz之间。
1.1.4PWM(脉冲宽度调制)分类
从调制脉冲的极性看,PWM又可分为单极性与双极性控制模式两种。
产生单极性PWM模式的基本原理如图5‑84所示。首先由同极性的三角波载波信号ut。与调制信号ur,比较(图5‑84(a)),产生单极性的PWM脉冲(图5‑84(b));然后将单极性的PWM脉冲信号与图5‑84(c)所示的倒相信号UI相乘,从而得到正负半波对称的PWM脉冲信号Ud,如图5‑84(d)所示。
图5‑84 单极性PWM模式(单相)
双极性PWM控制模式采用的是正负交变的双极性三角载波ut与调制波ur,如图5‑85所示,可通过ut与ur,的比较直接得到双极性的PWM脉冲,而不需要倒相电路。
图5‑85 双极性PWM模式调制原理
1.1.5PWM(脉冲宽度调制)应用
图5‑86 PWM 信号在宏观上是拥有不同占空比比率的信号周期
PWM 信号在宏观上是拥有不同占空比比率的信号周期。从上图我们可以看到,假设笔者要求 1k 的频率方波信号,那么一个周期就是 1ms 。再假设笔者求得占空比的比率是可以从 1~100%之间调节,那么笔者必须将一个周期的时间再分为 100 份,亦即 10us一个 PWM 块。
上图中指示了 3 个不同占空比的 PWM 信号:
10% PWM 信号,高电平保持时间 100us, 低电平保持时间 900us。
50% PWM 信号,高电平保持时间 500us, 低电平保持时间 500us。
80% PWM 信号,高电平保持时间 800us, 低电平保持时间 200us。
PWM 信号在电流(电压)的调节上是非常方便的。一些简单的计算可以是如下:
假设某输出口的驱动能力是 10mA,当仅有 10% PWM 的情况下,驱动能力降落仅剩原有的 10%能力,亦即 1mA。
利用 PWM 控制 LED 发光亮度, 1k 输出频率, PWM 分为最亮和最暗以及中等亮度,占空比分别为10%,50%,80%。
整个系统机构图如下:
图5‑87 PWM应用系统框图
接下来看下整个模块结构:
图5‑88 PWM应用系统框图
表5‑15 点击与双击(SClickDClick_module.v)模块间信号定义
模块间信号 |
||
管脚 |
传输方向 |
作用/说明 |
Pin_Out[1:0] |
keyfuncmod_module.v模块传输给led_module.v |
Pin_Out[1]-点击isSClick, Pin_Out[0]-长点击 isDClick |
时序 |
没有特殊要求。 |
|
表5‑16 点击与长按(SClicKLClick_module.v)顶层模块信号定义
顶层模块 |
|||
输入管脚 |
作用/说明 |
输出管脚 |
作用/说明 |
KEY |
待检测电平输入引脚 |
LED[1:0] |
KEY的输出信号 |
时序 |
没有特殊要求。 |
||
图上是一个简单的点击与长按模块。设计的方法主要是由“按键功能模块”和“LED显示模块”组合合成,“按键功能模块”主要做“点击”和“长按击”检测。
“按键功能模块”中电平检测思路详见上面章节介绍。设计的思路如图所示:
图5‑89 按键功能模块设计思路
先第一行输出 0,检查列线是否非为高;
再第二行输出 0,检查列线是否非为高;
再第三行输出 0,检查列线是否非为高;
再第三行输出 0,检查列线是否非为高;
如果某行输出 0 时,查到列线非全高,则该行有按键按下;
根据第几行线输出 0 与第几列线读入为 0,即可判断在具体什么位置的按键按下。
其他模块就不再赘述,按照图5‑88进行整个模块的连接,整个模块的RTL如下所示:
图5‑90 按键功能模块设计综合后RTL
和图5‑88一样,编译完后下载程序。如果点击一下 建,那么 LED[0] 会点亮,如果笔者双击建,结果 LED[1] 会点亮,再如果笔者长按建 3 秒不放,那么 LED[2] 则会点亮。总结说,一个按键资源可以执行 3 种功能,控制 3 位 LED 资源。