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

Arduino Mega Timer2相位频率修正PWM模式寄存器命名报错求助

问题

使用Arduino Mega 2560,想要生成可同时调整PWM频率和占空比的信号,选择Timer2的OC2A输出引脚(引脚10),编写代码如下:

void setup()
{
  // ======================================================
  //    Timer 2 example: Phase and Frequency correct PWM
  // ======================================================
  pinMode(10, OUTPUT);
  TCCR2A = 0;//reset the register
  TCNT2  = 0;

  TCCR2A = 0b10000001;  // COM2A1 COM2A0 COM2B1 COM2B0    -      -    WGM21  WGM20
                        //    1      0      0      0      0      0      0      1
                        // Behavior: PWM on OC2A (Arduino pin 10) ; Waveform generation mode 5 (Phase and Frequency Correct)
                        
  TCCR2B = 0b00001001;  //  FOC2A  FOC2B    -      -    WGM22   CS22   CS21   CS20
                        //    0      0      0      0      1      0      0      1
                        // Behavior: Waveform generation mode 5 (Phase and Frequency Correct) ; Prescaler -> clk/1
                        
  OCRA   = 319;         // TOP value -> defines de PWM frequency (25 kHz)
  OCR2A  = 159;         // duty cycle value (80% of ICR1)
} 

void loop() 
{

}

编译时出现错误:

PWM_Mega.ino:43:3: note: suggested alternative: 'OCR2A'
   OCRA   = 319;         // TOP value -> defines de PWM frequency (25 kHz)
   ^~~~
   OCR2A
exit status 1
'OCRA' was not declared in this scope

已知错误原因是OCRA未定义,MCU数据手册显示模式5的TOP值由OCRA寄存器定义,但代码中该名称不被识别,请问该寄存器在代码中的正确名称是什么?

解决方案
  1. 寄存器名称修正:Arduino环境中,ATmega2560的Timer2相关寄存器都带有数字后缀,不存在OCRA这个通用名称,对应Timer2的输出比较A寄存器是OCR2A。但你这里的核心问题是混淆了模式对应的TOP寄存器:

  2. 模式5的TOP寄存器是ICR2:你设置的是Timer2的模式5(相位与频率修正PWM,WGM22=1、WGM21=0、WGM20=1),该模式下的TOP值由ICR2寄存器定义,而非OCR2A。只有模式6、7的TOP值才由OCR2A定义。

  3. 修正后的代码片段:
    将错误的OCRA = 319;替换为ICR2 = 319;,同时修正注释中的错误:

ICR2   = 319;         // TOP value -> defines the PWM frequency (25 kHz)
OCR2A  = 159;         // duty cycle value (~50% of ICR2)

另外注意,你原代码中注释的“80% of ICR1”是错误的,ICR1属于Timer1,这里应该是ICR2,且159约为319的50%,可根据需求调整OCR2A的数值来改变占空比。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:15:35