新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 固定占空比PWM頻率可調(diào)子程序

        固定占空比PWM頻率可調(diào)子程序

        作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò) 收藏
        //PWM頻率=1/((PR2+1)*4*(1/fosc)*預(yù)分頻值)HZ

        //spdval=255 頻率=11.71875KHz
        //spdval=14 頻率=200.0KHz
        void HiSpd(unsigned char spdval)
        {
        unsigned char x;
        unsigned int y;
        x=PR2;
        if(spdval==x) return;
        if(spdval<14) //
        spdval=14; //最大限定在200KHz
        T2CKPS1=0;
        T2CKPS0=0; //預(yù)分頻1:1
        /*
        y=(spdval+1)*5/2; //(CCPR1L:CCP1CON<5:4>)=(PR2+1)/占空比
        if(0x0001==(y&0x0001))
        {CCP2Y=1;}
        else
        {CCP2Y=0;}
        if(0x0002==(y&0x0002))
        {CCP2X=1;}
        else
        {CCP2X=0;}
        CCPR2L=y>>2;
        TMR2IF=0;
        while(!TMR2IF);
        PR2=spdval;
        */
        if(spdval>x)
        {
        for(;x
        {
        y=(x+1)*5/2; //(CCPR1L:CCP1CON<5:4>)=(PR2+1)/占空比
        if(0x0001==(y&0x0001))
        {CCP2Y=1;}
        else
        {CCP2Y=0;}
        if(0x0002==(y&0x0002))
        {CCP2X=1;}
        else
        {CCP2X=0;}
        CCPR2L=y>>2;
        TMR2IF=0;
        while(!TMR2IF);
        PR2=x;
        if((30<=x)&&(x<60))
        {
        delaynms(10);
        }
        else if((24<=x)&&(x<30))
        {
        delaynms(30);
        }
        else if((19<=x)&&(x<24))//120KHz~150KHz
        {
        delaynms(35);
        }
        else if((14<=x)&&(x<19))//150KHz~200KHz
        {
        delaynms(40);
        }
        else
        {}
        }
        }
        else
        {
        for(;x>=spdval;x--)
        {
        y=(x+1)*5/2; //(CCPR1L:CCP1CON<5:4>)=(PR2+1)/占空比
        if(0x0001==(y&0x0001))
        {CCP2Y=1;}
        else
        {CCP2Y=0;}
        if(0x0002==(y&0x0002))
        {CCP2X=1;}
        else
        {CCP2X=0;}
        CCPR2L=y>>2;
        TMR2IF=0;
        while(!TMR2IF);
        PR2=x;
        if((30<=x)&&(x<60))
        {
        delaynms(10);
        }
        else if((24<=x)&&(x<30))
        {
        delaynms(30);
        }
        else if((19<=x)&&(x<24))
        {
        delaynms(35);
        }
        else if((14<=x)&&(x<19))//150KHz~200KHz
        {
        delaynms(40);
        }
        else
        {}
        }
        }
        }
        //spdval=255 頻率=732.42Hz
        //spdval=15 頻率=11.71875KHz
        void LoSpd(unsigned char spdval)
        {
        unsigned char x;
        unsigned int y;
        x=PR2;
        if(spdval==x) return;
        if(spdval<15) //
        spdval=15; //最大限定在11.71875KHz
        T2CKPS1=1;
        T2CKPS0=0; //預(yù)分頻1:16
        /*
        y=(spdval+1)*5/2; //(CCPR1L:CCP1CON<5:4>)=(PR2+1)/占空比
        if(0x0001==(y&0x0001))
        {CCP2Y=1;}
        else
        {CCP2Y=0;}
        if(0x0002==(y&0x0002))
        {CCP2X=1;}
        else
        {CCP2X=0;}
        CCPR2L=y>>2;
        TMR2IF=0;
        while(!TMR2IF);
        PR2=spdval;
        */
        if(spdval>x)
        {
        for(;x
        {
        y=(x+1)*5/2; //(CCPR1L:CCP1CON<5:4>)=(PR2+1)/占空比
        if(0x0001==(y&0x0001))
        {CCP2Y=1;}
        else
        {CCP2Y=0;}
        if(0x0002==(y&0x0002))
        {CCP2X=1;}
        else
        {CCP2X=0;}
        CCPR2L=y>>2;
        TMR2IF=0;
        while(!TMR2IF);
        PR2=x;

        if((30<=x)&&(x<60))
        {
        delaynms(10);
        }
        else if((15<=x)&&(x<30))
        {
        delaynms(15);
        }
        else
        {}
        }
        }
        else
        {
        for(;x>=spdval;x--)
        {
        y=(x+1)*5/2; //(CCPR1L:CCP1CON<5:4>)=(PR2+1)/占空比
        if(0x0001==(y&0x0001))
        {CCP2Y=1;}
        else
        {CCP2Y=0;}
        if(0x0002==(y&0x0002))
        {CCP2X=1;}
        else
        {CCP2X=0;}
        CCPR2L=y>>2;
        TMR2IF=0;
        while(!TMR2IF);
        PR2=x;

        if((30<=x)&&(x<60))
        {
        delaynms(10);
        }
        else if((15<=x)&&(x<30))
        {
        delaynms(15);
        }
        else
        {}
        }
        }
        }

        本文引用地址:http://www.104case.com/article/201611/316736.htm


        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 南投市| 嘉义市| 秦安县| 河北省| 黑龙江省| 宁化县| 沭阳县| 长岭县| 安仁县| 宁陕县| 巍山| 青海省| 逊克县| 莱芜市| 大石桥市| 山东省| 西乌珠穆沁旗| 吉林省| 邯郸市| 福海县| 永福县| 合肥市| 察哈| 汕头市| 嫩江县| 青铜峡市| 利川市| 白河县| 德阳市| 沁水县| 潍坊市| 班戈县| 阜新市| 婺源县| 恩平市| 八宿县| 都匀市| 白朗县| 祁连县| 吴堡县| 永登县|