【沁恒CH585开发板免费试用体验】+PWM调节与彩灯渐变效果 - RISC-V MCU技术社区 - 电子技术论坛 - 广受欢迎的专业电子论坛
分享 收藏 返回

[文章]

【沁恒CH585开发板免费试用体验】+PWM调节与彩灯渐变效果

CH585提供了多路PWM,除了定时器提供的 4 路 26 位 PWM 输出之外,系统还提供了 8 路 8 位 PWM 输出(PWM4~PWM11)或6 路 16 位 PWM 输出(PWM4~PWM9),其占空比可调,PWM 周期固定可选 8 种周期。

时钟周期数(Ncyc)计算公式:

数据宽度n=8/7/6:Ncyc=2^n-RB_PWM_CYCLE_SEL;

16 位数据宽度 Ncyc=RB_PWM_CYC_VALUE+1

PWMx 占空比计算公式:

占空比=R8_PWMx_DATA/Ncyc

PWMx 输出频率 Fpwmout 计算公式:

PWMx 输出频率 Fpwmout=Fpwm/Ncyc=Fsys/R8_PWM_CLOCK_DIV/Ncyc

为了使用PWM的调节功能与RGB彩色相配合来制作色彩渐变的效果,是选取3路PWM输出通道与彩灯的RGB引脚相连。

3路PWM与彩灯的连接关系为:

R-----PWM4

G-----PWM5

B-----PWM6

实现色彩渐变效果的主程序为:

uint8_t dutyCycle = 0; 
uint8_t direction = 0;  

int main()
{
    uint8_t i;
    HSECFG_Capacitance(HSECap_18p);
    SetSysClock(CLK_SOURCE_HSE_PLL_62_4MHz); 

    /* 配置GPIO */
    GPIOA_ModeCfg(GPIO_Pin_12, GPIO_ModeOut_PP_5mA); // PA12 - PWM4
    GPIOA_ModeCfg(GPIO_Pin_13, GPIO_ModeOut_PP_5mA); // PA13 - PWM5
    GPIOB_ModeCfg(GPIO_Pin_0, GPIO_ModeOut_PP_5mA);  // PB0 - PWM6
    PWMX_CLKCfg(4);                                           // cycle = 4/Fsys
    PWMX_CycleCfg(PWMX_Cycle_64);                         // 周期 = 64*cycle
    PWMX_ACTOUT(CH_PWM4, 64 / 100, Low_Level, ENABLE);  // 1% 占空比
    PWMX_ACTOUT(CH_PWM5, 64 / 100, Low_Level, ENABLE);  // 1% 占空比
    PWMX_ACTOUT(CH_PWM6, 64 / 100, Low_Level, ENABLE);  // 1% 占空比
    while(1) 
    { 
               if(direction == 0) 
               { 
                   dutyCycle+=10; 
               } 
               else if(direction == 1) 
               { 
                   dutyCycle-=10; 
               } 
               DelayMs(80);
               if(i==0)
               {
                    PWMX_ACTOUT(CH_PWM4, (64 * dutyCycle)/ 100, Low_Level, ENABLE); 
                    PWMX_ACTOUT(CH_PWM5,(64 * 1)/ 100, Low_Level, ENABLE);
                    PWMX_ACTOUT(CH_PWM6, (64 * 1)/ 100, Low_Level, ENABLE);
               } 
               if(i==1)
               {
                   PWMX_ACTOUT(CH_PWM4, (64 * 1)/ 100, Low_Level, ENABLE);
                   ,PWMX_ACTOUT(CH_PWM5, (64 * dutyCycle)/ 100, Low_Level, ENABLE); 
                     PWMX_ACTOUT(CH_PWM6, (64 * 1)/ 100, Low_Level, ENABLE); 
               } 
               if(i==2)
               {
                     PWMX_ACTOUT(CH_PWM4, (64 * 1)/ 100, Low_Level, ENABLE);
                     PWMX_ACTOUT(CH_PWM5, (64 * 1)/ 100, Low_Level, ENABLE); 
                     PWMX_ACTOUT(CH_PWM6, (64 * dutyCycle)/ 100, Low_Level, ENABLE); 
               } 
               if(dutyCycle > 90) 
                     direction = 1; 
               else if(dutyCycle < 10) 
               {
                     direction = 0;
                     i=(i+1)%3;
                     DelayMs(50); 
               }
     } 
}

经程序的编译与下载,其测试效果如图1至图3所示。

image.png
图1 显示紫色

image.png

图2 紫色渐弱

image.png

图3 显示青色

色彩渐变效果演示:

色彩渐变

更多回帖

×
发帖