文章目录

  • 前言
  • 一、PWM到底是什么
  • 二、arduino使用PWM
  • 总结

前言

此篇文章以一个通俗的方式带你了解PWM信号,写得非常详细和基础,但是在实际arduino编程中也够用了。如果有瑕疵的地方欢迎大家在评论区留言,我将及时改正,如果觉得写的不错的话也不要忘了点赞吖~


一、PWM到底是什么

PWM的专业解释叫做脉冲宽度调制,是不是感觉很抽象,其实我刚开始学的时候也感觉比较抽象,所以我们就先不纠结这个啦,来我们换一种方法来认识PWM信号。(大佬可以略过了,因为下面讲的很基础繁琐)

我们来先提出一个问题,假设你有一块开发板,开发板的一个引脚连接了一个LED小灯,我们想控制LED小灯的亮度(控制电机转速也行,反正哪样方便就哪样),你作为一个开发者,你会怎么来实现呢?

要控制LED小灯的亮度,那么只需要控制输入电压就行了,当输入电压比较高的时候,LED就较亮,当输入电压比较低的时候LED亮度较弱。

所以此刻你想到的可能是通过设置LED引脚的电压大小来控制LED小灯的亮度。嗯,好像也对。。但是如果只有这样简单那我们还说什么PWM。问题出在哪儿呢?

实际上要想控制引脚的电压高低并不是那么容易的事情,很多开发板都没有能直接控制引脚电压的功能。这种情况下,引脚的电压只能是高电平或者低电平这两个值,所以LED小灯要么只能亮,要么只能不亮。

既然我们不能控制引脚的电压,有想控制LED小灯的亮度,那只能寻找其他办法啦。好了好了,再不说PWM的话,想必你们也要不耐烦啦。下面就有请PWM登场。

下图是三个信号,信号1一直保持高电平,信号2一直保持低电平,如果这两个信号接到LED小灯上,那可以很容易的想到:信号1的情况下LED保持亮,信号2的情况下LED熄灭。信号3其实就是一个典型的PWM信号啦。可以看到信号3是不停的在高电平和低电平之间跳动,那么在这种情况下LED小灯会怎么样呢?

聪明的你应该已经想到啦,在信号3的情况下,LED小灯是不断闪烁的,可以在实际生活中PWM信号的频率都很高,当频率很高的时候,我们肉眼就察觉不到LED小灯在闪烁了,此时看到的就是LED小灯常亮,不同的是LED小灯虽然是常亮,但是亮度有信号1情况下那么强吗?当然没有啦。

总结一下,信号1情况下LED小灯一直亮,信号2情况下LED小灯熄灭,信号3也就是PWM信号下,LED小灯也处于亮的状态,只是亮度稍弱。

坚持一下,下面是PWM信号的重中之重。我们来看另外3个PWM信号:

    发现这三个信号的不同点和相同点了吗?先来看相同点吧,是不是周期是一样的,换句话说这三个信号的频率是一样的,那不同点呢,就是在一个周期T里面,高电平和低电平所占的百分比是不一样的。如果用这三个信号来驱动LED小灯,LED亮度一样吗,不一样的话,哪个亮度最强?

相信你已经知道了,同样频率的信号4、信号5、信号6,它们驱动LED小灯的亮度是不一样的。亮度依次是:信号6 > 信号5 信号4,为什么会出现这种情况呢,因为高电平占的百分比不一样

高电平的百分比其实有个专业术语叫做占空比,即是指在一个脉冲循环内,通电时间相对于总时间所占的比例。举个例子,上面的三个信号假设周期为1ms,信号4的占空比为20%,那么也就是说在1ms内,高电平占了0.2ms。懂了吧,这个就是占空比。占空比不一样,LED小灯的亮度就不一样,占空比越高,LED小灯就越亮。下面是不同占空比的信号对比。

来总结一下吧,PWM信号其实就是一种占空比可以调节的信号,其实就是用占空比的调节来达到类似于模拟信号的效果。占空比越高,其效果就越强。

二、arduino使用PWM

如果你只是想知道PWM信号是什么,那么就不用往下看啦

  • 语法

arduino里面可以使用函数analogWrite()来实现PWM输出。具体用法为:

analogWrite(pin, value)`//pin: 设置引脚编号
//value: 设置PWM信号强度,value介于0和255之间,当value为255时占空比最大,当value为0时占空比最小
  • 示例

将LED小灯的正极串联一个电阻接到arduino开发板的9引脚,负极连接到arduino开发板的GND引脚,上传下面代码:

int ledPin = 9;      //LED小灯连接的引脚
int val = 0;         // LED小灯亮度void setup() {pinMode(ledPin, OUTPUT);  // sets the pin as output
}void loop() {for(val=0;val<255;val++){analogWrite(ledPin, val); // 设置PWM输出,val越大,PWM占空比越大,led越亮delay(10);//延迟}for(val=255;val>=0;val--){analogWrite(ledPin, val); // 设置PWM输出,val越大,PWM占空比越大,led越亮delay(10);//延迟}delay(1000);
}

上传代码后就可以看到LED小灯由暗变亮,再由亮变暗啦。

总结

此文首先演示了PWM信号的原理,再从实际角度出发演示了arduino中如何使用PWM信号。真心希望能帮到大家,不足的地方望大家指正呀。

pwm原理及arduino使用pwm教程详解(超详细超基础)相关推荐

  1. 我的世界服务器如何做无限箱子,我的世界无限存储箱子制作教程详解

    我的世界无限存储箱子制作教程详解,详细描述了我的世界无限存储箱子制作教程,希望这篇我的世界无限存储箱子制作教程详解,能够帮助到各位正在玩我的世界的玩家朋友们! 我的世界无限存储箱子制作教程详解 各位土 ...

  2. 我的世界服务器权限组文件在哪,我的世界GroupManager权限组管理教程详解

    我的世界GroupManager权限组管理教程详解,详细描述了我的世界GroupManager权限组管理教程,希望这篇我的世界GroupManager权限组管理教程详解,能够帮助到各位正在玩我的世界的 ...

  3. 史上最简单MySQL教程详解(进阶篇)之索引及失效场合总结

    史上最简单MySQL教程详解(进阶篇)之索引及其失效场合总结 什么是索引及其作用 索引的种类 各存储引擎对于索引的支持 简单介绍索引的实现 索引的设置与分析 普通索引 唯一索引(Unique Inde ...

  4. android卡刷教程,卡刷是什么意思?安卓系统卡刷教程详解

    2016-03-29 17:43:49 卡刷是什么意思?安卓系统卡刷教程详解 标签:卡刷,安卓系统卡刷教程,卡刷升级 [ROM之家]使用安卓系统手机的发烧友可能会经常提到卡刷一词,那么到底卡刷是什么意 ...

  5. linux系统下安装pip3,linux下安装python3和对应的pip环境教程详解

    linux下安装python3和对应的pip环境教程详解 1.下载python3.6的安装包: 2.解压后,进入到解压目录下,执行如下命令,将python3.6进行编译,如下是将python的环境编译 ...

  6. Arduino CNC电机扩展板详解(A4988驱动42步进电机)

    原文地址:http://www.taichi-maker.com/homepage/reference-index/motor-reference-index/arduino-cnc-shield/ ...

  7. linux卸载hadoop版本,centos6.5 安装hadoop1.2.1的教程详解【亲测版】

    本篇只简单介绍安装步骤 1. 角色分配 10.11.84.4 web-crawler--1.novalocal master/slave 10.11.84.5 web-crawler--2.noval ...

  8. es springboot 不设置id_es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程详解

    注意:适用于springboot或者springcloud框架 1.首先下载相关文件 2.然后需要去启动相关的启动文件 3.导入相关jar包(如果有相关的依赖包不需要导入)以及配置配置文件,并且写一个 ...

  9. GitHub使用教程详解——官网操作指南(翻译)

    GitHub使用教程详解--官网操作指南(翻译) GitHub使用指南 原文地址:GitHub官网 示例项目:Hello World 十分钟轻松教学 在学习计算机语言编程的过程中创建Hello Wor ...

最新文章

  1. Android之linux基础教学之八 内核同步介绍
  2. win7(旗舰版)下,OleLoadPicture 加载内存中的图片(MagickGetImageBlob),返回值 0
  3. Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(text.insert/link各种事件)
  4. javascript技术教程蔡敏_程序员都必掌握的前端教程之JavaScript基础教程(上)
  5. 数字语音信号处理学习笔记——语音信号的短时时域分析(1)
  6. Windows各版本以及漏洞
  7. 【我想进大厂】Redis夺命连环11问
  8. poj2778DNA Sequence (AC自动机+矩阵快速幂)
  9. unity 角度限制_喵的Unity游戏开发之路 推球:游戏中的物理
  10. [NYOJ 15] 括号匹配(二)
  11. 第一个python代码
  12. java的人patch方法_java – Spring MVC PATCH方法:部分更新
  13. C# Json 和对象的相互转换
  14. 在用JAVA写一个简易CAD程序时的笔记
  15. 医学知识-骨密度以及骨密度测量
  16. pytorch实战:采用Lenet运行iChallenge-PM数据集
  17. 泊松分布与指数分布的理解
  18. 创新工场李开复:漫延——中国移动互联网的2011年
  19. %3cp%3e 修改 值 html,UEditor在JavaWeb中的应用
  20. 用微信小游戏实现龙舟大战-打粽子

热门文章

  1. Odoo产品分析 (三) -- 人力资源板块(6) -- 工资表(1)
  2. python 构件二维数组_通过这四个构件块来升级您的javascript数组
  3. 72.编辑距离105.前序中序遍历序列构造二叉树151.翻转字符串里的单词104.二叉树的最大深度76.最小覆盖子串110.平衡二叉树31.下一个排列
  4. 【bzoj3698】【XWW的难题】【有上下界的网络流】
  5. AAAI2022推荐系统论文集锦
  6. 计算机考研院校所,计算机考研院校全国七大地区考研名校推荐
  7. 非计算机专业毕业如何从事IT工作
  8. AI选择描边比例缩放钢笔文字形状线段、弧形渐变混合工具使用
  9. “流支付”掀起互联网支付创新浪潮,SAK支付白皮书揭秘
  10. 美光科技:2019财年的营收和净利润狂泻不止