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