欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 我的單片機步進電機設計 含源程序,模擬電路圖,Proteus仿真圖 [打印本頁]

作者: RoLain    時間: 2025-12-8 20:40
標題: 我的單片機步進電機設計 含源程序,模擬電路圖,Proteus仿真圖
這是我最近做的一個步進電機設計
使用的單片機是AT89C51
需要用到軟件Keil5,Proteus8.9
是根據我們的設計要求做的
附件里包含步進電機的單片機源代碼,以及Proteus模擬電路圖,設計文件
對該作品的介紹可能不是很嚴謹,還請大家多包涵
如果該設計存在學術性錯誤,還請為我指正!
以下是設計內容,希望它可以幫到你:

所涉及到的知識:

一、步進電機是什么?

步進電機是將電脈沖信號轉變為角位移或線位移的開環控制元件。在非超載的情況下,電機的轉速、停止的位置只取決于脈沖信號的頻率和脈沖數,而不受負載變化的影響,即給電機加一個脈沖信號,電機則轉過一個步距角。這一線性關系的存在,加上步進電機只有周期性的誤差而無累積誤差等特點。使得在速度、位置等控制領域用步進電
機來控制變的非常的簡單。

二、步進電機的主要特性有哪些?

1.  步進電機必須加驅動才可以運轉,驅動信號必須為脈沖信號,沒有脈沖的時候,步進電機靜止,如果加入適當的脈沖信號,就會以一定的角度(稱為步角)轉動。轉動的速度和脈沖的頻率成正比。

2.  本次使用的步進電機是 28BYJ48 5V 驅動的 4 相 5 線的步進電機,而且是減速步進電機,減速比為 1:64,步進角為 5.625/64 度。如果需要轉動 1 圈,那么需要 360/5.625*64=4096 個脈沖信號。

3.  步進電機具有瞬間啟動和急速停止的優越特性。

4.  改變脈沖的順序,可以方便的改變轉動的方向。


本設計將通過實現一個基于單片機的可以通過按鍵精確控制電機正反轉,加減速,開始和停止控制電路來說明單片機如何工作

具體操作步驟如下:

第一步:Keil編程(此處省略了文件創建步驟)

第一部分   這一串代碼可以控制電機的轉向

#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;

第二部分  這一串代碼可以實現對電機的接近毫秒級延時的控制,原理是通過嵌套循環消耗 CPU 時間實現延時

void delay(uchar ms)
{ uchar j;
while(ms--)
for(j=0;j<100;j++);}

第三部分   這一串代碼可以實現電機的轉向切換、調速、啟停控制

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;//正轉
    case 0xfd:a=2;break;//反轉
    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);
  }
}
}

第四部分   這一段代碼可以通過定時器 0 實現定時中斷

void time0_init() //定時器T0初始化
{
TMOD=0x01;   //設置定時器0工作方式1
TH0=(65536-50000)/256;//定時50ms取高八位
TL0=(65536-50000)%256; //取低八位
ET0=1; //開定時器0中斷使能
EA=1;  //開總中斷使能
TR0=1; //開啟中斷
}
void time0() interrupt 1 //定時器T0入口函數
{
TH0=(65536-50000)/256; //定時50ms重新賦初值
TL0=(65536-50000)%256;
keyscan();
}

第五部分   這一段是主函數,根據flag(啟停標志)和a(轉向標志)控制電機運行

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內的代碼如下圖







第二步:使用Proteus仿真電路(此處省略了文件創建步驟)


放置元件AT89C51(單片機)與L298(電機驅動芯片)
將單片機的P1 口(P1.0~P1.5)連接 L298 的IN1~IN4和ENA/ENB(使能端),用于輸出步進電機的相序控制信號和使能信號
將單片機的P2 口(P2.0~P2.5)連接 6 個按鍵(正轉、反轉、加速、減速、啟動、停止),用于接收用戶操作指令
XTAL1/XTAL2 預留晶振接口(外接晶振和電容構成時鐘電路)
RST 為復位引腳(外接復位電路)

L298 電機驅動芯片的IN1~IN4接口連接單片機 P1 口,接收相序控制信號;ENA/ENB連接單片機 P1 口,控制驅動模塊的使能(可用于調速)
VCC接 5V 邏輯電源,VS接電機驅動電源(需根據電機功率選擇,通常≥12V);OUT1~OUT4連接步進電機的 4 個繞組,輸出驅動電流。
SENSA/SENSB為電流檢測引腳(本電路中未使用,直接接地),可用于過流保護。

電機的 4 個繞組對應連接 L298 的OUT1~OUT4,由驅動芯片輸出的相序電流驅動轉動。




Proteus內的電路連接情況如下圖




實驗模型搭建完成,接下來進行第三步



第三步:在Proteus內進行模擬實驗


點擊左下角的按鍵啟動模擬,點擊各個按鈕,觀察電機的旋轉情況



點擊“啟動”,電機開始旋轉



點擊“加速”,電機轉速變快



點擊“反轉”,電機朝反方向轉動



點擊“停止”,電機停轉



實驗成功

由上述結果證明:

步進電機必須加驅動才可以運轉,驅動信號必須為脈沖信號,沒有脈沖的時候,步進電機靜止,如果加入適當的脈沖信號,就會以一定的角度轉動。轉動的速度和脈沖的頻率成正比,而且改變脈沖的順序,可以改變電機轉動的方向。

本設計到此結束,謝謝您的觀看!
仿真程序下載: 步進電機.zip (939.21 KB, 下載次數: 0)

作者: kpffq    時間: 2025-12-10 09:06
T0定時器初值是不是搞反了,以12M主頻為例,如果定時50ms,應該是65536-15536吧?
作者: RoLain    時間: 2025-12-10 12:24
發表于 2025-12-10 09:06
T0定時器初值是不是搞反了,如果定時50ms,應該是65536-15536吧?

我用人工智能搜了一下,它告訴我應該是65536-50000,說是“需要計數 50000 次才能達到 50ms 定時”這樣
作者: kpffq    時間: 2025-12-10 19:58
RoLain 發表于 2025-12-10 12:24
我用人工智能搜了一下,它告訴我應該是65536-50000,說是“需要計數 50000 次才能達到 50ms 定時”這樣

你是對的,不好意思我搞錯了。
作者: RoLain    時間: 2025-12-11 10:34
kpffq 發表于 2025-12-10 19:58
你是對的,不好意思我搞錯了。

沒事,謝謝你能提出問題
作者: 白水大蝦2016    時間: 2025-12-11 11:54
能運行嗎?


作者: RoLain    時間: 2025-12-11 15:46
白水大蝦2016 發表于 2025-12-11 11:54
能運行嗎?

我在Proteus里成功運行了,是遇到什么問題了嗎?
作者: 白水大蝦2016    時間: 2025-12-12 10:34
RoLain 發表于 2025-12-11 15:46
我在Proteus里成功運行了,是遇到什么問題了嗎?

我做了實驗速度可調但快不了
作者: RoLain    時間: 2025-12-13 14:19
白水大蝦2016 發表于 2025-12-12 10:34
我做了實驗速度可調但快不了

按加速鍵也轉不了更快嗎?還請詳細說明




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1