STC15W4K58S4 PWM波输出实验3

            PWM波输出实验3:带死区控制的波形输出

所谓死区,就是两路同为高电平,或同为低电平,一般应用在电机控制中,防止线圈短路烧毁。

要求:

1.生成两个互补对称的PWM波

2.PWM发生器的时钟频率为系统时钟/4

3.波形由PWM4,PWM5输出,带有4个PWM时钟的相位延迟

4.周期为20个PWM时钟

5.PWM4的有效高电平为13个PWM时钟

6.PWM5的有效低电平为10个PWM时钟

7.PWM4和PWM5的前端死区为2个PWM时钟,末端死区为1个PWM时钟

这里需要注意的问题是:

在设置PWM4和PWM5的初始电平的时候,要分别设置,而不能一次设置两个。

例如:如果想一次设置PWM4为低,PWM5为高:

                           PWMCFG&=0xFB;

则只有PWM4被设置为低,PWM5并没有设置为高。

只有这样才能使PWM4初始电平为低,PWM5为高

                           PWMCFG&=0xFB; //1111 1011 PWM4输出初始电平为低电平

                           PWMCFG|=0x08; //0000 1000 PWM5输出初始电平为高电平

程序代码:

//时钟频率12MHz

#include "STC15W4K.H"
#define uchar unsigned char

#define CYCLE   19    //定义PWM周期(最大值为32767)


// 端口模式         将所有端口设置为准双向弱上拉
void port_mode()     
{
        P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00;P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00;
        P4M1=0x00; P4M0=0x00;P5M1=0x00; P5M0=0x00;P6M1=0x00; P6M0=0x00;P7M1=0x00; P7M0=0x00; 

void main()
{

        //系统上电后,所有与PWM有关的端口都是高阻态模式,
        //所以在使用PWM前,要将端口设置为准双向弱上拉模式
        //根据实际需要,设置为强推挽也可以输出PWM波,只是一定要串上电阻1K-10K的电阻
        port_mode();//将所有端口初始化为准双向弱上拉
        

         //将P_SW2寄存器的最高位置1,
         //也就是使能访问外部扩展特殊功能寄存器XSFR,而不是访问外部数据寄存器XRAM
         P_SW2|=0x80;

         //设置PWM配置寄存器
         //其他各位都为1,只有C4INI=0,C5INI=1 也就是设置PWM4初始电平为低  PWM5初始电平为高
         PWMCFG&=0xFB; //1111 1011 PWM4输出初始电平为低电平
         PWMCFG|=0x08; //0000 1000 PWM5输出初始电平为高电平


         //设置PWM计数器的时钟源为 系统时钟分频,而不是定时器T2溢出,设置为系统时钟的3+1=4分频
         PWMCKS=0x03;

         //PWM计数器设置计数值,也就是设置PWM周期
         PWMC=19;        

         //第一次翻转的计数值
         PWM4T1=3; 
         //第二次翻转的计数值
         PWM4T2=16;  

         //第一次翻转的计数值
         PWM5T1=5; 
         //第二次翻转的计数值
         PWM5T2=15;  


         //注意这个寄存器与PWMCR不同
         //PWM4第一引脚输出,即P2.2输出
         //关闭PWM4中断     关闭T1匹配翻转中断     关闭T2匹配翻转中断
         PWM4CR=0;

         //PWM5第一引脚输出,即P2.3输出
         //关闭PWM5中断     关闭T1匹配翻转中断     关闭T2匹配翻转中断
         PWM5CR=0;

         //由于前面已经设置完XSFR,这里设置为禁止访问XSFR
         //也就是设置为对外部数据存储器XRAM的访问
         P_SW2&=0x0F;

         //开启总PWM 波形发生器功能,开启PWM4输出,开启PWM5输出
         PWMCR|=0x8C;
         
         while(1);
}

实验效果:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值