【瑞萨RA_FSP】GPT—— PWM功能详解

这篇具有很好参考价值的文章主要介绍了【瑞萨RA_FSP】GPT—— PWM功能详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、GPT比较匹配功能详解

比较匹配主要是用来实现输出 PWM 波形功能的一种机制。 其原理简单来讲就是通过比较 GTCNT 计数器的值与 GTCCRA 或 GTCCRB 的值,当比较匹配发生时,会生成相应的比较匹配事件信号, 同时,GPT 可以切换 GTIOCnA 或 GTIOCnB 输出引脚的输出信号,可以选择输出低电平、高电平或翻转输出。 在 GTCNT 完成一个周期的计数时,也可以切换 GTIOCnA 或 GTIOCnB 输出引脚的输出信号。

PWM 输出就是对外输出脉宽(即占空比)可调的方波信号, 信号频率由周期设定寄存器 GTPR 的值决定,占空比由比较寄存器 GTCCR 的值决定。

GPT 的输出模式有:

  • 锯齿波 PWM 模式(Saw-wave PWM mode)(该模式下单缓冲或双缓冲都可使用)

  • 锯齿波单脉冲模式(Saw-wave one-shot pulse mode)(该模式下使用固定的缓冲操作)

  • 三角波 PWM 模式1(Triangle-wave PWM mode 1)(波谷32位传输)(该模式下单缓冲或双缓冲都可使用)

  • 三角波 PWM 模式2(Triangle-wave PWM mode 2)(波峰和波谷32位传输)(该模式下单缓冲或双缓冲都可使用)

  • 三角波 PWM 模式3(Triangle-wave PWM mode 3)(波谷64位传输)(该模式下使用固定的缓冲操作)

我们在前面有提到过每个GPT定时器模块内部都有 6个 GTCCRx 寄存器(x = A,B,C,D,E,F), 下面就先来了解一下有关 GTCCRx 的缓冲操作。

单缓冲操作:

以 GTIOCA 输出为例,若需要修改占空比,则需要在 GTCCRC 写入要修改的比较值, GTCNT 计数完成后则会将 GTCCRC 的值写入 GTCCRA,如下图所示。

【瑞萨RA_FSP】GPT—— PWM功能详解

双缓冲操作:

在三角波 PWM 输出模式下,GTCCRA / GTCCRB 各有两个缓存,缓存传输的顺序分别为:

  • GTCCRD -> GTCCRC -> GTCCRA

  • GTCCRF -> GTCCRE -> GTCCRB

以 GTIOCA 为例,如下图所示。
【瑞萨RA_FSP】GPT—— PWM功能详解

1. 锯齿波PWM模式(普通PWM模式)

这里的锯齿波 PWM 模式即我们通常一般所说的 PWM 输出模式,该模式的效果是输出一个普通的 PWM 波形。 其原理是:GTCNT 进行递增计数,当 GTCNT 与 GTCCRA / GTCCRB 比较相等时, 输出到 GTIOCnA / GTIOCnB 引脚的 PWM 波形发生变化(一般是翻转电平), 然后当 GTCNT 计数到 GTPR 周期设置寄存器的值相等后,在下一个时钟计数是计数器清零, 此时输出到 GTIOCnA / GTIOCnB 引脚的 PWM 波形也发生变化。 在这整个过程中,GTCNT 计数器的计数值以锯齿波的方式变化(计数器递增计数或递减计数)。

需要注意,这里的锯齿波指的是,GTCNT 计数器的值以锯齿波的方式变化,也就是 GTCNT 向上递增计数或向下递减计数, 并不是指 GTIOCnA 和 GTIOCnB 这两个 IO 引脚输出锯齿波, 记住无论在哪个 PWM 模式下,IO 引脚输出的都是逻辑值为 0 或 1 的高低电平。

