0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

两种方法教你如何有效地利用51单片机产生PWM波

MCU开发加油站 来源:未知 作者:佚名 2017-12-24 09:58 次阅读

89C51芯片没有自带PWM发生器,如果要用51来产生PWM波就必须要用软件编程的方法来模拟。方法大概可以分为软件延时和定时器产生两种方法。下面将逐一介绍。

1 软件延时法

利用软件延时函数,控制电平持续的时间,达到模拟pwm的效果。

程序如下:

#include sbit pwm=P1^0; main() { while(1) { pwm=1; delayus(60);//置高电平后延时60us,占空比60% pwm=0; delayus(40); } } void delayus(uint x) { while(x--); }

proteus软件仿真结果如下:

可见,用这种延时函数的方法就能简单地模拟出pwm输出。但是这种方法的缺点也相当明显。当程序除了要输出pwm波还要执行其他操作比如键盘扫描、显示等操作时,需要占用CPU一定的机器周期,这样就会影响pwm的准确度。现在很少会用到这种方法,接下来要介绍的是比较常用的方法。

2 定时器产生pwm

这种方法利用了定时器溢出中断,在中断服务程序改变电平的高低,在程序较复杂、多操作时仍能输出较准确的pwm波形。

2.1 注意事项

2.2.1中断服务程序的内容。

一般来说中断服务程序只完成改变标志位、转换高低电平的功能,如果中断服务程序中有太多的操作会影响pwm波的输出,尤其是除法、取余、浮点数运算会占用大量的机器周期,应在中断外完成运算。2.2.2定时器装入初值的问题。

装入初值不能太接近于定时器的溢出值。如我们使用定时器方式1,最多能计65536个数,假设我们转入的初值为65534,那么定时器计两个数就会进入中断,这样会使程序紊乱而其他功能无法正常地执行,所以一般要留50-100个数的裕量。

2.2 定时器工作方式

在定时器工作方式的选择上,可以选择定时器的工作方式0、1、2都可以,本文采用的是工作方式1,即16位定时器,这样可以获得较宽的调频范围。

2.3 定时器初值的计算

设占空比为α,频率为f

产生高电平时装入定时器高8位的值应为

产生高电平时装入定时器低8位的值应为

显然,产生低电平时的公式只要把α换成(1-α)就行了。

然而在51单片机中,浮点数运算需要消耗cpu很长的时间,为了提高程序效率,通常用100倍的占空比来计算。同时,要注意数据类型,避免超出范围,影响计算结果。关于C51的乘除法问题,可以看以下这篇文章:http://blog.163.com/ssou_1985/blog/static/295320362010311102232210/

修改后的公式如下:a为100倍占空比,fr为0.01倍频率TH0 = (65535-a*100/fr)/256; //高位初值TL0 = (65535-a*100/fr)%256;同样,低电平的公式只需把a换成(100-a)即可。

2.4 例程

本例程采用定时器T0在工作方式1下产生一路PWM,用独立键盘控制频率、占空比的加减,频率可调范围100Hz-10kHz,占空比0-100%(均为理论值,实际值略低)部分代码如下:

注:T0_H , T0_L , T1_H , T1_L 均用于暂时存储初值,进入中断服务程序后直接给寄存器TH0、TL0赋值,避免了在中断中计算。

注:flag为pwm输出标志,flag=1输出高电平,flag=0输出低电平

2.5 软件仿真结果

2.5.1 频率为100Hz

a.占空比约15%

b.占空比95%

2.5.2 频率为10KHz

a.占空比15%

b.占空比90%

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM
    PWM
    +关注

    关注

    114

    文章

    5210

    浏览量

    215813
  • 51单片机
    +关注

    关注

    275

    文章

    5706

    浏览量

    124951

原文标题:51单片机产生PWM方法

