標(biāo)題:
單片機(jī)+TB6600+42步進(jìn)電機(jī)測(cè)試通過 附程序
[打印本頁]
作者:
xmfjfhcel
時(shí)間:
2020-2-23 16:01
標(biāo)題:
單片機(jī)+TB6600+42步進(jìn)電機(jī)測(cè)試通過 附程序
經(jīng)過年前到年后幾個(gè)月,終于搞清我這個(gè)步進(jìn)電機(jī)的性能。感謝CCC888在24小時(shí)必答區(qū)解答了我的問題,也把這個(gè)程序分享給大家。
附件程序測(cè)試連接42步進(jìn)電機(jī)運(yùn)行正常通過。
發(fā)現(xiàn)電機(jī)對(duì)時(shí)間要求很高,如果主程序里的WHILE(1)里如果執(zhí)行程序如果占用太多過長,會(huì)38影響步進(jìn)電機(jī)的運(yùn)行,還是新手沒辦法對(duì)時(shí)間進(jìn)行很好的把控啊。
程序說明:
特色:程序是電機(jī)自動(dòng)正反轉(zhuǎn)120度(回到初始的地方)
主程序while(1)只是掃描一個(gè)按鍵,這個(gè)時(shí)間很快。對(duì)步進(jìn)電機(jī)運(yùn)行沒有問題。
本想加一個(gè)TM1638模塊,用它的按鍵,但是發(fā)現(xiàn)加了后電機(jī)工作會(huì)有失步的情況。為哈這個(gè)電機(jī)這么嬌氣。?
http://www.torrancerestoration.com/bbs/dpj-180026-1.html
附件程序是對(duì)步進(jìn)電機(jī)用了1細(xì)分, 細(xì)分多了,滿足不了我的需求,轉(zhuǎn)速會(huì)慢,STC52的端口輸出頻率太低了。
程序是電機(jī)自動(dòng)正反轉(zhuǎn)120度(回到初始的地方), 我最開始的想法是做一個(gè)自動(dòng)手搖扇子,就是大炮打蚊子了,比較符合了。期間不能快遞沒辦法做成品了。
中斷里的時(shí)間是調(diào)試過無數(shù)次,有個(gè)簡(jiǎn)單的加速減速的過程,只是時(shí)間有點(diǎn)短,有勝于無吧,中斷里用了DELAY函數(shù)來對(duì)電機(jī)在反轉(zhuǎn)時(shí)進(jìn)行一個(gè)延時(shí)短停來保護(hù)一下電機(jī)的沖擊,這個(gè)時(shí)間遠(yuǎn)遠(yuǎn)少于進(jìn)入中斷的時(shí)間,所以也不會(huì)影響步進(jìn)電機(jī)的脈沖產(chǎn)生時(shí)間得。
作者:
xmfjfhcel
時(shí)間:
2020-2-23 16:05
標(biāo)題:
TB6600+42步進(jìn)電機(jī)測(cè)試通過
42motorTB6600FB120自動(dòng)正反可用單片機(jī)源程序如下:
#include<reg52.h>
//電機(jī)控制引腳
sbit CLK = P1^0; //PUL-
sbit ENA = P1^1; //ENA-
sbit DIR = P1^2; //DIR-
//按鍵控制端
sbit speedup = P3^2; //調(diào)速+
sbit speeddown = P3^0; //調(diào)速-
sbit StopStart = P3^1; //停止與啟動(dòng)
unsigned int count=0;
unsigned int Tspeed[5]={250,500,1000,2500,3000};
//調(diào)速等級(jí)表,5個(gè)檔位。1細(xì)分, 200脈沖一圈。 一個(gè)脈沖是1.8度。
//計(jì)算:
//4000,8ms一個(gè)脈沖(高電平4MS,低電平4MS,共是8MS)。 200個(gè)脈沖就是:1.6秒, 即1.6秒步進(jìn)電機(jī)走一圈。37.5圈/分
//4000 起步會(huì)失步在1細(xì)分的情況下。
//3000 6ms 1.2 50圈/分
//2000, 4ms一個(gè)脈沖(高電平2MS,低電平2MS,共是4MS)。 200個(gè)脈沖就是:0.8秒, 即0.8秒步進(jìn)電機(jī)走一圈。75圈/分
//1000,就是0.4秒/圈, 150圈/分。
//500 0.2秒/圈, 300圈/分
//250 0.1秒/圈 600圈/分。 500US一個(gè)脈沖。1S就是2000個(gè)脈沖,IO輸出就是2MHZ.在STC89C52的范圍內(nèi)。
//再細(xì)分下去,超出C52的范圍。
//我這步進(jìn)最佳最快有效是600轉(zhuǎn)/分。最快1000圈/分
bit Run_Status=1; //默認(rèn)是電機(jī)啟動(dòng)狀態(tài)
unsigned int SPEED=0; //脈沖頻率初始6ms
unsigned int counttemp=0; //暫存停止前的COUNT計(jì)數(shù)
void Init_time();
void Key_scan();
void delay(unsigned int hehe); //延時(shí)hehe毫秒
void main()
{
CLK=0;
ENA=1; //ENA-接的控制口,但一樣的,如果ENA=0,步進(jìn)電機(jī)卡起
DIR=1; //DIR-接的控制口。初始化電機(jī) 低電平有效,測(cè)試,DIR=1,是正轉(zhuǎn), DIR=0反轉(zhuǎn)。
SPEED=Tspeed[4];
P2=0X00;
delay(2000); //延時(shí)2秒等待系統(tǒng)穩(wěn)定。
P2=0XFF;
Init_time(); //初始化定時(shí)器
while(1)
{
Key_scan();
}
}
void Init_time() //初始化定時(shí)器
{
TMOD |= 0x01;
TH0=(65536-SPEED)/256; //給time0裝初值
TL0=(65536-SPEED)%256;
IE = 0x82;
TR0=0; //開啟中斷產(chǎn)生脈沖信號(hào)
EA=0;
}
void Enter_Timer0() interrupt 1 //進(jìn)入定時(shí)器中斷
{
TH0=(65536-SPEED)/256;
TL0=(65536-SPEED)%256;
CLK=~CLK; //發(fā)送脈沖……
count++;
if(count<100)
SPEED=3000; //如果調(diào)到2000失控 1細(xì)分
if(count<200)
SPEED=2000;
else
SPEED=3000;
if(count==300) //計(jì)數(shù)2次為一個(gè)脈沖周期 所以180度為計(jì)數(shù)200.如果計(jì)數(shù)100只有90度
{
DIR=~DIR;
count=0;
CLK=0;
TR0=0; //開啟中斷產(chǎn)生脈沖信號(hào)
EA=0;
delay(300);
CLK=0;
TR0=1;
EA=1;
}
}
void delay(unsigned int n) //delay幾個(gè)毫秒,入口參數(shù)為幾個(gè)毫秒
//正反轉(zhuǎn)切換時(shí)速度太快了。延時(shí)保護(hù)電機(jī)
{
unsigned int i,y;
for(i=n;i>0;i--)
for(y=114;y>0;y--);
}
void Key_scan()
{
if(StopStart==0)
{
delay(10);
if(StopStart==0)
{
Run_Status=~Run_Status;
if(Run_Status)
{
count=counttemp;
TR0=1; //開啟中斷產(chǎn)生脈沖信號(hào)
EA=1;
}
else
{
counttemp=count;
TR0=0; //關(guān)閉中斷停止脈沖信號(hào)
EA=0;
}
} while(!StopStart);
}
}
/**********************************
static char i=0;
static char j=4;
if(speedup==0) //加速
{
delay(10);
if(speedup==0)
{
j--;
if(j<1)
j=0;
SPEED=Tspeed[j];
}
} while(!speedup);
if(speeddown==0) //減速
{
delay(10);
if(speeddown==0)
{
i++;
if(i>4)
i=4;
SPEED=Tspeed[i];
}
} while(!speeddown);
}
*************************************/
復(fù)制代碼
作者:
xmfjfhcel
時(shí)間:
2020-2-23 19:05
是270度哈,中斷初始化是沒有開的,按一下鍵就開啦
作者:
xmfjfhcel
時(shí)間:
2020-2-23 19:07
這些都可以自行改得。。
作者:
WOAIDIANZIXINXI
時(shí)間:
2020-4-21 10:56
請(qǐng)問用32單片機(jī)控制TB6600驅(qū)動(dòng)42步進(jìn)電機(jī)轉(zhuǎn)動(dòng)與停止 ,如果按下一個(gè)確認(rèn)按鍵,電機(jī)轉(zhuǎn)動(dòng),還要用定時(shí)器或外部中斷不
作者:
恒心6
時(shí)間:
2021-9-21 22:32
為什么我的會(huì)抖動(dòng),我是初學(xué)者,能教一下嗎
作者:
山頂任風(fēng)吹
時(shí)間:
2022-2-15 14:43
為什么定時(shí)器初始化中的TH0和TL0中的speed直接用數(shù)字帶入,電機(jī)的轉(zhuǎn)速要快的多?若將鍵盤掃描中的delay全部取消,速度依然為什么?
作者:
13480828805
時(shí)間:
2022-5-31 15:50
簡(jiǎn)單看了一下,下載下來學(xué)習(xí)研究,
作者:
1905527329
時(shí)間:
2022-6-30 14:08
附程序下載到普中A2開發(fā)板電機(jī)不轉(zhuǎn),不知什么原因
作者:
heicad
時(shí)間:
2022-7-6 16:27
樓上的 最好不要在開發(fā)板上做,io連了其他設(shè)備可能驅(qū)動(dòng)能力不夠 自己焊接一個(gè)最小系統(tǒng)個(gè)就好了,再就是樓主設(shè)置了1細(xì)分 這個(gè)你也要在模塊上設(shè)置一下
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1