如何使用MAXQ微控制器上的定时器B生成PWM波形

描述

本应用笔记介绍如何设置和使用MAXQ®系列微控制器中的定时器B来生成所需的PWM波形。该操作将要求启用比较功能。该说明包括供参考的源代码。

介绍

MAXQ微控制器有三种类型的定时器:定时器0、定时器1和定时器2。定时器B是定时器1的增强版本,经过修改以支持不同的输入时钟预缩放和设置/复位/比较输出功能。本应用笔记详细介绍了如何设置和使用定时器B生成所需波形。包括源代码示例以供参考。

定时器B寄存器及其使用

MAXQ内核通过一组特殊功能寄存器(SFR)配置定时器B:

TBCN—定时器B控制寄存器

TBV — 定时器 B 值寄存器

TBR — 定时器 B 重新加载/捕获寄存器

待定—定时器B比较寄存器

定时器B控制寄存器:待定

定时器B控制寄存器为16位宽,读写不受限制。在所有形式的重置中,它被清除到 0000h。以下是寄存器位配置的简要说明。

位 0:CP/RLD 位用于设置定时器 B 的捕获或重新加载模式。当此位设置为 1 时,计时器 B 处于捕获模式。当此位清除为 0 时,计时器 B 处于重新加载模式。

位 1:ETB 位用于启用定时器 B 中断。将此位设置为 1 将启用来自计时器 B TFB 和 EXFB 标志的中断。

位 2:TRB 位用于启用定时器 B 操作。

位 3:EXENB 位用于启用负事务的 TBB 引脚上的捕获/重新加载功能。在启用输出比较功能的情况下,在自动重新加载模式 (CP/RLD = 0) 下工作时(此模式稍后会很重要),启用 TBB 输入功能 (EXENB = 1) 将允许比较输出负转换以设置 EXFB 标志。但是,由于外部负边缘检测,不会发生重新加载。

位 4:DCEN 位用于启用定时器 B 的倒计时选项。与TBB引脚配合使用,该位控制定时器B计数的方向。将此位设置为 1 会导致定时器 B 在引脚 TBB 为 1 时向上计数,如果引脚 TBB 为 0,则计数。当此位为 0 时,计时器 B 始终计数。启用定时器 B 的比较模式功能后,定时器 B 的上/下计数控制将根据比较模式设置在内部进行控制。在比较模式下,DCEN 位控制定时器是斜坡上升和复位 (DCEN = 0),还是上升和下降 (DCEN = 1)。

位5:TBOE位用于使能TBA引脚上的时钟输出功能。

位 6:EXFB 位用于标记 TBB 引脚上发生负事务的时间。如果 CP/RLD = 0、DCEN = 0 和 TBCS:TBCR = 00b,则每当计时器 B 溢出或下溢时,此位也会切换。

位 7:TFB 位用于在计时器 B 溢出或下溢时设置标志。

第 8-10 位:TBPS2:0用作应用于定时器B时钟的系统时钟输入的预分频器:

定时器 B 时钟 = 系统时钟/(2**(2*TBPS2:0))

TBPS2:0 = 11xb 的值是保留的。

位 11-12:如果 TBCS:TBCR<>00b,则 TBCS:TBCR 位用于在比较模式下配置计时器 B。这些比较模式位定义了几个条件:TBB引脚上是否使能PWM/比较模式输出功能;初始输出起始状态是什么;以及比较模式输出功能是否有效。

位 14-13:保留位

位 15:C/TB 位用于确定定时器 B 是用作定时器还是计数器。

定时器B值寄存器:TBV

定时器B值寄存器是一个16位寄存器,在所有形式的复位时被清除到0000h。此寄存器是不受限制的读/写,用于加载和读取 16 位定时器 B 值。

定时器B捕获/重新加载寄存器:TBR

定时器B捕获/重新加载寄存器是一个16位寄存器,在所有形式的复位时都清除到0000h。此寄存器是无限制的读/写,用于在定时器B配置为捕获模式时捕获TBV值。当定时器B配置为自动重装模式时,此寄存器也用作16位重装值。

