当前位置: 首页 > article >正文

e2studio开发RA2E1(8)----GPT定时器频率与占空比的设置

e2studio开发RA2E1.8--GPT定时器频率与占空比的设置

  • 概述
  • 视频教学
  • 样品申请
  • 硬件准备
  • 参考程序
  • 源码下载
  • 选择计时器
  • 时钟源
  • PWM(脉冲宽度调制)
  • R_GPT_PeriodSet()函数说明
  • R_GPT_DutyCycleSet()函数说明
  • R_GPT_Reset()函数说明
  • R_GPT_Close() 函数说明
  • 主程序
  • 波形情况

概述

GPT(通用 PWM 计时器)模块是一个高精度定时器,用于计数事件、测量外部输入信号、生成周期性中断,或输出周期性信号/PWM 信号到 GTIOC 引脚。它广泛应用于定时控制、信号测量、PWM 生成等应用,尤其适用于电机控制、LED 调光、PWM 伺服驱动和 ADC 触发等场景。
本文将详细介绍如何上一章基础上通过GPT定时器的API调整频率和占空比,并解释相关的关键概念和设置方法。

最近在瑞萨RA的课程,需要样片的可以加qun申请:925643491。

在这里插入图片描述

视频教学

https://www.bilibili.com/video/BV1NRP1eBE5B/

e2studio开发RA2E1(8)----GPT定时器频率与占空比的设置

样品申请

https://www.wjx.top/vm/rCrkUrz.aspx

硬件准备

首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。
主控为R7FA2E1A72DFL#AA0

在这里插入图片描述

参考程序

https://github.com/CoreMaker-lab/RA2E1

https://gitee.com/CoreMaker/RA2E1

源码下载

选择计时器

RA MCU 有两个定时器外设:通用 PWM 定时器 (GPT) 和异步通用定时器 (AGT)。

在这里插入图片描述

时钟源

GPT 使用 PCLKD(外设时钟D) 作为主时钟源。该时钟可以通过 可配置的分频器 进行调整,最大分频因子为 1024。

在这里插入图片描述

选择 XTAL 12MHz 作为时钟源(Clock Src: XTAL)。PCLKD 时钟的分频器设置为 Div /1,意味着 PCLKD 直接运行在 12MHz。
在这里插入图片描述

PWM(脉冲宽度调制)

脉冲宽度调制是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
在瑞萨RA系列MCU中有两种定时器,一种是通用PWM定时器GPT,另外一种是异步通用定时器AGT。
频率=主频/period
+占空比=cycle/period

下图中展示的 PWM 输出信号,在周期开始时为高电平,周期结束时为低电平。通过调整占空比(duty cycle)和周期(timer period),可以调节 PWM 信号的行为。
● duty_cycle_counts:表示占空比部分的持续时间。占空比决定了信号高电平的时间比例。
● timer_period_counts:这是一个周期的时间,单位是 PCLKD 计数(即时钟频率的周期数)。

在这里插入图片描述

更新周期和占空比:周期和占空比在下次定时器溢出后会更新,更新由 R_GPT_PeriodSet() 或 R_GPT_DutyCycleSet() 函数触发。如果需要在下次溢出之前强制更新这些值,可以调用 R_GPT_Reset(),这样定时器会被重置并开始计数。

在这里插入图片描述

R_GPT_PeriodSet()函数说明

R_GPT_PeriodSet 该函数用于设置定时器的周期值。若定时器正在运行,则在下次溢出时更新周期;如果定时器已停止,该函数将重置计数器并更新周期。

在这里插入图片描述

频率=时钟源/period,若设置频率为10K,则period=12M/10K=1200

    err = R_GPT_PeriodSet(&g_timer8_ctrl, 1200);//频率
   assert(FSP_SUCCESS == err);
   R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);//不加延时可能会设置不成功

R_GPT_DutyCycleSet()函数说明

R_GPT_DutyCycleSet 此函数用于设置请求引脚的占空比。占空比在缓冲寄存器中更新,更新后的占空比将在下一个计数溢出时反映出来。

在这里插入图片描述

