Arduino进阶02.Arduino 脉冲宽度调制

无法量产的亮银版,价格据说10万元都搞不定。

脉冲宽度调制或PWM是用于改变脉冲串中的脉冲宽度的常用技术。PWM有许多应用,如控制伺服和速度控制器,限制电机和LED的有效功率。

PWM的基本原理

脉冲宽度调制基本上是一个随时间变化而变化的方波。基本的PWM信号如下图所示。

基本PWM信号

有很多术语与PWM相关:

  • On-Time(导通时间) – 时间信号的持续时间较长。
  • Off-Time(关断时间) – 时间信号的持续时间较短。
  • Period(周期) – 表示为PWM信号的导通时间和关断时间的总和。
  • Duty Cycle(占空比) – 它表示为在PWM信号周期内保持导通的时间信号的百分比。

周期

如图所示,Ton表示导通时间,Toff表示信号的关断时间。周期是导通和关断时间的总和,并按照以下公式计算:

周期

占空比

占空比用于计算为一段时间的导通时间。使用上面计算的周期,占空比计算为:

占空比

analogWrite()函数

analogWrite()函数将模拟值(PWM波)写入引脚。它可用于以不同的亮度点亮LED或以各种速度驱动电机。在调用analogWrite()函数之后,引脚将产生指定占空比的稳定方波,直到下一次调用analogWrite()或在相同引脚上调用digitalRead()或digitalWrite()。大多数引脚上的PWM信号频率约为490 Hz。在Uno和类似的板上,引脚5和6的频率约为980Hz。Leonardo上的引脚3和11也以980Hz运行。

在大多数Arduino板上(ATmega168或ATmega328),此功能在引脚3,5,6,9,10和11上工作。在Arduino Mega上,它在引脚2-13和44-46上工作。旧的Arduino ATmega8板仅支持引脚9,10和11上的 analogWrite()

analogWrite()函数

Arduino Due支持引脚2至13以及引脚DAC0和DAC1上的 analogWrite()。与PWM引脚不同,DAC0和DAC1是数模转换器,用作真正的模拟输出。

在调用analogWrite()之前,不需要调用pinMode()将引脚设置为输出。

analogWrite()函数语法

analogWrite ( pin , value ) ;
value − the duty cycle: between 0 (always off) and 255 (always on).

value – 占空比:0(始终导通)到255(始终关断)之间。

示例

int ledPin = 9; // LED connected to digital pin 9
int analogPin = 3; // potentiometer connected to analog pin 3
int val = 0; // variable to store the read value

void setup() {
   pinMode(ledPin, OUTPUT); // sets the pin as output
}

void loop() {
   val = analogRead(analogPin); // read the input pin
   analogWrite(ledPin, (val / 4)); // analogRead values go from 0 to 1023, 
      // analogWrite values from 0 to 255
}

发布者:suiyublg,转转请注明出处:https://huibian.net/1302-2/

(41)
suiyublg的头像suiyublg
上一篇 2017年4月5日 14:54
下一篇 2017年4月7日 22:51

相关推荐

  • Arduino教程26.Arduino do … while循环

    do … while 循环类似于while循环。在while循环中,循环连续条件在循环开始时测试,然后再执行循环体。do … while语句在执行循环体之后测试循环连续条件。因此,循环体将被执行至少一次。 当 do … while 终止时,将使用while子句后的语句继续执…

    2017年3月25日
    28300
  • Arduino传感器02.Arduino 温度传感器

    温度传感器LM35系列是精密集成电路温度器件,输出电压与摄氏温度成线性比例。 LM35器件优于以开尔文校准的线性温度传感器,因为用户不需要从输出中减去大的恒定电压以获得便利的摄氏缩放。LM35器件不需要任何外部校准或调整,即可在室温下提供±1/4°C的典型精度,在-55°C至150°C的温度范围内提供±3°C的典型精度。 技术规格 必需的组件 你将需要以下组…

    2017年4月21日
    43500
  • Arduino教程18.Arduino 按位运算符

    假设变量A为60,变量B保持13,则: 运算符名称 运算符简写 描述 例子 and(与) & 如果同时存在于两个操作数中,二进制AND运算符复制一位到结果中。 (A & B) 将得出12,即0000 1100 or(或) | 如果存在于任一操作数中,二进制OR运算符复制一位到结果中。 (A | B)将得出61,即0011 1101 …

    2017年3月23日
    35900
  • Arduino进阶04.Arduino 中断

    中断(interrupt)停止Arduino的当前工作,以便可以完成一些其他工作。 假设你坐在家里和别人聊天。突然电话响了。你停止聊天,拿起电话与来电者通话。当你完成电话交谈后,你回去和电话响之前的那个人聊天。 同样,你可以把主程序想象成是与某人聊天,电话铃声使你停止聊天。中断服务程序是在电话上通话的过程。当通话结束后,你回到你聊天的主程序。这个例子准确地解…

    2017年4月8日
    46301
  • Arduino教程21.Arduino If … else语句

    一个 if 语句后面可以跟随一个可选的else语句,当表达式为false时执行。 if … else语句语法 if (expression) { Block of statements; } else { Block of statements; } if … else语句 – 执行顺序 例子 /* G…

    2017年3月24日
    32100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
欢迎大家来到大雄学编程!