文章目录
- 一、PWM简介
- 二、GPT简介
- 三、GPT的框图分析
- 1. 计数器
- 2. 周期设置和周期设置缓冲寄存器
- 3. 时钟输入
- 4. 控制寄存器
- 5. 比较器和比较/输入捕获寄存器
- 6. 中断请求信号
- 7. IO输入输出引脚
- 8. ELC事件输入
- 9. 输出相位切换
一、PWM简介
PWM 的全称是脉冲宽度调制(Pulse Width Modulation),简称脉宽调制,通俗的讲就是调节脉冲的宽度。 其原理是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率, 根据面积等效法则,可以通过对改变脉冲的时间宽度,来等效地获得所需要合成的相应幅值和频率的波形。 PWM 有着非常广泛的应用,比如直流电机控制、开关电源、逆变器等等。
PWM 波形的基本信息如下图所示。
-
脉冲周期(T):单位是时间,如纳秒(ns)、微秒(us)、毫秒(ms)等。
-
脉冲频率(f):单位是赫兹(Hz)、千赫兹(KHz)等。频率与脉冲周期成倒数关系,f=1/T。
-
脉冲宽度(W):简称“脉宽”,一般指脉冲中高电平持续的时间。单位是时间。
-
占空比(D):脉宽除以脉冲周期的值。
以上各信息之间的关系满足下列公式:
二、GPT简介
通用 PWM 定时器(GPT,General PWM Timer)是 RA MCU 的其中一种 32/16 位的定时器外设。 在 GPT 当中,可分为 GPT32 和 GPT16,它们最主要的区别是计数器的不同。 GPT32 是 32 位的定时器,包含的计数器是 32 位的,所能计数的范围为:0 ~ 0xFFFF_FFFF; 而 GPT16 是 16 位的定时器,包含的计数器是 16 位的,所能计数的范围为:0 ~ 0xFFFF。
定时器(Timer)最基本的功能就是定时,比如定时发送串口数据、定时采集AD数据、定时触发中断处理其它事务等等。 如果把定时器与 GPIO 引脚结合起来使用的话可以实现更加丰富的功能, 可以对输入信号进行计数,可以测量输入信号的脉冲宽度,可以输出单个脉冲、PWM 等波形,等等。 通过定时器生成 PWM 波形信号来控制电机状态是工业控制的普遍方法,这方面知识非常值得深入了解。
GPT 模块可用于计数事件、测量外部输入信号、作为通用计时器并产生周期性中断、以及输出周期性或 PWM 信号到 GTIOC 引脚。 GPT 也可用于输出单个脉冲,但是注意这是通过软件来实现的,GPT 硬件本身不支持输出单个脉冲(One-Shot)功能。 当使用单个脉冲(One-Shot)模式时,必须要开启中断,计时器需要在脉冲周期结束后在 ISR 中断服务函数中被停止。
RA MCU 的不同型号之间可能拥有不同数量的 GPT 定时器, 而野火启明6M5开发板板载的 RA6M5 芯片拥有共 10 个GPT定时器(即10个通道), 其中包括 4 个32位GPT定时器(GPT32n (n=0~3))和 6 个16位GPT定时器(GPT16m (m=4~9))。
GPT 定时器的详细功能参数如下表所示:
GPT 的 I/O 引脚及其功能用途如下表所示:
三、GPT的框图分析
如下图所示,为 RA6M5 芯片 GPT 外设模块的结构框图:
1. 计数器
见图中标注 ① 处。
GTCNT 是 GPT 定时器模块内部的计数器,实际上,计数器是实现定时器外设的各种功能的基础。 因此,了解计数器的规格和功能非常重要。
对于 RA6M5,共有 10 个 GPT 定时器(GPT0~9),而 GPT 又分为 GPT32 和 GPT16。 GPT32 有4个(GPT0~3),计数器为 32bit,在上图中用 GPT320~GPT323 来表示; 而 GPT16 有6个(GPT4~9),计数器为 16bit,在上图中用 GPT164~GPT169 来表示。
GPT 的计数器支持递增计数,递减计数和递增/递减计数(即递增与递减计数轮流进行)。
2. 周期设置和周期设置缓冲寄存器
见图中标注 ② 处。
GTPR 周期设置寄存器是一个可读写的寄存器,用户可通过该寄存器设置计数器 GTCNT 的最大计数值,计数超过该值就会溢出,因此该值决定了计数器的计数周期。 GTPR 的有效大小与 GTCNT(16位或32位)相同。如果 GTPR 的有效大小为16位,则用户读取其高16位始终为0,并且其高16位的写入作会被忽略。
GTPBR 周期设置缓冲寄存器同样也是一个可读写的寄存器,用作 GTPR 的缓冲寄存器,GPT 计数器每计数溢出一次,就会将 GTPBR 的值写入 GTPR。 GTPBR 的有效大小也与 GTCNT(16位或32位)相同。如果 GTPBR 的有效大小为16位,则用户读取其高16位始终为0,并且其高16位的写入作会被忽略。
3. 时钟输入
见图中标注 ③ 处。
GPT 定时器的时钟输入可以选择内部的 PCLKD 分频后输入或者选择通过 GTETRGn 引脚输入外部时钟。 这两类中只能选择一个,若选择外部时钟输入则定时器不能对内部时钟输入进行计数。
PCLKD / n(n = 1/2/4/8/16/32/64/256/1024)
GTETRGA, GTETRGB, GTETRGC, GTETRGD(通过 POEG)
Tips: PCLKD / 1 表示的是不分频。
4. 控制寄存器
见图中标注 ④ 处。
这部分的寄存器较多、也较复杂,它们都属于用于控制定时器功能的寄存器。 而这里主要关注的是定时器的实际功能,对其过于深入的实现细节不做过多研究,因此这里不对这些寄存器进行详细讲解。
5. 比较器和比较/输入捕获寄存器
见图中标注 ⑤ 处。
这部分包含一个比较器和6个 GTCCRx 寄存器(x = A,B,C,D,E,F)。 这6个 GTCCRx 寄存器的功能并不完全相同:
GTCCRA 和 GTCCRB 是用于输出比较和输入捕捉的寄存器。
GTCCRC 和 GTCCRE 可用作比较匹配寄存器,也可以分别作为 GTCCRA 和 GTCCRB 的缓冲寄存器 (构成 GTCCRA 和 GTCCRB 的单缓冲寄存器)。
GTCCRD 和 GTCCRF 可用作比较匹配寄存器,也可以分别作为 GTCCRC 和 GTCCRE 的缓冲寄存器 (构成 GTCCRA 和 GTCCRB 的双缓冲寄存器:即 GTCCRC 和 GTCCRD 作为 GTCCRA 的双缓冲,GTCCRE 和 GTCCRF 作为 GTCCRB 的双缓冲)。
比如,在普通的 PWM 输出模式下,比较器将计数器 GTCNT 与 GTCCRA 和 GTCCRB 进行比较,若匹配(比较结果相等), 则根据 GTIOR(General PWM Timer I/O Control Register)寄存器的 GTIOA[4:0] 和 GTIOB[4:0] 的配置来切换 GTIOCA 和 GTIOCB 的输出电平。 可以将 GTIOCA 和 GTIOCB 切换为低电平、高电平、或者反转电平。
6. 中断请求信号
见图中标注 ⑥ 处。
图中显示的是 GPT0 的中断请求信号,中断请求信号用于产生中断、或者通过 ELC 链接到其他模块。
GPT 提供以下中断源:
-
GTCCR 输入捕捉/比较匹配
-
GTCNT 计数器上溢(超出 GTPR 设置的值)/下溢
-
周期计数功能完成
每个中断源都有自己的状态标志。 当一个中断源信号产生时,相关的状态标志会被硬件自动设置为 1。 状态标志可以通过写入 0 来清除。需要注意的是,如果标志设置和标志清除同时发生,标志清除优先于标志设置。
7. IO输入输出引脚
见图中标注 ⑦ 处。
GTIOCnA 和 GTIOCnB 是 GPT 的 IO 输入输出引脚,用于信号输出和输入捕获。 它们还配备了噪声滤波器(Noise Filter),噪声滤波器以采样时钟对输入信号进行采样,并去除长度小于3个采样周期的脉冲。 用户可设置是否启用噪声滤波器。
噪声滤波器功能的时序图如下所示:
8. ELC事件输入
见图中标注 ⑧ 处。
GPT 可以执行以下操作以响应最多 8 个来自 ELC 的事件信号输入:
-
开始计数,停止计数,清除计数
-
递增计数,递减计数
-
进行一次输入捕获
9. 输出相位切换
见图中标注 ⑨ 处。
输出相位切换(GPT_OPS)功能通过输出相位切换控制寄存器(OPSCR)进行控制,用于实现轻松控制无刷直流电机运行的功能。 图中的三相 PWM 波形生成器接收来自比较器的 GPT320.GTIOC0A 的 PWM 信号输入后,输出三相 PWM 用于驱动直流无刷电机。
需要注意的是:GPT_OPS 功能在 RA6M5 中只有一个,并不是每个 GPT 定时器都对应有一个,也就是说通过该功能只能轻松控制一个直流无刷电机。