本次实验利用了SC95F8617内部的脉冲宽度调制计数器(PWM)采用独立模式 产生一路周期为50KHz,占空比为50%的PWM小型,并经P50输出。利用逻辑分析仪对该信号进行抓取、分析、验证。
一、实验资源
1、SC95F8617 demo板;
2、SC-LINK;
3、Keil C51 V9.60;
4、逻辑分析仪及配套软件Logic 1.1.15;
二、相关资源简介
从数据手册上可以看到,SC95F8617可以提供8路12位精度、共用周期、占空比单独可调的PWM,并有PWM溢出中断功能。工作模式分为8路独立模式及4组互补带死区控制的PWM,在互补模式下支持故障检测机制。互补模式面对电机控制具有强大优势。除此之外,SC95F8617的PWM类型分为“边沿对齐型”和“中心对齐型”,如下图:
从上图可以看出,此两种形式的主要差别在于“边沿对齐型”和“中心对齐型”周期,在相同PWM时钟及PWMPD[11:0]配置下,“边沿对齐型”产生PWM频率是“中心对齐型”产生PWM频率的2倍。
这些模式及类型可以通过PWMMOD[3:2]]寄存器进行设置,PWMCFG[3:0]存放的是PWM的周期设置高4位PWMPD[11:8],与PWMCON[7:0]中的PWMPD[7:0] 共同组成PWMPD[11:0],其与PWM时钟配合产生PWM的周期值;当PWM周期值确定后,通过改变PDTxy [11:0]的值即可改变PWM输出波型的占空比值,当然还可根据应用需求改变PWM输出的方向,这个操作也是非常简单地操作INVxy(x=4~5, y=0~3)即可实现。如下图所示:
三、程序实现
通过前面对手册的阅读学习,并参考了官方的DEMO完成如下:
void PWM_Config(void)
{
PWMMOD = 0x00; //PWMMD[1:0]=00 独立、边沿对齐模式
PWMCFG = 0x80; //ENPWM=1 PWM处于工作状态,PWM输出口的状态由寄存器ENPxy控制(x=4~5, y=0~3)
//PWMCK=00 PWM时钟档位选择:fHRC = 32MHz
PWMCFG |= 0x02; //PWMPD[11:8]=0X02,PWM周期值高4位
PWMCON = 0x7F; //PWMPD[7:0]=0X7F,PWM周期值低8位
PWMRD_50 = 0x8000; //ENP50=1 P50作为PWM波形输出口;INV50=0 P50 PWM波形输出不反向
PWMRD_50 |= 0x0140; //设置占空比 PWM波形的高电平宽度PDT50[11:0] = 0x0140
IE1 = 0x02; //EPWM=1:允许PWM计数器溢出时产生中断
EA = 1; //总中断使能
}
void PWM_INT() interrupt 8
{
if(PWMCFG & 0x40) //PWMIF=1,产生中断
{
PWMCFG &= ~0x40; //清除中断标志位
}
}
四、实验结果
通过对PWM输出波型的抓取、分析可以看到PWM输出精度还是令人满意的。
五、总结
通过本次小实验对SC95F8617的PWM模块有了浅显的认知,还有如中心对齐、互补输出、死区控制、故障检测等知识点还要结合一些小项目进行学习、应用。
|