Ardunio_PWM 原理及实现

原创 2015年07月07日 23:30:23

PWM 就是pulse width Modulation的缩写,意思就是脉冲宽度调制。通过调整输出信号占空比达到改变输出平均电压的目的。

例如端口的电压有两个,0V和5V。 如果要获得3V的电压可以通过分压来实现,但是如果我想输出的电压在0V 3V 3.5V 5V 这四个数值之间来回变动的话,单纯的分压是不行的(因为不能一直不停的切换电阻)。这种情况下就该使用PWM了,对于Ardunio的数字端口而言,只有两个数值,0或者1. 表示低电平或者是高电平。 我们把0 代表0V,数字1 代表5V。如果我们让Ardunio在一秒钟内输出500个信号,如果这500个信号全是1111111.....  那就以为着电压是5V。 如果全部信号都为0  那就以为着电压是0V。  如果是是10101010....这样 1和0交替出现的话,各出现一半,那么输出的电压就是2.5V啦。 于此可知3.5V电压是如何输出的。

因为本文作者使用的是Ardunio uno, 所以只有 3, 5, 6, 9, 10, 11 插口支持PWM。 本文中是采用11号插口来实现的。

在Ardunio中实现PWM的方式有三种,第一种是通过analogWrite(pin, value) 函数来实现PWM。第二种是用户自己动手实现PWM的方式,第三种是使用PWM寄存器的方式。

下面是电路的实际图




附上使用ardunio analogWrite(pin,value)的代码, 这里需要提醒一点的是使用analogWrite(pin, value)时可以不用提前将 pin插口设置为output模式。pinMode(pin,input)(这点在Ardunio的官方文档中有说明)

 // the value about the brightness of the light
int brightness = 0;
 // the increment or the decrement of the brightness of the light
int fadeAmount = 5;
int led = 11;
void setup() {
  // put your setup code here, to run once:
}
void loop() {
  // put your main code here, to run repeatedly:
  analogWrite(led, brightness);
  delay(50);
  brightness += fadeAmount;
  if(brightness == 0 || brightness == 255){
    fadeAmount = - fadeAmount;  
  }
}

第二种方式是用户自己编写PWM的代码.

下面是用户自己写的PWM的代码,其含义是在一秒钟内产生了300个1信号,代表5V,还产生了700个0信号,代表0V,这样所产生的电压是0.3* 5 = 1.5V 因为还要考虑图中串联了一个电阻的情况。  这样讲就实现了电源电压的可控调节。


int pin = 8;
void setup() {
  // put your setup code here, to run once:
  pinMode(pin, OUTPUT);
}
void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(pin, HIGH);
  delayMicroseconds(300);
  digitalWrite(pin, LOW);
  delayMicroseconds(1000-300);
}

有关第三种方法PWM寄存器方式,希望读者baidu或者google来自己自行学习了解。




相关文章推荐

arduino之PWM的实现

实现PWM的方法有以下几种:

Ardunio mpu6050 dmp 数据通过串口实现与matlab(mac)实时绘图 学习过程 【2014-9-7】

DAY 1 前言 家里本身you'yi
  • LEVER17
  • LEVER17
  • 2014年09月07日 13:44
  • 2300

PWM (脉冲宽度调制)原理与实现

  • 2012年12月11日 09:23
  • 211KB
  • 下载

STC单片机PWM的实现方法与原理参考实例

/*============================================================== at12c2052所带的PWM功能演示,内部公用了一个定时器,当启动P...

利用pwm实现变频调速的相关原理

  • 2010年02月21日 23:47
  • 5.31MB
  • 下载

物联网智能硬件解析之万能空调遥控器实现 Ardunio_通过红外线发射灯遥控空调

这其实就是空调万能遥控器的原理。 用arduion遥控空调。 首先我做了一下以下几点 (1)首先有一个红外线接收管 IR receiver (2)红外线发射灯 (3)arduino uno的板子 ...

嵌入式Linux之我行——PWM在ARM Linux中的原理和蜂鸣器驱动实例开发

嵌入式Linux之我行——PWM在ARM Linux中的原理和蜂鸣器驱动实例开发  嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式...

STM32F4——定时器原理及应用(中断、输入捕获、PWM输出)

一、简介:     不同的STM32系列有不同数量的定时器,针对现在学习的STM32F40x系列总共有14个定时器,针对这14个定时器可以将其分为3类,高级定时器、通用定时器和基本定时器,三种定时器大...

第十天: 定时器、看门狗、PWM、蜂鸣器、RTC原理及代码实战

什么是定时器 定时器是SoC中常见外设 定时器与计数器。计数器是用来计数的(每隔一个固定时间会计一个数);因为计数器的计数时间周期是固定的,因此到了一定时间只要用计数值 x 计数时间周期...
  • Karven_
  • Karven_
  • 2016年08月13日 22:28
  • 1233

pwm的工作原理

s3c2440芯片中一共有5个16位的定时器,其中有4个定时器(定时器0~定时器3)具有脉宽调制功能,即他们都有个输出引脚,可以通过定时器来控制引脚周期性的高低电平变化,定时器4没有输出引脚。上次脱机...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ardunio_PWM 原理及实现
举报原因:
原因补充:

(最多只允许输入30个字)