PWM(Pulse Width Modulation)简介

PWM,也就是脉冲宽度调制,用于将一段信号编码为脉冲信号(一般是方波信号)。是在数字电路中 达到 模拟输出效果的一种手段。即:使用数字控制产生占空比不同的方波(一个不停在开与关之间切换的信号)来控制模拟输出。我们要在数字电路中输出模拟信号,就可以使用PWM技术实现。在嵌入式开发中,我们常用PWM来驱动LED的暗亮程度,电机的转速等。

原理

我们知道,在数字电路中,电压信号是离散的: 不是 0(0V)  就是 1(5V或者3.3V), 那么如何输出介于 0v 和  5V之间的某个电压值呢?

我们先来举个实际的例子,一看就懂,胜过千言万语。

如下图,要让让数字信号模拟出 3.7V 的电压输出。可以先假想:3.7V的电压输出是由多个周期时间为T ,电压值 都 为3.7V的信号 持续输出形成的。

根据PWM原理,我画出下面等效脉冲信号波形图(红色) 。PWM的理念是:连续的信号可以使用独立的方波信号模拟出来,手段就是调整输出的脉冲宽度,以达到同样的效果。你会怀疑:这真的可以达到同样的效果吗?

别急,让我们继续往后看。

如果一个周期T内的均值电压等于3.7V,那么,整体的输出就是3.7V,因为整体只不过是n个周期不断的重复而已。那么我们的主要问题就是如何让一个调制周期T时间内的均值电压等于3.7V。下面就开始计算。

设:脉冲信号的值随时间变化的函数为:aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFUAAAAgCAIAAADseKN/AAADy0lEQVRYhe1Yy0s6URi9xJSCNTFQtmgxbiqSwkwrSAhcDC1aRA/JREOUaMqFYFAb20TPTRZF2qIIowdtKvoHWoQEET0g0jaFCK6ckBLLivktpmR+o+kNrAb07DzfN/fM+b77GgGd3QB//QJ/jJz/7EbOf3Yj5z+7wV//kUjk+fmZQ46MjAwPD3/1iMvl6urqenl5gVfho/9oNNrb21tdXV1ZWXl+fh7n5+fnVSpVNBpN8axWqzUajfBafPQ/NjYmFouNRiMAYGFhgSGvrq7EYvHR0REneXp6en19Pf4zGAyWl5evra1BaqXx798hCYIgiBkPm/XMEEnYjKG+vl6tVi8uLur1+kAgwJA6nU6j0XAyb29vhULhwMAAm7RarQqF4v39HUYrbf8/vLKsftaE3PHDKHwTXq8XQRCSJNnk/f09iqJbW1uc5OXlZQCA0+lkk2dnZ3l5efv7+zBy6ef/RwHibpNPiYxhY2MDADA3N8cmHQ5HUVHRw8MDJ7m/v7+goODm5obDV1RUpNgm2YBY//8XgFuOzMHpdOI4XlxcDAAoLS3FcdzhcDAhs9lcV1fHTm5sbMQwLD8/XyAQlJWVKRQKdrSzs1OtVsOIwux/rI5/p/mfuUmRpH6xWIyiqO7ubhRF/X4/RVHxNUwQRFtbGzs5HA5fXl4KBAKz2UxR1OPjIzs6NDQkkUggrMHt/3HXMz+78dE0TctkMrlcziEbGhq0Wi2HXF1dTVz8DEZHRzEMi8ViaeUgz7/PHf87c/+7/adpmqIokUjU09PD4aVSqcFg4JAWiwVBkOvr68RxxsfHEQQJhUJpXxL2/GcV4Aebf3BwAACYmpri8E1NTYlFUSqVUqk06ThM/19fX9MqQt9/PgvwM6feB2ZnZwEAh4eHHL61tZWz/gOBgFAoZIri9XqtVis7muH1/2swmUwYhkUiEQ5PkqRMJmMzu7u7AICJiQmapjUazdLSEjuq0WhaWlpgFPnlX6VSNTc3J/Iul0skEgWDwTjj8/kwDOvo6NDpdJzLEk3TVVVVFosFRpFH/sPhMIqig4ODiaG7u7vCwkKXy8UmPR7P5OTk5uYmJ/ni4gJBkL29PRhRXvjf3t42mUxutxsA4Ha7k+YYDAa9Xg8zms1mUyqVmbr//wZqampEIlFfX59cLn97e0uac3JyUlJScnp6mnqoUCiE4zj7izA1eOGfJEmJRFJbW3t8fJwizW63EwTxVYEY6HQ6yGnCgBf+aZr2+Xyp/9hgYLPZ7Hb7V9GVlZX29vanpyd4Xb74/yvk/Gc3cv6zG/8A86jYhKejdYwAAAAASUVORK5CYII=" alt="" />

