PWM是常用的单片机功能,文章将介绍PWM的运行机制,基于8051-ELL库配置PWM功能
在ELL库中,配置PWM最少仅需要三个函数:
/**
* @brief PWM0通道初始化函数,它必须在PWM计数器初始化函数之前调用。
* @details PWM0 road init function,it is best to initialize before the counter.
* @param[in] level PWM开始电平。PWM start level.
* @param[in] fValue 第一个电平翻转点。The value of the first reversal point.
* @param[in] sValue 第二个电平翻转点。The value of the second reversal point.
* @param[in] run 运行控制位。Run control bit.
* @return FSC_SUCCESS 返回成功。Return to success.
* @return FSC_FAIL 返回失败。Return to fail.
**/
void PWM0_Init(PWMStartLevel_Type level,unsigned int fValue,unsigned int sValue,BOOL run);
/**
* @brief PWM计数器初始化,必须在所有PWM初始化函数的后面调用。
* @details PWM counter init function,It must be initialized last.
* @param[in] clkSrc PWM时钟源。PWM clock source.
* @param[in] period PWM周期值(计数器重装载值)。PWM period value (counter reload value)
* @param[in] run 运行控制位。Run control bit.
* @return FSC_SUCCESS 返回成功。Return to success.
* @return FSC_FAIL 返回失败。Return to fail.
**/
void PWM_CNT_Init(PWMCLKSrc_Type clkSrc,unsigned int period,BOOL run);
/**
* @brief PWM0切换复用IO函数。
* @details PWM0 switch out port control function.
* @param[in] port 复用IO枚举体。IO switch enumerator.
* @return FSC_SUCCESS 返回成功。Return to success.
* @return FSC_FAIL 返回失败。Return to fail.
**/
void GPIO_PWM0_SWPort(GPIOSWPort_Type port);
前一个函数为初始化函数,需要设置有效电平,翻转点,使能。
翻转点的设置
如图第一个翻转点为T1,计数大于T1为低电平,大于T2翻转为高电平,可以得到占空比计算公式:????????
????????????????????????????????
当T2=Period时,有:
?
?即???????????????????????????????????????????????
周期(Period)的设置
频率的计算公式:
???????????????????????????????????????????????????????????????????????????????????? ?
(SCLK为时钟频率;SCLK_DIV为分频系数,取值为0~16)
这里的频率是定时器的计数节拍,由?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ? ? ? ?
可知每次计时的时间?t ,
通过前面的解析,初始化函数的参数简化为
PWM0_Init(PWM_Start_High_Level,PWM_Duty,PWM_Period,ENABLE); //0~32767 [0,7FFF]
PWM_CNT_Init(PWM_SCLK_DIV_16,PWM_Period,ENABLE); //分频0~F,装载值[0,7FFF],使能
初始化后可以通过按键修改变量并再次调用初始化函数传入参数实现按键调整占空比,需要注意的是这里的PWM0~16个通道使用的为同一个计数单元,不能改成不同的频率。
更多内容请查看?泽文i?的ELL库开发手册
8051-ELL-Old: 这是一个专门为增强型1T8051内核MCU设计的硬件抽象平台。新版本已放到Open-ELL组织下孵化。 (gitee.com)
|