定时器B比较寄存器:待定

定时器B比较寄存器是一个16位寄存器,在所有复位形式时都清除到0000h。此寄存器是不受限制的读/写,用于在定时器B在比较模式下运行时将TBC与TBV值进行比较。

定时器B的操作模式

定时器B可通过在定时器B控制寄存器中设置CP/RLD位配置为捕获或重新加载模式。TBCS:TBCR<>00b 的值会将定时器 B 设置为比较模式。没有必要同时配置定时器B捕获模式(CP/RLD=1)和PWM比较输出模式,但是,这不是预期的定时器B操作模式。定时器B也可以配置为比较模式,其中有三种不同的比较功能:复位,设置和切换。

以下部分回顾了在这些不同操作模式下配置计时器 B 的方法。

拍摄模式

定时器B控制寄存器的位0 CP/RLD确定定时器B是使用捕获模式还是重新加载模式。如果控制寄存器的位1 EXENB为3,则将此位设置为1会导致在TBB定时器引脚上检测到下降沿时发生定时器B捕获。将位 3 EXENB 设置为 0 会导致定时器 B 忽略 TBB 引脚上的所有外部事件。捕获的值将加载到重新加载寄存器 TBR 中。

重新加载模式

如果 EXENB 为 0,则清除 CP/RLD 位为 1 会导致在定时器 B 溢出或在 TBB 上检测到下降沿时发生自动重新加载。如果启用了比较功能,则可以通过更改重载(TBR)和比较(TBC)寄存器中的值来修改输出波形的频率和占空比。这样,MAXQ处理器就可以产生脉宽调制(PWM)波形。

比较模式

仅当比较模式位的值不同于 0 时,并且建议计时器 B 处于重新加载模式时,才会启用比较模式。PWM输出可以有选择地使能,起始极性可以反转,具体取决于这些位的值。频率和占空比的限制由选择作为源的时钟(即系统或备用时钟)的频率和所选的时钟除数决定。如上所述,有三种比较模式(SET、RESET和TOGGLE),具有TBB引脚的预定义初始状态。

当 CP/RLD = 0(重新加载模式)和 TBCS:TBCR 的值分别为 01 时,选择比较复位模式。在此模式下,TBB 将在 TBC 匹配时重置并设置为 0000h。根据TBR和TBC寄存器之间的相对值以及上/下计数,定时器将生成不同的PWM波形。如果计时器 B 未实现 TBC,则它只会设置为 0000h。在这种模式下,TBB引脚的初始值为低电平。

当 CP/RLD = 0(重载模式)和 TBCS:TBCR 的值分别为 10 时,选择比较 SET 模式。在此模式下,TBB 将设置在 TBC 匹配并设置为 TBR。根据TBR和TBC寄存器之间的相对值以及上/下计数,定时器将生成不同的PWM波形。如果计时器 B 未实现 TBC,则它只会在 TBR 上重置。在这种模式下,TBB引脚的初始值为高电平。

当 CP/RLD = 0(重新加载模式)和 TBCS:TBCR 的值分别为 11 时,选择比较切换模式。在此模式下,TBB 将打开 TBC 匹配(TBR 或 0000h 除外)。根据TBR和TBC寄存器之间的相对值以及上/下计数,定时器将生成不同的PWM波形。如果计时器 B 未实现 TBC,则它只会打开 TBR 匹配。在这种模式下,TBB引脚的初始值保持不变。

切换模式的初始状态取决于之前的 SET 或 RESET 模式。这意味着要建立特定的启动状态,TBCS:TBCR 位应在从比较禁用更改为比较切换模式时暂时配置为设置或重置。

如上所述,我们对这种用于在定时器B的TBB引脚上产生PWM的比较模式特别感兴趣。PWM波形在很大程度上取决于TBR和TBC之间的相对值(有或没有TBC寄存器)以及DCEN位的值(表1)。

比较模式下定时器B的PWM波形

不带待定寄存器的定时器 B

对于 SET 和 RESET 模式,TBC 比较匹配可能导致的引脚设置/复位永远不会发生。用户只能定义在启用定时器时生效的起始引脚状态。仍然会发生相应 RESET 和 SET 模式的引脚设置或清除操作。对于切换模式,TBR 将用于产生 50% 占空比 PWM。请参阅表 1 和图 1。

 

待定:TBCR 功能 初始状态(如果 TBR = 0)
00 无(比较禁用) 无变化
01(重置) 设定在 0000h
10 (套) 在TBR匹配时重置
11(切换) 打开 TBR 匹配 无变化

 

PWM

图1.

设置或清除TBB引脚,分别定时为TBR+1和TBR,用于复位和设置操作。

在周期 50*TBR + 2 处为切换模式生成 2% 占空比。

示例 1:自定时器开启后 1 秒后设置 TBB 引脚(使用 RESET 比较模式)。

定时器B的频率:根据12MHz系统时钟计算定时器B频率。

使用DCEN = 0的复位比较模式来设置TBB引脚。

使用以下公式计算TBR的值以延迟1秒:

示例代码:

 

   move   TB2CN,#000H      ; Reset Timer B 
   move   TB2CN,#0C00H     ; Timer B clock = system clock/256
                           ; and in compare RESET mode 
   move   TB2R, #46874     ; Set reload value of Timer 2 TBR = 46874            
   move	  TB2V, #0001H     ; Reset TBV=0x01 just to avoid set
                           ; operation on 0000h
   move   TB2CN.2,#1       ; Start Timer B to generate PWM
 