因为这里是数字电路的背景下的,所以v的值只能取 0v 或者   5v。

设:在一个周期T时间中,高电平持续时间占T的百分比为 D,则低电平持续时间在周期T中占的百分比为 1- D。

我们对 一个调制周期T内的电压值对时间积分,然后除以周期T,就得到了这个周期的输出电压均值。

aaarticlea/png;base64,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" alt="" />

由于这个积分图形是方波,所以很好计算(就是面积 除以T)。

aaarticlea/png;base64,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" alt="" />

可以看出,1个调制周期内,输出的电压均值只和D有关。也就是高电平信号占持续时间占这个周期的百分比决定这个周期内的输出电压。

上面说了,要让这个均值等于3.7v,则求出D为:0.74  。

那也就是说:如果在一个调制周期中,高电平持续时间占周期的百分比为74%,则整体输出的信号就是3.7V。这个百分比就是下面要说的占空比

占空比(duty cycle)

有了前面的知识,相信你已经对占空比理解了,其实很好理解 ,占空比就是 在一个调制周期内,某个信号持续的时间占这个时间段的百分比。

下面给出占空比的公式

aaarticlea/png;base64,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" alt="" />

 
D: 占空比
PW: 脉冲宽度(调制周期中脉冲持续时间)
T:  一个调制周期

下面是一个占空比不断变化的图示

所以我们可以很自然的得出结论:

低占空比意味着输出的能量低,因为在一个周期内大部分时间信号处于关闭状态,如果pwm控制的负载为led,则具体表现例如led灯很暗。

高占空比意味着输出的能量高,在一个周期内,大部分时间信号处于on状态,具体表现为LED比较亮。

当占空比为100%时,表示 fully on,也就是在一个周期内,信号都处于on状态,具体表现为led亮度到达100%。

为0%时则表示 totally off,在一个周期内,一直处于off状态,具体表现为led熄灭。

现在一切都明了了:脉宽调制,脉宽调制,脉宽调制,这个宽,不是物体的宽度,而是高电平(有效电平)信号在一个调制周期中持续时间长短,它可以用占空比去衡量,占空比越大,脉冲宽度越宽。

占空比随时间变化的PWM调制

扩展:用PWM模拟出如下的正玄波(假设仅仅用3个周期去调制出这段正弦波)

道理和前面是一样的,只不过,因为从图中看出,模拟信号(黑色曲线)随着时间不断加强,因此,占空比要变化,也就是逐渐增加。下面3个调制周期中,占空比D逐渐增大。

PWM的频率 (PWM frequency)

pwm的频率决定了输出的数字信号on ,1 和 off,0 的切换速度。频率越高,切换就越快。频率的大小就是前面提到的调制周期T的倒数  : f = 1/T。

1秒内,0.5秒开,0.5秒灭,占空比是50%。那么,1毫秒内,0.5毫秒开,0.5毫秒灭,占空比也是50%,对于前者,频率就是1HZ,而后者,是1毫秒,频率就是1KHZ。

一般pwm频率都是因硬件设计而固定的,是由pwm发生器决定的。PWM频率越高,调制出来的输出曲线就更加的smooth,效果越好,完成一个调制周期的时间越短。这个和手机的ppi越高,显示越清晰是一个道理。当然我想PWM的频率越高,对硬件的要求就也越高。

下图中,右边的频率是左边的2倍,调制出的曲线更加圆滑,贴近理想波形。

使用Arduino来实战!

首先要确定你的Arduino 的哪些引脚支持PWM输出,数字引脚上标记了 ~ 符号的就是支持PWM的。Arduino主控芯片为ATmega168或者ATmega328的3, 5, 6, 9, 10, 和 11引脚支持PWM,Arduino Mega的 2~13 , 44~46引脚支持PWM,老板子ATmega8的9,10,11脚支持PWM。

Arduino的库中通过analogWrite函数来完成PWM输出。

analogWrite(pin,value)

作用:让一个支持PWM输出的引脚持续输出指定脉冲宽度的方波。

参数:

pin:PWM输出的引脚编号。

value:用于控制占空比,范围:0~255。值为0表示占空比为0,值为255表示占空比为100%,值为127表示占空比为50%。

当调用一次此函数后,引脚就会持续稳定地输出指定占空比的PWM方波,直到下一次对同一个引脚的新的调用来修改脉冲宽度的值,就会再持续输出新的脉冲宽度的PWM波。

Arduino板的PWM输出频率一般是490Hz,意味着一个调制周期的完成需要2ms的时间。在Uno或者与Uno相似的板子上,其5和6引脚PWM的频率约为980Hz(一个调制周期的完成需要1ms的时间)。

