AVR 微控制器中的脉冲宽度调制

2024 年 9 月 27 日 | 3 分钟阅读

脉冲宽度调制 (PWM) 是一种具有不同低振幅和高振幅信号的方波。下面给出一个通用的 PWM 信号图

Pulse Width Modulation in AVR1

与脉冲宽度调制 (PWM) 相关的各种术语

  • 关断时间:信号为低电平的时间段。
  • 导通时间:信号为高电平的时间段。
  • 占空比:信号在脉冲宽度调制信号周期内保持导通状态的时间百分比。
  • 周期:脉冲宽度调制信号的关断时间和导通时间之和。

占空比

占空比的计算是通过计算总时间段内的导通时间来完成的。它是导通时间和信号总时间段之间的比率,使用周期计算,占空比计算如下面的等式所示

Pulse Width Modulation in AVR2

Period (句点)

如上图所示,Toff 表示信号的关断时间,Ton 表示信号的导通时间。周期是导通时间和关断时间的总和,周期计算如下面的等式所示

Pulse Width Modulation in AVR3

PWM:电压调节

当 PWM 信号以不同的占空比运行时,它会在输出端产生变化的电压。电压调节方法用于各种应用领域,如

  • Audio(音频)
  • LED 调光器
  • 模拟信号生成
  • 开关稳压器
  • 等等..

电压调节操作是通过对 PWM 信号进行平均来执行的。输出电压计算如下面的等式所示

Pulse Width Modulation in AVR4

通过改变脉冲宽度调制信号的导通时间,可以直接改变输出电压。


AVR 计时器作为 PWM

大多数情况下,在 AVR 微控制器中,芯片上的 PWM 通道是可用的,这使得 PWM 的使用更加简单和高度精确。AVR 计时器和计数器可以在 PWM 模式下运行,而不会干扰基本的计时器功能。

对于微控制器 (AT90S8515),可以通过在 TCCR1A 寄存器中设置 PWM10 和 PWM11 位,将 Timer1 用于 PWM 模式。

AVR 微控制器的 PWM 中提供了以下模式

PWM10PWM11描述
00Timer/Counter1 的 PWM 操作已禁用
10Timer/Counter1 在 8 位 PWM 模式下
01Timer/Counter1 在 9 位 PWM 模式下
11Timer/Counter1 在 10 位 PWM 模式下

可以通过使用 TCCR1B 寄存器中的时钟选择位来选择 Counter1/Timer 的预标量模式。

脉冲的宽度被加载到计时器输出比较寄存器 OCR1A (OCR1AL & OCR1AH) 和 OCR1B (OCR1BL & OCR1BH) 中。计数器 1/Timer 充当一个升/降计数器,从 $0000 计数到 TOP,如下表所示

PWM 分辨率计时器顶部值频率
10 位 PWM$03FF (1023)Ftck1/2046
9 位 PWM$01FF (511)Ftck1/1022
8 位 PWM$00FF (255)Ftck1/510

在这里,它进行计数,并在循环重复之前再次降至零。当计数器值与 OCR1B 或 OCR1A 的 10 个最低有效位的 content 匹配时,OC1B/PD5 (OC1A) 引脚会根据 Timer/Counter1 控制寄存器 (TCCR1A) 中的 COM1A0/COM1A1 或 COM1B1/COM1B0 位的设置被清除或设置,如下表所示

COM1X0COM1X1对 OCX1 的影响
00未连接
10未连接
01比较匹配时清除,向上计数。比较匹配时设置,向下计数(非反相 PWM)
11比较匹配时清除,向下计数。比较匹配时设置,向上计数(反相 PWM)

注意: X 可以是 A 或 B 寄存器。


AVR:运行 PWM 的汇编代码


AVR:C 语言中的 PWM 设置