C51模拟PWM

发布者:HarmoniousPeace最新更新时间:2024-04-09 来源: elecfans关键字:C51  模拟PWM 手机看文章 扫描二维码
随时随地手机看文章

PWM是什么

  PWM,即脉冲宽度调制,是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

  PWM原理

  随着电子技术的发展,出现了多种PWM技术,其中包括:相电压控制PWM、脉宽PWM法、随机PWM、SPWM法、线电压控制PWM等,而在镍氢电池智能充电器中采用的脉宽PWM法,它是把每一脉冲宽度均相等的脉冲列作为PWM波形,通过改变脉冲列的周期可以调频,改变脉冲的宽度或占空比可以调压,采用适当控制方法即可使电压与频率协调变化。可以通过调整PWM的周期、PWM的占空比而达到控制充电电流的目的。   

  模拟信号的值可以连续变化,其时间和幅度的分辨率都没有限制。9V电池就是一种模拟器件,因为它的输出电压并不精确地等于9V,而是随时间发生变化,并可取任何实数值。与此类似,从电池吸收的电流也不限定在一组可能的取值范围之内。模拟信号与数字信号的区别在于后者的取值通常只能属于预先确定的可能取值集合之内,例如在{0V, 5V}这一集合中取值。   

  模拟电压和电流可直接用来进行控制,如对汽车收音机的音量进行控制。在简单的模拟收音机中,音量旋钮被连接到一个可变电阻。拧动旋钮时,电阻值变大或变小;流经这个电阻的电流也随之增加或减少,从而改变了驱动扬声器的电流值,使音量相应变大或变小。与收音机一样,模拟电路的输出与输入成线性比例。   

  尽管模拟控制看起来可能直观而简单,但它并不总是非常经济或可行的。其中一点就是,模拟电路容易随时间漂移,因而难以调节。能够解决这个问题的精密模拟电路可能非常庞大、笨重(如老式的家庭立体声设备)和昂贵。模拟电路还有可能严重发热,其功耗相对于工作元件两端电压与电流的乘积成正比。模拟电路还可能对噪声很敏感,任何扰动或噪声都肯定会改变电流值的大小。   

  通过以数字方式控制模拟电路,可以大幅度降低系统的成本和功耗。此外,许多微控制器和DSP已经在芯片上包含了PWM控制器,这使数字控制的实现变得更加容易了。

  PWM的优点

  PWM的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换。让信号保持为数字形式可将噪声影响降到最小。噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响。   

  对噪声抵抗能力的增强是PWM相对于模拟控制的另外一个优点,而且这也是在某些时候将PWM用于通信的主要原因。从模拟信号转向PWM可以极大地延长通信距离。在接收端,通过适当的RC或LC网络可以滤除调制高频方波并将信号还原为模拟形式。   

  总之,PWM既经济、节约空间、抗噪性能强,是一种值得广大工程师在许多设计应用中使用的有效技术。

上文摘自:http://www.elecfans.com/article/83/116/2011/20111102233223.html

c51模拟原理:用中断控制高电平在一个周期内的占比

51程序:


 1 #include

 2 

 3 #define uchar unsigned char

 4 #define uint unsigned int

 5 

 6 sbit led = P1^2;      

 7 uchar cycle;       //定义周期,该数字X基准定时时间,如果是10,则周期是10*0.1ms

 8 uchar pwm_on;      //定义高电平时间

 9 

10 void delay(uint cnt)        //uint,防止数据溢出

11 {

12     while(--cnt);

13 }

14 

15 void main()

16 {

17     bit flag;

18 

19     TMOD |= 0x01;    

20     TH0 = (65536-100)/256;

21     TL0 = (65536-100)%256;    //定时0.1ms

22     IE  = 0x82;     //打开中断

23     TR0 =1;

24 

25     cycle = 30;    //时间可以调整,这个10是调整,8位PWM就是256步

26     while(!flag)

27     {

28         delay(2000);   //延时时间,从一个亮度到下一个亮度的时间,速度快就能看到连续效果

29         pwm_on++;        

30         if(pwm_on == cycle)  flag = 1;

31     }

32     while(flag)        //亮度递减,同上,是个相反的过程

33     {

34         delay(2000);

35         pwm_on--;

36         if(0 == pwm_on)     flag = 0;

37     }

38 //    while(1)

39 //    {

40 //        led = 1;

41 //    }

42 }

43 

44 //定时器中断

45 void timer(void) interrupt 1 using 1

46 {

47     static uchar count;

48     TH0 = (65536-100)/256;

49     TL0 = (65536-100)%256;     //定时0.1ms

50 //led = 0;

51     

52     if(count == pwm_on) P1 = 0xff;    //灯灭

53     count++;

54     if(count == cycle)

55     {

56         count = 0;

57         if(pwm_on!=0) //如果左右时间是0,保持原来状态

58             P1 = 0x00;  //灯亮

59     }    

60 }


关键字:C51  模拟PWM 引用地址:C51模拟PWM

上一篇:lesson9 IIC串行总线的组成及工作原理
下一篇:单片机的存储器

推荐阅读最新更新时间:2024-11-20 13:04

