新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)控制步進(jìn)電機(jī)系統(tǒng)

        單片機(jī)控制步進(jìn)電機(jī)系統(tǒng)

        作者: 時(shí)間:2016-11-18 來(lái)源:網(wǎng)絡(luò) 收藏
        學(xué)習(xí)了單片機(jī)在的基本輸入輸出和在數(shù)據(jù)采集領(lǐng)域的應(yīng)用,接著學(xué)習(xí)了單片機(jī)在控制領(lǐng)域的應(yīng)用。在控制系統(tǒng)中,通常要控制機(jī)械部件的平移和轉(zhuǎn)動(dòng),這些機(jī)械部件的驅(qū)動(dòng)大都采用交流電機(jī)、直流電機(jī)和步進(jìn)電機(jī)等,其中步進(jìn)電機(jī)最適合與數(shù)字控制。因此在了解單片機(jī)在控制系統(tǒng)中的應(yīng)用時(shí),首先了解了單片機(jī)控制步進(jìn)電機(jī)的設(shè)計(jì)。

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

        主要器件:

        1、AT89C52單片機(jī)芯片,用與接受鍵盤輸入和控制步進(jìn)電機(jī)。

        2、4相步進(jìn)電機(jī)驅(qū)動(dòng)芯片STK672-040,內(nèi)含有硬件脈沖分配電路和功率驅(qū)動(dòng)動(dòng)能。

        3、4×4行列式鍵盤。

        試驗(yàn)流程圖:



        試驗(yàn)電路圖:

        試驗(yàn)程序代碼:
        //Stepper.h程序

        #ifndef_STEPPER_H//防止Stepper.h被重復(fù)引用

        #define_STEPPER_H

        #include

        #define uchar unsigned char

        #define uint unsigned int

        #define T 10000// 10ms定時(shí)常量宏定義

        sbit M1=P2^0;

        sbit M2=P2^1;

        sbit M4=P2^2;

        sbit M5=P2^3;

        sbit EN=P2^4;

        sbit CWB=P2^5;

        sbit RET=P2^6;

        sbit CLK=P2^7;

        #endif

        //Stepper.c程序

        #include "Stepper.h"

        /*定時(shí)器0服務(wù)子程序*/

        void time0() interrupt 1 using 1//用定時(shí)器0中斷來(lái)產(chǎn)生CLK時(shí)鐘

        {

        /*定時(shí)10ms,產(chǎn)生20ms周期的時(shí)鐘,也就是50Hz的時(shí)鐘*/

        TH0 = -T/256;

        TL0 = -T%256;

        CLK = ~CLK;

        }

        /*鍵消抖延時(shí)函數(shù)*/

        void delay(void)

        {

        uchar i;

        for (i=300;i>0;i--);

        }

        /*鍵掃描函數(shù)*/

        uchar keyscan(void)

        {

        uchar scancode,tmpcode;

        P1 = 0xf0;//發(fā)全0行掃描碼

        if ((P1&0xf0)!=0xf0)//若有鍵按下

        {

        delay();//延時(shí)去抖動(dòng)

        if ((P1&0xf0)!=0xf0)//延時(shí)后再判斷一次,去除抖動(dòng)影響

        {

        scancode = 0xfe;

        while((scancode&0x10)!=0)//逐行掃描

        {

        P1 = scancode;//輸出行掃描碼

        if ((P1&0xf0)!=0xf0)//本行有鍵按下

        {

        tmpcode = (P1&0xf0)|0x0f;

        /*返回特征字節(jié)碼,為1的位即對(duì)應(yīng)于行和列*/

        return((~scancode)+(~tmpcode));

        }

        else scancode = (scancode<<1)|0x01;//行掃描碼左移一位

        }

        }

        }

        return(0);//無(wú)鍵按下,返回值為0

        }

        /*主程序*/

        void main()

        {

        uchar key;

        TMOD = 0x01;//設(shè)置定時(shí)器0工作模式

        EA = 1;

        ET0 = 1;

        /*設(shè)置為2相激勵(lì)*/

        M1 = 0;

        M2 = 0;

        /*設(shè)置為環(huán)形轉(zhuǎn)向軌跡*/

        M4 = 1;

        M5 = 1;

        EN = 0;//切斷驅(qū)動(dòng)輸出

        RET = 0;//歸位輸入無(wú)效

        CWB = 1;//初始設(shè)置為順時(shí)針?lè)较?/p>

        while(1)

        {

        key = keyscan();//調(diào)用鍵盤掃描函數(shù)

        switch(key)

        {

        case 0x11:// 0行0列,啟動(dòng)鍵

        EN = 1;//打開(kāi)驅(qū)動(dòng)輸出

        TH0 = -T/256;//改變T可以改變步進(jìn)電機(jī)轉(zhuǎn)動(dòng)速度

        TL0 = -T%256;

        TR0 = 1;//定時(shí)器0開(kāi)始計(jì)數(shù)

        break;

        case 0x21:// 0行1列,停止鍵

        TR0 = 0;//定時(shí)器0停止計(jì)數(shù)

        EN = 0;//切斷驅(qū)動(dòng)輸出

        break;

        case 0x41:// 0行2列,切換轉(zhuǎn)向按鍵

        CWB = ~CWB;

        break;

        case 0x81:// 0行3列,歸位鍵

        RET = 1;

        delay();

        RET = 0;

        break;

        default:break;

        }

        }

        }



        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 永寿县| 烟台市| 观塘区| 墨竹工卡县| 外汇| 巴马| 濮阳市| 朝阳县| 阜平县| 中牟县| 雷州市| 河北省| 洛阳市| 胶州市| 姚安县| 隆子县| 三河市| 永宁县| 阿拉善盟| 方城县| 将乐县| 于都县| 临城县| 宁强县| 会昌县| 芮城县| 渭源县| 岐山县| 竹山县| 花莲市| 洱源县| 鄂尔多斯市| 苍南县| 桐庐县| 广州市| 宣武区| 乌拉特后旗| 镇平县| 喜德县| 色达县| 墨脱县|