- Arduino 教程
- Arduino - 首页
- Arduino - 概述
- Arduino - 开发板描述
- Arduino - 安装
- Arduino - 程序结构
- Arduino - 数据类型
- Arduino - 变量与常量
- Arduino - 运算符
- Arduino - 控制语句
- Arduino - 循环
- Arduino - 函数
- Arduino - 字符串
- Arduino - 字符串对象
- Arduino - 时间
- Arduino - 数组
- Arduino 函数库
- Arduino - I/O 函数
- Arduino - 高级 I/O 函数
- Arduino - 字符函数
- Arduino - 数学库
- Arduino - 三角函数
- Arduino 高级
- Arduino - Due 和 Zero
- Arduino - 脉冲宽度调制
- Arduino - 随机数
- Arduino - 中断
- Arduino - 通信
- Arduino - 互联集成电路
- Arduino - 串行外设接口
- Arduino 项目
- Arduino - 闪烁 LED
- Arduino - 渐变 LED
- Arduino - 读取模拟电压
- Arduino - LED 条形图
- Arduino - 键盘注销
- Arduino - 键盘消息
- Arduino - 鼠标按钮控制
- Arduino - 键盘串口
- Arduino 传感器
- Arduino - 湿度传感器
- Arduino - 温度传感器
- Arduino - 水位探测器/传感器
- Arduino - PIR 传感器
- Arduino - 超声波传感器
- Arduino - 连接开关
- 电机控制
- Arduino - 直流电机
- Arduino - 伺服电机
- Arduino - 步进电机
- Arduino 和声音
- Arduino - 音调库
- Arduino - 无线通信
- Arduino - 网络通信
- Arduino 有用资源
- Arduino - 快速指南
- Arduino - 有用资源
- Arduino - 讨论
Arduino - 脉冲宽度调制
脉冲宽度调制或 PWM 是一种常用的技术,用于改变脉冲序列中脉冲的宽度。PWM 有许多应用,例如控制伺服电机和速度控制器、限制电机和 LED 的有效功率。
PWM 的基本原理
脉冲宽度调制基本上是一种具有变化的高低时间的方波。下图显示了一个基本的 PWM 信号。
与 PWM 相关的各种术语 -
导通时间 - 信号为高电平的持续时间。
关断时间 - 信号为低电平的持续时间。
周期 - 它表示 PWM 信号的导通时间和关断时间的总和。
占空比 - 它表示 PWM 信号周期内信号保持导通的时间百分比。
周期
如图所示,Ton 表示信号的导通时间,Toff 表示信号的关断时间。周期是导通时间和关断时间的总和,计算方法如下 -
$$T_{total} = T_{on}+T_{off}$$占空比
占空比计算为周期时间的导通时间。使用上面计算出的周期,占空比计算如下 -
$$D = \frac{T_{on}}{T_{on}+T_{off}} = \frac{T_{on}}{T_{total}}$$analogWrite() 函数
analogWrite() 函数将模拟值(PWM 波形)写入引脚。它可以用于以不同的亮度点亮 LED 或以不同的速度驱动电机。在调用 analogWrite() 函数后,引脚将生成指定占空比的稳定方波,直到下次调用 analogWrite() 或在同一引脚上调用 digitalRead() 或 digitalWrite()。大多数引脚上的 PWM 信号频率约为 490 Hz。在 Uno 和类似的板上,引脚 5 和 6 的频率约为 980 Hz。Leonardo 上的引脚 3 和 11 也以 980 Hz 运行。
在大多数 Arduino 板(带有 ATmega168 或 ATmega328 的板)上,此函数适用于引脚 3、5、6、9、10 和 11。在 Arduino Mega 上,它适用于引脚 2-13 和 44-46。带有 ATmega8 的旧版 Arduino 板仅支持引脚 9、10 和 11 上的 analogWrite()。
Arduino Due 支持引脚 2 到 13 以及引脚 DAC0 和 DAC1 上的 analogWrite()。与 PWM 引脚不同,DAC0 和 DAC1 是数模转换器,充当真正的模拟输出。
在调用 analogWrite() 之前,不需要调用 pinMode() 将引脚设置为输出。
analogWrite() 函数语法
analogWrite ( pin , value ) ;
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 }