PWM 应用实例

合集下载

PWM基本原理及其应用实例

PWM基本原理及其应用实例

PWM基本原理及其应用实例PWM基本原理及其应用实例2009-06-26 14:12:02| 分类:嵌入式技术探索| 标签:|字号大中小订阅~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~理论篇(一)原理介绍~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~PWM(Pulse Width Modulation)控制——脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。

PWM控制技术在逆变电路中应用最广,应用的逆变电路绝大部分是PWM型,PWM控制技术正是有赖于在逆变电路中的应用,才确定了它在电力电子技术中的重要地位。

1 PWM控制的基本原理理论基础:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。

冲量指窄脉冲的面积。

效果基本相同,是指环节的输出响应波形基本相同。

低频段非常接近,仅在高频段略有差异。

面积等效原理:分别将如图1所示的电压窄脉冲加在一阶惯性环节(R-L 电路)上,如图2a所示。

其输出电流i(t)对不同窄脉冲时的响应波形如图2b所示。

从波形可以看出,在i(t)的上升段,i(t)的形状也略有不同,但其下降段则几乎完全相同。

脉冲越窄,各i(t)响应波形的差异也越小。

如果周期性地施加上述脉冲,则响应i(t)也是周期性的。

用傅里叶级数分解后将可看出,各i(t)在低频段的特性将非常接近,仅在高频段有所不同。

用一系列等幅不等宽的脉冲来代替一个正弦半波,正弦半波N等分,看成N个相连的脉冲序列,宽度相等,但幅值不等;用矩形脉冲代替,等幅,不等宽,中点重合,面积(冲量)相等,宽度按正弦规律变化。

SPWM波形——脉冲宽度按正弦规律变化而和正弦波等效的PWM波形。

图3 用PWM波代替正弦半波要改变等效输出正弦波幅值,按同一比例改变各脉冲宽度即可。

PWM电流波:电流型逆变电路进行PWM控制,得到的就是PWM电流波。

脉冲电路PWM调制PPT课件

脉冲电路PWM调制PPT课件
是一种通过调节脉冲宽度来控制输出电压或电流的调制方式。
脉冲宽度
指高电平持续的时间,通常用占空比表示,即脉冲宽度与周期的比 值。
PWM调制的基本原理
通过改变脉冲宽度来等效改变输出电压或电流的大小。
PWM信号的生成原理
采样控制理论
PWM信号的生成基于采样控制理论,通过对输入信号进行采样,并根据采样结果生成相 应的PWM信号。
电流模式控制PWM调制是通过检测输出电流的占空比来实现对输出电流的控制。
电流模式控制PWM调制具有电流响应速度快、控制精度高等优点,因此在许多应用 中得到广泛应用。
电流模式控制PWM调制的主要缺点是可能会产生较大的输出电流纹波。
电压和电流模式比较
电压模式控制PWM调制和电流模式控制PWM调制各有优缺点,具体选择哪种方式要根据 实际应用需求来决定。
PWM调制技术在能源转换、电机控制、通 信等领域具有广泛的应用前景,随着技术 的不断成熟,其应用领域将进一步拓展。
经济价值
社会效益
PWM调制技术的推广应用将带来显著的经 济效益,有助于推动相关产业的发展和经 济增长。
PWM调制技术的节能减排效果明显,对于 应对全球气候变化、推动可持续发展具有 重要意义。
04 PWM调制在脉冲电路中 的优势与挑战
PWM调制在脉冲电路中的优势
高效能
PWM调制能够有效地控 制脉冲宽度,从而提高 脉冲电路的能量效率。
灵活性高
PWM调制允许在单个脉 冲中实现多个级别的电 压或电流,从而提供更
大的灵活性。
易于实现
PWM调制可以通过简单 的数字或模拟电路实现, 降低了设计和实现的复
线性度
PWM信号的线性度取决于采样电 路和PWM生成电路的设计,高质 量的PWM信号应具有良好的线性

使用PWM得到精密的输出电压

使用PWM得到精密的输出电压

使用PWM得到精密的输出电压作者:江南大学 朱 立近年来,许多单片机生产厂家,如Atmel、Analog Divices、Intel、Philips、Dallas、Maxim等等,纷纷推出了新型的高速单片机。

