求详细解释这个51单片机PWM波原理

初学者,求逐步详解。

#include <reg52.h>

sbit LED = P1^0;
unsigned char CYCLE;
unsigned char PWM_ON ;
void delay(unsigned int cnt)
{
while(--cnt);
}

main()
{
bit Flag;

TMOD |=0x01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
IE= 0x82;
TR0=1;

CYCLE = 10;
while(!Flag)
{
delay(200000);
PWM_ON++;
if(PWM_ON == CYCLE)
{
Flag=1;
}
}

while(Flag)
{
delay(200000);
PWM_ON--;
if(PWM_ON == 0)
{
Flag=0;
}
}
}
void tim(void) interrupt 1 using 1
{
static unsigned char count;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
if (count==PWM_ON)
{
LED = 1;
}
count++;
if(count == CYCLE)
{
count=0;
if(PWM_ON!=0)
LED = 0;

}

}

这个程序每一条语句你肯定能看懂,给你加注释没有必要,给你讲讲PWM的原理,你再对照程序看就明白了
你要用51产生PWM去控制LED,首先你要确定PWM的周期T和占空比D,确定了这些以后,你可以用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则D*T=n*t,类似的可以求出PWM低电平时间需要多少个时间基准n'
那么你就可以编写程序,根据你定的时间基准 t 去给定时器赋值初始化,然后开启定时器,定义一个标志位flag,根据flag的状态决定输出高平还是低电平,假设定义flag=1的时候输出高电平,用一个变量去记录定时器中断的次数,每次中断就让记录中断次数的变量+1,在中断程序里面判断这个变量的值是否到了 n ,如果到了说明高电平的时间够了,那么就改变flag为0,输出低电平,同时记录中断变量的值清零,每次中断的时候依旧+1,根据flag=0的情况跳去判断记录变量的值是否到了 n' 如果到了,说明PWM的低电平时间够了,那么就改flag=1,输出改高电平,同时记录次数变量清零,重新开始,如此循环便可得到你想要的PWM波形。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-18
51就是用定时器来做的。不像AVR,STM8S可以直接本身产生。
51要用软件不断的干预的。
第2个回答  2010-12-18
这个是从其他地方转来的吧?
http://www.mvpdz.com/show-78-1.html
pwm LED调光C程序
Submitted by zhuxihe on 2010, December 5, 9:58 AM. 单片机C51

#include<reg52.h>
sbit LED1 = P3^0;
sbit LED = P3^1; //定义LED灯, 通过LED显示调光效果
sbit LED2 = P3^2;
unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms
unsigned char PWM_ON ; //定义高电平时间
/******************************************************************/
/* 延时 函数 */
/******************************************************************/
void delay(unsigned int cnt)
{
while(--cnt);
}
/******************************************************************/
/* 主 函数 */
/******************************************************************/
main()
{
bit Flag;
TMOD |=0x01; //定时器设置 0.1ms in 12M crystal
TH0=(65536-100)/256;
TL0=(65536-100)%256; //定时0.1mS
IE= 0x82; //开中断
TR0=1;
CYCLE = 50; // 时间可以调整 这个是10调整 8位PWM就是256步
while(!Flag)
{
delay(20000); //延时时间,从一个亮度到下一个亮度的间隔时间,速度快就能看到连续效果
PWM_ON++; //这个使用较长延时,以便能看清楚变化过程
if(PWM_ON == CYCLE)
{ //这个里可以添加其他程序 如到最亮时候控制设备
Flag=1;
}
}
while(Flag) //亮度递减 同上,是个相反的过程
{
delay(20000);
PWM_ON--;
if(PWM_ON == 0)
{
Flag=0;
}
}
}
/******************************************************************/
/* 定时器中断函数 */
/******************************************************************/
void tim(void) interrupt 1 using 1
{
static unsigned char count;
TH0=(65536-100)/256;
TL0=(65536-100)%256; //定时0.1mS
if (count==PWM_ON)
{
LED1 = 1;
LED = 1; //灯灭
LED2 = 1;
}
count++;
if(count == CYCLE)
{
count=0;
if(PWM_ON!=0) //如果左右时间是0 保持原来状态
LED1 = 0;
LED = 0; //灯亮
LED2 = 0;
}
}

