0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

瑞萨RA系列FSP库开发实战指南之使用AGT进行脉冲宽度测量模式实验

瑞萨嵌入式小百科 来源:野火电子 2026-05-08 10:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

28.6

实验3:脉冲宽度测量模式

28.6.1

硬件设计

以野火启明6M5开发板例程为例,本实验需要使用两个引脚,使用的PWM输出引脚为额外引出的IO引脚为:P500;用于脉冲输入的测量引脚使用的开发板引出的IO引脚为:P600。如下图所示。

6a123e76-4901-11f1-90a1-92fbcf53809c.png

点击可查看大图

野火启明6M5开发板例程选用的PWM输出引脚为:P500(AGTOA0);选用的测量引脚为:P600(AGTIO3)。

野火启明4M2开发板例程选用的PWM输出引脚为:P211(AGTOA5);选用的测量引脚为:P415(AGTIO4)。

野火启明2L1开发板例程选用的PWM输出引脚为:P208(AGTOB0);选用的测量引脚为:P402(AGTIO1)。

本次实验需要将PWM输出引脚与测量引脚使用杜邦线连接起来。

28.6.2

软件设计

28.6.2.1

新建工程

由于本实验需要用到PWM波形信号,因此我们直接在前面的“实验2:比较匹配功能(PWM输出)”例程的基础上修改程序。

对于e2studio开发环境:拷贝一份我们之前的e2s工程“28_AGT_PWM_Output”,然后将工程文件夹重命名为“28_AGT_Pulse_Width_Measurement”,最后再将它导入到我们的e2studio工作空间中。

对于Keil开发环境:拷贝一份我们之前的Keil工程“28_AGT_PWM_Output”,然后将工程文件夹重命名为“28_AGT_Pulse_Width_Measurement”,并进入该文件夹里面双击Keil工程文件,打开该工程。

工程新建好之后,在工程根目录下,进入到“src/agt”文件夹里面新建源文件和头文件:“bsp_agt_pulse_width_measurement.c”和“bsp_agt_pulse_width_measurement.h”。工程文件结构如下。

列表9:文件结构

左右滑动查看完整内容

28_AGT_Pulse_Width_Measurement
├─ ......
└─src
├─ led
│ ├─ bsp_led.c
│ └─ bsp_led.h
├─ debug_uart
│ ├─ bsp_debug_uart.c
│ └─ bsp_debug_uart.h
├─ agt
│ ├─ bsp_agt_pwm_output.c
│ ├─ bsp_agt_pwm_output.h
│ ├─ bsp_agt_pulse_width_measurement.c
│ └─ bsp_agt_pulse_width_measurement.h
└─ hal_entry.c

28.6.2.2

FSP配置

接下来我们要以野火启明6M5开发板为例来说明进行FSP配置的方法,另外两块板子的配置步骤是一样的,读者可根据实际使用的引脚参照下面的步骤来进行配置。

首先在“Pins”配置页中配置AGT3的操作模式配置为“Count Measurement”,并且为该AGT配置相应的引脚,也就是将AGT的AGTIO3信号连接到P600引脚,如下图所示。

6a6bf57e-4901-11f1-90a1-92fbcf53809c.png

点击可查看大图

接着在Stacks中加入第二个AGT模块实例,并按如下图所示配置该AGT模块的属性:

6ac6424a-4901-11f1-90a1-92fbcf53809c.png

点击可查看大图

表7:AGT属性描述:“Input”部分。

6b8c06a6-4901-11f1-90a1-92fbcf53809c.png

点击可查看大图

28.6.2.3

AGT初始化函数

列表10:代码清单28-7:

AGT初始化

左右滑动查看完整内容

