pwm原理及arduino使用pwm教程详解(超详细超基础) 您所在的位置:网站首页 pwm控制电机转速频率多少好用 pwm原理及arduino使用pwm教程详解(超详细超基础)

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

2024-07-16 14:25| 来源: 网络整理| 查看: 265

文章目录 前言一、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小灯会怎么样呢?

图1

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

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

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

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

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

来总结一下吧,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 analogWrite(ledPin, val); // 设置PWM输出,val越大,PWM占空比越大,led越亮 delay(10);//延迟 } delay(1000); }

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

总结

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有