#51单片机#PWM

发布者:masphia最新更新时间:2021-10-26 来源: eefocus关键字:51单片机  PWM  数字信号 手机看文章 扫描二维码
随时随地手机看文章

PWM,全称Pulse Width Modulation,译为脉冲宽度调制。


功能:改变脉冲宽度,实现不同效果。可用数字信号达到模拟信号的效果


PWM在单片机中应用广泛,不同的应用场合意义不尽相同。


先看一张图:

在这里插入图片描述

这是一个周期为10ms,频率为100Hz的波形。每个周期内的高低电平脉冲宽度各不相同,这就是PWM的本质。这里需要记住一个概念——占空比。占空比是指,高电平的时间在整个周期中所占的比例。比如第一部分波形的占空比是40%,第二部分是60%,第三部分是80%,这就是PWM的解释。


演示代码:


#include


sbit PWMOUT = P0^0;


unsigned char HighRH = 0; //高电平重载的高字节

unsigned char HighLH = 0; //高电平重载的低字节

unsigned char LowRH = 0;  //低电平重载的高字节

unsigned char LowLH = 0;  //低电平重载的低字节


void ConfigPWM(unsigned int fr, unsigned char dc);

void ClosePWM();


void main()

{

unsigned int i;

EA = 1;      //开启中断总开关


while(1)

{

ConfigPWM(100,10); //频率100Hz,占空比10%

for(i=0;i<4000;i++);

ClosePWM();

for(i=0;i<4000;i++);

ConfigPWM(100,40); //频率100Hz,占空比40%

for(i=0;i<4000;i++);

ClosePWM();

for(i=0;i<4000;i++);

ConfigPWM(100,60); //频率100Hz,占空比60%

for(i=0;i<4000;i++);

ClosePWM(); //关闭PWM,相当于占空比100%

for(i=0;i<4000;i++);

}

}


//配置并启动PWM,fr——频率,dc——占空比

void ConfigPWM(unsigned int fr, unsigned char dc)

{

unsigned int high,low;

unsigned long tmp;


tmp = (11059200/12)/fr;   //计算一个周期需要的计数值

high = (tmp*dc)/100;      //计算高电平需要的计数值

low = tmp - high;       //计算低电平需要的计数值

high = 65536 - high + 12; //计算高电平的重载值并补偿中断延时

low = 65536 - low + 12  ; //计算低电平的重载值并补偿中断延时


HighRH = (unsigned char)(high>>8); //将高电平重载值拆分为高低字节

HighLH = (unsigned char)high;

LowRH = (unsigned char)(low>>8);   //将低电平重载值拆分为高低字节

LowLH = (unsigned char)low;


TMOD &= 0XF0; //清零T0的控制位

TMOD |= 0X01; //配置T0为模式1


TH0 = HighRH; //加载T0重载值

TL0 = HighLH;


ET0 = 1;   //使能T0中断

TR0 = 1; //开启T0

PWMOUT = 1; //输出高电平

}


//关闭PWM

void ClosePWM()

{

ET0 = 0;   //停止中断

TR0 = 0;   //停止T0

PWMOUT = 1;//输出高电平

}


//T0中断服务函数,产生PWM输出

void InterrupeTimer0() interrupt 1

{

TH0 = HighRH;

TL0 = HighLH;


if(PWMOUT == 1) //当前输出为高电平时,装载低电平值并输出低电平

{

TH0 = HighRH;

TL0 = HighLH;

PWMOUT = 0;

}

if(PWMOUT == 0) //当前输出为低电平时,装载高电平值并输出高电平

{

TH0 = LowRH;

TL0 = LowLH;

PWMOUT = 1;

}

}


标准的51单片机中没有专门的PWM模块。此程序在定时器中加入了中断以产生PWM。


ps:很多单片机都会集成硬件的PWM模块,程序员只需计算周期和占空比。

关键字:51单片机  PWM  数字信号 引用地址:#51单片机#PWM

上一篇:#51单片机# I2C时序初步认识和寻址模式
下一篇:#51单片机# 用中断实现蜂鸣器

推荐阅读最新更新时间:2024-11-17 11:07

