PWM

    技术2022-06-24  50

          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;}


    最新回复(0)