解释已经很明白了.

参考资料:http://www.mvpdz.com/show-78-1.html

经过数模转换后怎么产生PWM 51单片机
1、PWM是介于模拟量和数字量之间的一种信号。从产生角度看,由高电平和低电平组成,接近数字量。从使用角度看,加上一个低通滤波器就变成幅值连续的模拟量了,接近模拟量。2、你要产生PWM,不需要经过数模转换。3、选定PWM输出频率,就决定了输出方波的周期,将数字量转换为方波占空比,就可以产生PWM。

求详细解释这个51单片机PWM波原理
n'如果到了,说明PWM的低电平时间够了,那么就改flag=1,输出改高电平,同时记录次数变量清零,重新开始,如此循环便可得到你想要的PWM波形。

经过数模转换后怎么产生PWM 51单片机
1、PWM是介于 模拟量 和数字量之间的一种信号。从产生角度看,由高电平和 低电平 组成,接近数字量。从使用角度看,加上一个 低通滤波器 就变成幅值连续的模拟量了,接近模拟量。2、你要产生PWM,不需要经过 数模转换 。3、选定PWM输出频率,就决定了输出 方波 的周期,将数字量转换为方波 占空比 ...

怎么51单片机定时器来模拟PWM波?
PWM的意思是“脉冲宽度调制”PWM有两个最基本的参数:频率、占空比。频率就是每秒钟电平高低变化的次数,占空比是指高电平保持时间和整个脉冲周期中的比例关系。对于用定时器来模拟,最基本的方法就是使用一个IO口循环设置其输出值为高电平和低电平。那么定时器在这里起计时作用,而且需要两个时间:高电平...

51单片机输出pwm脉宽怎么控制电流?
PWM就是脉宽调制电路,PWM就是用来调压控流的,你还需要一个ADC来进行充电设备的电压电流采集,PWM输出要加个三级管或场效应管来做驱动。推荐使用AVR单片机,如ATmega8,里面有4路10位ADC,2路8路ADC((DIP封装的),有硬件PWM,用它做刚好用。PWM输出端接一个电阻,然后接一个GTR管,如IRF540 100...

用的是51单片机,晶振11.0592,请问怎么算出占空比,和pwm波频率,求具体...
你这是软件结合定时器产生PWM波,没有程序,算不出占空比和频率 程序原理大致是设一个变量a,每次定时器中断这个变量加1,并且和另一变量b比较,如果a<b,则输出高电平,反之则输出低电平 一个周期后(假设中断20次)a清0,再次输出高电平 那么占空比=(20-b)\/20 改变b的值即可改变占空比 周期=20...

解释pwm控制及其基本原理
采样控制理论中有一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。PWM控制技术就是以该结论为理论基础,对半导体开关器件的导通和关断进行控制,使输出端得到一系列幅值相等而宽度不相等的脉冲,用这些脉冲来代替正弦波或其他所需要的波形。按一定的规则对各脉冲的宽度进行...

51单片机pwm输出频率算法,谁有公式,怎么算的?
单片机是独立 pwm硬件产生,还是靠定时器中断产生 普通51单片机没有硬件pwm功能,只能靠 定时器中断来产生,而多数增强型 51单 片机是有硬件pwm功能,一般PWM频率是晶振频率\/分频系数\/256 如晶振频率12M,分频系数设为2,则PWM频率为12000000\/2\/256=23.4 KHZ ...

pwm工作原理
控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小...

c51单片机产生正弦波原理
SPWM,就是在PWM的基础上改变了调制脉冲方式,脉冲宽度时间占空比按正弦规率排列,这样输出波形经过适当的滤波可以做到正弦波输出。

相似回答