tft每日頭條

 > 圖文

 > 單片機控制步進電機停轉時電流大

單片機控制步進電機停轉時電流大

圖文 更新时间:2024-08-18 20:17:19
什麼是步進電機?

步進電機是将電脈沖信号轉變為角位移或者線位移的開源控制元件。

所以我們用的時候不要擔心他的複雜,可以理解為一個元器件。

靜态指标術語

1、相數:産生不同對極N、S磁場的激磁線圈對數。常用m表示。

2、拍數:完成一個磁場周期性變化所需脈沖數或

導電狀态用n表示,或指電機轉過一個齒距角所需脈沖數,以四相電機為例,有四相四拍運行方式即AB-BC-CD-DA-AB,四相八拍運行方式即 A-AB-B-BC-C-CD-D-DA-A

3、步距角:對應一個脈沖信号,電機轉子轉過的角位移用θ表示。θ=360度/(轉子齒數*運行拍數),以常規二、四相,轉子齒為50齒電機為例。四拍運行時步距角為θ=360度/(50*4)=1.8度(俗稱整步),八拍運行時步距角為θ=360度/(50*8)=0.9度(俗稱半步)。

4、定位轉矩:電機在不通電狀态下,電機轉子自身的鎖定力矩(由磁場齒形的諧波以及機械誤差造成的)。

5、靜轉矩:電機在額定靜态電壓作用下,電機不作旋轉運動時,電機轉軸的鎖定力矩。此力矩是衡量電機體積的标準,與驅動電壓及驅動電源等無關。 雖然靜轉矩與電磁激磁安匝數成正比,與定齒轉子間的氣隙有關,但過分采用減小氣隙,增加激磁安匝來提高靜力矩是不可取的,這樣會造成電機的發熱及機械噪音。

如何接線

單片機控制步進電機停轉時電流大(單片機是如何控制步進電機紮旋轉的)1

單片機控制步進電機停轉時電流大(單片機是如何控制步進電機紮旋轉的)2

單片機控制步進電機停轉時電流大(單片機是如何控制步進電機紮旋轉的)3

7447芯片:是數碼管驅動,與以往不同的是僅僅用4位就可以控制顯示,裡面有編好的,通過高低電平組合來顯示數字。

單片機控制步進電機停轉時電流大(單片機是如何控制步進電機紮旋轉的)4

L298就是起到放大電流的作用。單片機的電流太小,驅動不了電機。

效果展示:(更多效果可以去看本人拍的視頻和小視頻)

單片機控制步進電機停轉時電流大(單片機是如何控制步進電機紮旋轉的)5

程序詳細講解:

#include "reg52.h"//頭文件

unsigned char index =0; //宏定義一個步進索引,就是引導步進如何旋轉

int n=0,n0=0;//定義周期,一個是檔位

unsigned char flag=0,step=1; //方向,開關

main() //主函數

{

P3=0xff; //由于P3是數據輸出端,所以最好就是高電平,這一句寫不寫影響大不大。

EA=1; //開總中斷

EX0=1;EX1=1;ET0=1; //打開外部中斷 和定時中斷

IT0=1;IT1=1;//開外部中斷

TMOD=0x01;//定時器為定時工作方式1

TH0=(65536-1000)/256; //每一毫秒 中斷一次

TL0=(65536-1000)%6;//每一毫秒 中斷一次

TR0=1; //開定時中斷

while(1) //為真進行不停的循環,然後等待中斷發生

{

if(P0==0xfe) { n0=70; P2= 1; } //按鍵 顯示1擋

if(P0==0xfd) { n0=90; P2= 2; }//按鍵 顯示2擋

if(P0==0xfb) { n0=110; P2= 3; } //按鍵 顯示3擋

if(P0==0xf7) { n0=150; P2= 4; }//按鍵 顯示4擋

}

}

void int0() interrupt 0 停止鍵中斷子程序,隻會在0/1之間變化。

{

step ;

if(step>=2)

step=0;

}

void int1() interrupt 2 正反轉中斷子程序 隻會在正轉和反轉之間0-1變化

{

flag ;

if(flag>=2)

flag=0;

}

void time() interrupt 1 定時器中斷子程序

{

TH0=(65536-1000)/256; //初值重裝

TL0=(65536-1000)%6;//為了每次都是延時一毫秒,

if(step==1) //如何step等于1則,開始轉,如果不等于,n就會加一。

{

if(n >= n0 )//輸出脈沖周期N0*1毫秒,

{

if(flag==1)//問正轉嘛?

{

switch(index) 如果是 就會執行這一句

{

case 0: P1=0X03;break;//因為INDEX不斷地加一,就會從上到下不斷的選擇。

case 1: P1=0X06;break;//P1口兩兩組合,進行高低電平變化。

case 2: P1=0X0c;break;

case 3: P1=0X09;break;

}

index ; 不斷地加一

if(index>=4) 如何等于4了,就再從0 開始

index=0; //從新賦值

n=0; //從新賦值

}

if(flag==0)如果是反轉

{

switch(index)//和上面的講解會一樣的

{

case 0: P1=0X09;break;

case 1: P1=0X0c;break;

case 2: P1=0X06;break;

case 3: P1=0X03;break;

}

index ;

if(index>=4)

index=0;

n=0;

}

else

n=0;//既不是正轉 也不是反轉,就停止吧

}

n ;//如果是開啟了,就會判斷脈沖是否大于周期

}

else

n=0;如果沒有開,或者啟動。好比電視插上電,但是沒有按下電視開關。則也不轉動

}

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved