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

点击可查看大图
注
野火启明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引脚,如下图所示。

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

点击可查看大图
表7:AGT属性描述:“Input”部分。

点击可查看大图
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信号的频率和占空比等信息,实验现象如下图所示。

点击可查看大图
通过计算,我们设置PWM输出波形的频率为20KHz(周期为50us)、占空比为80%(正脉宽应为40us),这与我们测量得到正脉宽一致。
-
脉冲
+关注
关注
20文章
913浏览量
100084 -
瑞萨
+关注
关注
38文章
22523浏览量
91403 -
引脚
+关注
关注
16文章
2123浏览量
56061 -
开发板
+关注
关注
26文章
6440浏览量
121239
原文标题:实验3:手把手教你掌握脉冲宽度测量模式——瑞萨RA系列FSP库开发实战指南(105)
文章出处:【微信号:瑞萨嵌入式小百科,微信公众号:瑞萨嵌入式小百科】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
瑞萨RA系列FSP库开发实战指南之AGT低功耗定时器简介和结构框图
瑞萨RA系列FSP库开发实战指南之使用GPT输入捕获进行脉宽和周期测量实验
瑞萨e2studio(1)----瑞萨芯片之搭建FSP环境
【瑞萨RA2L1入门学习】+PWM呼吸灯
【瑞萨RA4系列开发板体验】定时器(r_agt)使用经验
【瑞萨RA4系列开发板体验】体验过程
【有奖直播预报名】瑞萨电子RA系列产品开发工具之FSP4.0.0新特性介绍
【视频教程】瑞萨RA单片机FSP开发(3)FSP架构-解释Blinky架构[上]
瑞萨电子RA系列微控制器的可扩展性强的配置软件包 (FSP)安装下载与使用指南
瑞萨RA系列FSP库开发实战指南之GPT简介和结构框图
瑞萨RA系列FSP库开发实战指南之使用AGT基本定时功能实验
瑞萨RA系列FSP库开发实战指南之使用AGT进行脉冲宽度测量模式实验
评论