本篇使用 RA6E2 的 PWM 输出,来驱动舵机转动,使用 RA6E2 驱动舵机非常方便,只要配置好 GPT PWM 模块,就能轻松实现角度控制。

硬件准备
1、RA6E2 开发板
2、舵机
3、杜邦线若干
接线方式
舵机:
| 开发板引脚 |
舵机引脚 |
|---|
| 3V3 |
VCC |
| GND |
GND |
| P206 |
SIGN |
软件说明
舵机:
• 舵机接受 50 Hz(周期 20 ms)PWM,脉宽 0.5–2.5 ms 对应角度 0–180°
占空比对应角度:
• 0.5 ms → 0°
• 1.5 ms → 90°
• 2.5 ms → 180°
在 RASC 软件里进行 PWM 配置:
时钟配置:
GPT 外设使用 PCLKD 时钟,默认设置为 2 分频 100MHz

由于 RA6E2 只有 16 位定时器,100MHz / 50Hz = 2000000 > 65535,100MHz 时钟无法产生 50Hz 的低频,要使 PCLKD 时钟低于 3.2768MHz 才能产生 50Hz PWM
将 PCLKD 时钟设置为最低,64 分频 3.125MHz,RA6M4 等有 32 位定时器,这里可以设置 100MHz
调低 PCLKD 后, PCLKA 和 PCLKB 也需要调低才能使用,会影响到 UART/SPI 等最大速率,需要确认

引脚配置:
这里使用 GPT5 GTIOC5B 通道,对应引脚 P206

PWM 外设配置:
使能引脚输出

配置完成后,编写代码输出波形,使用逻辑分析仪测量脉冲信号如下:

由于是 3.125M 的时钟,设置 50Hz 即 20ms 的值如下:
(3125000 / 50 = 62500)
R_GPT_PeriodSet(&g_timer5_ctrl, 62500);
设置 1.5ms 脉宽的值如下:R_GPT_DutyCycleSet(&g_timer5_ctrl, 4688, GPT_IO_PIN_GTIOCB);
代码如下:
void PWM_Demo(void)
{
fsp_err_t err = R_GPT_Open(&g_timer5_ctrl, &g_timer5_cfg);
assert(FSP_SUCCESS == err);
(void) R_GPT_Start(&g_timer5_ctrl);
R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);
err = R_GPT_PeriodSet(&g_timer5_ctrl, 62500);
assert(FSP_SUCCESS == err);
R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);
while (1)
{
R_GPT_DutyCycleSet(&g_timer5_ctrl, 1563, GPT_IO_PIN_GTIOCB);
Delay_Ms(1000);
R_GPT_DutyCycleSet(&g_timer5_ctrl, 4688, GPT_IO_PIN_GTIOCB);
Delay_Ms(1000);
R_GPT_DutyCycleSet(&g_timer5_ctrl, 7813, GPT_IO_PIN_GTIOCB);
Delay_Ms(1000);
R_GPT_DutyCycleSet(&g_timer5_ctrl, 4688, GPT_IO_PIN_GTIOCB);
Delay_Ms(1000);
}
}