Arduino PWM 深度解析:原理、频率选型与 analogWrite 实战
Arduino PWM 编程:原理、频率效应与核心函数实战
什么是 PWM?
PWM(脉宽调制)将直流电压转换为占空比可变的方波。一个周期 T 内,高电平持续时间 Ton 与 T 之比称为占空比。又称脉冲宽度调制技术(PDT)。现代功率开关(MOSFET、晶体管)驱动 PWM,高功率场合需精密驱动电路。
为什么用 PWM 控制功率?
电阻分压也能限功率,但效率极低、发热大,大功率下电阻成本甚至超 PWM 系统。PWM 通过调节占空比高效控制平均功率,损耗极小。另一用途是信息编码:占空比携带信息(如 25% 占空比触发特定动作),兼具功率控制与通信功能。
PWM 典型应用场景
- 舵机角度控制(占空比决定转角)
- RGB LED 混色(三基色占空比独立调节)
- DC-DC 变换器高效限流
- 电机调速
- 正弦波调制类应用中的电压电平控制
PWM 频率选型的机械时常约束
PWM 本质是变占空比方波。频率过低 → 脉冲间隔长 → 电机转速波动大、抖动、无法平滑运行。选型须考虑被控对象的机械时间常数:频率需远大于机械响应带宽,保证平滑。电机调速典型频率 1~20 kHz(超声频段,避免啸叫)。
Arduino PWM 硬件资源与核心函数
UNO 板载 6 个 PWM 引脚(D3,5,6,9,10,11),标记“~”。无需手写定时器代码,直接调用 analogWrite(pin, value),value 取 0~255 对应 0%~100% 占空比。
实战:LED 呼吸灯渐变
电路:PWM 引脚(如 D3)经 120 Ω 电阻接 LED 再接地。
int ledPin = 3;
int brightness = 0;
int fadeAmount = 5;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
analogWrite(ledPin, brightness);
brightness += fadeAmount;
if (brightness <= 0 || brightness >= 255) {
fadeAmount = -fadeAmount; // 反向
}
delay(30);
}
要点:必须用 PWM 引脚 + analogWrite();digitalWrite 仅能全亮/全灭。
延伸阅读
工业技术
- Arduino UNO 驱动 16x2 LCD 实现动画与小游戏
- Python 3 控制 Arduino UNO - 串口通信点亮内置 LED 入门教程
- 使用 Arduino Nano 和 RDA8057M 制作紧凑型 FM 收音机
- 手把手教你打造树莓派 3 + Arduino 笔记本电脑
- 高效 Arduino PWM 读取 & RC 接收机解码库:内置失控保护
- Arduino Uno 作 ISP 烧录 ATtiny85:低成本多点传感方案实战
- 制造日:演变、影响与行业展示
- EAM 与 CMMS:核心功能差异与选型决策指南
- 智能制造:定义、优势与实施路径
- 制造业物联网:核心概念、应用场景与实战案例
- Arduino传感器:类型、应用与实战项目
- C 语言用户自定义函数四大模式对比:参数与返回值的设计权衡