標題: 基于51單片機的步進電機正反轉調速系統控制 仿真+源程序+詳細教程 [打印本頁]
作者: wfq0624 時間: 2016-10-13 23:31
標題: 基于51單片機的步進電機正反轉調速系統控制 仿真+源程序+詳細教程
超級規范,詳細的注釋代碼,可以參考學習一下
0.png (598.49 KB, 下載次數: 114)
下載附件
2016-10-16 14:08 上傳
0.png (715.35 KB, 下載次數: 131)
下載附件
2016-10-16 14:13 上傳
本步進電機正反轉調速系統控制設計課題實際開發采用的軟件名稱和版本如下
(如果出現程序打開異常或文件打開不太對,請先檢查軟件版本)
Keil uVision5(keilc51-v9.54),Proteus 8.3 SP1,Altium Designer 14,LabVIEW2014,office2013,VSPD,stc-isp-15xx-v6.85I.exe
1、單片機是通用的無論51還是52、無論STC還是AT都一樣,引腳功能都一樣。程序也是一樣的。
2、原理圖,請用Altium Designer 14軟件打開,我已幫您轉換成word格式和pdf格式的了。
3、本店提供的USB轉串口線芯片是PL2303HX(部分帶上位機寶貝提供),請在電腦上安裝驅動PL2303_Prolific_DriverInstaller_v1_12_0,方可正常使用
4、可以按照正面布局,盡量不要按照實物的背面焊接,很容易看錯,建議參考本店提供的實物圖片布局參考,都是優化之后的布局,省時省力。要按照原理圖焊接,不要按照仿真圖焊接,因為仿真只是模擬一個現象。
5、焊接之前一定要提前閱讀 制作實物詳解(含焊接) 文件夾里的焊接技巧和器件說明,可大大提高焊接的成功率。
8、關于本套設計使用說明請看視頻:
步進電機正反轉調速系統的仿真原理圖:
0.png (73.92 KB, 下載次數: 112)
下載附件
2016-10-16 14:06 上傳
0.png (88.08 KB, 下載次數: 143)
下載附件
2016-10-16 14:07 上傳
0.png (87.1 KB, 下載次數: 108)
下載附件
2016-10-16 14:10 上傳
步進電機正反轉調速系統源程序:
- //-----------------------------------------------------------------
- // 名稱:步進電機(28BYJ-48)程序
- //-----------------------------------------------------------------
- //---1~9檔的轉速------------------------------------------------
- //DEE4 定時時間 8.476ms , 轉速 1.73r/min
- //E1EC 定時時間 7.7ms , 轉速 1.90r/min
- //E5D4 定時時間 6.7ms, 轉速 2.19r/min
- //E9BC 定時時間 5.7ms, 轉速 2.57r/min
- //EDA4 定時時間 4.7ms, 轉速 3.12r/min
- //F18C 定時時間 3.7ms, 轉速 3.96r/min
- //F574 定時時間 2.7ms, 轉速 5.43r/min
- //F95C 定時時間 1.7ms, 轉速 8.62r/min
- //FC18 定時時間 1ms , 轉速 14.65r/min
- //-----------------------------------------------------------------
- //轉一圈需要節拍數:360/(5.625/64) = 4096 個節拍
- //轉速r/min = (60*1000) / (4096 * 定時時間)
- //-----------------------------------------------------------------
- #include "Key.h"
- //0~9 的共陽數碼管段碼,最后一個是黑屏
- const uchar SEG_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF};
- //輸出勵磁序列的頻率參數{TH1,TL1}
- const uchar Timer[9][2]={{0xDE,0xE4},{0xE1,0xEC},{0xE5,0xD4},{0xE9,0xBC}, //8.476 ~ 1ms
- {0xEd,0xA4},{0xF1,0x8C},{0xF5,0x74},{0xF9,0x5C},{0xFC,0x18}};
- //步進電機正轉的勵磁序列
- const uchar FFW[] = {0x1F,0x3F,0x2F,0x6F,0x4F,0xCF,0x8F,0x9F}; //DCBAXXXX
- //步進電機反轉的勵磁序列
- const uchar REV[] = {0x9F,0x8F,0xCF,0x4F,0x6F,0x2F,0x3F,0x1F}; //DCBAXXXX
- //枚舉變量--正反轉標志
- typedef enum
- {FwdRun, RevRun} RunFlag;
- RunFlag flag1 = FwdRun;
- uchar speed = 0;
- //函數聲明
- void T0_Init(); //定時器0初始化函數聲明
- void T1_Init(); //定時器1初始化函數聲明
- void KeyService(); //按鍵服務函數聲明
- void delay_ms(uint t); //毫秒延時函數聲明
-
- //-----------------------------------------------------------------
- // 主程序
- //-----------------------------------------------------------------
- void main()
- {
- T0_Init(); //定時器0初始化
- T1_Init(); //定時器1初始化
- FWD_LED = 0; //正轉指示燈亮,默認初始化是正轉
-
- delay_ms(500); //延時500ms,待各個模塊上電穩定
- EA = 1; //開啟中斷
- while(1)
- {
- KeyService(); //按鍵服務程序
- }
- }
- //-----------------------------------------------------------------
- // Timer0 初始化,模式1,允許中斷,1ms定時
- // Timer0 用于按鍵掃描
- //-----------------------------------------------------------------
- void T0_Init()
- {
- TMOD &= 0xF0;
- TMOD |= 0x01; //T0工作于模式1,16位定時器
- TH0 = (65536 - 1000) >> 8; //1ms定時
- TL0 = (65536 - 1000) & 0xFF;
- ET0 = 1; //允許T0中斷
- TR0 = 1; //啟動T0
- }
- //-----------------------------------------------------------------
- // Timer1 初始化,模式1,允許中斷
- // Timer1 用于改變步進電機轉速
- //-----------------------------------------------------------------
- void T1_Init()
- {
- TMOD &= 0x0F;
- TMOD |= 0x10; //定時器1工作于模式1,16位定時器
- TH1 = Timer[speed][0];
- TL1 = Timer[speed][1]; //定時器1,定時用于步進電機轉速控制
- ET1 = 1; //允許T1中斷
- PT1 = 1; //定時器1優先級高
- TR1 = 0; //關閉定時器1
- }
- //-----------------------------------------------------------------
- // Timer0 中斷服務程序
- //-----------------------------------------------------------------
- void InterruptTime0() interrupt 1
- {
- TH0 = (65536 - 1000) >> 8; //1ms
- TL0 = (65536 - 1000) & 0xFF;
- KeyScan(); //按鍵掃描
- }
- //-----------------------------------------------------------------
- // Timer1 中斷服務程序
- //-----------------------------------------------------------------
- void InterruptTime1() interrupt 3
- {
- static step1 = 0;
- static step2 = 0;
- TH1 = Timer[speed - 1][0]; //根據不同的轉速檔位,給定時器1賦定時器值
- TL1 = Timer[speed - 1][1];
-
- //按照定時器1的頻率循環發送正轉勵磁序列的脈沖給步進電機,使其不停地轉動
- if(flag1 == FwdRun)//正轉
- {
- MotorDriver = FFW[step1++];
- if(step1 == 8) step1 = 0;
- }
-
- //按照定時器1的頻率循環發送反轉勵磁序列的脈沖給步進電機,使其不停地轉動
- else if(flag1 == RevRun)
- {
- MotorDriver = REV[step2++];
- if(step2 == 8) step2 = 0;
- }
- }
- //-----------------------------------------------------------------
- // 按鍵服務程序
- //-----------------------------------------------------------------
- void KeyService()
- {
- switch (KeyCode)
- {
- case 1: flag1 = FwdRun; //正轉
- FWD_LED = 0; REV_LED = 1; //正轉指示燈亮
- KeyCode = 0;
- break;
- case 2: flag1 = RevRun; //反轉
- FWD_LED = 1; REV_LED = 0; //反轉指示燈亮
- KeyCode = 0;
- break;
- case 3: speed++; //速度加
- if(speed == 10) speed = 1;
- SpeedShow = SEG_CODE[speed];
- if(TR1 == 0) TR1 = 1;
- KeyCode = 0;
- break;
- case 4: speed--; //速度減
- if(speed == 0 || speed == -1 ) speed = 9;
- SpeedShow = SEG_CODE[speed];
- if(TR1 == 0) TR1 = 1;
- KeyCode = 0;
- break;
- case 5: TR1 = 0; //停止
- SpeedShow = 0xFF;
- MotorDriver = 0x00;
- KeyCode = 0;
- break;
- default: ;
- }
- }
- //-----------------------------------------------------------------
- //函數名稱: void delay_ms(uint t)
- //函數功能: 延時ms程序(粗略)
- //調用子函數: 無
- //輸入參數: t
- //返回值: 無
- //-----------------------------------------------------------------
- void delay_ms(uint t)
- {
- uchar i; while(t--) for(i = 0; i < 125; i++);
- }
復制代碼
- //-----------------------------------------------------------------
- // 名稱:按鍵處理程序(獨立鍵盤)
- //-----------------------------------------------------------------
- #include "Key.h"
- uchar KeyCode = 0; //按鍵編碼值
- //共5個獨立機械按鍵,通過短按實現5種按鍵編碼值
- uint KeyTimeCnt[5] = {0,0,0,0,0}; //按鍵去抖動延時計數器,分別對應KEY1/2/3/4/5
- uchar KeyLock[5] = {0,0,0,0,0}; //按鍵觸發后自鎖的變量標志,分別對應KEY1/2/3/4/5
- //-----------------------------------------------------------------
- //函數名稱: void KeyScan()
- //函數功能: 按鍵掃描程序,放在定時中斷里,可較快實現按鍵響應
- //調用子函數: 無
- //輸入參數: 無
- //返回值: 無,說明:返回的按鍵編碼值保存在KeyCode變量里
- //-----------------------------------------------------------------
- void KeyScan()
- {
- //------KEY1實現-------------------------------------------------
- if(KEY1 == 1) //IO是高電平,說明按鍵沒有被按下,這時要及時清零一些標志位
- { KeyLock[0] = 0; //按鍵自鎖變量標志清零
- KeyTimeCnt[0] = 0; //按鍵去抖動延時計數器清零
- }
- else if(KeyLock[0] == 0)
- {
- KeyTimeCnt[0]++;
- if(KeyTimeCnt[0] > KEY_TIME_SHORT)
- {
- KeyTimeCnt[0] = 0;
- KeyLock[0] = 1; //自鎖按鍵置位,避免一直觸發
- KeyCode = 1;
- }
- }
-
- //------KEY2實現-----------------------------------
- if(KEY2 == 1)
- { KeyLock[1] = 0;
- KeyTimeCnt[1] = 0;
- }
- else if(KeyLock[1] == 0)
- {
- KeyTimeCnt[1]++;
- if(KeyTimeCnt[1] > KEY_TIME_SHORT) //消抖
- {
- KeyTimeCnt[1] = 0; //按鍵去抖動延時計數器清零
- KeyLock[1] = 1; //自鎖按鍵置位,避免一直觸發
- KeyCode = 2;
- }
- }
- //------KEY3實現-----------------------------------
- if(KEY3 == 1)
- { KeyLock[2] = 0;
- KeyTimeCnt[2] = 0;
- }
- else if(KeyLock[2] == 0)
- {
- KeyTimeCnt[2]++;
- if(KeyTimeCnt[2] > KEY_TIME_SHORT)
- {
- KeyTimeCnt[2] = 0;
- KeyLock[2] = 1;
- KeyCode = 3;
- }
- }
- //------KEY4實現-----------------------------------
- if(KEY4 == 1)
- { KeyLock[3] = 0;
- KeyTimeCnt[3] = 0;
- }
- else if(KeyLock[3] == 0)
- {
- KeyTimeCnt[3]++;
- if(KeyTimeCnt[3] > KEY_TIME_SHORT)
- {
- KeyTimeCnt[3] = 0;
- KeyLock[3] = 1;
- KeyCode = 4;
- }
- }
-
- //------KEY5實現-----------------------------------
- if(KEY5 == 1)
- { KeyLock[4] = 0;
- KeyTimeCnt[4] = 0;
- }
- else if(KeyLock[4] == 0)
- {
- KeyTimeCnt[4]++;
- if(KeyTimeCnt[4] > KEY_TIME_SHORT)
- {
- KeyTimeCnt[4] = 0;
- KeyLock[4] = 1;
- KeyCode = 5;
- }
- }
- }
復制代碼 程序有些問題 無法轉動:
步進電機正反轉調速系統設計.7z
(3.73 MB, 下載次數: 244)
2023-1-3 16:51 上傳
點擊文件名下載附件
作者: cs58724 時間: 2017-1-4 14:53
大神!
作者: cs58724 時間: 2017-1-4 14:54
收下了
作者: 業火紅蓮 時間: 2017-6-7 21:01
在找這方面的東西 很有幫助
作者: 先黑 時間: 2017-10-12 09:54
想問 接電路板的時候有什么注意的地方
作者: GUOXUAN 時間: 2018-4-19 09:38
感謝老師貢獻資料
作者: 阿拉雷666 時間: 2018-11-29 12:35
正好近期做類似的設計 借鑒一下
作者: haha5454250 時間: 2019-6-11 16:24
收下了
作者: sunchong 時間: 2019-6-24 11:04
謝謝,很有用
作者: 無名氏網友 時間: 2020-6-3 12:39
你的Key.h沒放上
作者: wjinyao 時間: 2022-12-30 10:28
仿真用不了
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
国产精品久久久久久久久免费相片
|
91看片网
|
天天爱综合
|
91精品国产综合久久久久久丝袜
|
国产第一页在线播放
|
日本精品一区二区三区在线观看视频
|
国产日韩欧美在线播放
|
国产精品日韩欧美一区二区三区
|
国产精品久久久久久久岛一牛影视
|
超碰精品在线
|
天堂色区
|
久久久欧洲
|
国产精品久久久久久久久久三级
|
成人精品影院
|
精品国产91亚洲一区二区三区www
|
九九热这里只有精品在线观看
|
欧美精品一区二区三区四区五区
|
黄色免费三级
|
亚洲精品电影在线观看
|
欧美激情第一区
|
一级在线观看
|
一区二区三区久久
|
成人精品国产
|
91精品久久久久
|
99免费视频
|
亚洲不卡av在线
|
一区二区国产在线
|
亚洲精品一二三
|
精国产品一区二区三区四季综
|
亚州无限乱码
|
亚洲视频一区在线观看
|
久久久91
|
欧美福利在线
|
久久99精品久久久久久
|
亚洲一区在线播放
|
伊人精品国产
|
欧美国产日韩精品
|
亚洲国产精品99久久久久久久久
|
欧美二区在线
|
精品久久免费
|
亚洲一区二区三
|