注意

1、analogWrite和analogRead没有任何关系,他们虽然都属于模拟驱动函数,但是他们使用的技术不同,一个是PWM,一个是A/D转换。

2、在调用analogWrite前,无需对引脚设置pinMode为输出,因为函数实现中已经完成了这个设置,见下面源代码。

3、从源代码中也可以发现,当value的值为0时(占空比为0),等价于持续输出低电平,当value值为255时(占空比为100%),等价于持续输出高电平。当value不是0也不是255时,是通过设置定时器/计数器的比较寄存器的值来完成的,可以看出PWM技术依赖单片机内部的Timer。正是这个原因,引脚5和6实际的占空比可能比设置的高,特别是在value值很小的时候,例如value值为0时,PWM的占空比实际却可能不为0而比0高一点,因为5和6的PWM生成器器依赖的Timer同时也被millis()和delay()函数使用。

void analogWrite(uint8_t pin, int val)
{
// We need to make sure the PWM output is enabled for those pins
// that support it, as we turn it off when digitally reading or
// writing with them. Also, make sure the pin is in output mode
// for consistenty with Wiring, which doesn't require a pinMode
// call for the analog output pins.
pinMode(pin, OUTPUT);
if (val == 0)
{
digitalWrite(pin, LOW);
}
else if (val == 255)
{
digitalWrite(pin, HIGH);
}
else
{
switch(digitalPinToTimer(pin))
{
// XXX fix needed for atmega8
#if defined(TCCR0) && defined(COM00) && !defined(__AVR_ATmega8__)
case TIMER0A:
// connect pwm to pin on timer 0
sbi(TCCR0, COM00);
OCR0 = val; // set pwm duty
break;
#endif //为了简化篇幅,省略部分代码,具体请查看库源代码 case NOT_ON_TIMER:
default:
if (val < ) {
digitalWrite(pin, LOW);
} else {
digitalWrite(pin, HIGH);
}
}
}
}

用USB逻辑分析仪来分析Arduino的PWM输出