它们的指令执行周期仅是原来的1/3~1/十几,并在单片机中集成了EEPROM、WDT、A/D转换器和D/A转换器,大大地提高了单片机的性能,方便了用户。

然而,许多单片机中的D/A转换器的输出都采用了脉宽调制(PWM)的形式。

PWM十分适用于开关电源、可控硅等器件的控制,也可使用于LCD 亮度控制、音频输出等不需要输出精确电压的场合。

由于PWM没有基准电压,它的输出脉冲的幅度不是很恒定,这就限制了PWM的使用范围。

在要求输出精密控制电压的场合,如精密可调电压源、电机变频器等等,就无法使用PWM。

然而,只需使用2片廉价的集成电路就可以把幅度不恒定的PWM输出转换成精密的PWM输出电压。

1 电路原理使用三端精密基准电源和模拟开关得到电压精密的PWM脉冲的电路原理如图1所示。

D1为TL431三端基准电压集成电路,U1采用单刀双掷的模拟开关MAX4544;电阻R1、R2、R3根据具体的需要而定。

当然,也可以采用其它型号的集成电路。

当PWM脉冲为高电平(逻辑1)时,U1的COM端掷向常闭端(NC),TL431的调整脚与正电压脚相连,输出电压值为2.5 V。

当PWM脉冲为低电平(逻辑0)时,U1的COM端掷向常开端(NO),TL431的输出电压经过R2、R3 分压后送到调整脚,此时输出电压值等于[(R2+R3)/R3]×2.5 V。

本例中输出电压等于8 V。

这样,当U1的IN 脚输入PWM信号时,电路相应地输出高电平为8 V,低电平为 2.5 V的PWM脉冲,其振幅为8 V - 2.5 V = 5.5 V 。

如果需要输出低电平为零的PWM信号,则再加上1个差分放大器就可解决。

在对于精密度的要求不是很高的场合,可以采用更简单的方法。

PWM逆变电路及其控制方法

PWM逆变电路及其控制方法

PWM逆变电路及其控制方法PWM(Pulse Width Modulation)逆变电路是一种通过改变电压或电流波形的占空比来实现电能转换的技术。

它广泛应用于各种电源逆变器、交流电机驱动器、太阳能逆变器、UPS(不间断电源系统)等领域。

本文将介绍PWM逆变电路的基本原理、常见的控制方法以及应用实例。

PWM逆变电路的基本原理是通过将直流电压转换为交流电压,使得输出波形的频率和幅值可以根据需求进行调节。

其核心部件是逆变器,通常由开关元件(如功率开关管)和输出变压器组成。

逆变器通过快速开关开关闭合,产生一系列电压脉冲,然后经过输出变压器将直流电压转换为交流电压。

PWM逆变电路的控制方法有多种,常见的包括:固定频率脉宽调制(Fixed Frequency Pulse Width Modulation,FFPWM)、固定频率电压脉宽调制(Constant Frequency Voltage Pulse Width Modulation,CFVPWM)、固定频率电流脉宽调制(Constant Frequency Current Pulse Width Modulation,CFCPWM)以及多重脉冲脉宽调制(Multiple Pulse Width Modulation,MPWM)等。

固定频率脉宽调制是PWM逆变电路中最简单的控制方法之一,其特点是输出频率和开关频率固定,可以通过调节脉宽来实现输出波形的幅值控制。

固定频率电压脉宽调制在固定频率脉宽调制的基础上增加了电压控制环节,通过反馈控制使输出电压达到设定值。

固定频率电流脉宽调制则在固定频率脉宽调制的基础上增加了电流控制环节,通过反馈控制使输出电流达到设定值。

多重脉冲脉宽调制是在固定频率脉宽调制的基础上引入多个脉冲周期,通过交错控制来改善输出波形的谐波含量。

1.电力电子逆变器:将直流电能转换为交流电能。

通过控制PWM逆变电路的开关元件,可以实现交流电压的频率和幅值的调节,广泛应用于电力系统、电动机驱动器及电力调速系统等。

STC12C5A60S2内部PWM应用

STC12C5A60S2内部PWM应用

【PWM】.实例一:电路图如上,该程序的功能是利用按键S1对LED的亮度进行调节。

