【瑞萨 RA-Eco-RA2E1-48PIN-V1.0 开发板测评】PWM
本文介绍了瑞萨 RA2E1 开发板使用内置时钟和定时器实现 PWM 输出以及呼吸灯的项目设计。
项目介绍
介绍了 PWM 和 RA2E1 的 PWM 资源。
PWM
脉冲宽度调制(Pulse Width Modulation, PWM)是一种对模拟信号电平进行数字编码的方法。
PWM 的工作原理是通过调节脉冲信号的占空比(即高电平持续时间与整个周期的比值)来控制输出信号的平均电压或平均功率。
特点
- 高效性:在调节功率时,PWM方式避免了传统线性调节方式中电阻发热造成的能量损耗,能将大部分能量有效地传递到负载,效率通常可达80% - 90%以上。
- 精确控制:可以通过微处理器或专用的PWM控制器,精确地控制脉冲的宽度和频率,实现对电机转速、灯光亮度等物理量的精确调节。
- 抗干扰能力强:数字信号相比模拟信号具有更强的抗干扰能力,PWM信号在传输过程中不易受到噪声干扰,能够保证控制信号的准确性。
应用领域
- 电机控制:广泛应用于直流电机和步进电机的调速控制。通过改变PWM信号的占空比,可以轻松地调节电机两端的平均电压,从而控制电机的转速。
- 电源管理:在开关电源中,PWM技术用于控制功率开关管的导通和关断,实现对输出电压的稳定调节。此外,还可用于电池充电管理,根据电池的充电状态调整充电电流和电压。
- 音频处理:在音频功率放大器中,利用PWM技术将音频信号调制为高频脉冲信号,通过低通滤波器还原出音频信号,可提高音频放大器的效率和音质。
- LED照明:用于调节LED灯的亮度。通过改变PWM信号的占空比,可以精确地控制LED灯的发光强度,实现节能和调光的目的。
RA2E1的PWM资源
瑞萨RA2E1的PWM资源主要与定时器相关,具体如下:
- 32位通用PWM定时器(GPT32):1个,GPT 模块是一个高精度定时器,可用于计数事件、测量外部输入信号、生成周期性中断,或输出周期性信号/PWM 信号到 GTIOC 引脚。它使用PCLKD(外设时钟D)作为主时钟源,该时钟可以通过可配置的分频器进行调整,最大分频因子为1024;
- 16位通用PWM定时器(GPT16):6个,可用于多种定时和 PWM 相关的应用。每个计数器支持递增计数或递减计数(锯齿波)或递增/递减计数(三角波),每个通道可选择独立时钟源,可控制两个I/O引脚,还可以在每个输入路径上设置噪声滤波器,每个通道有两个输出比较/输入捕捉寄存器及四个缓冲寄存器;
- 低功耗异步通用定时器(AGT):2个,AGT 模块也提供灵活的计时和事件捕获功能,支持16位和32位定时器,并具有多种工作模式,适用于需要高精度时间控制和事件捕获的应用。
本文介绍了瑞萨 RA-Eco-RA2E1-48PIN-V1.0 开发板使用内置时钟和 GPT 定时器实现 PWM 输出以及呼吸灯的项目设计流程。
新建工程
在安装 e2 studio 软件和 FSP 软件包的基础上,新建项目工程
打开 e2 studio 软件,依次点击 文件
- 新建
- 瑞萨 C/C++ 项目
- Renesas RA
;
依次进行工程命名,路径设置,FSP版本,目标开发板选择,Device 选择 R7FA2E1A72DFL
,工具链选择 GNU ARM Embedded
;
点击 Generate 完成工程创建。
定时器
根据原理图可知,2 个板载 LED 控制引脚为 P103 和 P104(这里选择 P104 作为 PWM 输出引脚进行配置)
引脚配置
进入 FSP 配置
界面,依次选择 Pins
标签 - GPIO-P104
- 可视化引脚界面;
进入 FSP 芯片视角,右键目标 PWM 输出引脚 P104
,选择 GTIOCB
输出;
依次进入 Pin Selection
- Timers:GPT
- GPT4
- Pin Configuration
- Input/Output
- 使能定时器对应的引脚输出;
时钟配置
PWM堆栈
FSP Configuration
- Stacks
- 新建堆栈(New Stacks) - 定时器(Timer) - 通用 PWM
选中新建的 PWM 堆栈,在属性标签中设置参数,开启引脚输出、PWM频道、周期、占空比、使能 GTIOCA 或 GTIOCB 引脚输出等。
生成工程
配置完成后,点击 Generate Project Content
输出相应的工程代码。
代码
打开左侧的工程文件 src/hal_entry.c
,在主函数中添加如下代码
void hal_entry(void)
{
/* TODO: add your own code here */
fsp_err_t err = FSP_SUCCESS;
/* Initializes the module. */
err = R_GPT_Open(&g_timer4_ctrl, &g_timer4_cfg);
/* Handle any errors. This function should be defined by the user. */
assert(FSP_SUCCESS == err);
/* Start the timer. */
(void) R_GPT_Start(&g_timer4_ctrl);
R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);
/* Setting PWM period, clock frequency 48MHz, then pwm frequency is 48MHz/4800 = 10kHz*/
err = R_GPT_PeriodSet(&g_timer4_ctrl, 4800);//频率
/* Check period setting*/
assert(FSP_SUCCESS == err);
R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);//不加延时可能会设置不成功
/* breath LED */
uint16_t duty_cycle = 0; // 占空比初始值
int8_t direction = 1; //
while(1)
{
/* 设置PWM占空比 */
err = R_GPT_DutyCycleSet(&g_timer4_ctrl, duty_cycle, GPT_IO_PIN_GTIOCB);
assert(FSP_SUCCESS == err);
R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);
/* 更新占空比 */
duty_cycle += (uint16_t) (direction * 400); // 需要强制类型转换
if (duty_cycle >= 4800)
{
duty_cycle = 4800;
direction = -1;
}
else if (duty_cycle <= 0)
{
duty_cycle = 0;
direction = 1;
}
R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS); //20ms变化一次
}
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
保存并构建工程 - 调试工程。
效果
修改代码中的 duty_cycle += (uint16_t) (direction * 400)
占空比增量,即可实现呼吸灯的速度控制。
使用示波器查看输出的 PWM 波形
可知 PWM 频率为 10kHz,占空比随时间在 0 到 1 之间连续变化。
示波器项目详见:基于地阔星STM32F103C8T6的示波器扩展板 - 立创开源硬件平台
总结
本文介绍了瑞萨 RA2E1 开发板使用内置时钟和定时器实现 PWM 输出以及呼吸灯的项目设计,包括方案介绍、项目工程创建、定时器配置、PWM配置、代码解析、效果展示等,为相关项目的开发和应用设计提供了参考。