1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

標(biāo)題: 51單片機(jī)控制步進(jìn)電機(jī)的問(wèn)題 [打印本頁(yè)]

作者: Irvingzong    時(shí)間: 2020-7-25 20:30
標(biāo)題: 51單片機(jī)控制步進(jìn)電機(jī)的問(wèn)題
關(guān)于用51單片機(jī)控制步進(jìn)電機(jī)速度和直線位移的問(wèn)題,要求用定時(shí)器產(chǎn)生脈沖,還要先設(shè)置好運(yùn)動(dòng)的速度再運(yùn)行,新手沒(méi)用單片機(jī)控制過(guò)電機(jī),按照以下要求應(yīng)該怎么去實(shí)現(xiàn)呢?

電機(jī).PNG (101.95 KB, 下載次數(shù): 55)

電機(jī).PNG

步進(jìn).PNG (80.72 KB, 下載次數(shù): 66)

步進(jìn).PNG

作者: 不要黑    時(shí)間: 2020-7-26 01:13
所以是你要讓別人幫你做這個(gè)項(xiàng)目么?
作者: Irvingzong    時(shí)間: 2020-7-26 07:36
不要黑 發(fā)表于 2020-7-26 01:13
所以是你要讓別人幫你做這個(gè)項(xiàng)目么?

提供下思路
作者: Irvingzong    時(shí)間: 2020-7-26 07:56
不要黑 發(fā)表于 2020-7-26 01:13
所以是你要讓別人幫你做這個(gè)項(xiàng)目么?

主要是不知道怎么控制電機(jī)轉(zhuǎn)速固定,比如每秒轉(zhuǎn)2.5圈
作者: Irvingzong    時(shí)間: 2020-7-26 09:20
Irvingzong 發(fā)表于 2020-7-26 07:36
提供下思路

我寫(xiě)的這個(gè)程序電機(jī)轉(zhuǎn)不起來(lái),大佬們幫我看下哪里出問(wèn)題了好嗎
#include <reg51.h>//包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義
#define uint unsigned int
#define uchar unsigned char
uchar tab[]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09};
sbit OUT=P2^2;    //定義OUT輸出端口
unsigned char count,i;
void Init_Timer0(void)
{
        TMOD |= 0x01;                      //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響                     
        TH0=(65535-12000)/256;                 
        TL0=(65535-12000)*256;
        EA=1;                         //總中斷打開(kāi)
        ET0=1;                        //定時(shí)器中斷打開(kāi)
        TR0=1;                        //定時(shí)器開(kāi)關(guān)打開(kāi)
}
main()
{
        Init_Timer0();
        OUT=0;
        while(1)
        {
                ;
        }
}

void Timer0_isr(void) interrupt 1
{

        TH0=(65535-20000)/256;                  //重新賦值 12M晶振計(jì)算,指令周期1uS,
        TL0=(65535-20000)*256;         
        count++;
        if(count==20)
        {
        count=0;
        OUT=~OUT;
                {i++;if(i>7)i=0;P0=tab;}                     //用示波器可看到方波輸出
        }
}
作者: wufeng391    時(shí)間: 2020-7-26 10:09
我覺(jué)得你的P0可能是步進(jìn)電機(jī)的驅(qū)動(dòng)端口吧,所以P0=tab[i];你是不是少寫(xiě)了什么?
如果步進(jìn)電機(jī)真的還是不能動(dòng),你可以看下步進(jìn)電機(jī)的工作參數(shù),是不是頻率什么的不符合電機(jī)的要求。
作者: 不要黑    時(shí)間: 2020-7-26 11:32
Irvingzong 發(fā)表于 2020-7-26 09:20
我寫(xiě)的這個(gè)程序電機(jī)轉(zhuǎn)不起來(lái),大佬們幫我看下哪里出問(wèn)題了好嗎
#include //包含頭文件,一般情況不需要 ...

建議先看一下步進(jìn)電機(jī)的驅(qū)動(dòng)方式 接線 原理
作者: gbchang    時(shí)間: 2020-7-27 18:33
我看不見(jiàn)你上傳的圖片,但根據(jù)程序可以推斷一二:
1。單片機(jī)P0^0到P0^3對(duì)應(yīng)步進(jìn)電機(jī)的4根線(中間經(jīng)過(guò)功率放大)
2。單片機(jī)P2^2應(yīng)該是接了個(gè)LED之類的東西,用來(lái)指示電機(jī)運(yùn)轉(zhuǎn)狀態(tài),閃爍表示在轉(zhuǎn)


程序分析:
你仔細(xì)看這個(gè) tab[]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09};
共8個(gè)數(shù),把數(shù)據(jù)用二進(jìn)制表示:
0001
0011
0010
0110
0100
1100
1000
1001
這4位二進(jìn)制數(shù),從P0^0到P0^3送出到電機(jī)的4根線:我們假設(shè)是 A B C D 四根線。




先講解一下二相四線步進(jìn)電機(jī)工作原理:
我畫(huà)一個(gè)示意圖,@@@@表示線圈,AB是一伙,CD是一伙,NNN+SSS是磁鐵:


DBCA=0001,電流從A流向B,磁鐵N極指向1號(hào)線圈方向
D-------------------------+
A------------@@@1@@@----+ |
B-------+               | |
C-----+ |       N       | |
      | |       N       | |
      @ |       +       | @
      2 |       S       | 4
      @ |       S       | @
      | |               | |
      | +----@@@3@@@----+ |
      +-------------------+




DBCA=0011,電流從A流向B,但同時(shí)C到D也有電流,這時(shí)磁鐵N極同時(shí)被1號(hào)2號(hào)線圈吸引,只好處于中間位置
D-------------------------+
A------------@@@1@@@----+ |
B-------+               | |
C-----+ |   N           | |
      | |     N         | |
      @ |       +       | @
      2 |         S     | 4
      @ |           S   | @
      | |               | |
      | +----@@@3@@@----+ |
      +-------------------+




DBCA=0010,電流從C流向D,磁鐵N極指向2號(hào)線圈
D-------------------------+
A------------@@@1@@@----+ |
B-------+               | |
C-----+ |               | |
      | |               | |
      @ |               | @
      2 | NNNN  +  SSSS | 4
      @ |               | @
      | |               | |
      | +----@@@3@@@----+ |
      +-------------------+




DBCA=0110,電流從C流向D,同時(shí)B流向A,磁鐵N極同時(shí)被2號(hào)3號(hào)線圈吸引
D-------------------------+
A------------@@@1@@@----+ |
B-------+               | |
C-----+ |           S   | |
      | |         S     | |
      @ |       +       | @
      2 |     N         | 4
      @ |   N           | @
      | |               | |
      | +----@@@3@@@----+ |
      +-------------------+




DBCA=0100,電流從B流向A,磁鐵N極指向3號(hào)線圈
D-------------------------+
A------------@@@1@@@----+ |
B-------+               | |
C-----+ |       S       | |
      | |       S       | |
      @ |       +       | @
      2 |       N       | 4
      @ |       N       | @
      | |               | |
      | +----@@@3@@@----+ |
      +-------------------+


看出規(guī)律了吧?就這樣繼續(xù)轉(zhuǎn)下去,轉(zhuǎn)一圈,剛好共8個(gè)方向,剛好對(duì)應(yīng) tab[]里面8個(gè)數(shù)。
如果上面的示意圖明白了,那讓電機(jī)反轉(zhuǎn),只要從最后一張圖往上看起就好了,在程序中更爽,++變--搞定。


你的程序該有的都有了,看得出來(lái),是從別處搬來(lái)的,只是tab抄漏了個(gè)[ i]呵呵,別生氣。[ i]
程序只有一處錯(cuò)誤:
{i++;if(i>7)i=0;P0=tab[ i];}                     //用示波器可看到方波輸出

作者: gbchang    時(shí)間: 2020-7-27 19:23
網(wǎng)站設(shè)計(jì)的不夠好,回帖字體無(wú)效。試試圖片吧。


另外來(lái)個(gè)附加題,如果P2^2不是接LED,那可能是做什么的?
答:真要那樣的話,那這方案設(shè)計(jì)者,是個(gè)合格的電子工程師。
1。眾所周知,步進(jìn)電機(jī)走的時(shí)候,電能轉(zhuǎn)換為機(jī)械能出去了,但停的時(shí)候呢?上面那個(gè)tab[]表,只有8個(gè)數(shù),沒(méi)有0000的存在,就是說(shuō),電機(jī)會(huì)停到其中一個(gè)位置,線圈一直通著電,沒(méi)有機(jī)械能輸出,那電能就全部轉(zhuǎn)化為熱能了,電機(jī)變燒雞。
2。解決上述問(wèn)題,有幾個(gè)技術(shù)層次:
1).停機(jī)時(shí),輸出全0000或者全1111,就沒(méi)電流消耗了
2).以上考慮不周,有時(shí)電機(jī)停車時(shí)需要有一個(gè)保持力矩,不能斷電,但這時(shí)仍有兩種選擇,停車在兩相線圈都通電狀態(tài),力大發(fā)熱也大,停在一相線圈通電狀態(tài)發(fā)熱小,可以看需要選擇。
3).進(jìn)階的,當(dāng)電機(jī)再次啟動(dòng)時(shí),由靜止到運(yùn)動(dòng),需要克服一個(gè)額外的靜摩擦力,這時(shí)需要更大的力,也就是雙相驅(qū)動(dòng),所以程序設(shè)計(jì)中,就需要在上次停車時(shí),讓電機(jī)停在單相通電狀態(tài)。因?yàn)殡姍C(jī)轉(zhuǎn)動(dòng)是一二一二一二的順序,這樣就可以實(shí)現(xiàn)用二啟動(dòng)了。
4).繼續(xù)進(jìn)階,如果程序員不懂電子,不懂電機(jī),是個(gè)新手,做為硬件工程師怎么做?有辦法,加個(gè)單穩(wěn)電路,像看門(mén)狗一樣,看著電機(jī),讓程序員在電機(jī)程序里面喂狗,一旦程序死機(jī)了,跑飛了,進(jìn)斷點(diǎn)了,刷固件了的時(shí)候,硬件看門(mén)狗切斷電機(jī)電源,防止電機(jī)燒毀。單穩(wěn)電路沒(méi)多復(fù)雜,一個(gè)“通交隔直”的電容接個(gè)三極管就OK了。
這也就是P2^2的另一種用途猜想。