当 GTCNT 与 GTCCRA / GTCCRB 相等,以及 GTCNT 完成一个周期的计数时,IO引脚切换为高电平、低电平、翻转电平或者维持电平不变。 具体可以由寄存器 GTIOR 的位段 GTIOB / GTIOA 控制,这个位段的控制逻辑如下表所示。 b4为1时,初始化电平为高电平,其他与下表相同,为节省篇幅,省略这一部分。
【瑞萨RA_FSP】GPT—— PWM功能详解
在锯齿波 PWM 模式下可使用单缓冲操作或者双缓冲操作。 在单缓冲操作模式下,GTCCRC 作为 GTCCRA 的缓存,GTCCRE 作为 GTCCRB 的缓存。 如下图所示的示例是在 GTCNT 向上计数,发生比较匹配时输出高电平,计数周期结束时输出低电平, 即 GTIOA / GTIOB 的 b3~b0 依次为 0110 时,GTIOCxA / GTIOCxB 引脚的输出时序。

锯齿波 PWM 模式的输出波形时序图如下图所示。
【瑞萨RA_FSP】GPT—— PWM功能详解

2. 三角波PWM模式1(波谷32位传输)

这里的三角波同样指的是,GTCNT 内的值以三角波的方式变化,也就是 GTCNT 向上递增计数接着向下计数递减计数。 其他地方与锯齿波 PWM 模式基本相同。 如下图所示的示例是在初始化时 GTIOCnA 输出低电平,GTIOCnB 输出高电平,当 GTCCRA / GTCCRB 发生比较匹配时, GTIOCxA / GTIOCxB 反转电平,GTIOCxA/GTIOCxB 的输出时序。

三角波 PWM 模式 1 的输出波形时序图如下图所示。
【瑞萨RA_FSP】GPT—— PWM功能详解

3. 三角波PWM模式2(波峰和波谷32位传输)

该模式与三角波 PWM 模式1的区别在于在波峰和波谷都会传输缓冲。也属于单缓冲操作。

三角波 PWM 模式 2 的输出波形时序图如下图所示。
【瑞萨RA_FSP】GPT—— PWM功能详解

4. 三角波PWM模式3(波谷64位传输)

该模式与三角波 PWM 模式1一样都是在波谷传输缓冲,区别在于该模式属于双缓冲操作。

三角波 PWM 模式 3 的输出波形时序图如下图所示。
【瑞萨RA_FSP】GPT—— PWM功能详解

5. 设置死区时间

死区时间可通过设置 GTCCRA / GTCCRB 来配置。 自动死区时间设置功能可用于锯齿波单脉冲模式和所有三角波 PWM 模式。

二、GPT输入捕获功能详解

输入捕获是定时器的一项非常重要的功能。通过输入捕获功能, 可以测量高低电平脉冲的脉宽、信号的周期、频率和 PWM 占空比等。

在检测到在 GTICASR 和 GTICBSR 中设置的硬件源时,可以将 GTCNT 计数器值传输到 GTCCRA 或 GTCCRB,这便是 GPT 的输入捕获功能。 “输入捕获”根据“输入”来触发“捕获” GTCNT 计数器的值,更加具体地说: 硬件在检测到我们所设置的硬件源时,“捕获” GTCNT 计数器的值并转存到 GTCCRA 或 GTCCRB 寄存器。

可以设置如下硬件源来触发执行输入捕获:

  • 在 GTETRGA 引脚输入的上升沿启用或禁用 GTCCRA / GTCCRB 的输入捕捉。

  • 在 GTETRGA 引脚输入的下降沿启用或禁用 GTCCRA / GTCCRB 的输入捕捉。

  • 在 GTETRGB 引脚输入的上升沿启用或禁用 GTCCRA / GTCCRB 的输入捕捉。

  • 在 GTETRGB 引脚输入的下降沿启用或禁用 GTCCRA / GTCCRB 的输入捕捉。

  • 在 GTETRGC 引脚输入的上升沿启用或禁用 GTCCRA / GTCCRB 的输入捕捉。

  • 在 GTETRGC 引脚输入的下降沿启用或禁用 GTCCRA / GTCCRB 的输入捕捉。

  • 在 GTETRGD 引脚输入的上升沿启用或禁用 GTCCRA / GTCCRB 的输入捕捉。

  • 在 GTETRGD 引脚输入的下降沿启用或禁用 GTCCRA / GTCCRB 的输入捕捉。

  • 当 GTIOCnB 输入为 0 时,在 GTIOCnA 引脚输入的上升沿启用或禁用 GTCCRA / GTCCRB 的输入捕捉。

  • 当 GTIOCnB 输入为 1 时,在 GTIOCnA 引脚输入的上升沿启用或禁用 GTCCRA / GTCCRB 的输入捕捉。

  • 当 GTIOCnB 输入为 0 时,在 GTIOCnA 引脚输入的下降沿启用或禁用 GTCCRA / GTCCRB 的输入捕捉。

  • 当 GTIOCnB 输入为 1 时,在 GTIOCnA 引脚输入的下降沿启用或禁用 GTCCRA / GTCCRB 的输入捕捉。

  • 当 GTIOCnA 输入为 0 时,在 GTIOCnB 引脚输入的上升沿启用或禁用 GTCCRA / GTCCRB 的输入捕捉。

  • 当 GTIOCnA 输入为 1 时,在 GTIOCnB 引脚输入的上升沿启用或禁用 GTCCRA / GTCCRB 的输入捕捉。

  • 当 GTIOCnA 输入为 0 时,在 GTIOCnB 引脚输入的下降沿启用或禁用 GTCCRA / GTCCRB 的输入捕捉。

  • 当 GTIOCnA 输入为 1 时,在 GTIOCnB 引脚输入的下降沿启用或禁用 GTCCRA / GTCCRB 的输入捕捉。

下图所示的示例清晰地展示了输入捕获的功能。 在该示例中,GTCNT 计数器通过计数时钟进行递增计数, 并且设置为在 GTIOCnA 输入引脚的两个边沿执行 GTCCRA 的输入捕捉,在 GTIOCnB 输入引脚的上升沿执行 GTCCRB 的输入捕捉。

【瑞萨RA_FSP】GPT—— PWM功能详解

三、编程实战:PWM输出

1. 硬件设计

LED灯相关的电路如下图所示。本实验仅用到 LED1~3 当中的其中一盏。
【瑞萨RA_FSP】GPT—— PWM功能详解
PWM 输出引脚使用的开发板引出的 IO 引脚: P600,如下图所示。
【瑞萨RA_FSP】GPT—— PWM功能详解

2. 软件设计

①文件结构

GPT_PWM_Output
├─ ......
└─ src
   ├─ led
   │  ├─ bsp_led.c
   │  └─ bsp_led.h
   ├─ debug_uart
   │  ├─ bsp_debug_uart.c
   │  └─ bsp_debug_uart.h
   ├─ gpt
   │  ├─ bsp_gpt_pwm_output.c
   │  └─ bsp_gpt_pwm_output.h
   └─ hal_entry.c

② FSP配置

因为 PWM 输出需要使用 IO 引脚进行输出,因此需要先在“Pins”配置页中为 GPT 配置引脚, 我们将 GPT6 的 GTIOC6B 信号输出连接到 P600 引脚,如下图所示。
【瑞萨RA_FSP】GPT—— PWM功能详解
然后在“Stacks”配置页中加入 GPT 模块,并对其作如下图所示的配置。
【瑞萨RA_FSP】GPT—— PWM功能详解
上图中框起来的部分是需要我们去修改的区域,其他的配置属性按照默认即可。 图中需要更改的配置如下:

  • Pin Output Support:这一项配置允许输出 PWM 信号到引脚,我们改为使能引脚输出。

  • Name 和 Channel:这两项分别设置 GPT 模块名字为 “g_timer_gpt6” 和选择第 6 个 GPT 定时器(第6个通道)。

  • Mode:配置 GPT 的工作模式为 PWM 输出模式。

  • Period 和 Period Unit:我们将PWM频率设为 20 KHz, 因此“Period”设置为 20,单位“Period Unit”设置为 Kilohertz,即千赫兹(KHz)。

  • GTIOCB Output Enabled:使能 GTIOCB 输出。

  • GTIOCB Stop Level:设置定时器停止时 GTIOCB 输出的电平为低电平。

  • GTIOC6B:选择连接到 P600 引脚,这个软件会自动设置的,我们只要确认了就好。

GPT的“Output”部分的属性描述如下表所示。
【瑞萨RA_FSP】GPT—— PWM功能详解

③GPT初始化函数

void GPT_PWM_Init(void)
{
    /* 初始化 GPT 模块 */
    R_GPT_Open(&g_timer_gpt6_ctrl, &g_timer_gpt6_cfg);

    /* 启动 GPT 定时器 */
    R_GPT_Start(&g_timer_gpt6_ctrl);

    /* 重新设置占空比为 80% */
    GPT_PWM_SetDuty(80);
}

④设置PWM占空比函数

/** 自定义函数:设置PWM占空比
    @param duty 占空比范围:0~100 %
*/
void GPT_PWM_SetDuty(uint8_t duty)
{
    timer_info_t info;
    uint32_t current_period_counts;
    uint32_t duty_cycle_counts;

    if (duty > 100)
        duty = 100; //限制占空比范围:0~100

    /* 获得GPT的信息 */
    R_GPT_InfoGet(&g_timer_gpt6_ctrl, &info);

    /* 获得计时器一个周期需要的计数次数 */
    current_period_counts = info.period_counts;

    /* 根据占空比和一个周期的计数次数计算GTCCR寄存器的值 */
    duty_cycle_counts = (uint32_t)(((uint64_t) current_period_counts * duty) / 100);

    /* 最后调用FSP库函数设置占空比 */
    R_GPT_DutyCycleSet(&g_timer_gpt6_ctrl, duty_cycle_counts, GPT_IO_PIN_GTIOCB);
}

⑤hal_entry入口函数

/* 用户头文件包含 */
#include "led/bsp_led.h"
#include "debug_uart/bsp_debug_uart.h"
#include "gpt/bsp_gpt_pwm_output.h"


void hal_entry(void)
{
    /* TODO: add your own code here */

    LED_Init();         // LED 初始化
    Debug_UART4_Init(); // SCI4 UART 调试串口初始化
    GPT_PWM_Init();     // GPT 初始化

    printf("这是一个 GPT 的PWM输出功能实验\r\n");
    printf("使用示波器测量 P600 输出的PWM波形\r\n");

    // LED1 闪烁指示程序正在运行...
    while(1)
    {
        LED1_ON;
        R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);
        LED1_OFF;
        R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);
    }


#if BSP_TZ_SECURE_BUILD
    /* Enter non-secure code */
    R_BSP_NonSecureEnter();
#endif
}

频率 20 KHz,占空比为 50% 的PWM波形:
【瑞萨RA_FSP】GPT—— PWM功能详解
频率 20 KHz,占空比为 80% 的PWM波形:
【瑞萨RA_FSP】GPT—— PWM功能详解文章来源地址https://www.toymoban.com/news/detail-490083.html

到了这里,关于【瑞萨RA_FSP】GPT—— PWM功能详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RT-Thread 瑞萨 智能家居网络开发:RA6M3 HMI Board 以太网+GUI技术实践

    不用放大了, 我在包里找到张不小的…… 这是社群的文档:【腾讯文档】以太网线下培训(HMI-Board) https://docs.qq.com/doc/DY0FIWFVuTEpORlNn 先介绍周六的培训是啥,然后再介绍一下要准备的一些东西 R A 6 M 3 H M I − B o a r d textcolor{#4183c4}{RA6M3 HMI-Board} R A 6 M 3 H M I − B o a r d 本次培

    2024年01月21日
    浏览(35)
  • 【STM32学习】——定时器输出比较功能&PWM脉宽调制&通用/高级定时器输出比较通道&舵机/直流电机简介&PWM驱动呼吸灯/舵机/直流电机代码实操

    声明:学习笔记根据b站江科大自化协stm32入门教程编辑,仅供学习交流使用!

    2024年02月03日
    浏览(43)
  • 【致敬未来的攻城狮计划】— 连续打卡第十天:FSP固件库开发及FSP配置详解。

     1.连续打卡第一天:提前对CPK_RA2E1是瑞萨RA系列开发板的初体验,了解一下 2.开发环境的选择和调试(从零开始,加油) 3.欲速则不达,今天是对RA2E1 基础知识的补充学习。 4.e2 studio 使用教程 5.Keil配置使用(使用 RASC 生成 Keil 工程) 6.Keil配置使用(使用 RASC 生成 Keil 工程)

    2023年04月26日
    浏览(46)
  • 第18章_瑞萨MCU零基础入门系列教程之GPT

    本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id=728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总 : https://blog.csdn.net/qq_35181236/article/details/132779862 本章目标 了解RA6M5处理器的

    2024年02月09日
    浏览(32)
  • TIM输出比较(PWM)

      目录 一、输出比较 二、PWM简介  三、通用定时器的输出比较模块怎样输出PWM波形  四、输出比较8种模式 模式的介绍 (1)冻结 (2)匹配时电平翻转 (3)CNT与CCR无效,REF强制为无效电平或者有效电平

    2024年02月02日
    浏览(27)
  • TIM-输出比较(PWM)——STM32

    Oc (Output Compare) 输出比较 输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形 每个高级定时器和通用定时器都拥有4个输出比较通道高级定时器的前3个通道额外拥有死区生成和互补输出的功能 第一步,

    2024年02月10日
    浏览(29)
  • STM32 TIM输出比较、PWM波形

    单片机学习! 目录 一、输出比较简介 二、PWM简介 三、输出比较通道 3.1通用定时器的输出比较部分电路 3.2高级定时器的输出比较部分电路 四、输出模式控制器 五、PWM基本结构 六、PWM参数计算 总结 前言         文章讲述STM32定时器的输出比较功能,它主要用来输出PWM波形

    2024年01月20日
    浏览(51)
  • STM32F4的输出比较极性和PWM1,PWM2的关系

    在这里以通用定时器的通道1作为介绍。 如图,左边就是CNT计数器和CCR1第一路的捕获/比较寄存器,它俩进行比较,当CNTCCR1, 或者CNT=CCR1时,就会给输出模式控制器传送一个信号,然后输出模式控制器就会改变它的 输出OC1ref的高低电平(这里ref是referencel的缩写,意思是参考信

    2024年02月03日
    浏览(24)
  • 比较聚合模型实战文本匹配

    本文我们采用比较聚合模型来实现文本匹配任务。 数据准备包括 构建词表(Vocabulary) 构建数据集(Dataset) 本次用的是LCQMC通用领域问题匹配数据集,它已经分好了训练、验证和测试集。 我们通过pandas来加载一下。 数据是长这样子的,有两个待匹配的句子,标签是它们是否相似

    2024年02月09日
    浏览(28)
  • [FOC-Stm32]设置PWM占空比(比较值)的几种方法

    近期博主在阅读一些基于STM32的FOC代码中,对PWM占空比的设置问题很感兴趣,于是找了分别拿出来做了一下对比,来看看都是怎么来调整PWM输出的。 下图给出了PWM占空比调整的原理,在定时器循环中,有两个量:ARR 重装载值和 CCR 比较值。定时器内的计数器从0到ARR循环记录数

    2024年02月15日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包