示例 2:生成一个 1MHz 波形,占空比为 50%,低电平(使用切换比较模式)。(请参阅图 2。

定时器B的频率:根据12MHz系统时钟计算定时器B频率。

使用DCEN = 0的切换比较模式来设置TBB引脚。

使用以下公式计算所需PWM频率为1MHz的TBR值:

示例代码:

 

   move   TB3CN,#000H      ; Reset Timer B              
   move   TB3CN,#0800H     ; Configure Timer B clock in RESET 
                           ; Compare mode to start LOW
   move   TB3CN,#1800H     ; Timer B clock = system clock
                           ; and in compare TOGGLE mode with DCEN =0 
   move   TB3R, #5         ; Set reload value of Timer 3 TB3R = 5            
   move	  TB3V, #000H      ; Reset TBV=0x00 
   move   TB3CN.2,#1       ; Start Timer B to generate PWM
 

 

PWM

图2.

设置或清除TBB引脚,定时分别为2 × TBR和TBR,用于复位和设置操作。

在周期 50 TBR ×为 TOGGLE 模式生成 4% 占空比。

示例3:在1μs延迟后复位TBB引脚(使用SET比较模式)。

定时器B的频率:根据12MHz系统时钟计算定时器B频率。

使用DCEN = 1的设置比较模式来设置TBB引脚。

使用以下公式计算TBR的值以延迟1μs:

示例代码:

 

   move   TB3CN,#000H      ; Reset Timer B 
   move   TB3CN,#1010H     ; Timer B clock = system clock
                           ; and in compare SET mode with DCEN = 1 
   move   TB3R, #12        ; Set reload value of Timer 3 TB3R = 12            
   move	  TB3V, #000H      ; Reset TBV = 0x00 
   move   TB3CN.2,#1       ; Start Timer B to generate PWM

 

示例 4:生成一个 1MHz 波形,占空比为 50%,高电平(使用切换比较模式)。

定时器B的频率:根据12MHz系统时钟计算定时器B频率。

使用DCEN = 1的切换比较模式来设置TBB引脚。

使用以下公式计算所需PWM频率为1Mhz的TBR值:

示例代码:

 

  move   TB2CN,#000H       ; Reset Timer B 
   move   TB2CN,#01000H     ; Configure Timer B clock in SET 
                            ; Compare mode to start HIGH
   move   TB2CN,#1810H      ; Timer B clock = system clock
                            ; and in compare TOGGLE mode with DCEN=1 
   move   TB2R, #3          ; Set reload value of Timer 2 TB2R = 3            
   move	  TB2V, #000H       ; Reset TBV = 0x00 
   move   TB2CN.2,#1        ; Start Timer B to generate PWM
 

 

带待定寄存器的定时器 B

当TBC寄存器在计数范围(TBC< TBR)内时,SET和RESET比较功能通过使用TBR重载值来改变频率,基本上提供了相同的功能。切换比较模式允许 50% 占空比 PWM 波形。当TBC寄存器超出范围(TBC> TBR)或在TBC = TBR和TBC = 0的特殊情况下,SET和RESET功能允许定时器清除或设置TBB引脚。请参阅表 2 和图 3。

 

待定:TBCR 功能 初始状态(如果 TBR = 0)
00 无(比较禁用) 无变化
01(重置) 在待定匹配时重置,设置为 0000h
10 (套) 在待定匹配时设置,在TBR匹配时重置
11(切换) 打开待定匹配(TBR 或 0 除外) 无变化

 

PWM

图3.

TBC > TBR:设置或清除相应复位和设置模式的 TBB 引脚。切换模式已禁用。

TBC = TBR 或 TBC = 0:请参阅注释1,2和3在下面的示例 8 之后。

TBR <待定:PWM 产生的占空比和周期如下所示:

设置模式 = (TBR - 待定)/(TBR + 1),周期为 TBR + 1

复位模式 = 待定/(TBR + 1),周期为 TBR + 1

切换模式 = 50%,周期为 2 × TBR + 2

示例 5:生成一个 32kHz 波形,占空比为 50%,从高电平开始(使用 SET 比较模式)。

定时器B的频率:这与12MHz系统时钟相同。

使用 DCEN = 0 的 SET 比较模式生成此波形。

使用以下公式计算所需PWM频率为32kHz的TBR和TBC值:

占空比 = (TBR - TBC)/(TBR + 1) = 50% => TBC = 186

示例代码:

 

 move   TB0CN,#1000H     ; Configure Timer B clock as same as
                          ; system clock and in compare SET mode
  move   TB0C, #00186     ; set compare value of Timer 0 TBC = 186 
  move   TB0R, #00372     ; Set reload value of Timer 0 TBR=372            
  move   TB0V, #0000H     ; Reset TBV=0x00
  move   TB0CN.2,#1       ; Start Timer B to generate PWM

示例 6:生成 512Hz 波形,占空比为 50%,起始为低电平(使用切换模式)。(请参阅图 4。

定时器B的频率:这与12MHz系统时钟相同。

使用DCEN = 0的切换比较模式生成此波形。

使用以下公式计算PWM频率为512Hz的TBR和TBC的值:

占空比 = 50%,不受待定 < 11717 的影响

示例代码:

 move   TB1CN,#0800H     ; Configure Timer B clock in RESET 
                          ; Compare mode to start LOW
  move   TB1CN,#1800H     ; Configure Timer B clock as same as
                          ; system clock and in compare TOGGLE mode
  move   TB1C, #005000    ; Set compare value of Timer 1 TBC = 5000 
  move   TB1R, #011717    ; Set reload value of Timer 1 TBR = 11717            
  move	 TB1V, #0000H     ; Reset TBV=0x00
  move   TB1CN.2,#1       ; Start Timer B to generate PWM
 

PWM

图4.

TBC > TBR:设置或清除相应复位和设置模式的 TBB 引脚。切换模式已禁用。

TBC = TBR 或 TBC = 0:请参阅注释1,2和3在实施例8之后。

TBC < TBR:PWM 的周期为 2 × TBR,占空比定义如下:

设置模式 = (TBR - 待定)/(2 × TBR)

复位模式 = 待定/(2 × TBR)

切换模式 = 待定/TBR(高启动)或(TBR - 待定)/TBR(低启动)4

示例7:生成一个32kHz波形,占空比为30%,从低电平开始(使用复位比较模式)。

定时器B的频率:3MHz或系统时钟/4。

使用DCEN = 1的RESET比较模式生成此波形。

使用以下公式计算PWM波形的频率:

占空比 = 待定/(2 × TBR) = 30% => 待定 = 29

示例代码:

  move   TB0CN,#0910H     ; Configure Timer B clock in system
                          ; clock/4, in compare RESET mode, and 
                          ; DCEN = 1
  move   TB0C, #00029     ; Set compare value of Timer 0 TBC = 29 
  move   TB0R, #00049     ; Set reload value of Timer 0 TBR = 49            
  move	 TB0V, #0000H     ; Reset TBV = 0x00
  move   TB0CN.2,#1       ; Start Timer B to generate PWM
 

示例 8:生成 512Hz 波形,占空比为 40%,从高电平开始(使用切换模式)。

定时器B的频率:这与12MHz系统时钟相同

使用DCEN = 1的切换比较模式生成此波形。

使用以下公式计算PWM频率为512Hz的TBR和TBC的值:

占空比 = 40% 或 TBC/TBR = 0.4 => TBC = 4687

示例代码:

 move   TB1CN,#01000H    ; Configure Timer B clock in SET 
                          ; compare mode to start HIGH
  move   TB1CN,#1810H     ; Configure Timer B clock as same as
                          ; system clock in compare TOGGLE mode
                          ; and DCEN = 1
  move   TB1C, #004687    ; Set compare value of Timer 1 TBC = 4687 
  move   TB1R, #011718    ; Set reload value of Timer 1 TBR=11718            
  move   TB1V, #0000H     ; Reset TBV = 0x00
  move   TB1CN.2,#1       ; Start Timer B to generate PWM
 

笔记:

1当输出比较功能配置为 SET 模式时,配置 TBC = TBR 将禁用 TBC 比较匹配操作。当TBC = TBR时,计时器不会设置。

2当输出比较功能配置为复位模式时,配置 TBC = 0 将禁用 TBC 比较复位操作。当 TBC = 0 时,计时器不会重置。

3当输出比较功能配置为切换模式时,配置 TBC = 0 或 TBC = TBR 将禁用切换功能。输出PWM将为低电平或高电平,具体取决于TBB引脚的初始启动状态。

4切换模式的初始状态取决于之前的 SET 或 RESET 模式。这意味着当从“比较禁用”更改为“比较切换模式”以建立特定的启动状态时,TBCS:TBCR 位应暂时配置为设置(启动高电平)或重置(启动低电平)。

例子

以上所有示例均在带有定时器B的MAXQ微控制器上执行。该器件有四个定时器 B,其中定时器 0 和 1 具有 TBC 寄存器,定时器 2 和 3 没有。时钟运行在大约12Mhz。

附加说明

当处于DCEN = 1的比较模式下时,无论TBB引脚的当前值如何,定时器始终计数。计时器之所以这样工作,是因为计数方向是在内部控制的。

正常的计数范围将在 0000h 到 TBR 之间进行计数,从 TBR 到 0000h 进行倒计时。注意:与其他计时器一样,此计数从TBR到0FFFFh和从0FFFFh到TBR不同。

三个源时钟预分频器位 (TBPS2:0) 将预标度值设置为 2**(N × 2),其中 N = 0、1、2、3、4 和 5,应用于定时器B 源时钟。

结论

MAXQ微控制器中的定时器B可以提供不同的PWM波形,这取决于TBC和TBR寄存器的相对值以及DCEN位的状态。定时器 B 将在有或没有比较寄存器待定的情况下工作。表1和表2分别总结了不带TBC比较寄存器和带TBC比较寄存器的定时器B输出功能。图1至图4显示了每种特定配置下定时器B引脚TBB上的典型PWM波形。对于所有情况,用户都可以使用定义的公式确定PWM周期和占空比。

审核编辑:郭婷


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分