新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 機(jī)器人教程1:如何利用51單片機(jī)輸出PWM波

        機(jī)器人教程1:如何利用51單片機(jī)輸出PWM波

        作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏

        /************電機(jī)正反向控制**************/

        void Motor_turn(void)

        {

        if(key_turn==0)

        {

        delayxms(2);//此處時(shí)間不能太長(zhǎng),否者會(huì)的中斷產(chǎn)生沖突

        if(key_turn==0)

        {

        flag=~flag;

        }

        while(!key_turn);

        }

        }

        /***********定時(shí)器0初始化***********/

        void timer0_init(void)

        {

        TMOD=0x01; //定時(shí)器0工作于方式1

        TH0=(65536-10)/256;

        TL0=(65536-10)%256;

        TR0=1;

        ET0=1;

        EA=1;

        }

        /**************定時(shí)0中斷處理******************/

        void timer0_int(void) interrupt 1

        {

        TR0=0;//設(shè)置定時(shí)器初值期間,關(guān)閉定時(shí)器

        TH0=(65536-10)/256;

        TL0=(65536-10)%256;

        TR0=1;

        if(flag==1)//電機(jī)正轉(zhuǎn)

        {

        PWM1=0;

        time++;

        if(time{

        PWM2=1;

        }

        else

        PWM2=0;

        if(time>=100)

        {

        time=0;

        }

        }

        else //電機(jī)反轉(zhuǎn)

        {

        PWM2=0;

        time++;

        if(time{

        PWM1=1;

        }

        else

        PWM1=0;

        if(time>=100)

        {

        time=0;

        }

        }

        }

        4、程序4、使單片機(jī)輸出PWM,并能控制正反轉(zhuǎn)和實(shí)現(xiàn)調(diào)速

        為了使大家徹底掌握此方面,下面再給出一個(gè)復(fù)雜一點(diǎn)的程序,實(shí)現(xiàn)的功能為通過(guò)一個(gè)按鍵控制正反轉(zhuǎn)并通過(guò)另外兩個(gè)按鍵使之可以在0到20級(jí)之間調(diào)速的程序。

        /*******************************************************************/

        /*程序名:PWM直流電機(jī)調(diào)速*/

        /*晶振:11.00592 MHz CPU型號(hào):STC89C52 */

        /*直流電機(jī)的PWM波控制,可以通過(guò)按鍵控制正反轉(zhuǎn)并在0到20級(jí)之間調(diào)速*/

        /*****************************************************************/

        #include

        #define uint unsigned int

        #define uchar unsigned char

        uchar time,count=50,flag=1;//低電平的占空比

        sbit PWM1=P2^0;//PWM通道1,反轉(zhuǎn)脈沖

        sbit PWM2=P2^1;//PWM通道2,正轉(zhuǎn)脈沖

        sbit key_add=P3^5;//電機(jī)加速

        sbit key_dec=P3^6;//電機(jī)減速

        sbit key_turn=P3^7;//電機(jī)換向

        /************函數(shù)聲明**************/

        void delayxms(uint z);

        void Motor_turn();

        void Motor_add();

        void Motor_dec();

        void timer0_init();

        /*********主函數(shù)********************/

        void main()

        {

        timer0_init();

        while(1)

        {

        Motor_turn();

        Motor_add();

        Motor_dec();

        }

        }

        /****************延時(shí)處理**********************/

        void delayxms(uint z)//延時(shí)xms程序

        {

        uint x,y;

        for(y=z;x>0;x--)

        for(y=110;y>0;y--);

        }

        /************電機(jī)正反向控制**************/

        void Motor_turn()

        {

        if(key_turn==0)

        {

        delayxms(2);//此處時(shí)間不能太長(zhǎng),否者會(huì)的中斷產(chǎn)生沖突

        if(key_turn==0)

        {

        flag=~flag;

        }

        while(!key_turn);

        }

        }

        void Motor_add()//電機(jī)加速

        {

        if(key_add==0)

        {

        delayxms(2);//此處時(shí)間不能太長(zhǎng),否者會(huì)的中斷產(chǎn)生沖突

        if(key_add==0)

        {

        count+=5;

        if(count>=100)

        {

        count=0;

        }

        }

        while(!key_add);

        }

        }

        void Motor_dec()//電機(jī)加減速

        {

        if(key_dec==0)

        {

        delayxms(2);//此處時(shí)間不能太長(zhǎng),否者會(huì)的中斷產(chǎn)生沖突

        if(key_dec==0)

        {

        count-=5;

        if(count>=100)

        {

        count=0;

        }

        }

        while(!key_dec);

        }

        }

        /***********定時(shí)器0初始化***********/

        void timer0_init()

        {

        TMOD=0x01; //定時(shí)器0工作于方式1

        TH0=(65536-10)/256;

        TL0=(65536-10)%256;

        TR0=1;

        ET0=1;

        EA=1;

        }



        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 即墨市| 德清县| 东丽区| 鹰潭市| 山东省| 江川县| 武清区| 新安县| 沈丘县| 瑞昌市| 孟津县| 安陆市| 三亚市| 南岸区| 广安市| 铅山县| 新密市| 额济纳旗| 肇州县| 大田县| 临西县| 广南县| 内乡县| 玛纳斯县| 达州市| 鹤岗市| 临桂县| 青铜峡市| 阳山县| 沙湾县| 玉环县| 西吉县| 邢台市| 怀化市| 城市| 吴江市| 磐安县| 石城县| 嘉定区| 义乌市| 抚顺市|