仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
a.png (107.07 KB, 下載次數: 78)
下載附件
仿真
2020-7-2 11:29 上傳
本設計研究的是基于51單片機的步進電機控制系統。采用單片機AT89C51作為控制核心,通過五個按鍵控制步進電機的運行狀態,即控制啟停、正反轉、加減速,并利用八位的數碼管顯示步進電機的速度等級。本設計的硬件部分主要由單片機、鍵盤控制模塊、電機驅動模塊、數碼管顯示模塊以及電源模塊五部分組成。
51hei.png (14.43 KB, 下載次數: 57)
下載附件
2020-7-2 14:34 上傳
編程實現方式有兩種,查詢和中斷。全部文件都在附件中上傳了。
軟件設計部分本控制算法分為查詢方式和中斷方式兩種控制算法。相比于查詢方式,中斷方式按鍵響應延時更小。主要的思路是:主函數先初始化相關寄存器后,在while循環中不斷執行鍵盤掃描函數,而步進電機控制函數在調用定時器中斷來實現。以下是算法解析:
步進電機采用八拍控制,數碼管顯示0-9的數字。預先設定對應的16進制數,存入數組。
本設計研究的是基于51單片機的步進電機控制系統。采用單片機AT89C51作為控制核心,通過五個按鍵控制步進電機的運行狀態,即控制啟停、正反轉、加減速,并利用八位的數碼管顯示步進電機的速度等級。本設計的硬件部分主要由單片機、鍵盤控制模塊、電機驅動模塊、數碼管顯示模塊以及電源模塊五部分組成。系統框圖如圖1所示
本設計主要實現的功能:
(1)5 個按鍵控制整個電路,對應功能分別是:啟動 / 暫停、正轉、反轉、加速、減速。
(2)數碼管顯示電機轉動速度的等級;
單片機源程序如下:
- uchar cw[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //正轉
- uchar acw[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //反轉
- uchar a[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //共陽數碼管段碼
- 聲明相關函數
- void Delay_ms(uint x); //延時函數
- void scan_key(); //鍵盤掃描
- void display(uchar num); //顯示函數
- 定時器中斷控制函數:index是一個循環系數,每次進入中斷,系數自增一,當index到達預設的速度檔位,就執行電機控制部分。
-
- void MOTOR_control() interrupt 3 //定時器1中斷服務程序
- {
- TH1=(65536-10000)/256;
- TL1=(65526-10000)%256;
- index++;
- if(index >= loop) //循環系數
- {
- index=0;
- if(sw==1)
- {
- step++; //步進值
- if(step>8)
- {
- step=0;
- }
- else
- {
- if(flag==1)
- {
- P2=cw[step-1]; //正轉
- }
- else
- {
- P2=acw[step-1]; //反轉
- }
- }
- }
- else P2=0x00;}}
復制代碼
51hei.png (6.08 KB, 下載次數: 98)
下載附件
2020-7-2 14:32 上傳
全部資料51hei下載地址:
項目1.rar
(339.84 KB, 下載次數: 640)
2020-7-2 11:33 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|