51单片机系列知识4--并口(1)
一 51单片机有4个并行输入∕输出口,每个口有8根口线,因而4个端口共有32根口线。每个都是双向口,既可以做输入口,又可以做输出口用。每个口都包含一个锁存器和1个输入缓冲器及输出驱动器。(《单片微机实用技术》第二版.王桂良、孙明义编著.四川大学出版社) 1、P0口 端口和其中的锁存器(P0~P3)有时的值是不同的(后面会说明原因),为方便起见,我们把4个端口和其中的锁存器都一律表示为P0~P3。PO口对应的专用寄存器的助记符是PO,它是1个8位的专用寄存器,字节地址是80H,可位寻址。 P0口的结构:由一个输出锁存器,2个三态缓冲器,一个输出驱动电路和一个输出电路组成。其中,输出驱动电路有T0和T1组成,输出控制电
[单片机]
<font color='red'>51单片机</font>系列知识4--并口(1)
STM32 PWM简介及呼吸灯实验
1.PWM简介 脉冲宽度调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单来说,就是对脉冲宽度的控制,原理图如下: 当CNT CCRx时,输出0,反之,则输出1。因此可以输出如上的PWM示意图。当CNT达到CCRx时,重新归零,然后再向上计数,依次循环。通过改变CCRx的值,就可以改变PWM的输出占空比,改变ARR的值,就可以改变PWM输出的频率,这就是PWM输出的原理。 这里我们使用STM32F4的TIM14的CH1产生一路PWM输出。 值得一提的是控制PWM的三个寄存器:捕获/比较模式寄存器(TIMx_CCMR1/2),捕获/比较使能寄存器(TIMx_CCER),捕获/比较寄存器(TIMx
[单片机]
一文读懂51单片机的RAM分区
51单片机RAM分为四个区域 1.工作寄存器区(00H~1FH) 2.位寻址区(20H~2FH) 3.用户RAM区(30H~7FH) 4.特殊功能寄存器(80H~FFH) 其中1.2.3处于RAM低128单元,4处于高128单元 也就是声明变量时data与idata位置 而栈就是在用户RAM区内人为开辟的一段空间,用于存放数据,而单片机也相应的为这段空间提供了硬件也就是SP寄存器 SP是一个8位寄存器用于存放栈顶位置
[单片机]
一文读懂<font color='red'>51单片机</font>的RAM分区
MSP432(Keil5)——6.PWM驱动
本次实验在5个IO扣上产生了PWM波,频率计算方法已经放在了代码注释里面,请大家耐心食用。 pwm.c #include pwm.h /* Timer_A PWM Configuration Parameter */ /* fre(Hz) = clock / div / period */ /* 48000000/20/48000= 50Hz*/ /* 通道一 */ Timer_A_PWMConfig pwmConfig_c1 = { TIMER_A_CLOCKSOURCE_SMCLK, TIMER_A_CLOCKSOURCE_DIVIDER_20, /* period */ 48000,
[单片机]
MSP432(Keil5)——6.<font color='red'>PWM</font>驱动
51单片机与74HC164静态显示接口
在单片机应用系统中,显示器显示常用两种方法:静态显示和动态扫描显示。所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能的I/O接口用于笔划段字形代码。这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种方法单片机中CPU的开销小。可以提供单独锁存的I/O接口电路很多,这里以常用的串并转换电路74LS164为例,介绍一种常用静态显示电路,以使大家对静态显示有一定的了解。 MCS-51单片机串行口方式0为移位寄存器方式,外接6片74LS164作为6位LED显示器的静态显示接口,把8031的RXD作为数据输出线,TXD作为移位时钟脉冲。74LS164为TTL单向8位移
[单片机]
基于PIC单片机的空间电压矢量PWM控制方法研究
0 引言 在电机变频调速系统中,广泛应用到了PWM技术。PWM控制利用半导体开关器件的导通与关断把整流后的直流电变成脉冲序列,通过控制脉冲宽度和脉冲列的周期以实现变压、变频控制,同时减少输出电压电流谐波。早期的SPWM控制主要着眼于使逆变器输出电压波形尽量接近于正弦波,希望输出PWM电压波形的基波成分尽量的大,谐波成分尽量的小,并没有考虑到电动机本身旋转磁场的影响。空间电压矢量PWM技术是当前研究的热点问题,它将逆变器和交流电机作为一个整体来考虑,其控制目标是使磁通轨迹近似为圆,也被称为磁链跟踪PWM控制。本文在分析空间电压矢量PWM原理的基础上,提出了一种基于16位PIC24FJ64GA单片机实现SVPWM控制的方法。 1
[单片机]
基于PIC单片机的空间电压矢量<font color='red'>PWM</font>控制方法研究
51单片机识别四个独立按键是短按还是长按
这是一个可以识别四个独立按键是短按还是长按的参考程序,此程序已编译通过,初学者可以移植到51单片机上试试. /********************************************/ //FileName:识别四个独立按键是短按还是长按 //Function: 不同按键 短按或长按分别显示不同的LED //author:liu yong //QQ:545018331 //Date:2013/03/13 /********************************************/ #include PIC.H __CONFIG(0X3B31); #define uint8 unsigned
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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