|
這是我最近做的一個(gè)步進(jìn)電機(jī)設(shè)計(jì) 使用的單片機(jī)是AT89C51 需要用到軟件Keil5,Proteus8.9 是根據(jù)我們的設(shè)計(jì)要求做的 附件里包含步進(jìn)電機(jī)的單片機(jī)源代碼,以及Proteus模擬電路圖,設(shè)計(jì)文件 對(duì)該作品的介紹可能不是很嚴(yán)謹(jǐn),還請(qǐng)大家多包涵 如果該設(shè)計(jì)存在學(xué)術(shù)性錯(cuò)誤,還請(qǐng)為我指正! 以下是設(shè)計(jì)內(nèi)容,希望它可以幫到你:
所涉及到的知識(shí):
一、步進(jìn)電機(jī)是什么?
步進(jìn)電機(jī)是將電脈沖信號(hào)轉(zhuǎn)變?yōu)榻俏灰苹蚓位移的開環(huán)控制元件。在非超載的情況下,電機(jī)的轉(zhuǎn)速、停止的位置只取決于脈沖信號(hào)的頻率和脈沖數(shù),而不受負(fù)載變化的影響,即給電機(jī)加一個(gè)脈沖信號(hào),電機(jī)則轉(zhuǎn)過一個(gè)步距角。這一線性關(guān)系的存在,加上步進(jìn)電機(jī)只有周期性的誤差而無累積誤差等特點(diǎn)。使得在速度、位置等控制領(lǐng)域用步進(jìn)電 機(jī)來控制變的非常的簡(jiǎn)單。
二、步進(jìn)電機(jī)的主要特性有哪些?
1. 步進(jìn)電機(jī)必須加驅(qū)動(dòng)才可以運(yùn)轉(zhuǎn),驅(qū)動(dòng)信號(hào)必須為脈沖信號(hào),沒有脈沖的時(shí)候,步進(jìn)電機(jī)靜止,如果加入適當(dāng)?shù)拿}沖信號(hào),就會(huì)以一定的角度(稱為步角)轉(zhuǎn)動(dòng)。轉(zhuǎn)動(dòng)的速度和脈沖的頻率成正比。
2. 本次使用的步進(jìn)電機(jī)是 28BYJ48 5V 驅(qū)動(dòng)的 4 相 5 線的步進(jìn)電機(jī),而且是減速步進(jìn)電機(jī),減速比為 1:64,步進(jìn)角為 5.625/64 度。如果需要轉(zhuǎn)動(dòng) 1 圈,那么需要 360/5.625*64=4096 個(gè)脈沖信號(hào)。
3. 步進(jìn)電機(jī)具有瞬間啟動(dòng)和急速停止的優(yōu)越特性。
4. 改變脈沖的順序,可以方便的改變轉(zhuǎn)動(dòng)的方向。
本設(shè)計(jì)將通過實(shí)現(xiàn)一個(gè)基于單片機(jī)的,可以通過按鍵精確控制電機(jī)正反轉(zhuǎn),加減速,開始和停止的控制電路,來說明單片機(jī)如何工作
具體操作步驟如下:
第一步:Keil編程(此處省略了文件創(chuàng)建步驟)
第一部分 這一串代碼可以控制電機(jī)的轉(zhuǎn)向
#include<reg51.h> #define uchar unsigned char bit flag; uchar a= 1,t = 100; uchar code tab1[] = {0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; uchar code tab2[] = {0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; sfr P1M1 = 0X91; sfr P1M0 = 0X92; sfr P2M1 = 0X95; sfr P2M0 = 0X96;
第二部分 這一串代碼可以實(shí)現(xiàn)對(duì)電機(jī)的接近毫秒級(jí)延時(shí)的控制,原理是通過嵌套循環(huán)消耗 CPU 時(shí)間實(shí)現(xiàn)延時(shí)
void delay(uchar ms) { uchar j; while(ms--) for(j=0;j<100;j++);}
第三部分 這一串代碼可以實(shí)現(xiàn)電機(jī)的轉(zhuǎn)向切換、調(diào)速、啟停控制
void keyscan() { P1M1 = 0; P2M1 = 0; P1M0 = 0XFF; P2M0 = 0XFF; if(P2!=0xff) { delay(5); if(P2!=0xff) { switch(P2) { case 0xfe:a=1;break;//正轉(zhuǎn) case 0xfd:a=2;break;//反轉(zhuǎn) case 0xfb:if(t>50)t=t-10;else t=50;break;//加速 case 0xf7:if(t<150)t=t+10;else t=150;break;//減速 case 0xef:flag=1;break;//開始 case 0xdf:flag=0;break;//停止 } while(P2!=0xff); } } }
第四部分 這一段代碼可以通過定時(shí)器 0 實(shí)現(xiàn)定時(shí)中斷
void time0_init() //定時(shí)器T0初始化 { TMOD=0x01; //設(shè)置定時(shí)器0工作方式1 TH0=(65536-50000)/256;//定時(shí)50ms取高八位 TL0=(65536-50000)%256; //取低八位 ET0=1; //開定時(shí)器0中斷使能 EA=1; //開總中斷使能 TR0=1; //開啟中斷 } void time0() interrupt 1 //定時(shí)器T0入口函數(shù) { TH0=(65536-50000)/256; //定時(shí)50ms重新賦初值 TL0=(65536-50000)%256; keyscan(); }
第五部分 這一段是主函數(shù),根據(jù)flag(啟停標(biāo)志)和a(轉(zhuǎn)向標(biāo)志)控制電機(jī)運(yùn)行
void main() { uchar i; time0_init(); while(1) { if(flag) { if(a==1) { for(i=0;i<8;i++) { P1=tab1; delay(t);} } if(a==2) { for(i=0;i<8;i++) { P1=tab2; delay(t); } } } else P1=0x00; } }
Keil5內(nèi)的代碼如下圖
51hei圖片_20251208204512_169_18.jpg (97.41 KB, 下載次數(shù): 0)
下載附件
代碼
2025-12-8 20:46 上傳
51hei圖片_20251208204512_170_18.jpg (111.78 KB, 下載次數(shù): 0)
下載附件
代碼
2025-12-8 20:46 上傳
51hei圖片_20251208204512_171_18.jpg (69.21 KB, 下載次數(shù): 0)
下載附件
代碼
2025-12-8 20:46 上傳
第二步:使用Proteus仿真電路(此處省略了文件創(chuàng)建步驟)
放置元件AT89C51(單片機(jī))與L298(電機(jī)驅(qū)動(dòng)芯片) 將單片機(jī)的P1 口(P1.0~P1.5)連接 L298 的IN1~IN4和ENA/ENB(使能端),用于輸出步進(jìn)電機(jī)的相序控制信號(hào)和使能信號(hào) 將單片機(jī)的P2 口(P2.0~P2.5)連接 6 個(gè)按鍵(正轉(zhuǎn)、反轉(zhuǎn)、加速、減速、啟動(dòng)、停止),用于接收用戶操作指令 XTAL1/XTAL2 預(yù)留晶振接口(外接晶振和電容構(gòu)成時(shí)鐘電路) RST 為復(fù)位引腳(外接復(fù)位電路)
L298 電機(jī)驅(qū)動(dòng)芯片的IN1~IN4接口連接單片機(jī) P1 口,接收相序控制信號(hào);ENA/ENB連接單片機(jī) P1 口,控制驅(qū)動(dòng)模塊的使能(可用于調(diào)速) VCC接 5V 邏輯電源,VS接電機(jī)驅(qū)動(dòng)電源(需根據(jù)電機(jī)功率選擇,通常≥12V);OUT1~OUT4連接步進(jìn)電機(jī)的 4 個(gè)繞組,輸出驅(qū)動(dòng)電流。 SENSA/SENSB為電流檢測(cè)引腳(本電路中未使用,直接接地),可用于過流保護(hù)。
電機(jī)的 4 個(gè)繞組對(duì)應(yīng)連接 L298 的OUT1~OUT4,由驅(qū)動(dòng)芯片輸出的相序電流驅(qū)動(dòng)轉(zhuǎn)動(dòng)。
Proteus內(nèi)的電路連接情況如下圖
51hei圖片_20251208204520_172_18.png (286.54 KB, 下載次數(shù): 0)
下載附件
模擬電路圖
2025-12-8 20:46 上傳
實(shí)驗(yàn)?zāi)P痛罱ㄍ瓿桑酉聛磉M(jìn)行第三步
第三步:在Proteus內(nèi)進(jìn)行模擬實(shí)驗(yàn)
點(diǎn)擊左下角的按鍵啟動(dòng)模擬,點(diǎn)擊各個(gè)按鈕,觀察電機(jī)的旋轉(zhuǎn)情況
點(diǎn)擊“啟動(dòng)”,電機(jī)開始旋轉(zhuǎn)
51hei圖片_20251208204527_173_18.png (57.73 KB, 下載次數(shù): 0)
下載附件
啟動(dòng)
2025-12-8 20:46 上傳
點(diǎn)擊“加速”,電機(jī)轉(zhuǎn)速變快
51hei圖片_20251208204530_174_18.png (16.08 KB, 下載次數(shù): 0)
下載附件
2025-12-8 20:46 上傳
點(diǎn)擊“反轉(zhuǎn)”,電機(jī)朝反方向轉(zhuǎn)動(dòng)
51hei圖片_20251208204535_175_18.png (58.1 KB, 下載次數(shù): 0)
下載附件
反轉(zhuǎn)
2025-12-8 20:46 上傳
點(diǎn)擊“停止”,電機(jī)停轉(zhuǎn)
51hei圖片_20251208204539_176_18.png (63.43 KB, 下載次數(shù): 0)
下載附件
停止
2025-12-8 20:46 上傳
實(shí)驗(yàn)成功
由上述結(jié)果證明:
步進(jìn)電機(jī)必須加驅(qū)動(dòng)才可以運(yùn)轉(zhuǎn),驅(qū)動(dòng)信號(hào)必須為脈沖信號(hào),沒有脈沖的時(shí)候,步進(jìn)電機(jī)靜止,如果加入適當(dāng)?shù)拿}沖信號(hào),就會(huì)以一定的角度轉(zhuǎn)動(dòng)。轉(zhuǎn)動(dòng)的速度和脈沖的頻率成正比,而且改變脈沖的順序,可以改變電機(jī)轉(zhuǎn)動(dòng)的方向。
本設(shè)計(jì)到此結(jié)束,謝謝您的觀看!
仿真程序下載:
步進(jìn)電機(jī).zip
(939.21 KB, 下載次數(shù): 0)
2025-12-8 21:04 上傳
點(diǎn)擊文件名下載附件
附件 下載積分: 黑幣 -5
|