timer_info_t info;//用于获取定时器参数信息
uint32_t period;//用于保存计数器的计数周期
/* AGT 初始化函数*/
voidAGT_Pulse_Width_Measurement_Init(void)
{
/* 初始化AGT 模块*/
R_AGT_Open(&g_timer_agt3_ctrl, &g_timer_agt3_cfg);
/* 获取当前参数*/
(void)R_AGT_InfoGet(&g_timer_agt3_ctrl, &info);
/* 获取计数周期:AGT 的一个周期的计数次数*/
period = info.period_counts;
/* 使能AGT 定时器*/
R_AGT_Enable(&g_timer_agt3_ctrl);//注:对于脉冲宽度/周期测量模式下,使用␣
,→R_AGT_Enable 或R_AGT_Start 函数效果是一致的
/* 启动AGT 定时器*/
//R_AGT_Start(&g_timer_agt3_ctrl);

28.6.2.4

AGT脉冲宽度测量中断回调函数

列表11:代码清单28-8:

AGT脉冲宽度测量中断回调函数

左右滑动查看完整内容

uint32_tpulse_width_time;//测量的脉冲高电平宽度时间
volatileuint8_tprint_enble_flag;//允许打印测量结果标志
/* AGT 脉冲宽度测量中断回调函数*/
voidagt3_pulse_width_measurement_callback(timer_callback_args_t* p_args)
{
staticuint32_toverflow_times =0;//计数器溢出次数
/* 测量完成事件*/
if(TIMER_EVENT_CAPTURE_A == p_args->event)
{
pulse_width_time = p_args->capture + overflow_times * period;//记
录时间B
overflow_times =0;
print_enble_flag =1;//测量完成后允许打印测量结果
}
/* 定时器计数溢出事件*/
elseif(TIMER_EVENT_CYCLE_END == p_args->event)
{
/* 输入捕获期间计数器溢出,则记录溢出次数+1 */
overflow_times++;
}
}

28.6.2.5

hal_entry入口函数

列表12:代码清单28-9:hal_entry入口函数

左右滑动查看完整内容

/* 用户头文件包含*/
#include"led/bsp_led.h"
#include"debug_uart/bsp_debug_uart.h"
#include"agt/bsp_agt_pwm_output.h"
#include"agt/bsp_agt_pulse_width_measurement.h"
// 外部变量声明
externtimer_info_t info;//用于获取定时器参数信息
externuint32_t pulse_width_time;//PWM 高电平的时间
externvolatileuint8_t print_enble_flag;
voidhal_entry(void)
{
/*TODO:add your own code here */
LED_Init();// LED 初始化
Debug_UART4_Init();// SCI4 UART 调试串口初始化
AGT_PWM_Init();// AGT PWM 输出初始化
AGT_Pulse_Width_Measurement_Init();// AGT 脉冲宽度测量初始化
printf("这是一个AGT 的PWM 输出+ 脉冲宽度测量功能实验
");
printf("使用杜邦线连接P500 和P600 引脚,然后打开串口助手查看串口的打印信息

,→");
while(1)
{
float pulse_width_time_us;
if(print_enble_flag)
{
// 打印PWM 高电平的计数
printf("High=%d, ", pulse_width_time);
/* 计算PWM 高电平的时间*/
pulse_width_time_us=(float)pulse_width_time/((float)info.
,→clock_frequency/(float)1000000);
printf("Time=%f us
", pulse_width_time_us);
pulse_width_time=0;//测量结果打印完后旧数据清零
print_enble_flag=0;//允许打印测量结果标志位清零
}
// LED1 闪烁指示程序正在运行...
LED1_TOGGLE;
// 间隔1s
R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);
}
#ifBSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}

28.6.3

下载验证

编译并下载程序后,复位开发板使程序重新运行,然后使用杜邦线连接P500和P600引脚,然后打开串口助手查看串口的打印信息。串口会打印出PWM信号的频率和占空比等信息,实验现象如下图所示。

6be57d4e-4901-11f1-90a1-92fbcf53809c.png

点击可查看大图

通过计算,我们设置PWM输出波形的频率为20KHz(周期为50us)、占空比为80%(正脉宽应为40us),这与我们测量得到正脉宽一致。

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

    关注

    20

    文章

    913

    浏览量

    100084
  • 瑞萨
    +关注

    关注

    38

    文章

    22523

    浏览量

    91403
  • 引脚
    +关注

    关注

    16

    文章

    2123

    浏览量

    56061
  • 开发板
    +关注

    关注

    26

    文章

    6440

    浏览量

    121239

原文标题:实验3:手把手教你掌握脉冲宽度测量模式——瑞萨RA系列FSP库开发实战指南(105)

文章出处:【微信号:瑞萨嵌入式小百科,微信公众号:瑞萨嵌入式小百科】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RA系列FSP开发实战指南I2C读写EEPROM实验

    使用官方提供的FPS进行编程,官方提供的FPS
    的头像 发表于 01-27 10:02 3837次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b><b class='flag-5'>FSP</b><b class='flag-5'>库</b><b class='flag-5'>开发</b><b class='flag-5'>实战</b><b class='flag-5'>指南</b><b class='flag-5'>之</b>I2C读写EEPROM<b class='flag-5'>实验</b>

    RA系列FSP开发实战指南AGT低功耗定时器简介和结构框图

    RA MCU有两种定时器外设:GPT(General PWM Timer)定时器和AGT(Asynchronous General Purpose Timer)定时器。
    的头像 发表于 04-30 16:47 6679次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b><b class='flag-5'>FSP</b><b class='flag-5'>库</b><b class='flag-5'>开发</b><b class='flag-5'>实战</b><b class='flag-5'>指南</b><b class='flag-5'>之</b><b class='flag-5'>AGT</b>低功耗定时器简介和结构框图

    RA系列FSP开发实战指南使用GPT输入捕获进行脉宽和周期测量实验

    上一个实验使用了GPT的输出功能,本次实验要使用GPT的输入功能,通过GPT的输入捕获进行脉宽和周期测量。其测量的原理如下图所示。
    的头像 发表于 04-24 10:49 6389次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b><b class='flag-5'>FSP</b><b class='flag-5'>库</b><b class='flag-5'>开发</b><b class='flag-5'>实战</b><b class='flag-5'>指南</b><b class='flag-5'>之</b>使用GPT输入捕获<b class='flag-5'>进行</b>脉宽和周期<b class='flag-5'>测量</b><b class='flag-5'>实验</b>

    RA系列FSP开发实战指南使用AGT进行PWM输出实验

    野火启明6M5开发板例程使用的PWM输出引脚为额外引出的IO引脚:P500,如下图所示。
    的头像 发表于 05-08 10:28 134次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b><b class='flag-5'>FSP</b><b class='flag-5'>库</b><b class='flag-5'>开发</b><b class='flag-5'>实战</b><b class='flag-5'>指南</b><b class='flag-5'>之</b>使用<b class='flag-5'>AGT</b><b class='flag-5'>进行</b>PWM输出<b class='flag-5'>实验</b>

    e2studio(1)----芯片搭建FSP环境

    视频教学 样品申请 请勿添加外链 e2studio软件 e2studio是的集成开发环境,FSP 提供了众多可提高效率的工具,用于开发
    发表于 09-30 15:28

    RA2L1入门学习】+PWM呼吸灯

    电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从
    发表于 03-30 22:28

    RA-Eco-RA4M2开发板评测】+VS Code 下 RA4M2 开发环境搭建与 GPIO 点灯实验教程

    软件烧录芯片程序——RA系列FSP开发
    发表于 04-15 15:12

    RA4系列开发板体验】开发环境搭建和新手点灯指南

    RA4系列开发板体验】开发环境搭建和新手点灯指南
    发表于 11-24 22:54

    RA4系列开发板体验】定时器(r_agt)使用经验

    前言本次分享是使用的RASC自动生成定时器的基础配置,在尝试使用定时器时,试了N遍都不得其法,最终求助后完成了定时器的配置。感谢。本文只分享定时器相关的内容,新手需要有一点点的基础,至少会点灯了
    发表于 12-02 20:44

    RA4系列开发板体验】体验过程

    拿到板子之后,做了几个实验过程,过程如下:1、在好奇心驱动下,逐步接触;参照网上的实例,学习开发环境一、开箱验货二、搭建环境参考“ 【
    发表于 12-18 16:20

    【有奖直播预报名】电子RA系列产品开发工具FSP4.0.0新特性介绍

    为使用电子RA系列ARM微控制器的嵌入式系统设计提供简单易用且可扩展的高质量软件。 直播主题
    的头像 发表于 11-22 12:20 1739次阅读

    【视频教程】RA单片机FSP开发(3)FSP架构-解释Blinky架构[上]

    干货分享 前篇回顾 【视频教程】RA单片机FSP开发(1)环境搭建(带RASC) 【视频教程】
    的头像 发表于 12-06 12:15 2186次阅读

    电子RA系列微控制器的可扩展性强的配置软件包 (FSP)安装下载与使用指南

    电子RA系列微控制器的可扩展性强的配置软件包 (FSP)安装下载与使用指南
    的头像 发表于 06-11 17:21 2298次阅读

    RA系列FSP开发实战指南GPT简介和结构框图

    PWM的全称是脉冲宽度调制(Pulse Width Modulation),简称脉宽调制,通俗的讲就是调节脉冲宽度。其原理是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率,根据
    的头像 发表于 04-20 15:06 188次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b><b class='flag-5'>FSP</b><b class='flag-5'>库</b><b class='flag-5'>开发</b><b class='flag-5'>实战</b><b class='flag-5'>指南</b><b class='flag-5'>之</b>GPT简介和结构框图

    RA系列FSP开发实战指南使用AGT基本定时功能实验

    实验内容适用于野火启明6M5、启明4M2、启明2L1开发板。本实验较为简单,我们将使用AGT定时器进行定时并触发中断请求产生中断,然后通过
    的头像 发表于 05-08 10:26 56次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b><b class='flag-5'>FSP</b><b class='flag-5'>库</b><b class='flag-5'>开发</b><b class='flag-5'>实战</b><b class='flag-5'>指南</b><b class='flag-5'>之</b>使用<b class='flag-5'>AGT</b>基本定时功能<b class='flag-5'>实验</b>