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单片机# I2C时序初步认识和寻址模式
下一篇:#51单片机# 用中断实现蜂鸣器
推荐阅读最新更新时间:2024-11-17 11:07
设计资源 培训 开发板 精华推荐
- DM160213,基于 PIC MCU 的 BodyCom 开发套件
- TCR5SB41U、200mA、4.1V 输出电压 CMOS 低压降稳压器的典型应用
- 无叶风扇台灯
- 使用 Analog Devices 的 LTC1865L 的参考设计
- 使用 Diodes Incorporated 的 PT8A3519 的参考设计
- 具有高达 13 GHz 射频的超快速稳定 PLL
- LTC3624IMSE-2 可调输出电压、2A 同步降压稳压器、同步至 500kHz、强制连续模式的典型应用
- 采用 ADuM3100 数字隔离器的采用隔离式半桥驱动器的 H 桥驱动器电路
- 使用 Analog Devices 的 LTC1504 的参考设计
- XR79120EVB,用于 XR79120 22V、20A 同步降压 COT 电源模块的评估套件
- 赞一赞我国的青年:专访TI杯2019年国赛9支优秀队伍
- 今天下午1点开播!市场上最广泛的光学传感方案组合—艾迈斯欧司朗光学技术论坛
- 【EEWORLD第二十七届】2011年06月社区明星人物揭晓!
- 【EEWORLD第九届社区明星人物】11月明星人物
- 带上速度与激情,晒出你的TI WEBENCH 得意之作!
- 想要Get更好的服务?TE人工客服说:“我可以”
- 【转发无最,分享有礼】ADI实验室电路电子书!
- 下载白皮书赢好礼:Multi-Die 系统的早期架构性能和功耗分析
- 瑞萨电子MCU全国技术研讨会开放报名!覆盖上海、南京、杭州、合肥等10大城市!
- 【技术直播】 MPS、Nexperia、泰克专家齐聚,畅谈新能源汽车动力设计注意要点