arduino之PWM的实现
首先我们要知道什么是PWM,PWM就是在输出直流电的时候有时候也会输出低电平。一会高一会低,这样就有规律了。这样做的方法就是为了让输出的不同的有效电压值!
在arduino有一个Stepper库就是专门为步进电机的,可以看看!
实现PWM的方法有以下几种:
1、用analogWrite(pin, val)命令
其中pin是腿的编号,传说中只能用3,5,6,9,10,11这几条;val是0~255的整数值,对应电压从0到+5V。注意,那几个脚的编号,指的是ATmega168的pin编号,Arduino的板子会用这几个管脚支持更多路的PWM输出。
Arduino Nano 的analogWrite的频率是490Hz,电压是5V
Arduino Due 的analogWrite 的频率是1KHz,电压是3.3V
Teensy 4.1 analogWrite的频率是4.82KHz,电压是3.3V
具体的使用可以看下面的示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 | int pwm = 5; //0~13 void setup() { pinMode(pwm, OUTPUT); } void loop() { analogWrite(pwm, 250); delay(200); } |
2、 使用digitalWrite来实现pwm。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | int pin = 4; void setup() { pinMode(pin, OUTPUT); } void loop() { digitalWrite(pin, HIGH); delayMicroseconds(500); digitalWrite(pin, LOW); delayMicroseconds(1000 - 500); } |
3、使用寄存器:
里面有两个timer。
pinMode(3, OUTPUT);
pinMode(11, OUTPUT);
TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(CS22);
OCR2A = 180;
OCR2B = 50;
输出口3的频率: 16 MHz / 64 / 256 = 976.5625Hz
输出口3的占空比: (180+1) / 256 = 70.7%
输出口11的频率: 16 MHz / 64 / 256 = 976.5625Hz
输出口11的占空比: (50+1) / 256 = 19.9%
参考:
http://www.geek-workshop.com/thread-119-1-1.html
http://arduino.cc/en/Tutorial/SecretsOfArduinoPWM
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App