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%。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/964650.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

7.PPT:“中国梦”学习实践活动【20】

目录 NO1234​ NO5678​ NO9\10\11 NO1234 考生文件夹下创建一个名为“PPT.pptx”的新演示文稿Word素材文档的文字:复制/挪动→“PPT.pptx”的新演示文稿(蓝色、黑色、红色) 视图→幻灯片母版→重命名:“中国梦母版1”→背景样…

基于Flask的大模型岗位招聘可视化分析系统的设计与实现

【FLask】基于Flask的大模型岗位招聘可视化分析系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统采用Python作为主要开发语言,结合Echarts可视化库&#xff0…

AlwaysOn 可用性组副本所在服务器以及该副本上数据库的各项状态信息

目录标题 语句代码解释:1. `sys.dm_hadr_database_replica_states` 视图字段详细解释及官网链接官网链接字段解释2. `sys.availability_replicas` 视图字段详细解释及官网链接官网链接字段解释查看视图的创建语句方法一:使用 SQL Server Management Studio (SSMS)方法二:使用…

windows版的docker如何使用宿主机的GPU

windows版的docker使用宿主机的GPU的命令 命令如下 docker run -it --nethost --gpus all --name 容器名 -e NVIDIA_DRIVER_CAPABILITIEScompute,utility -e NVIDIA_VISIBLE_DEVICESall 镜像名效果 (transformer) rootdocker-desktop:/# python Python 3.9.0 (default, Nov 15 …

知识蒸馏教程 Knowledge Distillation Tutorial

来自于:Knowledge Distillation Tutorial 将大模型蒸馏为小模型,可以节省计算资源,加快推理过程,更高效的运行。 使用CIFAR-10数据集 import torch import torch.nn as nn import torch.optim as optim import torchvision.tran…

K8S集群部署--亲测好用

最近在自学K8S,花了三天最后终于成功部署一套K8S Cluster集群(masternode1node2) 在这里先分享一下具体的步骤,后续再更新其他的内容:例如部署期间遇到的问题及其解决办法。 部署步骤是英文写的,最近想练…

【Unity2D 2022:UI】创建滚动视图

一、创建Scroll View游戏对象 在Canvas画布下新建Scroll View游戏对象 二、为Content游戏对象添加Grid Layout Group(网格布局组)组件 选中Content游戏物体,点击Add Competent添加组件,搜索Grid Layout Group组件 三、调整Grid La…

c++:list

1.list的使用 1.1构造 1.2迭代器遍历 (1)迭代器是算法和容器链接起来的桥梁 容器就是链表,顺序表等数据结构,他们有各自的特点,所以底层结构是不同的。在不用迭代器的前提下,如果我们的算法要作用在容器上…

一文速览DeepSeek-R1的本地部署——可联网、可实现本地知识库问答:包括671B满血版和各个蒸馏版的部署

前言 自从deepseek R1发布之后「详见《一文速览DeepSeek R1:如何通过纯RL训练大模型的推理能力以比肩甚至超越OpenAI o1(含Kimi K1.5的解读)》」,deepseek便爆火 爆火以后便应了“人红是非多”那句话,不但遭受各种大规模攻击,即便…

游戏引擎 Unity - Unity 打开项目、Unity Editor 添加简体中文语言包模块、Unity 项目设置为简体中文

Unity Unity 首次发布于 2005 年,属于 Unity Technologies Unity 使用的开发技术有:C# Unity 的适用平台:PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域:开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…

[权限提升] Windows 提权 维持 — 系统错误配置提权 - 注册表权限配置错误提权

关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01:注册表权限配置错误提权原理 通常 Windows 中的服务都是以 System 权限运行的,而 Windows 的服务程序的启动路径又是存放在注册表中的,若注册表配置不…

牛客周赛 Round 79

题目目录 A 小红的合数寻找解题思路参考代码 B 小红的小球染色解题思路参考代码 C 小红的二叉树解题思路参考代码 D 小红的“质数”寻找解题思路参考代码 E 小红的好排列解题思路参考代码 F 小红的小球染色期望解题思路参考代码 A 小红的合数寻找 \hspace{15pt} 小红拿到了一个…

Zookeeper入门部署(单点与集群)

本篇文章基于docker方式部署zookeeper集群,请先安装docker 目录 1. docker初期准备 2.启动zookeeper 2.1 单点部署 2.2 集群部署 3. Linux脚本实现快速切换启动关闭 1. docker初期准备 拉取zookeeper镜像 docker pull zookeeper:3.5.6 如果拉取时间过长&#xf…

【MySQL】MySQL经典面试题深度解析

文章目录 一、MySQL与C的深度结合1.1 为什么C项目需要MySQL?1.2 典型应用场景 二、基础概念面试题精讲2.1 存储引擎对比2.2 索引原理 三、C专项面试题解析3.1 连接池实现3.2 预处理语句3.3 批量操作优化 四、高级应用面试题剖析4.1 事务隔离级别4.2 锁机制详解4.3 查…

w190工作流程管理系统设计与实现

🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…

网络安全学习 day5

状态检测和会话技术 状态检测以 “ 数据流量 ” 为单位来对报文进行检测和转发。即对一条流量的第一个报文进行包过滤规 则检查,并将判断结果作为这条流量的 “ 状态 ” 记录下来 。对于该条流量的后续报文,直接根据这个 “ 状态 ”来判断是否转发还是…

4 前端前置技术(上):AJAX技术、Axios技术(前端发送请求)

文章目录 前言一、Ajax技术(从服务端获取数据,发送各种请求)0 接口文档管理:使用apipost等接口测试软件创建接口便于前端后端分离测试1 基本概念2 原生Ajax使用示例(几年前的早期用法) 二、 Axios技术(对原…

Node.js与嵌入式开发:打破界限的创新结合

文章目录 一、Node.js的本质与核心优势1.1 什么是Node.js?1.2 嵌入式开发的范式转变二、Node.js与嵌入式结合的四大技术路径2.1 硬件交互层2.2 物联网协议栈2.3 边缘计算架构2.4 轻量化运行时方案三、实战案例:智能农业监测系统3.1 硬件配置3.2 软件架构3.3 核心代码片段四、…

51c视觉~CV~合集10

我自己的原文哦~ https://blog.51cto.com/whaosoft/13241694 一、CV创建自定义图像滤镜 热图滤镜 这组滤镜提供了各种不同的艺术和风格化光学图像捕捉方法。例如,热滤镜会将图像转换为“热图”,而卡通滤镜则提供生动的图像,这些图像看起来…