PWM

      XS128 的PWM用来控制舵机和电机。XS128 的PWM调制波有8个独立的输出通道,每个通道有一个计数器,一个周期控制器和两个可供选择的时钟源,通过编程可以实现的时钟周期和左对齐输出或者居中对齐输出。

     现在简单的介绍一下我用到寄存器

     PWM启动寄存器PWME  通过使能位PWMEx可控制相应通道PWM的波形输出和关闭

     PWM时钟选择寄存器PWMCLK  其中0、1、4、5通道可选用ClockA和CLockSA 2、3、6、7通道可选择ClockB、ClockSB

     PWM的预分频寄存器PWMPRCLK  可以对ClockA和ClockB预分频,为总线时钟的1/(2^n)

     PWM的分频寄存存器PWMSCLA PWMSCLB 通过分频可得到CLockSA =ClockA/(2*PWMSCLA ) CLockSB =ClockB/(2*PWMSCLB)

     PWM的极性选择器PWMPOL 例如PWMPOL-PPL0=1,即为通道0在周期开始时输出为高电平。

     PWM波形对齐寄存器PWMCAE 即为 PWMCAE-CAE0=1时,通道0中心对齐输出,PWMCAE-CAE0=0时左对齐输出

     PWM控制寄存器PWMCTL 通过此寄存器可以实现通道的级联,扩大了PWM对外输出脉冲的频率范围  

     PWM通道周期寄存器PWMPERx  每个通道都有一个这样的寄存器

     PWM通道占空比寄存器PWMDTYx 每个通道都有这样的占空比寄存器

//pwm初始化的程序,总线频率为40Mhz

//舵机用PWM12,电机用PWM23 PWM67

 void InitPWM()
{
    PWME=0;//通道全部禁止
   
    PWMCLK_PCLK1=1;//时钟选择CLOCKSA
    PWMCLK_PCLK3=0;//时钟选择CLOCKB
    PWMCLK_PCLK7=0;//时钟选择CLOCKB
   
    PWMPRCLK = 0x04; // A=40M/16=2.5M ,B=40M
    PWMSCLA=5;     //SA=2.5M/2/5=250K
    PWMSCLB=5;    //SB=40/5/2=4M
   
    PWMPOL_PPOL1=1;//初始电平为高
    PWMPOL_PPOL3=1;//初始电平为高
    PWMPOL_PPOL7=1;//初始电平为高
   
    PWMCAE=0x00;//左对齐输出
   
    PWMCTL=0xf0;//01,23,67 级联 
    
    PWMPER01=5000; //  周期为 500K/5000=50HZ
    PWMPER23=10000;  //  周期为 40M/10000=4k
    PWMPER67=10000;  //  周期为 40M/10000=4k
   
    PWMDTY01=0 //  占空比为0%
    PWMDTY23=0;   //  占空比为0%
    PWMDTY67=0;   //  占空比为0%
   
    PWME_PWME1=1; //01使能通道
    PWME_PWME3=1; //23使能通道
    PWME_PWME7=1; //67使能通道
}

void ChangePWM1(unsigned int a)
{
    PWMDTY01=a;
}

void ChangePWM23(unsigned int a)
{
    PWMDTY23=a;
}
void ChangePWM67(unsigned int a)
{
    PWMDTY67=a;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值