<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 51單片機PWM細分控制步進(jìn)電機的研究初稿

51單片機PWM細分控制步進(jìn)電機的研究初稿

作者: 時(shí)間:2016-11-29 來(lái)源:網(wǎng)絡(luò ) 收藏
為什么要PWM細分呢?因為這樣可以是步進(jìn)電機運行平穩、減小噪音、增大轉速(MAX的)、增加力矩……

為什么要強調是51單片機呢?因為51單片機沒(méi)有硬件PWM模塊,所以只能軟件模擬了……
研究這玩意兒,我走了許多彎路,看了許多文獻,最后發(fā)現,盡信書(shū)不如無(wú)書(shū)……
就用28系列4相5線(xiàn)電機來(lái)說(shuō)吧。

整步驅動(dòng)(四相四拍)時(shí)序為:
A相 B相 C相 D相
1拍 1 0 0 0
2拍 0 1 0 0
3拍 0 0 1 0
4拍 0 0 0 1
我想沒(méi)人用這樣的方式來(lái)驅動(dòng)吧,這震動(dòng)也太大了。
2細分驅動(dòng)(四相八拍)時(shí)序為:
A相 B相 C相 D相
1拍 1 0 0 0
2拍 1 1 0 0
3拍 0 1 0 0
4拍 0 1 1 0
5拍 0 0 1 0
6拍 0 0 1 1
7拍 0 0 0 1
8拍 1 0 0 1
不需要PWM,我想用著(zhù)方式驅動(dòng)的人最多吧。
PWM6細分驅動(dòng)(四相24拍)時(shí)序為:

其中的0.97、0.87、0.70、0.50、0.26分別是COS15°、COS30°、COS45°、COS60°和COS75°的近似值。
根據我參看的那些專(zhuān)門(mén)研究步進(jìn)電機的大佬們的論文,他們說(shuō)步進(jìn)電機中所有線(xiàn)圈中同一時(shí)間電流和為0,就是說(shuō)我上面的那個(gè)時(shí)序圖中凡是數值為0的地方,其實(shí)是應該有相應的負值或零值存在的,使得每一拍四相線(xiàn)圈數值加起來(lái)為0,但我就想不通了,要是這樣,那怎么使得每相線(xiàn)圈中電流既能正著(zhù)流,又能反著(zhù)流?好像我的ULN2003驅動(dòng)板沒(méi)這功能吧!所以我采用笨辦法,把凡是負數的地方全改為了0,管他的!可能這也是使我用此時(shí)序驅動(dòng)電機不理想的原因吧……最后通過(guò)不斷試驗發(fā)現,以此時(shí)序驅動(dòng)電機,震動(dòng)大、噪音強、轉速慢還外加力矩小,一無(wú)是處,連4相8拍都不如,真是欲哭無(wú)淚……
通過(guò)分析4相24拍和4相8拍的時(shí)序圖,我發(fā)現,4相8拍方式下磁力矩的大小的和最小為1,最大為1.414,在半步處!而4相24拍的磁力矩的大小的和最小為1,最大為1.183,也在半步處,難怪了,半步時(shí),轉子的小齒離兩通電線(xiàn)圈是最遠的,此時(shí)磁力矩大小和不如4相8拍,那么力矩肯定也就沒(méi)4相8拍的大了 ……
所以我重新更新后的時(shí)序為:

使用這一時(shí)序后,終于讓我體會(huì )到了細分的優(yōu)越,和4相8拍比起來(lái)振動(dòng)小了,力矩大了。
在PWM的每個(gè)周期中,肯定是時(shí)序圖中數值大的線(xiàn)圈先通電,然后才是小的,一個(gè)周期結束后,所有線(xiàn)圈斷電。所以得建立一個(gè)描述每拍中是哪一個(gè)相(線(xiàn)圈)先通電,哪一個(gè)相后通電的數組,以上面的時(shí)序圖為準,建立的數組為:
djsx[2][24]={0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,0,0,3,1,1,1,0,0,0,2,2,2,1,1,1,3,3,3,2,2,2,0,0,0,3,3}; //djsx[2][24]中的第一維儲存的的就是先通電的線(xiàn)圈的相數,第二維是拍數
時(shí)序圖中每一相后的眾多數字,可以看成是其在某一拍中需要通電的時(shí)間,分析發(fā)現,其是有規律的,每隔6拍重復出現一次,由于先通電的都是在每一拍中要一直通電,所以用數組表式剩下某相在某一拍中通電起始時(shí)間和通電的時(shí)間:
ys[2][5]={1-0.27,1-0.57,1-1,1-0.57,1-0.27,0.27,0.57,1,0.57,0.27}={0.73,0.43,0,0.43,0.73,0.27,0.57,1,0.57,0.27};
當51單片機工作在65.536MHz時(shí),每微秒5.461個(gè)機器周期,PWM頻率為5000Hz時(shí),每周期200微秒,也就是說(shuō)每周期1092個(gè)機器周期,所以ys數組變換為:
ys[2][5]={797,470,0,470,797,295,622,1092,622,295};
由于51的定時(shí)器分為T(mén)H和TL,并且是每機器周期加1,直到溢出中斷,所以ys數組得再加一維,分別用來(lái)貯存TL和TH,所以變換為:
ys[2][5][2]={224,252,47,254,255,255,47,254,224,252,218,254,137,253,187,251,137,253,218,254};
程序源代碼為:

本文引用地址:http://dyxdggzs.com/article/201611/323382.htm
#include#define uchar unsigned char#define uint  unsigned intuchar code djsx[2][24]={0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,0,0,3,1,1,1,0,0,0,2,2,2,1,1,1,3,3,3,2,2,2,0,0,0,3,3};uchar code ys[2][5][2]={224,252,47,254,255,255,47,254,224,252,218,254,137,253,187,251,137,253,218,254};uchar code pout[4]={1,2,4,8};char count,count_x,count_b,bs=0;char xzbs=1;       //正轉為1,倒轉為-1uchar xzsd=6;     //我的28電機測試最小為6,此數值越小,轉速越快void Time0_Init(){TMOD=0x01;IE=0x82;TH0=0xff;TL0=0xbd;       TR0=1;}void Time0_Int() interrupt 1{switch(bs){case 0:if(count_x==0){TL0=187;TH0=251;P1=pout[djsx[0][count_b*6]];count++;break;}if(count_x!=3){TL0=ys[0][count_x-1][0];                       TH0=ys[0][count_x-1][1];P1=pout[djsx[0][count_b*6+count_x]];bs=1;break;}P1=pout[djsx[0][count_b*6+3]];case 1:TL0=ys[1][count_x-1][0];TH0=ys[1][count_x-1][1];P1=P1+pout[djsx[1][count_b*6+count_x]];bs=0;count++;}if(bs==0){if(count==xzsd){count=0;count_x=count_x+xzbs;}if(count_x==6){count_x=0;count_b++;}if(count_x==-1){count_x=5;count_b--;}if(count_b==4)count_b=0;if(count_b==-1)count_b=3;}}void main(){P1=0;Time0_Init();while(1);}

完畢!



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>