, G$ V0 V& `& [; N" H$ ?* G" X数字控制 0 ?, i4 t) x7 K% e- X. R5 y3 P
/ D R6 _ _5 a& t, L8 C
通过以数字方式控制模拟电路,可以大幅度降低系统的成本和功耗。此外,许多微控制器和DSP已经在芯片上包含了PWM控制器,这使数字控制的实现变得更加容易了。 & x1 b/ k/ Z f+ A+ s" P/ H ; O. \$ {8 T B3 m! C简而言之,PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。 " ]; a, t }. y- Z' B . A+ h$ K& k* q: X图1显示了三种不同的PWM信号。图1a是一个占空比为10%的PWM输出,即在信号周期中,10%的时间通,其余90%的时间断。图1b和图1c显示的分别是占空比为50%和90%的PWM输出。这三种PWM输出编码的分别是强度为满度值的10%、50%和90%的三种不同模拟信号值。例如,假设供电电源为9V,占空比为10%,则对应的是一个幅度为0.9V的模拟信号。 2 P& B9 L5 s% Z+ ~3 m, D3 o $ \3 n+ j9 {2 p) A+ k* s6 {图2是一个可以使用PWM进行驱动的简单电路。图中使用9V电池来给一个白炽灯泡供电。如果将连接电池和灯泡的开关闭合50ms,灯泡在这段时间中将得到9V供电。如果在下一个50ms中将开关断开,灯泡得到的供电将为0V。如果在1秒钟内将此过程重复10次,灯泡将会点亮并象连接到了一个4.5V电池(9V的50%)上一样。这种情况下,占空比为50%,调制频率为10Hz。 ( W, W9 D- U' P4 l% _/ _. a/ f; J5 N7 k
3 C D y+ T* |* b大多数负载(无论是电感性负载还是电容性负载)需要的调制频率高于10Hz。设想一下如果灯泡先接通5秒再断开5秒,然后再接通、再断开……。占空比仍然是50%,但灯泡在头5秒钟内将点亮,在下一个5秒钟内将熄灭。要让灯泡取得4.5V电压的供电效果,通断循环周期与负载对开关状态变化的响应时间相比必须足够短。要想取得调光灯(但保持点亮)的效果,必须提高调制频率。在其他PWM应用场合也有同样的要求。通常调制频率为1kHz到200kHz之间。 " F v0 M/ b2 t) c # F+ e2 I. F- U' P8 W, C' w( h
硬件控制器 s# ~ v3 K9 c. j' Y8 h
) Y4 l7 H3 w: U. w8 K
许多微控制器内部都包含有PWM控制器。例如,Microchip公司的PIC16C67内含两个PWM控制器,每一个都可以选择接通时间和周期。占空比是接通时间与周期之比;调制频率为周期的倒数。执行PWM操作之前,这种微处理器要求在软件中完成以下工作: . o. ^# _0 l6 ]: C6 I1 `7 b
# ?; |" D* }* R: Z/ k5 p. t* 设置提供调制方波的片上定时器/计数器的周期 0 Z% N0 x5 Q+ |% u2 r' X1 m& _7 B* 在PWM控制寄存器中设置接通时间 7 W4 f+ D/ ^8 q& `: j; _8 ~4 A. I* 设置PWM输出的方向,这个输出是一个通用I/O管脚 $ |9 c& o9 N" ?5 y) D. P; T
* 启动定时器 6 W5 E7 ^5 `! N* w( T
* 使能PWM控制器 : B4 ^; j2 m7 i( l- C
0 Q, m2 Y$ a8 F
虽然具体的PWM控制器在编程细节上会有所不同,但它们的基本思想通常是相同的。 4 d4 K: n) n7 h1 r7 B 8 I- b+ O" ?' |) S
通信与控制 " X# A& P. g7 |% ` 8 N8 J& b% K! \4 [PWM的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换。让信号保持为数字形式可将噪声影响降到最小。噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响。 9 j7 X5 q3 Y- c: t. c- |. V. V$ V对噪声抵抗能力的增强是PWM相对于模拟控制的另外一个优点,而且这也是在某些时候将PWM用于通信的主要原因。从模拟信号转向PWM可以极大地延长通信距离。在接收端,通过适当的RC或LC网络可以滤除调制高频方波并将信号还原为模拟形式。 # l; M' A9 Y# \. D; ?
PWM广泛应用在多种系统中。作为一个具体的例子,我们来考察一种用PWM控制的制动器。简单地说,制动器是紧夹住某种东西的一种装置。许多制动器使用模拟输入信号来控制夹紧压力(或制动功率)的大小。加在制动器上的电压或电流越大,制动器产生的压力就越大。 ' n( c, Y3 b/ D& Y3 H# w可以将PWM控制器的输出连接到电源与制动器之间的一个开关。要产生更大的制动功率,只需通过软件加大PWM输出的占空比就可以了。如果要产生一个特定大小的制动压力,需要通过测量来确定占空比和压力之间的数学关系(所得的公式或查找表经过变换可用于控制温度、表面磨损等等)。 3 z2 @' V/ X: {4 h" B* A
例如,假设要将制动器上的压力设定为100psi,软件将作一次反向查找,以确定产生这个大小的压力的占空比应该是多少。然后再将PWM占空比设置为这个新值,制动器就可以相应地进行响应了。如果系统中有一个传感器,则可以通过闭环控制来调节占空比,直到精确产生所需的压力。 ' N, w% n1 u) [% f0 s5 f4 W6 k
总之,PWM既经济、节约空间、抗噪性能强,是一种值得广大工程师在许多设计应用中使用的有效技术。 0 ]8 D# T# o1 Q[Embedded Systems Programming] 9 j/ b, _) J2 w" H4 w
Michael Barr是《嵌入式系统编程》杂志总编辑,也是《使用C和C++对嵌入式系统进行编程》(O'Reilly出版公司,1999年)一书的作者以及马里兰大学的客座教师。