作者: 樂(lè)兒翅    時(shí)間: 2020-7-28 09:59
PWN控制,程序里面可以設(shè)置speed
作者: lxbhcy    時(shí)間: 2020-7-28 10:08
對(duì)一下手冊(cè),
作者: Irvingzong    時(shí)間: 2020-7-28 10:25
gbchang 發(fā)表于 2020-7-27 19:23
網(wǎng)站設(shè)計(jì)的不夠好,回帖字體無(wú)效。試試圖片吧。

非常感謝大佬的耐心解答!我能夠理解了基本原理,只是還有一個(gè)問(wèn)題是我只需要簡(jiǎn)單實(shí)現(xiàn)這個(gè)二相電機(jī)以10mm/s的線速度運(yùn)行,也就是每秒轉(zhuǎn)2.5圈,而電機(jī)的步距角是0.9度,所以我的想法是每400ms定時(shí)一次轉(zhuǎn)一圈,可我仿真時(shí)把電機(jī)設(shè)為0.9度之后發(fā)現(xiàn)電機(jī)只在小幅度范圍轉(zhuǎn)動(dòng),幾乎不動(dòng),不知道是不是定時(shí)的方式不對(duì)呢?程序如下,希望大佬能幫忙看下,十分感謝!
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar tab[]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09};   
unsigned char count,i;
void Init_Timer0(void)
{
        TMOD |= 0x01;                                         
        TH0=(65535-20000)/256;         
        TL0=(65535-20000)%256;
        EA=1;                         //總中斷打開(kāi)
        ET0=1;                        //定時(shí)器中斷打開(kāi)
        TR0=1;                        //定時(shí)器開(kāi)關(guān)打開(kāi)
}
main()
{
        Init_Timer0();
        while(1)
        {
                ;
        }
}

void Timer0_isr(void) interrupt 1
{

        TH0=(65535-20000)/256;                 
        TL0=(65535-20000)%256;            
        count++;
        if(count==20)
        {
        count=0;
                {i++;if(i>7)i=0;P0=tab;}
        }
}

作者: Irvingzong    時(shí)間: 2020-7-28 10:27
圖片如下

電機(jī).PNG (63.89 KB, 下載次數(shù): 64)

電機(jī).PNG

作者: Irvingzong    時(shí)間: 2020-7-28 15:16
Irvingzong 發(fā)表于 2020-7-28 10:25
非常感謝大佬的耐心解答!我能夠理解了基本原理,只是還有一個(gè)問(wèn)題是我只需要簡(jiǎn)單實(shí)現(xiàn)這個(gè)二相電機(jī)以10mm ...

有的,只是復(fù)制不上來(lái),現(xiàn)在電機(jī)能轉(zhuǎn)了,主要是0.9步距角轉(zhuǎn)的很慢,不能實(shí)現(xiàn)每秒2.5圈,但修改定時(shí)器時(shí)長(zhǎng)又導(dǎo)致失步,應(yīng)該怎么修改呢?
作者: gbchang    時(shí)間: 2020-7-28 16:31
Irvingzong 發(fā)表于 2020-7-28 10:25
非常感謝大佬的耐心解答!我能夠理解了基本原理,只是還有一個(gè)問(wèn)題是我只需要簡(jiǎn)單實(shí)現(xiàn)這個(gè)二相電機(jī)以10mm ...

。。。,也就是每秒轉(zhuǎn)2.5圈,而電機(jī)的步距角是0.9度,所以我的想法是每400ms定時(shí)一次轉(zhuǎn)一圈,。。。

進(jìn)一次中斷只轉(zhuǎn)一步,轉(zhuǎn)一步是0.9度。

如果要每秒轉(zhuǎn)2.5圈,就是 2.5圈*360度=900度,
900度/0.9度每步 = 1000步,
所以,你需要每秒中斷1000次,剛好是 1ms 一次中斷

另外你的源碼可能由于字體等原因,在網(wǎng)站顯示不正常,我重新抄一遍給你:
count++;
if(count == 20)
{
    count = 0;
    P0 = tab[i++];
    i &= 0x07;
}
作者: 跟愛(ài)的感覺(jué)走    時(shí)間: 2020-9-7 08:26
參考手冊(cè)資料
作者: gfshao    時(shí)間: 2020-9-15 14:44
電機(jī)轉(zhuǎn)速控制取決于定時(shí)器產(chǎn)生的脈沖
作者: sdragon0214    時(shí)間: 2020-9-16 11:29
脈沖的頻率控制速度,脈沖的數(shù)量控制位移
作者: fbn20050523    時(shí)間: 2020-9-16 20:34
51黑論壇_s型加減速.rar (1.97 MB, 下載次數(shù): 6)
附錄資料.pdf (152.63 KB, 下載次數(shù): 7)

希望這些可以幫到你





歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1