28.5
实验2:比较匹配功能——PWM输出
28.5.1
硬件设计
野火启明6M5开发板例程使用的PWM输出引脚为额外引出的IO引脚:P500,如下图所示。

点击可查看大图
注
野火启明6M5开发板例程使用的PWM输出引脚为额外引出的IO引脚:P500(AGTOA0)。
野火启明4M2开发板例程使用的PWM输出引脚为额外引出的IO引脚:P211(AGTOA5)。
野火启明2L1开发板例程使用的PWM输出引脚为额外引出的IO引脚:P208(AGTOB0)。
28.5.2
软件设计
28.5.2.1
新建工程
由于本实验需要用到LED,也会用到串口打印提示信息,因此我们在前面串口通信章节的“实验1:UART收发回显"例程的基础上修改程序。
对于e2studio开发环境:拷贝一份我们之前的e2s工程“19_UART_Receive_Send”,然后将工程文件夹重命名为“28_AGT_PWM_Output”,最后再将它导入到我们的e2studio工作空间中。
对于Keil开发环境:拷贝一份我们之前的Keil工程“19_UART_Receive_Send”,然后将工程文件夹重命名为“28_AGT_PWM_Output”,并进入该文件夹里面双击Keil工程文件,打开该工程。
工程新建好之后,在工程根目录的“src”文件夹下面新建“agt”文件夹,再进入“agt”文件夹里面新建源文件和头文件:“bsp_agt_pwm_output.c”和“bsp_agt_pwm_output.h”。工程文件结构如下。
列表5:文件结构
左右滑动查看完整内容
28_AGT_PWM_Output ├─ ...... └─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 └─ hal_entry.c
28.5.2.2
FSP配置
接下来我们要以启明6M5开发板为例来说明进行FSP配置的方法,另外两块板子的配置步骤是一样的,读者可根据实际使用的引脚参照下面的步骤来进行配置。
因为PWM输出需要使用IO口进行输出,因此需要先在“Pins”配置页中为AGT配置引脚,我们将AGT的AGTOA0信号输出连接到P500引脚,如下图所示。

点击可查看大图
随后在“Stacks”配置页中加入AGT模块,并对其作如下图所示的配置。

点击可查看大图
AGT的“Output”部分属性描述如下表所示。
表6:AGT属性描述:“Output”部分。

点击可查看大图
28.5.2.3
AGT初始化函数
列表6:AGT初始化函数
左右滑动查看完整内容
/* AGT 初始化函数*/
voidAGT_PWM_Init(void)
{
/* 初始化AGT 模块*/
R_AGT_Open(&g_timer_agt0_ctrl, &g_timer_agt0_cfg);
/* 启动AGT 定时器*/
R_AGT_Start(&g_timer_agt0_ctrl);
/* 重新设置占空比为80% */
AGT_PWM_SetDuty(80);
}
需要注意的是,在AGT初始化函数里面,我们重新设置了占空比:50%→80%。设置PWM占空比使用了我们自己写的AGT_PWM_Set Duty函数。
28.5.2.4
设置PWM占空比函数
列表7:设置PWM占空比函数
左右滑动查看完整内容
/** 自定义函数:设置PWM 占空比 @param duty 占空比范围:0~100 % */ voidAGT_PWM_SetDuty(uint8_tduty) { timer_info_tinfo; uint32_tcurrent_period_counts; uint32_tduty_cycle_counts; if(duty >100) duty =100;//限制占空比范围:0~100 /* 获得AGT 的信息*/ R_AGT_InfoGet(&g_timer_agt0_ctrl, &info); /* 获得计时器一个周期需要的计数次数*/ current_period_counts = info.period_counts; /* 根据占空比和一个周期的计数次数计算比较匹配寄存器的值*/ duty_cycle_counts = (uint32_t)(((uint64_t) current_period_counts *␣ ,→duty) /100); /* 最后调用FSP 库函数设置占空比*/ R_AGT_DutyCycleSet(&g_timer_agt0_ctrl, duty_cycle_counts, AGT_OUTPUT_ ,→PIN_AGTOA); }
该函数的主要思路是需要先知道计数器的计数周期(即当前输出的PWM信号的一个周期需要计数的值current_period_counts),然后计算与要设定的占空比(duty)对应的计数值(duty_cycle_counts),最后调用FSP库函数R_AGT_Duty Cycle Set写入该占空比对应的计数值。
调用R_AGT_Duty Cycle Set函数时需要注意传入的第三个参数是AGT_OUTPUT_PIN_AGTOA,因为我们使用的PWM输出引脚P500连接到的是AGT0的AGTOA信号。如果换用别的引脚,需要注意检查这个参数是否需要修改。
28.5.2.5
hal_entry入口函数
列表8:hal_entry入口函数
左右滑动查看完整内容
/* 用户头文件包含*/
#include"led/bsp_led.h"
#include"debug_uart/bsp_debug_uart.h"
#include"gpt/bsp_gpt_pwm_output.h"
voidhal_entry(void)
{
/*TODO:add your own code here */
LED_Init();// LED 初始化
Debug_UART4_Init();// SCI4 UART 调试串口初始化
AGT_PWM_Init();// AGT 初始化
printf("这是一个AGT 的PWM 输出功能实验
");
printf("使用示波器测量P500 输出的PWM 波形
");
// LED1 闪烁指示程序正在运行...
while(1)
{
LED1_ON;
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);
LED1_OFF;
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);
}
#ifBSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
28.5.3
下载验证
以野火启明6M5开发板为例,编译并下载程序后,复位开发板使程序重新运行,然后使用示波器测量P500引脚输出的PWM波形。实现现象如下。
图中PWM波形的频率为20KHz,占空比为80%:

-
PWM
+关注
关注
116文章
5896浏览量
226781 -
瑞萨
+关注
关注
38文章
22523浏览量
91403 -
引脚
+关注
关注
16文章
2123浏览量
56061 -
开发板
+关注
关注
26文章
6440浏览量
121239
原文标题:实验2:比较匹配功能(PWM输出)——瑞萨RA系列FSP库开发实战指南(104)
文章出处:【微信号:瑞萨嵌入式小百科,微信公众号:瑞萨嵌入式小百科】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
瑞萨RA系列FSP库开发实战指南之AGT低功耗定时器简介和结构框图
瑞萨RA系列FSP库开发实战指南之使用AGT进行脉冲宽度测量模式实验
瑞萨e2studio(1)----瑞萨芯片之搭建FSP环境
【瑞萨RA4系列开发板体验】体验过程
【有奖直播预报名】瑞萨电子RA系列产品开发工具之FSP4.0.0新特性介绍
瑞萨电子RA系列微控制器的可扩展性强的配置软件包 (FSP)安装下载与使用指南
瑞萨RA系列FSP库开发实战指南之使用AGT基本定时功能实验
瑞萨RA系列FSP库开发实战指南之使用AGT进行PWM输出实验
评论