You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Arduino Mega引脚2和3的PWM频率修改至10kHz及以上?

Arduino Mega 引脚2/3 PWM频率改10kHz教程

首先明确:Arduino Mega的引脚2和3由Timer3控制,默认PWM频率约490Hz,远低于你需要的10kHz。下面用最简单的方式讲清楚怎么改,附完整示例代码。

核心原理(大白话版)

PWM本质是定时器反复计数,到设定值就翻转引脚电平。要改频率,只需要两个关键操作:

  • 给定时器选个合适的"减速档"(预分频器),把16MHz的系统时钟放慢
  • 设定一个"触发值"(比较匹配寄存器),计数到这个值就翻转电平

按10kHz计算:16MHz ÷ (8 × (199 + 1)) = 10kHz,所以预分频器选8,触发值设为199刚好达标。

示例代码

void setup() {
  // 先把引脚2、3设为输出
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  
  // 重置Timer3的所有寄存器,避免默认配置干扰
  TCCR3A = 0;
  TCCR3B = 0;
  TCNT3  = 0;
  
  // 设置触发值,对应10kHz频率
  OCR3A = 199; // 对应引脚3
  OCR3B = 199; // 对应引脚2
  
  // 配置Fast PWM模式,让PWM输出更稳定
  TCCR3A |= (1 << WGM31) | (1 << WGM30);
  TCCR3B |= (1 << WGM32);
  
  // 开启非反相PWM:计数到触发值时引脚电平清零,溢出时置位
  TCCR3A |= (1 << COM3A1);
  TCCR3A |= (1 << COM3B1);
  
  // 选预分频器为8,启动定时器
  TCCR3B |= (1 << CS31);
}

void loop() {
  // 测试用:循环切换不同占空比
  analogWrite(2, 127); // 50%占空比
  analogWrite(3, 63);  // 25%占空比
  delay(1000);
  
  analogWrite(2, 255); // 100%占空比(一直高电平)
  analogWrite(3, 0);   // 0%占空比(一直低电平)
  delay(1000);
}

必看注意事项

  • Timer3还控制引脚5(OC3C),修改后引脚5的PWM频率也会变成10kHz,如果你的项目用到引脚5,要提前考虑。
  • 不用改analogWrite的用法,0-255的取值依然对应0%-100%的占空比,Arduino会自动把这个范围映射到我们设置的触发值199上。
  • 如果需要更高频率(比如20kHz),可以把预分频器改成4(TCCR3B |= (1 << CS30)),触发值保持199,计算下来刚好是20kHz。

内容的提问来源于stack exchange,提问作者user42423

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 18:05:12