1、引言
本篇测评报告主要完成串口通讯以及舵机PWM控制的实现。
上篇 【RA-Eco-RA4E2-64PIN-V1.0开发板试用】+初次见面+MDK生成代码+点灯地址如下: 【RA-Eco-RA4E2-64PIN-V1.0开发板试用】+初次见面+MDK生成代码+点灯 - 瑞萨单片机论坛 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com)
2、舵机控制原理
舵机的主要组成部分为伺服电机,给舵机输入不同的信号,来控制其旋转到不同的角度。舵机接收的是PWM信号,当信号进入内部电路产生一个偏置电压,触发电机通过减速齿轮带动电位器移动,使电压差为零时,电机停转,从而达到伺服的效果。简单来说就是给舵机一个特定的PWM信号,舵机就可以旋转到指定的位置。
舵机接收的PWM信号频率为50Hz,即周期为20ms。当高电平的脉宽在0.5ms~ 2.5ms之间时舵机就可以对应旋转到不同的角度。
舵机照片
控制原理
t= 0.5ms舵机会转到 0°
t = 1.0ms舵机会转到 45°
t = 1.5ms舵机会转到 90°
t = 2.0ms舵机会转到 135°
t = 2.5ms舵机会转到 180°
3、硬件介绍
SG90舵机硬件
红线:3.3v/5v
黑/棕线: GND
黄线:信号线
4、软件实现
4.1、FSP smart configuraton设置
首先设置时钟为3.125MHz。
设置定时器的输出引脚P101。
设置stacks的选用锯齿波PWM,设置50Hz。
同理设置串口通讯。然后生成MDK工程文件。
4.2、MDK工程文件编辑
新建PWM.C文件
uint32_t led0pwmval=3125;
uint8_t dir=1;
fsp_err_t err = FSP_SUCCESS;
void PWM_Init(void)
{
err = R_GPT_Open(&g_timer0_ctrl, &g_timer0_cfg);
assert(FSP_SUCCESS == err);
(void) R_GPT_Start(&g_timer0_ctrl);
R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);
err = R_GPT_PeriodSet(&g_timer0_ctrl, 62500);
assert(FSP_SUCCESS == err);
R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);
}
void PWM(void)
{
if(dir)led0pwmval+=625;
else led0pwmval-=625;
if(led0pwmval>6250)dir=0;
if(led0pwmval==0)dir=1;
err = R_GPT_DutyCycleSet(&g_timer0_ctrl, led0pwmval, GPT_IO_PIN_GTIOCA);
assert(FSP_SUCCESS == err);
R_BSP_SoftwareDelay (200, BSP_DELAY_UNITS_MILLISECONDS);
err = R_GPT_Reset(&g_timer0_ctrl);
assert(FSP_SUCCESS == err);
R_BSP_SoftwareDelay (10, BSP_DELAY_UNITS_MILLISECONDS);
}
5、测试
使用串口烧录,参考第一篇步骤。
视频如下。
参考:
STM32 在PC端串口助手上打印中文字符----printf()函数重定向_串口打印可以输出汉字吗-CSDN博客
【瑞萨RA_FSP】GPT—— PWM功能详解_瑞萨pwm-CSDN博客
3RA生态之定时器输出PWM_瑞萨ra
pwm+dma-CSDN博客
47ca22a6ba2e942bc8710eb0ab0a2a01
|