+占空比=cycle/period,若设置GTIOCA-占空比为25%,所以+占空比为75%,则cycle= -占空比* period=25%1200=300
若设置GTIOCB占空比为-75%,所以+占空比为25%,则cycle= -占空比
period=75%*1200=900

   err = R_GPT_DutyCycleSet(&g_timer8_ctrl, 300, GPT_IO_PIN_GTIOCA);//占空比
   assert(FSP_SUCCESS == err);
   err = R_GPT_DutyCycleSet(&g_timer8_ctrl, 900, GPT_IO_PIN_GTIOCB);//占空比
   assert(FSP_SUCCESS == err);

R_GPT_Reset()函数说明

R_GPT_Reset 此函数用于将计数器值重置为0。它实现了 timer_api_t::reset 操作。
注意:如果在上次调用 R_GPT_PeriodSet() 后未发生计数器溢出,函数将更新为新的周期值。

在这里插入图片描述

R_GPT_Close() 函数说明

R_GPT_Close 此函数用于停止计数器、禁用输出引脚并清除内部驱动程序数据。它实现了 timer_api_t::close 操作。

在这里插入图片描述

关闭定时器GPT。

   err = R_GPT_Close(&g_timer8_ctrl);
   assert(FSP_SUCCESS == err);
   R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);


主程序

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

    fsp_err_t err = FSP_SUCCESS;
    /* Initializes the module. */
    err = R_GPT_Open(&g_timer8_ctrl, &g_timer8_cfg);
    /* Handle any errors. This function should be defined by the user. */
    assert(FSP_SUCCESS == err);
    /* Start the timer. */
    (void) R_GPT_Start(&g_timer8_ctrl);
    R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);

    err = R_GPT_PeriodSet(&g_timer8_ctrl, 1200);//频率
   assert(FSP_SUCCESS == err);
   R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);//不加延时可能会设置不成功

   err = R_GPT_DutyCycleSet(&g_timer8_ctrl, 300, GPT_IO_PIN_GTIOCA);//占空比
   assert(FSP_SUCCESS == err);
   err = R_GPT_DutyCycleSet(&g_timer8_ctrl, 900, GPT_IO_PIN_GTIOCB);//占空比
   assert(FSP_SUCCESS == err);
   R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);

   err = R_GPT_Close(&g_timer8_ctrl);
   assert(FSP_SUCCESS == err);
   R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);

    while(1)
    {

    }

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

波形情况

输出波形如下所示,最开始启动波形为设置的1k,占空比为50%。

在这里插入图片描述

频率设置成功后频率直接修改为10k,占空比为50%。

在这里插入图片描述

最后A通道正占空比成功修改为75%,B通道正占空比成功修改为25%。

在这里插入图片描述


http://www.kler.cn/a/535687.html

相关文章:

  • 从java角度对比nodejs、fastapi,同步和异步区别
  • maven如何不把依赖的jar打包到同一个jar?
  • 哈希(Hashing)在 C++ STL 中的应用
  • 使用 CSS 实现透明效果
  • PCA9685舵机控制板使用
  • Day37-【13003】短文,串的基本概念,匹配算法,算法时间复杂度,真题训练
  • 3. 【.NET Aspire 从入门到实战】--理论入门与环境搭建--环境搭建
  • SpringBoot开发(五)SpringBoot接收请求参数
  • 【数据结构】单向链表(真正的零基础)
  • 六。自定义数据集 使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测
  • 虚拟机报错:处理器未启用 NX/XD,而 VMware Workstation 要求启用 NX/XD.没有可打开电源的虚拟机
  • k8sollama部署deepseek-R1模型,内网无坑
  • 【Leetcode 热题 100】72. 编辑距离
  • 【2025最新计算机毕业设计】基于springboot智能教师评价系统【提供源码+答辩PPT+文档+项目部署】(高质量源码,可定制,提供文档,免费部署到本地)
  • 深入理解C++的new和delete
  • linux 使用docker安装 postgres 教程,踩坑实践
  • Unity3D 切线空间及其应用详解
  • springboot011-G县乡村生活垃圾治理问题中运输地图系统
  • 网络安全配置
  • 从源码到上线:AI在线教育系统开发全流程与网校APP构建指南
  • 使用 TensorRT 和 Python 实现高性能图像推理服务器
  • LeetCode 415
  • 无人机使用数传时的注意事项!
  • 尝试在Excel里调用硅基流动上的免费大语言模型
  • FFmpeg 头文件完美翻译之 libavdevice 模块
  • gc buffer busy acquire导致的重大数据库性能故障