程序如下:#include"STC12C5A.h"//注意这个头文件,用reg52是不行的,如果你没有的话,可以去百// //度文档里搜索“STC12C5A系列单片机头文件”,有我共享的头文件。

void delay(unsigned int cnt){unsigned char i;for(;cnt>0;cnt--)for(i=0;i<250;i++);}void main(){CCON=0; //PCA初始化CL=0; //PCA的16位计数器低八位CH=0; //PCA的16位计数器高八位CMOD=0x00; //选择系统时钟/12 为计数脉冲,则PWM的频率f=sysclk/256/12;CCAP0H=0x80; // 占空比控制CCAP0L=0x80;PCA_PWM0=0x00; //控制占空比的第九位为0CCAPM0=0x42; //允许P13作为PWM输出CR=1; //启动PCA计数器while(1){if(P10==0){delay(200);while(P10==0);CCAP0H+=10; //占空比调节CCAP0L+=10;}}}实例二:两个文件main.c#include <REG51.H>#include <intrins.h>#define U8 unsigned char#define U16 unsigned intvoid DelayMs(U8 ms);void PWM_clock(U8 clock);void PWM_start(U8 module,U8 mode);////////////////////// 延时子程序/////////////////////////////void DelayMs(U8 ms) //在11.0592M晶振下,stc10f系列(单周期指令)的ms级延时{U16 i;while(ms--){for(i = 0; i < 850; i++);}}////////////////////主函数入口////////////////////////////sfr CCON = 0xD8; //PCA控制寄存器sfr CMOD = 0xD9; //PCA模式寄存器sfr CCAPM0 = 0xDA; //PCA模块0模式寄存器//模块0对应P1.3/CEX0/PCA0/PWM0(STC12C5A60S2系列)sfr CCAPM1 = 0xDB; //PCA模块1模式寄存器//模块1对应P1.4/CEX1/PCA1/PWM1(STC12C5A60S2系列)sfr CL = 0xE9; //PCA 定时寄存器低位sfr CH = 0xF9; //PCA 定时寄存器高位sfr CCAP0L = 0xEA; //PCA模块0的捕获寄存器低位sfr CCAP0H = 0xFA; //PCA模块0的捕获寄存器高位sfr CCAP1L = 0xEB; //PCA模块1的捕获寄存器低位sfr CCAP1H = 0xFB; //PCA模块1的捕获寄存器高位sfr PCA_PWM0 = 0xF2; //PCA PWM 模式辅助寄存器0sfr PCA_PWM1 = 0xF3; //PCA PWM 模式辅助寄存器1sbit CF = 0xDF; //PCA计数溢出标志位sbit CR = 0xDE; //PCA计数器运行控制位sbit CCF1 = 0xD9; //PCA模块1中断标志sbit CCF0 = 0xD8; //PCA模块0中断标志//* CCAPOH = CCAPOL = 0XC0; //模块0输出占空因数为25%//* CCAPOH = CCAPOL = 0X80; //模块0输出占空因数为50%//* CCAPOH = CCAPOL = 0X40; //模块0输出占空因数为75%void PWM_clock(U8 clock);void PWM_start(U8 module,U8 mode);void PWM_clock(U8 clock){CMOD |= (clock<<1);CL = 0x00;CH = 0x00;}void PWM_start(U8 module,U8 mode){CCAP0L = 0XC0;CCAP0H = 0XC0; //模块0初始输出占空因数为25%CCAP1L = 0XC0;CCAP1H = 0XC0; //模块1初始输出占空因数为25%if(module==0){switch(mode){case 0: CCAPM0 = 0X42;break; //模块0设置为8位PWM输出,无中断case 1: CCAPM0 = 0X53;break; //模块0设置为8位PWM输出,下降沿产生中断case 2: CCAPM0 = 0X63;break; //模块0设置为8位PWM输出,上升沿产生中断case 3: CCAPM0 = 0X73;break; //模块0设置为8位PWM 输出,跳变沿产生中断default: break;}}elseif(module==1){switch(mode){case 0: CCAPM1 = 0X42;break; //模块1设置为8位PWM输出,无中断case 1: CCAPM1 = 0X53;break; //模块1设置为8位PWM输出,下降沿产生中断case 2: CCAPM1 = 0X63;break; //模块1设置为8位PWM输出,上升沿产生中断case 3: CCAPM1 = 0X73;break; //模块1设置为8位PWM输出,跳变沿产生中断default: break;}}elseif(module==2){switch(mode){case 0: CCAPM0 = CCAPM1 = 0X42;break; //模块0和1设置为8位PWM输出,无中断case 1: CCAPM0 = CCAPM1 = 0X53;break; //模块0和1设置为8位PWM输出,下降沿产生中断case 2: CCAPM0 = CCAPM1 = 0X63;break; //模块0和1设置为8位PWM输出,上升沿产生中断case 3: CCAPM0 = CCAPM1 = 0X73;break; //模块0和1设置为8位PWM输出,跳变沿产生中断default: break;}}CR=1; //PCA计数器开始计数}void PCA_Intrrpt(void) interrupt 7{if(CCF0) CCF0=0;if(CCF1) CCF1=0; //软件清零if(CF) CF=0; //软件清零}void main(){TMOD|=0x02; /* timer 0 mode 2: 8-Bit reload */TH0=0xff;TR0=1;PWM_clock(2); // PCA/PWM时钟源为定时器0的溢出PWM_start(0,0); // 模块0,设置为PWM输出,无中断,初始占空因素为25%while(1){DelayMs(250);}}PwmDrive_12C5A.c#include <intrins.h>#define U8 unsigned charsfr CCON = 0xD8; //PCA控制寄存器sfr CMOD = 0xD9; //PCA模式寄存器sfr CCAPM0 = 0xDA; //PCA模块0模式寄存器//模块0对应P1.3/CEX0/PCA0/PWM0(STC12C5A60S2系列)sfr CCAPM1 = 0xDB; //PCA模块1模式寄存器//模块1对应P1.4/CEX1/PCA1/PWM1(STC12C5A60S2系列)sfr CL = 0xE9; //PCA 定时寄存器低位sfr CH = 0xF9; //PCA 定时寄存器高位sfr CCAP0L = 0xEA; //PCA模块0的捕获寄存器低位sfr CCAP0H = 0xFA; //PCA模块0的捕获寄存器高位sfr CCAP1L = 0xEB; //PCA模块1的捕获寄存器低位sfr CCAP1H = 0xFB; //PCA模块1的捕获寄存器高位sfr PCA_PWM0 = 0xF2; //PCA PWM 模式辅助寄存器0sfr PCA_PWM1 = 0xF3; //PCA PWM 模式辅助寄存器1sbit CF = 0xDF; //PCA计数溢出标志位sbit CR = 0xDE; //PCA计数器运行控制位sbit CCF1 = 0xD9; //PCA模块1中断标志sbit CCF0 = 0xD8; //PCA模块0中断标志//* CCAPOH = CCAPOL = 0XC0; //模块0输出占空因数为25%//* CCAPOH = CCAPOL = 0X80; //模块0输出占空因数为50%//* CCAPOH = CCAPOL = 0X40; //模块0输出占空因数为75%void PWM_clock(U8 clock);void PWM_start(U8 module,U8 mode);void PWM_clock(U8 clock){CMOD |= (clock<<1);CL = 0x00;CH = 0x00;}void PWM_start(U8 module,U8 mode){CCAP0L = 0XC0;CCAP0H = 0XC0; //模块0初始输出占空因数为25%CCAP1L = 0XC0;CCAP1H = 0XC0; //模块1初始输出占空因数为25%if(module==0){switch(mode){case 0: CCAPM0 = 0X42;break; //模块0设置为8位PWM输出,无中断case 1: CCAPM0 = 0X53;break; //模块0设置为8位PWM输出,下降沿产生中断case 2: CCAPM0 = 0X63;break; //模块0设置为8位PWM输出,上升沿产生中断case 3: CCAPM0 = 0X73;break; //模块0设置为8位PWM输出,跳变沿产生中断default: break;}}elseif(module==1){switch(mode){case 0: CCAPM1 = 0X42;break; //模块1设置为8位PWM输出,无中断case 1: CCAPM1 = 0X53;break; //模块1设置为8位PWM输出,下降沿产生中断case 2: CCAPM1 = 0X63;break; //模块1设置为8位PWM输出,上升沿产生中断case 3: CCAPM1 = 0X73;break; //模块1设置为8位PWM输出,跳变沿产生中断default: break;}}elseif(module==2){switch(mode){case 0: CCAPM0 = CCAPM1 = 0X42;break; //模块0和1设置为8位PWM输出,无中断case 1: CCAPM0 = CCAPM1 = 0X53;break; //模块0和1设置为8位PWM输出,下降沿产生中断case 2: CCAPM0 = CCAPM1 = 0X63;break; //模块0和1设置为8位PWM输出,上升沿产生中断case 3: CCAPM0 = CCAPM1 = 0X73;break; //模块0和1设置为8位PWM输出,跳变沿产生中断default: break;}}CR=1; //PCA计数器开始计数}void PCA_Intrrpt(void) interrupt 7{if(CCF0) CCF0=0;if(CCF1) CCF1=0; //软件清零if(CF) CF=0; //软件清零}(注:文档可能无法思考全面,请浏览后下载,供参考。

灯光驱动的原理及应用实例

灯光驱动的原理及应用实例

灯光驱动的原理及应用实例1. 灯光驱动的原理灯光驱动是指通过电流或电压来控制灯光的亮度或颜色的技术。

在灯光驱动中,常见的原理包括电流驱动和电压驱动。

1.1 电流驱动电流驱动是指通过控制电流的大小来调控灯光的亮度。

常见的电流驱动方式有直流电流驱动和交流电流驱动。

直流电流驱动直流电流驱动是指通过直流电源提供恒定的电流来驱动灯光。

这种驱动方式具有稳定性高、可靠性好的特点。

常见的直流电流驱动方式有线性驱动和开关驱动。

•线性驱动:通过调节线性变阻器、电流源或电压源的输出来改变灯光的亮度。

这种驱动方式简单可靠,但效率较低,决定约束较大。

•开关驱动:通过开关元件(如MOSFET、晶闸管等)的通断控制来改变灯光的亮度。

这种驱动方式具有高效率、体积小和功耗低的特点,被广泛应用。

交流电流驱动交流电流驱动是指通过交流电源提供变化的电流来驱动灯光。

常见的交流电流驱动方式有脉宽调制(PWM)和脉冲电流驱动。

•脉宽调制(PWM):通过调节脉冲的宽度和周期来控制灯光的亮度。

这种驱动方式通过高频开关,并调整开关的占空比来实现亮度调节。

•脉冲电流驱动:通过将电流分成多个脉冲进行驱动,从而控制灯光的亮度。

这种驱动方式被广泛应用于可调光的灯具中。

1.2 电压驱动电压驱动是指通过控制电压的大小来调控灯光的亮度。

常见的电压驱动方式有恒压驱动和恒流驱动。

恒压驱动恒压驱动是指通过提供恒定的电压来驱动灯光。

这种驱动方式适用于需要调节灯具亮度的场景。

常见的恒压驱动器有线性驱动器和开关驱动器。

•线性驱动器:通过调节线性变阻器、电流源或电压源的输出来改变灯光的亮度。

这种驱动方式简单可靠,但效率较低,决定约束较大。

•开关驱动器:通过开关元件(如MOSFET、晶闸管等)的开关行为来控制灯光的亮度。

这种驱动方式具有高效率、体积小和功耗低的特点,被广泛应用。

恒流驱动恒流驱动是指通过提供恒定的电流来驱动灯光。

这种驱动方式适用于需要保持光源亮度恒定的场景。

常见的恒流驱动方式有线性驱动和开关驱动。

360度舵机控制角度的pwm值

360度舵机控制角度的pwm值

360度舵机控制角度的pwm值摘要:1.360 度舵机的特点2.PWM 值的概念3.360 度舵机控制角度的方法4.PWM 值对360 度舵机角度控制的影响5.实例:通过更改PWM 值控制360 度舵机旋转圈数正文:一、360 度舵机的特点360 度舵机是一种可以旋转360 度的精密控制设备,广泛应用于机器人、无人机等领域。

它的特点是可以无极调节旋转角度,但不能像180 度舵机那样精确控制角度。

二、PWM 值的概念PWM(Pulse Width Modulation)即脉冲宽度调制,是一种模拟信号处理技术。

通过改变脉冲的宽度来控制电机的转速和方向。

在360 度舵机控制中,PWM 值可以控制舵机的速度和旋转方向。

三、360 度舵机控制角度的方法由于360 度舵机无法精确控制旋转角度,因此只能通过控制旋转方向和速度来实现对角度的控制。

在实际应用中,可以通过改变PWM 值来控制舵机的旋转速度和方向。

四、PWM 值对360 度舵机角度控制的影响PWM 值越大,舵机的旋转速度越快;PWM 值越小,舵机的旋转速度越慢。

同时,PWM 值的正负可以控制舵机的旋转方向。

通过改变PWM 值,可以实现对360 度舵机旋转速度和方向的控制,从而实现对角度的控制。

五、实例:通过更改PWM 值控制360 度舵机旋转圈数在某个实际应用中,我们希望让360 度舵机旋转7 圈。

可以通过改变PWM 值来实现这一目标。

假设初始状态下舵机的PWM 值为1ms,旋转一圈需要的时间为t。

那么,旋转7 圈需要的时间为7t。

可以通过以下公式计算t:t = 65536 * (1 / 2) / (180 / 3.14)其中,65536 是PWM 值的最大值,180 是舵机旋转一圈的角度,3.14 是圆周率。

根据上述公式,可以计算出t 的值。

然后,通过改变PWM 值,使得舵机旋转7 圈。

例如,可以通过以下方式实现:- 当PWM 值为1ms 时,舵机旋转一圈;- 当PWM 值为2ms 时,舵机旋转两圈;- 当PWM 值为4ms 时,舵机旋转四圈;- 当PWM 值为8ms 时,舵机旋转八圈;- 当PWM 值为16ms 时,舵机旋转十六圈。

脉宽调制的基本原理及其应用实例

脉宽调制的基本原理及其应用实例

脉宽调制的基本原理及其应用实例2009-12-16 20:17:00| 分类:驱动控制| 标签:|字号大中小订阅脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

一、脉冲宽度调制基本原理随着电子技术的发展,出现了多种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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

HCS12微控制器系列教程(八)---PWM 应用实例
PWM 初始化步骤总结
1、禁止PWM PWME = 0
2、选择时钟 PWMPRCLK,PWMSCLA,PWMSCLB,PWMCLK
3、选择极性 PWMPOL
4、选择对齐方式 PWMCAE
5、选择占空比和周期 PWMDTYx, PWMPERx
6、使能PWM PWME = 1
【例程1】
程序描述:由通道PTP3口输出频率为1K,占空比为50%的方波
程序如下:
#include <hidef.h> /* common defines and macros */
#include <mc9s12dg128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
/***********初始化函数*************/
/*时钟初始化程序*/
void PLL_Init(void) //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
{ //锁相环时钟=2*16*(2+1)/(1+1)=48MHz
REFDV=1; //总线时钟=48/2=24MHz
SYNR=2;
while(!(CRGFLG&0x08));
CLKSEL=0x80; //选定锁相环时钟
}
/*PWM初始化程序*/
void PWM_Init(void)
{
PWME_PWME3=0; // Disable PWM 禁止
PWMPRCLK=0x33; // 0011 0011 A=B=24M/8=3M 时钟预分频寄存器设置 PWMSCLA=150; // SA=A/2/150=10k 时钟设置
PWMSCLB=10; // SB=B/2/10 =150k 时钟设置
PWMCLK_PCLK3=1; // PWM3-----SB时钟源的选择
PWMPOL_PPOL3=1; // Duty=High Time 极性设置,先高后低
PWMCAE_CAE3=0; // Left-aligned 对齐方式设置,左对齐 PWMCTL=0x00; // no concatenation 控制寄存器设置,不级联 PWMPER3=150; // Frequency=SB/150=1K周期寄存器设置,计数150个脉冲为1个周期
PWMDTY3=75; // Duty cycle = 50%占空比寄存器设置,高电平持续75个脉冲 PWME_PWME3=1; // Enable PWM 使能
}
/**********主函数**************/
void main(void)
{
PLL_Init();
PWM_Init();
/* put your own code here */
EnableInterrupts;
for(;;) {
} /* wait forever */
/* please make sure that you never leave this function */
}。

相关文档
最新文档