【WCH蓝牙系列芯片】-基于CH582开发板—基础外设输出PWM波形讲解

发布时间 2023-09-02 15:12:14作者: zyl4444

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

在WCH官方提供的CH583的EVT资源包中,我们可以找到PWMX的例程,这是一个8位的PWM输出,占空比和周期可调的例程。

  

 1 int main()
 2 {
 3     SetSysClock(CLK_SOURCE_PLL_60MHz);  //系统时钟60M--Fsys
 4     /* 配置GPIO *///推挽输出
 5     GPIOA_ModeCfg(GPIO_Pin_12, GPIO_ModeOut_PP_5mA); // PA12 - PWM4
 6     GPIOA_ModeCfg(GPIO_Pin_13, GPIO_ModeOut_PP_5mA); // PA13 - PWM5
 7     GPIOB_ModeCfg(GPIO_Pin_0, GPIO_ModeOut_PP_5mA);  // PB0 - PWM6
 8     GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeOut_PP_5mA);  // PB4 - PWM7
 9     GPIOB_ModeCfg(GPIO_Pin_6, GPIO_ModeOut_PP_5mA);  // PB6 - PWM8
10     GPIOB_ModeCfg(GPIO_Pin_7, GPIO_ModeOut_PP_5mA);  // PB7 - PWM9
11     GPIOB_ModeCfg(GPIO_Pin_14, GPIO_ModeOut_PP_5mA); // PB14 - PWM10
12 //  GPIOB_ModeCfg(GPIO_Pin_23, GPIO_ModeOut_PP_5mA); // PB23 - PWM11 此脚复用为外部复位脚,需要关闭此功能才能开启PWM功能
13 
14     PWMX_CLKCfg(4);  //4分频                                 // 周期cycle = 4/Fsys(主频60M),一个时钟频率为60/4=15MHz
15     PWMX_CycleCfg(PWMX_Cycle_64);                     // 周期 = 64*cycle,配置PWM周期为64倍的PWM时钟周期
16     PWMX_ACTOUT(CH_PWM4, 32, Low_Level, ENABLE);  // 50% 占空比 ,周期的二分之一
17     PWMX_ACTOUT(CH_PWM5, 64 / 4, Low_Level, ENABLE);  // 25% 占空比
18     PWMX_ACTOUT(CH_PWM6, 64 / 4, Low_Level, ENABLE);  // 25% 占空比
19     PWMX_ACTOUT(CH_PWM7, 64 / 4, Low_Level, ENABLE);  // 25% 占空比
20     PWMX_ACTOUT(CH_PWM8, 64 / 4, Low_Level, ENABLE);  // 25% 占空比
21     PWMX_ACTOUT(CH_PWM9, 64 / 4, Low_Level, ENABLE);  // 25% 占空比
22     PWMX_ACTOUT(CH_PWM10, 64 / 4, Low_Level, ENABLE); // 25% 占空比
23 
24     while(1);
25 
26 }

 

在这个例程中,先设置系统时钟60M,然后再配置相对应的GPIO为推挽输出模式,

其中PWMX_CLKCfg(4);是将时钟分频系数设置为4,这样可以算出时钟频率为60M/4=15M
PWMX_CycleCfg(PWMX_Cycle_64);是将PWM周期配置为64倍的PWM时钟周期。因此PWM周期为64*(1/15MHz)= 4.267us.
PWMX_ACTOUT(CH_PWM4, 32, Low_Level, ENABLE);
第一个参数是将配置GPIO口对应的PWM通道4
第二个参数是设置占空比,这是为32,即为64周期的二分之一,(32/64)*100% = 50%,这样占空比就设置为50%,

对应的脉冲宽度为4.267us的一半,为 2.1335us
第三个参数表示定义 PWM 的极性设置低电平有效
第四个参数为使能PWM通道
PWMX_ACTOUT(CH_PWM5, 64 / 4, Low_Level, ENABLE); 这里设置PWM通道5输出的占空比为25%,占空比计算为(64/4)/64*100% = 25%

通过逻辑分析仪,抓取了PA12对应的PWM通道4的波形,可以看出占空比为50%,周期为4.267us,频率是234.33KHz。

如果在使用PWM外设中,使用蓝牙功能,主频设置为60M最好不要轻易改动,其中PWMx时钟分频寄存器(R8_PWM_CLOCK_DIV)的范围是1-255PWM时钟周期配置可以有八种,(31、32、63、64、127、128、255、256)。

所以当主频60M
最低频率为:60M/255/256 = 919.12Hz
最高频率为:60M/1/31 = 1.935MHz