PWM简介
PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。
PWM的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换。让信号保持为数字形式可将噪声影响降到最小。噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响。 对噪声抵抗能力的增强是PWM相对于模拟控制的另外一个优点,而且这也是在某些时候将PWM用于通信的主要原因。从模拟信号转向PWM可以极大地延长通信距离。在接收端,通过适当的RC或LC网络可以滤除调制高频方波并将信号还原为模拟形式 模拟电压和电流可直接用来进行控制,如对汽车收音机的音量进行控制。在简单的模拟收音机中,音量旋钮被连接到一个可变电阻。拧动旋钮时,电阻值变大或变小;流经这个电阻的电流也随之增加或减少,从而改变了驱动扬声器的电流值,使音量相应变大或变小。与收音机一样,模拟电路的输出与输入成线性比例。 尽管模拟控制看起来可能直观而简单,但它并不总是非常经济或可行的。其中一点就是,模拟电路容易随时间漂移,因而难以调节。能够解决这个问题的精密模拟电路可能非常庞大、笨重(如老式的家庭立体声设备)和昂贵。模拟电路还有可能严重发热,其功耗相对于工作元件两端电压与电流的乘积成正比。模拟电路还可能对噪声很敏感,任何扰动或噪声都肯定会改变电流值的大小。
PWM应用领域
PWM控制技术主要应用在电力电子技术行业,具体讲,包括风力发电、电机调速、直流供电等领域
分类
随着电子技术的发展,出现了多种PWM技术,其中包括:相电压控制PWM、脉宽PWM法、随机PWM、SPWM法、线电压控制PWM等
等脉宽PWM法
VVVF(Variable Voltage Variable Frequency)装置在早期是采用PAM(Pulse Amplitude Modulation)控制技术来实现的,其逆变器部分只能输出频率可调的方波电压而不能调压.等脉宽PWM法正是为了克服PAM法的这个缺点发展而来的,是PWM法中最为简单的一种.它是把每一脉冲的宽度均相等的脉冲列作为PWM波,通过改变脉冲列的周期可以调频,改变脉冲的宽度或占空比可以调压,采用适当控制方法即可使电压与频率协调变化.相对于PAM法,该方法的优点是简化了电路结构,提高了输入端的功率因数,但同时也存在输出电压中除基波外,还包含较大的谐波分量.
SPWM法
SPWM(Sinusoidal PWM)法是一种比较成熟的,目前使用较广泛的PWM法.前面提到的采样控制理论中的一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同.SPWM法就是以该结论为理论基础,用脉冲宽度按正弦规律变化而和正弦波等效的PWM波形即SPWM波形控制逆变电路中开关器件的通断,使其输出的脉冲电压的面积与所希望输出的正弦波在相应区间内的面积相等,通过改变调制波的频率和幅值则可调节逆变电路输出电压的频率和幅值.该方法的实现有以下几种方案.
SPWM法
SPWM(Sinusoidal PWM)法是一种比较成熟的,目前使用较广泛的PWM法.前面提到的采样控制理论中的一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同.SPWM法就是以该结论为理论基础,用脉冲宽度按正弦规律变化而和正弦波等效的PWM波形即SPWM波形控制逆变电路中开关器件的通断,使其输出的脉冲电压的面积与所希望输出的正弦波在相应区间内的面积相等,通过改变调制波的频率和幅值则可调节逆变电路输出电压的频率和幅值.该方法的实现有以下几种方案. ==== 用蜂鸣器作为指示 软件模式PWM的,调整定时器初值;硬件PWM的,只要改变PWM占空比专用寄存器数据就可以 PWM原理 采用TIMER2的时钟作为时基,定时器从0计数递增到PR2就返回,PR2是一个初值,其实是T2溢出次数 占空比是高电平所占周期时间与整个周期时间的比值,但这里说的好像是高电平的时间 PWM 周期 = [(PR2) + 1] • 4 • TOSC • (TMR2 预分频值), Tosc为振荡周期 *4是一个机器周期 预分频则将定时器周期加长多少倍 所以可以看出,PWM的周期其实就是定时器2按PR2初值溢出的周期,相当于自己做的定时器一样 重新写一下计算公式 PWM周期=定时器2计数周期×计数次数(PR2+1) =Tosc*4*Pre*(PR2+1) PWM频率=1/[Tosc*4*Pre*(PR2+1)] 关系: PR2增大,PWM频率减小 Pre增大,PWM频率减小 Tosc增大,PWM频率减小 有可能是你的 CCPR1L 送进去的值大于PR2了 仔细的检查每一个CCPR1L的值 注意占空比不能大于周期时间,否则则全部是高电平 T2计数周期:1/8M*4*Pre=0.5us =(PR2+1)*0.5us PR2最大是255,应该取的PWM频率=1/(256*0.5us)=7.8khz 如果PR2最小0,则PWM频率=2Mhz,人耳朵听不到的了 由于自激蜂鸣器是直流电压驱动的,不需要利用交流信号进行驱动,只需对 驱动口输出驱动电平并通过三极管放大驱动电流就能使蜂鸣器发出声音,很简 单,这里就不对自激蜂鸣器进行说明了。这里只对必须用 1/2duty 的方波信号进 行驱动的他激蜂鸣器进行说明。 单片机驱动他激蜂鸣器的方式有两种:一种是 PWM 输出口直接驱动,另一种 现在取蜂鸣器频率为2KHZ 0.5ms=1/8M*4*pre*(PR2+1) 1000=pre*(PR2+1) 1000=4*(199+1) 确定参数: 晶振8MHZ,定时器2预分频4,蜂鸣器频率去2KHZ 则PR2=199 占空比,这里的占空比其实是高电平时间长度 PWM Duty Cycle =(CCPR1L:CCP1CON<5:4>) • TOSC • (TMR2 Prescale Value) 实际占空比=(CCPR1L:CCP1CON<5:4>) • TOSC • (TMR2 Prescale Value)/{[(PR2) + 1] • 4 • TOSC • (TMR2 Prescale Value)} =(CCPR1L:CCP1CON<5:4>)/4*(PR2+1) 0.5=400/4*200 (CCPR1L:CCP1CON<5:4>)=400 CCP1CON<5:4>)=00 CCPR1L=100 如何实现可调? 占空比=(CCPR1L:CCP1CON<5:4>)/800 0=0/800 1=800/800 设置值从0到800 对应AD采集的是0V和5v,对应采集值是多少? 如何剥离和复赋值(CCPR1L:CCP1CON<5:4>),高八位和低两位 int tmp=x; CCPR1L=(tmp>>2); CCP1CON=;或运算忽略其他位 if(tmp&0x02==0x02) CCP1X=1;else CCP1X=0; if(tmp&0x01==0x01) CCP1X=1;else CCP1X=0; 1. Set the PWM period by writing to the PR2 register. 周期计算: 2. Set the PWM duty cycle by writing to the CCPR1L register and CCP1CON<5:4> bits. PWM Duty Cycle =(CCPR1L:CCP1CON<5:4>) • TOSC • (TMR2 Prescale Value) 3. Make the CCP1 pin an output by clearing the TRISC<2> bit. TRISC2=output; 4. Set the TMR2 prescale value and enable Timer2 by writing to T2CON. T2CKPS1:T2CKPS0: Timer2 Clock Prescale Select bits 00 = Prescaler is 1 01 = Prescaler is 4 1x = Prescaler is 16 T2CKPS1=0;T2CKPS0=1; 5. Configure the CCP1 module for PWM operation. CCPxM3:CCPxM0: CCPx Mode Select bits 0000 = Capture/Compare/PWM disabled (resets CCPx module) 0100 = Capture mode, every falling edge 0101 = Capture mode, every rising edge 0110 = Capture mode, every 4th rising edge 0111 = Capture mode, every 16th rising edge 1000 = Compare mode, set output on match (CCPxIF bit is set) 1001 = Compare mode, clear output on match (CCPxIF bit is set) 1010 = Compare mode, generate software interrupt on match (CCPxIF bit is set, CCPx pin is unaffected) 1011 = Compare mode, trigger special event (CCPxIF bit is set, CCPx pin is unaffected); CCP1 resets TMR1; CCP2 resets TMR1 and starts an A/D conversion (if A/D module is enabled) 11xx = PWM mode CCP1M3=1;CCP1M2=1; 其他: TMR2ON=1; //PWM 开始工作