C51 单片机的中断号以及中断向量
1、外部中断 0、 1;分别由引脚/INT0、/INT1的电平信号引起。 2、定时/计数器 0、1;分别由T0、 T1的溢出引起。 3、串行口发送、接收;发送完一个字节或接收到一个字节引起。 上述共5个中断源。 一、中断号 外部中断0 0 定时器T0 1 外部中断1 2 定时器T1 3 串口中断 4 二、 interrupt 和 using 在C51中断中的使用 8051 系列 MCU 的基本结构包括:32 个 I/O 口(4 组8 bit 端口);两个16 位定时计数器;全双工串行通信;6 个中断源(2 个外部中断、2 个定时/计数器中断、1 个串口输入/
[单片机]
C51: 将16进制 序列码,转换为16进制数组,逆序排列
//将16进制序列码,转换为16进制数组。 //逆序排列 #include reg51.h #include stdio.h #include ctype.h #define uchar unsigned char void main() { //ch 表示16进制 序列码 char ch = 0123456789ABCDEF ; //ch1 表示 16进制 字符数组 char ch1 ; char i; for(i=0;i 8;i++) { ch1 =toint(ch )*16+toint(ch ); } } /* 转换结果: ch1 =0xEF; ch1 =0xCD; ch1
[单片机]
C51单片机编程技巧:LCD1602编程经验分享
简介:先说明一下,我下面要说的LCD1602的芯片驱动是HD44780,如果你们的LCD1602驱动芯片不是HD44780,那么下面的内容是不适用的。 这次我来分享一下我的LCD1602的编程经验: 先说明一下,我下面要说的LCD1602的芯片驱动是HD44780,如果你们的LCD1602驱动芯片不是HD44780,那么下面的内容是不适用的。 我对LCD1602的整体理解 这里说一下我对LCD1602的整体理解哈,LCD1602是一个可以显示两行字符的LCD显示器,每一行可以都写入40个字符,但是每行都只有前16个字符可以显示,每行后面的24个字符无法立即显示,只说不容易明白,下面看一下示意图: 另外LCD1602
[单片机]
<font color='red'>C51</font>单片机编程技巧:LCD1602编程经验分享
C51单片机的3*3矩阵键盘程序
#include reg51.h #include dis.h /**延时1**/ //用于消抖 void delay1(void) {uchar i; for(i=0;i 200;i++); } /****延时2**********/ void delay2(void) { uchar i,j,s; for(i=250;i 0;i--) for(j=250;j 0;j--) for(s=5;s 0;s--); } /****串口初使化****/ void chuankou_init(void) { TMOD=0X20; //定时器1,方式2,8位 计数器 SCON=0x40; //方式1,而不允许
[单片机]
Keil uVision4 for ARM添加支持C51
第一步,要有C51编译器文件(就是Keil目录下的C51文件夹),可以通过安装Keil uVison4 for C51来获得(当然不要忘记事后卸载),或者去已经安装好的电脑上复制一份。 第二步,安装Keil uVision4 for ARM,这个不解释。 第三步,在Keil uVision4 for ARM安装目录,修改TOOLS.INI,具体为在 段前面增加 段,增加内容例如下面(PATH路径需修改为实际路径,其它内容应与C51编译器文件来源处的TOOLS.INI相同): PATH= D:\Keil\C51 VERSION=V9.50a BOOK0=HLP\Release_Notes.htm( Release Notes
[单片机]
干货,三分钟教你Keil C51软件的使用方法
KEIL C51标准C编译器为8051微控制器的软件开发提供了C语言环境,但是界面是英文的好多初学者看很多教程都是一头雾水,本站特地制作了一个相对简单的教程。他能能嵌入汇编语言保留了汇编代码高效,快速的特点。KEIL C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品,其效率已经达到了相当搞的程度。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。uVision2 IDE可为它们提供单一而灵活的开发环境。 Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和 C 语言的程序
[单片机]
干货,三分钟教你Keil <font color='red'>C51</font>软件的使用方法
C51编程18-中断篇(串行通讯2)
MCS-51单片机内部有两个独立的接收与发送SBUF,接收SBUF不能发送,发送SBUF不能接收,它们共用一个地址(99H)。内部逻辑结构下图所示: 在串行内部逻辑结构中可以看到,串行通信除了与SBUF有关外,还与串行口控制寄存器SCON(地址为98H)、定时器T1有关,此外还有一个寄存器PCON(地址为87H),该寄存器只有一位与串行通讯有关。 PCON寄存器的功能 串行口控制寄存器SCON(地址为87H),复位初始值为0;寄存器不可以位寻址。 SCON寄存器的功能 串行口控制寄存器SCON(地址为98H),复位初始值为0;寄存器可以位寻址。 SM0与SM1的设置工作方式 工作方式0:8位的同步移位寄
[单片机]
<font color='red'>C51</font>编程18-中断篇(串行通讯2)
AVR,C51和PIC八位单片机性能比较
1. 51系列   应用最广泛的八位单片机首推Intel的51系列,由于产品硬件结构合理,指令系统规范,加之生产历史 悠久 ,有先入为主的优势。世界有许多著名的芯片公司都购买了51芯片的核心专利技术,并在其基础上进行性能上的扩充,使得芯片得到进一步的完善,形成了一个庞大的体系,直到现在仍在不断翻新,把单片机世界炒得沸沸扬扬。有人推测,51芯片可能最终形成事实上的标准MCU芯片。   51系列优点之一是它从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,或布尔处理器。它的处理对象不是字或字节而是位。它不光能对片内某些特殊功能寄存器的某位进行处理,如传送、置位、清零、测试等,还能进行位的逻辑运算,其功能十分完备,使用起来得心应
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved