瑞萨单片机论坛
直播中

jinglixixi

9年用户 1911经验值
擅长:嵌入式技术 光电显示 接口/总线/驱动 控制/MCU
私信 关注

【RA4M2-SENSOR】+PWM与调节控制

显示占空比

RA4M2-SENSOR开发板具有PWM定时器,可实现不同占空比的脉冲调节功能。

要完成这件事,先要用RASC来生成一个KEIL工程,然后再在KEIL中添加相应的代码即可。

为使用PWM调节功能,需找到"GTIOC2B",将其设置为"P102",见图1所示。
image.png

图1 引脚设置

然后,在栈内加入PWM,见图2所示。
image.png

图2 添加PWM

再按图3所示进行参数设置,在完成设置后,点击“Generate Project Content”按钮,即可生成KEIL项目。
image.png

图3 参数设置

打开所生成的工程,添加设置占空比的函数,其内容为:

void GPT_PWM_SetDuty(uint8_t duty)
{
    timer_info_t info;
    R_GPT_InfoGet(&g_timer2_ctrl, &info);
    uint32_t current_period_counts = info.period_counts;
    uint32_t duty_cycle_counts = (uint32_t)(((uint64_t)current_period_counts * duty) / 100);
    R_GPT_DutyCycleSet(&g_timer2_ctrl, duty_cycle_counts, GPT_IO_PIN_GTIOCB);
}

在配以串口通信功能的情况下,实现呼吸灯效果的主程序为:

void hal_entry(void)
{
          uint8_t duty = 0;
          uint8_t direction = 0;
	   err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
           assert(FSP_SUCCESS == err);	
           err = R_SCI_UART_Read(&g_uart9_ctrl, uart_rx_buffer, 3);
           assert(FSP_SUCCESS == err);
           R_GPT_Open(&g_timer2_ctrl, &g_timer2_cfg);
           R_GPT_Start(&g_timer2_ctrl); // 启动定时器GPT2	
	   printf("RA4M2-SENSOR test : \\r\\n");
		 
	  while(1)
	  {
             if(duty==100)
                direction = 1;
             if(duty == 0)
                direction = 0;
             if(direction)
                duty-=10;
             else
                duty+=10;
             GPT_PWM_SetDuty(duty);
	     printf("duty: %d \\r\\n",duty);				
             R_BSP_SoftwareDelay(200, BSP_DELAY_UNITS_MILLISECONDS);
       }			 
}

经程序的编译和下载,其测试效果如图4和图5所示,说明功能有效。
image.png

图4 测试效果

image.png

图5 显示效果

在添加OLED屏的情况下,其显示效果如图6所示。
image.png

图6 显示占空比

演示视频:

呼吸灯

更多回帖

发帖
×
20
完善资料,
赚取积分