新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機控制步進電機正反轉

        單片機控制步進電機正反轉

        作者: 時間:2016-11-18 來源:網絡 收藏
        步進電機模塊:

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

        原理圖:

        兩相六線步進電機,步進角7.5度,額定工作電壓12V,完全可以使用5V做實驗。

        以下是引用 gguoqing 在2006-6-11 15:10:02的發言:

        使用偉納定做的20CM杜邦頭實驗連接線,可以很方便的將ME300與步進電機模塊連接起來。

        http://www.willar.com/shop_view.asp?id=47

        在ME300B上使用時,可從J7上引出5V電源到步進電機模塊J1上。

        將J1(ICE)上的P1.0-P1.3用杜邦頭實驗連接線連接到步進電機模塊J2上。

        產品詳情:

        http://www.willar.com/shop_view.asp?id=48。

        以下是本站管理員gguoqing專門編寫的演示程序。

        C語言范例:

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

        /*

        /* ME300系列單片機開發系統演示程序-步進電機鍵控正反轉實驗

        /*

        /* 郵箱: gguoqing@willar.com

        /* 網站:http://www.willar.com;

        /* 作者: gguoqing

        /* 時間: 2006/05/30

        /*

        /*【版權】COPYRIGHT(C)偉納電子www.willar.comALL RIGHTS RESERVED

        /*【聲明】此程序僅用于學習與參考,引用請注明版權和作者信息!

        /*

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

        #include //51芯片管腳定義頭文件

        #include //內部包含延時函數 _nop_();

        #define uchar unsigned char

        #define uintunsigned int

        uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};

        uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};

        sbitK1 = P1^4; //正轉

        sbitK2 = P1^5; //反轉

        sbitK3 = P1^6;

        sbitK4 = P1^7; //停止

        sbitBEEP = P3^7; //蜂鳴器

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

        /*

        /* 延時t毫秒

        /* 11.0592MHz時鐘,延時約1ms

        /*

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

        void delay(uint t)

        {

        uint k;

        while(t--)

        {

        for(k=0; k<125; k++)

        { }

        }

        }

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

        void delayB(uchar x)//x*0.14MS

        {

        uchar i;

        while(x--)

        {

        for (i=0; i<13; i++)

        { }

        }

        }

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

        void beep()

        {

        uchar i;

        for (i=0;i<100;i++)

        {

        delayB(4);

        BEEP=!BEEP; //BEEP取反

        }

        BEEP=1;//關閉蜂鳴器

        }

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

        /*

        /*步進電機正轉

        /*

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

        voidmotor_ffw()

        {

        uchar i;

        uintj;

        for (j=0; j<12; j++)//轉1*n圈

        {

        if(K4==0)

        {break;}//退出此循環程序

        for (i=0; i<8; i++) //一個周期轉30度

        {

        P1 = FFW[ i ];//取數據

        delay(15); //調節轉速

        }

        }

        }

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

        /*

        /*步進電機反轉

        /*

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

        voidmotor_rev()

        {

        uchar i;

        uintj;

        for (j=0; j<12; j++) //轉1×n圈

        {

        if(K4==0)

        {break;} //退出此循環程序

        for (i=0; i<8; i++)//一個周期轉30度

        {

        P1 = REV[ i ];//取數據

        delay(15); //調節轉速

        }

        }

        }

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

        *

        *主程序

        *

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

        main()

        {

        uchar r,N=5; //N 步進電機運轉圈數

        while(1)

        {

        if(K1==0)

        {

        beep();

        for(r=0;r

        {

        motor_ffw(); //電機正轉

        if(K4==0)

        {beep();break;}//退出此循環程序

        }

        }

        else if(K2==0)

        {

        beep();

        for(r=0;r

        {

        motor_rev(); //電機反轉

        if(K4==0)

        {beep();break;}//退出此循環程序

        }

        }

        else

        P1 = 0xf0;

        }

        }

        匯編語言范例

        ;/*****************************************************************

        ;/*

        ;/* ME300系列單片機開發系統演示程序 - 步進電機鍵控正反轉實驗

        ;/*

        ;/*

        ;/* 郵箱:gguoqing@willar.com

        ;/* 網站:http://www.willar.com;

        ;/* 作者: gguoqing

        ;/* 時間: 2006/05/30

        ;/*

        ;/*【版權】Copyright(C)偉納電子www.willar.comAll Rights Reserved

        ;/*【聲明】此程序僅用于學習與參考,引用請注明版權和作者信息!

        ;/*

        ;/******************************************************************

        ; 步進電機步進角為 7.5度,一圈 360 度。

        ; 雙四拍工作方式:

        ; AB-BC-CD-DA (即一個脈沖,轉 7.5 度)

        ; 單雙八拍工作方式:

        ; A-AB-B-BC-C-CD-D-DA (即一個脈沖,轉 3.75 度)

        ; 一個取數工作周期,步進電機轉30度

        ; 步進電機轉一圈需要12個取數工作周期

        ;-------------------------------------------------------

        ; A組線圈對應 P1.0(桔色)

        ; B組線圈對應 P1.1(棕色)

        ; C組線圈對應 P1.2(黃色)

        ; D組線圈對應 P1.3(黑色)

        ;-------------------------------------------------------

        K1BITP1.4 ;步進電機正轉

        K2BITP1.5 ;步進電機反轉

        K3BITP1.6

        K4BITP1.7 ;步進電機停止轉動

        BEEPBITP3.7

        ;-------------------------------------------------------

        ORG 0000H

        LJMP MAIN

        ORG 0030H

        ;-------------------------------------------------------

        MAIN:

        MOVSP,#60H

        MOVP1,#0F0H ;關閉步進電機,鍵輸入線置高

        MAIN1:

        JBK1,MAIN2

        ACALLBEEP_BL ;步進電機正轉

        ACALLFFW

        MAIN2:

        JBK2,MAIN1

        ACALLBEEP_BL ;步進電機反轉

        ACALLREV

        JMPMAIN1

        ;------------------------正轉-------------------------

        FFW:

        ;MOV R3,#12 ;7.5度電機正轉1圈共12個周期

        MOVR3,#60 ;轉5圈

        FFW1:

        MOV R0,#00H

        FFW2:

        JBK4,FFW3 ;終止步進電機運行

        ACALLBEEP_BL

        JMPFFW4

        FFW3:

        MOV P1,#0F0H

        MOV A,R0

        ;MOV DPTR,#TABLE_F;選擇工作方式

        MOV DPTR,#TABLE1

        MOVC A,@A+DPTR

        MOV P1,A

        LCALL DELAY

        INC R0

        CJNEA,#0FFH,FFW2

        DJNZ R3,FFW1

        FFW4:

        MOV P1,#0F0H

        RET

        ;---------------------------反轉--------------------------

        REV:

        ;MOV R3,#12 ;7.5度電機反轉1圈共12個周期

        MOVR3,#60 ;轉5圈

        REV1:

        MOV R0,#00H

        REV2:

        JBK4,REV3;終止步進電機運行

        ACALLBEEP_BL

        JMPREV4

        REV3:

        MOV P1,#0F0H

        MOV A,R0

        ; MOV DPTR,#TABLE_R ;選擇工作方式

        MOV DPTR,#TABLE2

        MOVC A,@A+DPTR

        MOV P1,A

        CALL DELAY

        INC R0

        CJNEA,#0FFH,REV2

        DJNZ R3,REV1

        REV4:

        MOV P1,#0F0H

        RET

        ;-------------------------------------------------------

        DELAY:

        MOV R7,#40 ;步進電機的轉速

        DEL1:MOV R6,#248

        DJNZ R6,$

        DJNZ R7,DEL1

        RET

        ;-------------------------------------------------------

        DELAY1:

        MOV R5,#20 ;2S 延時子程序

        DEL2:

        MOV R7,#200

        DEL3:

        MOV R6,#250

        DJNZR6,$

        DJNZR7,DEL3

        DJNZR5,DEL2

        RET

        ;-------------------------------------------------------

        ; 單雙八拍工作方式

        TABLE_F:;正轉表

        DB0F1H,0F3H,0F2H,0F6H,0F4H,0FCH,0F8H,0F9H

        DB0FFH

        TABLE_R:;反轉表

        DB0F9H,0F8H,0FCH,0F4H,0F6H,0F2H,0F3H,0F1H

        DB0FFH

        ;-------------------------------------------------------

        ; 雙四拍工作方式:

        TABLE1:

        DB 0F3H,0F6H,0FcH,0F9H;正轉表

        DB 0FFH;正轉結束

        TABLE2:

        DB 0F9H,0FCH,0F6H,0F3H;反轉表

        DB 0FFH;反轉結束

        ;--------------------------------------------------------

        ;蜂鳴器響一聲子程序

        ;--------------------------------------------------------

        BEEP_BL:

        MOVR6,#100

        BL1:

        CALLDEX1

        CPLBEEP

        DJNZR6,BL1

        RET

        DEX1:

        MOVR7,#180

        DEX2:

        NOP

        DJNZR7,DEX2

        RET

        ;---------------------------------------------------------

        END

        四相步進電機:

        齒距角: Qz = 2π/ Z Z --- 轉子的齒數

        步距角---轉子走一步所轉過的角度

        步距角: Qn = Qz/N = 2π/NZN --- 步進電機工作拍數

        步進電機轉速:

        n = 60×f / N×Z (轉/分); f =脈沖頻率(Hz)

        對于步距角為7.5度的步進電機而言:

        Qn = 7.5度

        Qz = Qn×N = 7.5×4=30度 (齒距角)

        Z=2π/Qz = 360/30 = 12 (轉子的齒數)

        四相步進電機有三種運行狀態:

        1、步進電機為四相單四拍運行狀態:

        當電機繞組通電時序為A-B-C-D時為正轉,通電時序為D-C-B-A時為反轉。

        N = 4

        步距角: Qn = Qz/N = 2π/NZ =360/4*12=7.5°

        則步進電機轉一圈所需步進數: 360°/7.5°=48 (步進數)

        2、步進電機為四相雙四拍運行狀態:

        當電機繞組通電時序為AB-BC-CD-DA時為正轉,通電時序為DA-CD-BC-AB時為反轉。

        N = 4

        步距角: Qn = Qz/N = 2π/NZ =360/4*12=7.5°

        則步進電機轉一圈所需步進數: 360°/7.5°=48 (步進數)

        3、步進電機為四相八拍運行狀態。

        當電機繞組通電時序為A-AB-B-BC-C-CD-D-DA時為正轉,通電時序為DA-D-CD-C-BC-B-BA-A時為反轉。

        N = 8

        步距角: Qn = Qz/N = 2π/NZ =360/8*12=3.75°

        則步進電機轉一圈所需步進數: 360°/3.75°=96 (步進數)



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 宣化县| 墨江| 蓝山县| 突泉县| 铜陵市| 龙里县| 日照市| 乌兰浩特市| 彩票| 宁阳县| 湄潭县| 如皋市| 柳州市| 景宁| 彩票| 普定县| 湘潭县| 荣昌县| 旺苍县| 桃源县| 丹江口市| 喜德县| 鹤壁市| 铅山县| 浑源县| 抚远县| 高碑店市| 勐海县| 盐城市| 华亭县| 清新县| 成安县| 衡阳县| 隆德县| 长泰县| 阳江市| 紫云| 石柱| 梨树县| 鱼台县| 大理市|