文章出处:【微信号:mcugeek,微信公众号:MCU开发加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    51单片机pwm和spwm

    51单片机pwm
    发表于 01-08 15:54 3次下载

    51单片机核心板原理图

    51单片机核心板原理图
    发表于 12-16 11:30 3次下载

    51单片机中为什么很少出现printf的身影

    51单片机中为什么很少出现 printf 的身影?是用不了吗? 不是的,51单片机可以用 printf,只是不建议使用。 平时我们在操作系统上写C语言代码,使用 printf 可以把数
    的头像 发表于 12-03 10:46 694次阅读
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>中为什么很少出现printf的身影

    基于51单片机的手动数字时钟

    具体实现功能由51单片机+8位共阴数码管+独立按键构成。具体功能:(1)利用数码管显示时分秒,显示格式为“时-分-秒”;(2)利用6个按键控制时、分、秒,设定好后自动开始时钟显示;(3
    的头像 发表于 10-22 14:12 348次阅读
    基于<b class='flag-5'>51</b><b class='flag-5'>单片机</b>的手动数字时钟

    基于51单片机的遥控开关仿真(双机通信)

    单片机最小系统、继电器及LED灯构成;(4)由于仿真无法模拟无线模块通信,故利用单片机RXD、TXD端口模拟,通过遥控器的开关实现对主机LED灯的控制,实现LED灯的点亮及熄灭。仿真演示视频:基于
    的头像 发表于 10-22 14:12 467次阅读
    基于<b class='flag-5'>51</b><b class='flag-5'>单片机</b>的遥控开关仿真(双机通信)

    如何实现51单片机与PC的串行通信

    的详细步骤和方法。 硬件连接 首先,我们需要将51单片机与PC的串行接口连接起来。通常,我们使用RS-232接口进行连接。RS-232接口是一种常用的串行通信接口,它使用9个引脚进行
    的头像 发表于 10-21 11:35 1573次阅读

    51单片机驱动

    电子发烧友网站提供《51单片机驱动.exe》资料免费下载
    发表于 09-20 11:46 5次下载

    51单片机晶振的问题总结

    电子发烧友网站提供《51单片机晶振的问题总结.doc》资料免费下载
    发表于 09-07 09:32 0次下载

    stm32和51单片机的区别是什么

    。 性能差异: STM32具有更高的主频和更大的内存空间,可以处理更复杂的任务和算法。 51单片机的主频和内存空间相对较小,适用于简单的控制和数据处理任务。 外设差异: STM32具有更丰富的外设,如多种类型的通信接口(SPI、I2C、UART等)、ADC、DAC、
    的头像 发表于 09-02 09:33 1081次阅读

    树莓派和51单片机哪个有优势

    树莓派和51单片机两种不同的硬件平台,它们各自有其特点和优势。在决定使用哪一个之前,我们需要了解它们的基本特性、应用场景和开发难度。 1. 简介 1.1 树莓派(Raspberry Pi) 树莓派
    的头像 发表于 09-02 09:04 1180次阅读

    51单片机烧录软件怎么用

    准备工作 确保您已经安装了51单片机烧录软件,如Keil、IAR等。 准备好51单片机开发板和烧录器,如STC-ISP等。 确保您的计算机已经安装了相应的驱动程序。 安装烧录软件 从官
    的头像 发表于 08-22 09:26 1756次阅读

    51单片机复位电路电容怎么放电

    51单片机的复位电路中,电容的放电过程是实现复位功能的关键环节之一。以下是关于51单片机复位电路中电容放电的介绍: 放电过程 电容充电状态 :在
    的头像 发表于 08-06 10:52 925次阅读

    51、STM32单片机的编程方式一样吗?

    STM32和51单片机两种常见的单片机系列,它们在硬件架构、性能特点和编程方式等方面有所不同。但是从c语言编程的角度来说,我认为是大同小异的。我们来对比一下它们的编程特点:
    的头像 发表于 05-18 08:04 2803次阅读
    <b class='flag-5'>51</b>、STM32<b class='flag-5'>单片机</b>的编程方式一样吗?

    51单片机串口通信详细介绍-小白必看

    51单片机串口通信是单片机与外部设备通信的重要方式,它基于串行通信的原理,以字节为单位进行数据传输。在51单片机中,串口通信主要依赖于
    的头像 发表于 04-17 09:33 2278次阅读
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>串口通信详细介绍-小白必看

    【原创】51单片机PWM控制直流电机转速,仿真、原理图和代码

    单片机产生脉宽可调的脉冲信号并输入到L298驱动芯片来控制直流电机工作的。 该直流电机PWM控制系统由以下电路模块组成: 设计输入部分:这一模块主要是利用带中断的独立式键盘来实现对直流
    发表于 03-13 00:33