打印
[活动专区]

【赛元95F】之四:PWM

[复制链接]
744|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
      本次实验利用了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模块有了浅显的认知,还有如中心对齐、互补输出、死区控制、故障检测等知识点还要结合一些小项目进行学习、应用。

使用特权

评论回复

相关帖子

沙发
598330983| | 2020-4-5 19:23 | 只看该作者
非常棒的逻辑分析仪。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

14990

帖子

17

粉丝