使用51单片机的GPIO输出占空比可调节的PWM波
一、前言
在一些单片机或微控制器中,通用GPIO可以被配置为产生PWM信号。PWM即脉冲宽度调制,是一种用于模拟输出的技术。它可以通过改变输出信号的脉冲宽度来控制电路中的电平,从而实现对电路的控制。
二、什么是PWM波?
PWM波(Pulse-Width Modulation
),即脉宽调制波,是一种用于控制电子电路中电力开关的技术。它通过调节脉冲信号的占空比,即高电平与低电平的时间比例,来控制输出电压或电流的大小。
PWM波可以用于各种场合,例如控制电机的转速和方向、控制LED灯的亮度等。在数字信号处理、嵌入式系统、机器人等领域中都有广泛应用。
PWM波的占空比是指高电平的时间占一个周期时间的比例。具体来说,如果PWM波周期为T
,高电平时间为t
,那么占空比D
的计算公式为:
D = t / T * 100%
其中D
是占空比的百分比,t
是高电平时间,T
是PWM波的周期。例如,如果PWM波的周期为1ms
,高电平时间为0.3ms
,那么该PWM波的占空比为:
D = 0.3ms / 1ms * 100% = 30%
通常情况下,占空比越大,PWM波的平均电压就越高,所以PWM波的占空比对控制电路的输出电压和电流非常重要。
三、输出PWM波的实现思路
在51单片机中,可以使用定时器/计数器模块和通用IO口结合来实现PWM输出。具体步骤如下:
-
配置定时器/计数器工作模式:定时器/计数器模块通常包含多种工作模式,如定时器模式、计数器模式、PWM输出模式等。需要选择合适的工作模式,并对其进行相应的配置。比如,对于STC89C52单片机的定时器/计数器模块,可以选择16位定时器模式,并设置计数器初值和重载值。
-
配置IO口工作模式:需要将通用IO口配置为输出模式,并将其连接到PWM信号输出引脚上。
-
编写中断服务程序:在定时器/计数器计数完成时,将触发相应的中断请求。需要编写中断服务程序,以便在中断处理程序中更新PWM输出信号的占空比。
-
更新PWM输出信号的占空比:中断服务程序中需要更新PWM输出信号的占空比。可以通过调整计数器重载值或修改IO口输出状态等方式实现。
通过合理配置定时器/计数器模块和IO口,并编写相应的中断服务程序,就可以在51单片机上实现可调节占空比的PWM输出了。
四、定时器配置
在51单片机中,使用定时器来生成PWM信号需要首先选择定时器,根据具体需要,选择需要使用的定时器,比如定时器0、定时器1等。在确定了我们要使用的定时器后就可以开始配置定时器的模式了,根据具体的PWM波形需要,选择定时器的工作模式。比如,可以选择定时器工作在 定时器/计数器 模式或者 自动重载 模式。
下面是对一个定时器初始化需要的一些语句:
TMOD = 0x01; // 定时器0设置为模式1,计时器TH0 = 0xFC; // 定时器0初始值TL0 = 0x66; // 定时器0重载值ET0 = 1; // 使能定时器0中断TR0 = 1; // 启动定时器0EA = 1; // 全局中断使能
在这个示例中,定时器0的计时时间为1ms,当定时器计数器达到重载值时,就会触发定时器中断,调用中断服务程序执行相关操作。
五、代码实现
根据上面的知识我们可以编写出以下代码,该代码可以实现51单片机的通用GPIO输出占空比可调节的PWM波:
#include <reg52.h>
#define PWM_OUT P1// 定义占空比
unsigned char PWM_duty_ratio = 50; // 50%占空比void main()
{// 设置定时器1的计数初值TH1 = 0xFC;TL1 = 0x66;// 设置定时器1为工作模式2TMOD |= 0x10;// 启动定时器1TR1 = 1;// 设置PWM输出的IO口为输出模式PWM_OUT = 0;// 开始输出PWM波while(1){if(PWM_OUT >= PWM_duty_ratio)PWM_OUT = 0;elsePWM_OUT = 1;}
}
相关文章:
使用51单片机的GPIO输出占空比可调节的PWM波
一、前言 在一些单片机或微控制器中,通用GPIO可以被配置为产生PWM信号。PWM即脉冲宽度调制,是一种用于模拟输出的技术。它可以通过改变输出信号的脉冲宽度来控制电路中的电平,从而实现对电路的控制。 二、什么是PWM波? PWM波&a…...
从产品经理的角度如何提升项目的交付质量?
提高交付质量 ,对于每个IT公司都是永恒的话题。 交付质量其实包含2重意义, 一是交付的高质量(客户角度),即客户的满意度;二是高质量的交付(交付团队的角度),这里是指如何…...
JavaScript BOM【快速掌握知识点】
目录 Window对象的常用属性 语法: Window对象的常用方法 语法: open()和close()方法 History对象 常用属性和方法 示例 Location对象 常用属性 常用方法 Document对象的常用方法 定时函数 超时调用:setTimeout() 间歇调用&…...
【算法】哈希表
作者:指针不指南吗 专栏:算法篇 🐾或许会很慢,但是不可以停下来🐾 文章目录1.定义2.优点3.数字哈希3.1拉链法3.2开放寻址法3.3 例题4.字符串哈希1.定义 哈希表(Hash table),是根据键…...
彻底搞懂React-hook链表构建原理
写在前面的小结 每一个 hook 函数都有对应的 hook 对象保存状态信息useContext是唯一一个不需要添加到 hook 链表的 hook 函数只有 useEffect、useLayoutEffect 以及 useImperativeHandle 这三个 hook 具有副作用,在 render 阶段需要给函数组件 fiber 添加对应的副…...
【数据挖掘实战】——应用系统负载分析与容量预测(ARIMA模型)
项目地址:Datamining_project: 数据挖掘实战项目代码 目录 一、背景和挖掘目标 1、问题背景 2、传统方法的不足 2、原始数据 3、挖掘目标 二、分析方法与过程 1、初步分析 2、总体流程 第一步:数据抽取 第二步:探索分析 第三步&a…...
【华为OD机试模拟题】用 C++ 实现 - 九宫格按键输入(2023.Q1)
最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明九宫格按键输入题目输入输出示例一输入输出说明示例二输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高…...
Linux: config: CONFIG_SYN_COOKIES
文章目录 CONFIG_SYN_COOKIESLinux kernel里的超时设置Huawei SBC详细工作机制CONFIG_SYN_COOKIES config SYN_COOKIES,布尔值;是否支持IP:TCP syncookie功能。 详解:一般来说TCP/IP网络不能够阻挡SYN flooding工具。这个工具很容易被利用,而且会导致DOS工具,妨碍其他整…...
【笔记】C# 数据类型转换
文章目录前言类型转换的概念1,隐式转换2,显式转换3,程序类转换结语前言 🌻 大家好啊,我是writer桑,本章是关于 C# 数据类型转换的一个总结,其中包含隐式、显示转换和程序类转换,方便…...
JavaWeb JavaBean,MVC三层架构
9、JavaBean 实体类 JavaBean有特定的写法: 必须要有一个无参构造属性必须私有化必须有对应的get/set方法; 一般用来和数据库的字段做映射 ORM; ORM :对象关系映射 表—>类字段–>属性行记录---->对象 people表 …...
JavaEE简单实例——MyBatis一对多关联映射的嵌套结果集查询
简单介绍: 在之前的章节,我们简单介绍了MyBatis中的一对一的关联查询,使用了嵌套查询和嵌套结果集两种方式进行讲解,但是在实际的使用中,我们常用的是嵌套结果集的查询方式,所以在一对多的查询中ÿ…...
大数据框架之Hadoop:MapReduce(三)MapReduce框架原理——OutputFormat数据输出
3.6.1OutputFormat接口实现类 OutputFormat是MapReduce输出的基类,所有实现MapReduce输出都实现了OutputFormat接口。下面我们介绍几种常见的OutputFormat实现类。 1、文本输出TextOutputFormat 默认的输出格式是TextOutputFormat,它把每条记录写为文…...
Linux搜索、编辑
目录 1.搜索 1.1.基础用法 1.2.高级用法 2.编辑 2.1.vim简洁 2.2.vim快捷键 1.搜索 1.1.基础用法 find命令用于搜索,格式如下: find 指定目录 -匹配方式 所要匹配的关键字 所要匹配的关键字支持通配符,?代表一个字符*代表任意个字符。 如果想设…...
Git Commit提交规范总结
文章目录前言git commit 提交规范提交消息头(commit message header)提交消息具体内容(commit message body)提交消息尾述(commit message footer)Revert表情(Emojis)标识idea插件其他操作Commitizen生成 Change logGit获取提交消息格式化输出相关参考前言 我们都知道…...
【ESP 保姆级教程】疯狂毕设篇 —— 案例:基于ESP8266和EMQX的教室灯光控制系统
忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-02-26 ❤️❤️ 本篇更新记录 2022-02-26 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...
SpringBoot (一) 项目构建、配置读取、静态资源定义
哈喽,大家好,我是有勇气的牛排(全网同名)🐮 有问题的小伙伴欢迎在文末评论,点赞、收藏是对我最大的支持!!!。 前言 SpringBoot是基于Spring开发的开源项目,…...
<JVM上篇:内存与垃圾回收篇>12 - 垃圾回收相关概念
笔记来源:尚硅谷 JVM 全套教程,百万播放,全网巅峰(宋红康详解 java 虚拟机) 文章目录12.1. System.gc()的理解12.2. 内存溢出与内存泄露内存溢出(OOM)内存泄漏(Memory Leakÿ…...
new操作符做了什么?
new是什么? new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。 function Person (name,age) {this.name namethis.age age } Person.prototype.sayName function () {console.log(this.name) } let man new Person(xl,20) consol…...
Java_IO流,书城IO版
1.字符IO流的输入/输出 首先,IO流根据多方面划分。 根据方向划分 输入流/输出流根据处理单元划分 字节流/字符流根据功能划分 节点流/处理流 尝试一下使用字符输入流在读写文件: package IOStream;import java.io.*;public class Test {public stati…...
2023自动化测试岗位需求的 7 项必备技能 (最新版)
目录:导读 一、自动化测试员技能——编程语言 二、自动化测试员技能–出色的手动测试技能 三、.自动化测试员技能–自动化工具专业知识 四、自动化测试员技能–了解业务需求 五、自动化测试员技能–自动化工具故障排除 六、自动化测试员技能–具有测试管理工具…...
【华为OD机试模拟题】用 C++ 实现 - 路灯照明(2023.Q1)
最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明路灯照明【华为OD机试模拟题】题目输入输出描述示例一输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高…...
学到贫血之-贫血模型和充血模型
学习自:设计模式之美 1 基于贫血模型的传统开发模式 // ControllerVO(View Object) public class UserController {private UserService userService; //通过构造函数或者IOC框架注入public UserVo getUserById(Long userId) {UserBo userBo userService.getUser…...
Java常用组件面试题
文章目录HTTP通信协议Kafka消息队列Linux操作系统Mybatis框架SpringCloud框架HTTP通信协议 https通信过程 https协议是指对通过http协议传输数据的进行加密和解密。当客户端发送https请求时,服务端会返回数字证书给客户端,客户端验证通过后会生成随机数…...
MySQL常见问题的解决方法
目录 cmd没有管理员权限 没有my.ini这个文件 ERROR 1045 (28000): Access denied for user ODBClocalhost (using password: NO) ERROR 1045 (28000): Access denied for user rootlocalhost (using password: NO) 其他常见问题 cmd没有管理员权限 cmd一定要用管理员权限打…...
全网详细介绍nginx的反向代理、正向代理配置,location的指令说明,反向代理的两个示例代码以及全局块,events块和http快的说明。
文章目录1. 文章引言2. 何谓反向代理3. 解析nginx的配置文件3.1 全局块(global block)3.2 events块(events block)3.3 http块(http block)4. 如何配置反向代理4.1 反向代理示例14.2 反向代理示例25. 补充说明5.1 location指令说明5.2 nginx完整配置文件1. 文章引言 如果你的服务…...
容斥恒等式的证明
容斥恒等式的证明 推广公式 P(A∪B)P(A)P(B)−P(A∩B)P(A\cup B)P(A)P(B)-P(A\cap B) P(A∪B)P(A)P(B)−P(A∩B) (a)设A、B、C为三个事件,则下列恒等式成立: P(A∪B∪C)P(A)P(B)P(C)−P(A∩B)−P(A∩C)−P(B∩C)P(A∩B∩C)P(A\cup B\cup C)P(A)P(B)P(C)…...
Java中的this与super关键字深度解析
一、this关键字this 关键字是 Java 常用的关键字,可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用。(1)this.属性名this修饰的变量用于指代成员变量方法的形参如果…...
CSS3新增的视口单位Vh、Vw单位
定义vw:浏览器可见视口【宽度】的百分比(1vw代表视窗【宽度】的1%)vh:浏览器可见视口【高度】的百分比(1vw代表视窗【高度】的1%)vmin:当前 vw 和 vh 较小的一个值。vmax:当前 vw 和…...
【Linux】yum安装docker指定版本
🍁博主简介 🏅云计算领域优质创作者 🏅华为云开发者社区专家博主 🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 文章目录卸载已有的docker部署指定版本docker安…...
SpringBoot相关操作
01-今日内容 Spring概述、快速入门SpringBoot配置SpringBoot整合 02-SpringBoot概述 SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的…...
山东省住房和城乡建设厅网站/推广普通话手抄报内容50字
昆腾公司(NYSE:QTM)近期公布了截至2013年12月31日的2014财年第三财季的初步业绩。公司预计本财季的收入在1.45亿至1.46亿美元之间,高于2013年10月23日发布的业绩中预测的最高值。这要特别归功于Scalar磁带自动化系统和DXi重复数据删除设备销售收入的持续增长&#x…...
地信网站建设/网络营销师培训
简单快捷键例如:this.button1.Text "OK(&O)"复杂的则需要使用 [user.dll]C#实现快捷键(系统热键)响应在应用中,我们可能会需要实现像CtrlC复制、CtrlV粘贴这样的快捷键,本文简单介绍了它的实现,并给出了一个实现类。http://ik…...
自己做网站stri/域名备案
procomm plus 的基本使用方法 1 串口脚本有些串口工具(例如串口调试助手)有定时发送功能,但只能发送一条固定的命令。我需要发送几百条命令,又懒得写程序,就希望找一个可以执行串口脚本的工具。然后我找到了procomm pl…...
wordpress首页自定义小工具/推广关键词排名方法
昨天晚上看了一部录像,具体名字我忘了,不过其中有句话记得非常清楚,“Who is the lion!”。故事讲述的是一个胆子很小的警察,无意中被要求付5000美金去学习一本课程,当然教授是一个比较坏的家伙,不过我也确…...
电子商务网站开发流程/百度问答我要提问
收听地址S01E01-开发者关系 (DevRel) 是开源项目和开源社区的加速器嘉宾Feynman Zhou[1] (周鹏飞)主持人majinghe[2](开源爱好者、DevOps 技术布道师)Rick[3](开源爱好者、业余开源布道师)Wey Gu[4](开源相信者、程序员…...
php网站培训机构企业做网站/seo成功案例分析
本篇文章帮大家学习xml-RPC实例(java),包含了XML-RPC实例(Java)使用方法、操作技巧、实例演示和注意事项,有一定的学习价值,大家可以用来参考。在本节中,将通过Java编程语言演示如何使用XML-RPC,首先创建一个使用Java类…...