找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3256|回復(fù): 4
收起左側(cè)

51怎樣控制兩個(gè)步進(jìn)電機(jī)同時(shí)轉(zhuǎn)

[復(fù)制鏈接]
ID:242890 發(fā)表于 2017-12-3 10:59 | 顯示全部樓層 |閱讀模式
while(1)
{
    步進(jìn)電機(jī)1慢速轉(zhuǎn);
    步進(jìn)電機(jī)2快速轉(zhuǎn);
}

用定時(shí)器應(yīng)該怎樣來寫?求解大神
回復(fù)

使用道具 舉報(bào)

ID:60379 發(fā)表于 2017-12-3 11:33 | 顯示全部樓層
/****************《51單片機(jī)輕松入門-基于STC15W4K系列》配套例程 *************
★★★★★★★★★★★★★★★★★★★★★★★★
// 程序功能:上電后順轉(zhuǎn)200步,然后反轉(zhuǎn)200步,如此循環(huán)。
// 使用P20、P21、P22、P23口驅(qū)動(dòng)電機(jī)
  ★★★★★★★★★★★★★★★★★★★★★★★★*/
#include "STC15W4K.H "
unsigned char code BiaoGe[8]={0x08,0x0C,0x04,0x06,0x02,0x03,0x01,0x09};
                                        // 表格,換算成二進(jìn)制 1000,1100,0100, 0110 ,0010,0011, 0001 1001
                                        // P2口輸出低4位驅(qū)動(dòng)電機(jī)   A  B  /A  /B      
                                        // 1——2相勵(lì)磁,發(fā)8次脈沖(順序輸出上面表格)轉(zhuǎn)動(dòng)4步
void delay3ms(void)
{
        unsigned char i,j,k;
        for(i=1;i>0;i--)         // 注意后面沒分號(hào)
        for(j=65;j>0;j--)        // 注意后面沒分號(hào)
        for(k=254;k>0;k--);      // 注意后面有分號(hào)         
}
void delay1s(void)
{
   unsigned char i,j,k;
   for(i=85;i>0;i--)        // 注意后面沒分號(hào)
   for(j=254;j>0;j--)       // 注意后面沒分號(hào)
   for(k=255;k>0;k--);      // 注意后面有分號(hào)
}                                         

void PROT_Init(void)
{          
        P2M1 = 0x80;     // 1000 0000   P2.0、P2.1、P2.2、P2.3、接驅(qū)動(dòng)功率管,推挽輸出
        P2M0 = 0x0f;         // 0000 1111   P2.7 接接霍爾傳感器信號(hào)輸入,高阻輸入
}
void shun200()                           // 順轉(zhuǎn)200步
{
        unsigned int i;
        unsigned char n;
        n=0;
        for(i=0;i<400;i++)         // 200步,i/2為實(shí)際步數(shù)
        {        
                P2=BiaoGe[n]|0xf0;           // 不影響P2口高4位               
                delay3ms();
                n=n+1;       
                if (n>7)
                {                           
                n=0;
                }                       
        }
        P2&=0xf0;                                          // 保證電機(jī)繞組斷電
}
void fan200()                                          // 反轉(zhuǎn)200步
{
        unsigned int i;
        unsigned char n;
        n=8;                       
        for(i=0;i<400;i++)            // 200步,i/2為實(shí)際步數(shù)
        {        
            n=n-1;               
                P2=BiaoGe[n]|0xF0;              // 不影響P2口高4位                       
                delay3ms();
                if (n==0)
                {                            
                n=8;
                }                       
        }
        P2&=0xf0;                                          // 保證電機(jī)繞組斷電        
}
void main(void)                                  
{                   
        PROT_Init();                      // 初始化端口       
        while(1)
        {
                shun200();
                delay1s();
                fan200();
                delay1s();
        }       
}

評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
BYSJ20171201 + 5 很給力!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:242890 發(fā)表于 2017-12-3 13:27 | 顯示全部樓層
無量壽經(jīng) 發(fā)表于 2017-12-3 11:33
/****************《51單片機(jī)輕松入門-基于STC15W4K系列》配套例程 *************
★★★★★★★★★★ ...

不是,這樣只是一個(gè)步進(jìn)電機(jī)。我說的是兩個(gè)步進(jìn)電機(jī),他們按各自不同的速度同時(shí)運(yùn)轉(zhuǎn)
回復(fù)

使用道具 舉報(bào)

ID:257073 發(fā)表于 2017-12-4 10:30 | 顯示全部樓層
考慮寫一個(gè)每次轉(zhuǎn)固定步的函數(shù),然后定時(shí)中斷到該函數(shù),在定時(shí)中進(jìn)行判定是否旋轉(zhuǎn),即可實(shí)現(xiàn)每一次中斷兩個(gè)電機(jī)是否旋轉(zhuǎn),依此,兩個(gè)電機(jī)速度就不同了
回復(fù)

使用道具 舉報(bào)

ID:256450 發(fā)表于 2017-12-4 11:00 | 顯示全部樓層
用兩個(gè)定時(shí)器計(jì)數(shù)變量控制分別控制兩組引腳的電平變化
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表