在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于51單片機的直流電機驅(qū)動(L298)

            基于51單片機的直流電機驅(qū)動(L298)

            作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
            L298是SGS公司的產(chǎn)品,L298N為15個管角的單塊集成電路,高電壓,高電流,四通道驅(qū)動,設(shè)計用L298N來接收DTL或者TTL邏輯電平,驅(qū)動感性負(fù)載(比如繼電器,直流和步進(jìn)馬達(dá))和開關(guān)電源晶體管。內(nèi)部包含4通道邏輯驅(qū)動電路,其額定工作電流為1A,最大可達(dá)1.5A,Vss電壓最小4.5V,最大可達(dá)36V;Vs電壓最大值也是36V。L298N可直接對電機進(jìn)行控制,無須隔離電路,可以驅(qū)動雙電機。
            1,L298內(nèi)部的原理圖



            2,L298引腳符號及功能



            3,L298的邏輯功能



            當(dāng)使能端為高電平時,輸入端IN1為PWM信號,IN2為低電平信號時,電機正轉(zhuǎn);輸入端IN1為低電平信號,IN2為PWM信號時,電機反轉(zhuǎn);;IN1與IN2相同時,電機快速停止。當(dāng)使能端為低電平時,電動機停止轉(zhuǎn)動。
            在對直流電動機電壓的控制和驅(qū)動中,半導(dǎo)體功率器件(L298)在使用上可以分為兩種方式:線性放大驅(qū)動方式和開關(guān)驅(qū)動方式在線性放大驅(qū)動方式。
            半導(dǎo)體功率器件工作在線性區(qū)優(yōu)點是控制原理簡單,輸出波動小,線性好,對鄰近電路干擾小,缺點為功率器件工作在線性區(qū),功率低和散熱問題嚴(yán)重。開關(guān)驅(qū)動方式是使半導(dǎo)體功率器件工作在開關(guān)狀態(tài),通過脈調(diào)制(PWM)來控制電動機的電壓,從而實現(xiàn)電動機轉(zhuǎn)速的控制。



            #include
            #include
            #define uchar unsigned char
            #define uint unsigned int


            sbit MOTOR_A_1=P3^6;
            sbit MOTOR_A_2=P3^7;
            sbit k1=P1^0; //定義k1為p1.0口
            sbit k2=P1^1; //定義k2為p1.1口
            sbit k3=P1^2; //定義k3為p1.2口
            sbit k4=P1^3; //定義k4為p1.3口
            uchar T=0; //定時標(biāo)記
            uchar W=0; //脈寬值 0~100
            uchar A=0; //方向標(biāo)記 0,1
            uchar k=0; //按鍵標(biāo)記
            uchar i=0; //計數(shù)變量


            uchar code table1[]={
            0x3f,0x06,0x5b,0x4f,
            0x66,0x6d,0x7d,0x07,
            0x7f,0x6f,0x77,0x7c,
            0x39,0x5e,0x79,0x71};


            uchar code table2[]={0xfe,0xfb,0xfd,0xf7};

            void delayms(uint t);

            void disp(void)
            {
            P2=table2[3];
            P0=table1[W]; //顯示占空比個位
            delayms(1); //延時1ms
            P2=0xff; //P0清1


            P2=table2[2];
            P0=table1[W/100]; //顯示占空比百位
            delayms(1); //延時1ms
            P2=0xff; //P0清1

            P2=table2[1];
            P0=table1[W/10]; //顯示占空比十位
            delayms(1); //延時1ms
            P2=0xff; //P0清1


            P2=table2[0];
            P0=table1[A]; //顯示方向
            delayms(1); //延時1ms
            P2=0xff; //P0清1
            }







            void init(void)
            {
            //啟動中斷
            TMOD=0x01;
            EA=1;
            ET0=1;
            TR0=1;
            //設(shè)置定時時間
            TH0=0xff;
            TL0=0xf6;
            }


            void timer0() interrupt 1
            {
            //重置定時器時間
            TH0=0xff;
            TL0=0xf6;
            T++; //定時標(biāo)記加1
            disp(); //數(shù)碼管顯示
            if(k==0)
            {
            if(T>W)
            MOTOR_A_1 =0;
            else
            MOTOR_A_1 =1;
            }
            else
            {
            if(T>W)
            MOTOR_A_2 =0;
            else
            MOTOR_A_2 =1;
            }

            if(T==100)
            T=0;
            }

            void delayms(uint t)
            {
            uchar j;
            while(t--)
            {
            for(j=0;j<250;j++) //循環(huán)250次
            {
            _nop_(); //系統(tǒng)延時
            _nop_(); //系統(tǒng)延時
            _nop_(); //系統(tǒng)延時
            _nop_(); //系統(tǒng)延時
            }
            }
            }

            void key(void) //按鍵判斷程序
            {
            if(k1==0) //按鍵1按下
            {
            while(k1==0); //按鍵1抬起
            if(W==100) //如果脈寬為100
            W=0; //脈寬置0
            else
            W+=1; //否則加1
            }
            else if(k2==0) //按鍵2按下
            {
            while(k2==0); //按鍵2抬起
            if(W==0) //如果脈寬為0
            W=100; //脈寬設(shè)置成100
            else
            W-=1; //否則減1
            }
            else if(k3==0) //按鍵3按下
            {
            while(k3==0); //按鍵3抬起
            A=!A; //方向標(biāo)記取反
            k=!k; //按鍵標(biāo)記取反
            }
            else if(k4==0) //按鍵4按下
            {
            while(k4==0); //按鍵4抬起
            W=0; //脈寬清0
            }
            }


            上一頁 1 2 下一頁

            評論


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

            關(guān)閉