void setup() {
analogWrite(,); //让 6号引脚输出占空比为 127/255≈50% 的PWM信号
analogWrite(,); //让 10号引脚输出占空比为 64/255≈25% 的PWM信号
} void loop() {
//nothing }

从上面的USB逻辑分析仪测量的结果可以得出这样几个事实:

1、官方给的数据是没问题的,普通的PWM引脚输出PWM的频率为490Hz,个别PWM引脚(如5和6)支持更高PWM输出频率,为980Hz。

2、analogWrite函数调用以后,那个引脚就会持续输出固定占空比的PWM信号,无需在loop函数里面循环调用来维持输出,上面的代码中我是在setup函数中调用的;输出的占空比由第二个参数指定,这个参数除以255就是占空比;

如果要修改这个引脚的PWM占空比,则用新的参数对此引脚再调用一次analogWrite即可。

一个例子

试验连线线图

const byte  ledPin = ;     //pwm输出引脚
const byte button = ; //按键引脚
byte pwmVal = ; bool isKeyPressed(byte pin); void setup() {
pinMode(button,INPUT_PULLUP); //配置为数字输入,且使能内部上拉电阻
Serial.begin();
} void loop() { if(isKeyPressed(button)) //如果检测到按键按下,就让pwmVal 增加2
{
pwmVal+=; //pwmVal 的类型为byte,到了256会自动溢出回0,所以为没做检查,不过不要过度依赖这个技巧啊,规范些好
} analogWrite(ledPin,pwmVal);
Serial.println(map(pwmVal,,,,)); //使用map函数映射为 0~5v的电压信号
delay(); } bool isKeyPressed(byte pin) //按键检测函数
{
bool pre = false;
if(digitalRead(pin)==LOW)
{
delay();
if(digitalRead(pin)==LOW)
{
pre = true;
for(int a = ;digitalRead(pin)==LOW&&a;--a)
{
delay();
}
}
} return pre;
}

在IDE的串口绘图器中查看输出的波形。因为是手动按键来调整占空比的,所以波形不好看。用电位器调更加好。

我们去掉map函数,直接输出pwmVal的值,可以看到更加细腻。

夜晚的效果。

用Arduino剖析PWM脉宽调制的更多相关文章

  1. STC12C系列单片机PWM脉宽调制

    最近给别人做了一个小东西,MCU选的是STC12C5A60S2 ,需要用到PWM控制功能. 在网上找了一下,发现解释的不尽人意,无奈之下自己琢磨数据手册弄明白了. 首先,STC12C5A60S2内置有 ...

  2. 树莓派的PWM脉宽调制功能介绍

    近期想用树莓派控制航模的电调,于是研究了下PWM.貌似控制电调比較麻烦,由于电调须要发送几个特定的信号启动,然后才干进入控制模式.今天先弄明确PWM,慢慢折腾.以下的程序亲測可用,我用的树莓派mode ...

  3. 利用PWM脉宽调制实现呼吸灯

    1.设计目标 完成一个呼吸灯,从亮到灭的时间为2秒,从灭到亮的时间为2秒,以此不断往复. 2.设计步骤 2.1设计分析 利用PWM(脉冲宽度调制)实现led灯亮度的变化,只需要改变占空比就可以实现,具 ...

  4. PWM(脉宽调制)——LED特效呼吸灯设计

    简述PWM PWM--脉宽调制信号(Pulse Width Modulation),它利用微处理器的数字输出来实现,是对模拟电路控制的一种非常有效的技术,广泛应用于测量.通信.功率控制与变化等许多领域 ...

  5. Arduino周边模块:执行部件(舵机、直流电机、步进电机)

    Arduino周边模块:执行部件 Arduino周边模块:执行部件 嵌入式系统的构成 如今已经有各种各样的基于Arduino的嵌入式系统, 比如:智能小车.3D打印机.机器人,甚至还有基于Arduin ...

  6. Arduino连接L298n驱动板驱动小车的电机

    1.L298N介绍 先来讲讲电机驱动,驱动一般使用L298N,L298N 是一种双H桥电机驱动芯片,其中每个H桥可以提供2A的电流,功率部分的供电电压范围是2.5-48v,逻辑部分5v供电,接受5vT ...

  7. stm32学习笔记之GPIO功能框图分析

    GPIO 是通用输入输出端口的简称,简单来说就是STM32 可控制的引脚,STM32 芯片的GPIO 引脚与外部设备连接起来,从而实现与外部通讯.控制以及数据采集的功能.STM32 芯片的GPIO被分 ...

  8. STM32的I2C框图详解及通讯过程

    STM32 的I2C 特性及架构 如果我们直接控制STM32 的两个GPIO 引脚,分别用作SCL 及SDA,按照上述信号的时序要求,直接像控制LED 灯那样控制引脚的输出(若是接收数据时则读取SDA ...

  9. BeagleBone Black项目实训手册(大学霸内部资料)

    BeagleBone Black项目实训手册(大学霸内部资料) 介绍:本教程是<BeagleBone Black快速入门教程>的后续教程.本教程以项目操作为主,讲解LED项目.声音项目.传 ...

随机推荐

  1. php上传图片文件常用的几个方法

    1. 前台 <form class="add-form" method="post" action="/person/save" en ...

  2. Mac Pro 16G 安装MyEclipse提示虚拟内存(为0)不够

    百度一下很多人都说开多一点程序,让程序占满内存,使其虚拟内存使用就能通过这一步骤,但这里有个更好一点的方案 通过执行: memory_pressure -l critical 用系统内存压力测试进程占 ...

  3. Nginx与Apache的比较

    Nginx与Apache的比较 Nginx相对于Apache的优点 轻量级.同样起web服务,比apache占用更少的资源和内存 抗并发.nginx处理请求是异步非阻塞,而apache则是阻塞型.在高 ...

  4. ping命令执行过程详解

    [TOC] ping命令执行过程详解 机器A ping 机器B 同一网段 ping通知系统建立一个固定格式的ICMP请求数据包 ICMP协议打包这个数据包和机器B的IP地址转交给IP协议层(一组后台运 ...

  5. C的数值取反操作

    今儿在代码中发现一句"return x? ~0 : 0;"对~0这个取反操作相关的知识又还给老师了.一查,查到下面一道题,弄过来贴上. //-------------------- ...

  6. 如何用C#+WinRAR 实现压缩 分类:

    前提:必须安装 WinRAR 1. 工具类 using System; using System.Diagnostics; using System.IO; using Microsoft.Win32 ...

  7. MyBatis学习(二)

    mybatis开发dao的方法 作用范围 SqlSessionFactoryBuilder是以工具类方式来使用,需要创建sqlSessionFactory就new一个SqlSessionFactory ...

  8. Spring Security笔记:Hello World

    本文演示了Spring Security的最最基本用法,二个页面(或理解成二个url),一个需要登录认证后才能访问(比如:../admin/),一个可匿名访问(比如:../welcome) 注:以下内 ...

  9. POJ 3261 Milk Patterns 后缀数组求 一个串种 最长可重复子串重复至少k次

    Milk Patterns   Description Farmer John has noticed that the quality of milk given by his cows varie ...

  10. ASP.NET使用Memcached

    一.安装Memcached及Memcached配置和状态查询 要想使用Memcached做缓存首先需要安装Memcached服务,安装方法如下: memcached.exe下载 保存至相应路径 打开c ...