久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10327|回復(fù): 10
收起左側(cè)

基于51單片機的步進(jìn)電機正反轉(zhuǎn)調(diào)速系統(tǒng)控制 仿真+源程序+詳細(xì)教程

  [復(fù)制鏈接]
ID:102536 發(fā)表于 2016-10-13 23:31 | 顯示全部樓層 |閱讀模式
超級規(guī)范,詳細(xì)的注釋代碼,可以參考學(xué)習(xí)一下
0.png 0.png
步進(jìn)電機正反轉(zhuǎn)調(diào)速系統(tǒng)控制設(shè)計課題實際開發(fā)采用的軟件名稱和版本如下
(如果出現(xiàn)程序打開異常或文件打開不太對,請先檢查軟件版本)
Keil uVision5keilc51-v9.54),Proteus 8.3 SP1Altium Designer 14LabVIEW2014office2013VSPDstc-isp-15xx-v6.85I.exe
1、單片機是通用的無論51還是52、無論STC還是AT都一樣,引腳功能都一樣。程序也是一樣的。
2、原理圖,請用Altium Designer 14軟件打開,我已幫您轉(zhuǎn)換成word格式和pdf格式的了。
3、本店提供的USB轉(zhuǎn)串口線芯片是PL2303HX(部分帶上位機寶貝提供),請在電腦上安裝驅(qū)動PL2303_Prolific_DriverInstaller_v1_12_0,方可正常使用
下載鏈接:http://www.zg4o1577.cn/bbs/dpj-56767-1.html   或者百度也可以有很多地址下載
4、可以按照正面布局,盡量不要按照實物的背面焊接,很容易看錯,建議參考本店提供的實物圖片布局參考,都是優(yōu)化之后的布局,省時省力。要按照原理圖焊接,不要按照仿真圖焊接,因為仿真只是模擬一個現(xiàn)象。
5、焊接之前一定要提前閱讀 制作實物詳解(含焊接) 文件夾里的焊接技巧和器件說明,可大大提高焊接的成功率。

8、關(guān)于本套設(shè)計使用說明請看視頻:

步進(jìn)電機正反轉(zhuǎn)調(diào)速系統(tǒng)的仿真原理圖:

0.png 0.png 0.png

步進(jìn)電機正反轉(zhuǎn)調(diào)速系統(tǒng)源程序:
  1. //-----------------------------------------------------------------
  2. //  名稱:步進(jìn)電機(28BYJ-48)程序
  3. //-----------------------------------------------------------------

  4. //---1~9檔的轉(zhuǎn)速------------------------------------------------
  5. //DEE4        定時時間        8.476ms        ,                轉(zhuǎn)速        1.73r/min
  6. //E1EC        定時時間        7.7ms        ,                        轉(zhuǎn)速        1.90r/min
  7. //E5D4        定時時間        6.7ms,                        轉(zhuǎn)速        2.19r/min
  8. //E9BC        定時時間        5.7ms,                        轉(zhuǎn)速        2.57r/min
  9. //EDA4        定時時間        4.7ms,                        轉(zhuǎn)速        3.12r/min
  10. //F18C        定時時間        3.7ms,                        轉(zhuǎn)速        3.96r/min
  11. //F574        定時時間        2.7ms,                        轉(zhuǎn)速        5.43r/min
  12. //F95C        定時時間        1.7ms,                        轉(zhuǎn)速        8.62r/min
  13. //FC18        定時時間        1ms         ,                        轉(zhuǎn)速        14.65r/min
  14. //-----------------------------------------------------------------
  15. //轉(zhuǎn)一圈需要節(jié)拍數(shù):360/(5.625/64) = 4096 個節(jié)拍
  16. //轉(zhuǎn)速r/min = (60*1000) / (4096 * 定時時間)
  17. //-----------------------------------------------------------------

  18. #include "Key.h"

  19. //0~9 的共陽數(shù)碼管段碼,最后一個是黑屏
  20. const uchar SEG_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF};

  21. //輸出勵磁序列的頻率參數(shù){TH1,TL1}
  22. const uchar Timer[9][2]={{0xDE,0xE4},{0xE1,0xEC},{0xE5,0xD4},{0xE9,0xBC},  //8.476 ~ 1ms
  23.                                                             {0xEd,0xA4},{0xF1,0x8C},{0xF5,0x74},{0xF9,0x5C},{0xFC,0x18}};

  24. //步進(jìn)電機正轉(zhuǎn)的勵磁序列
  25. const uchar FFW[] = {0x1F,0x3F,0x2F,0x6F,0x4F,0xCF,0x8F,0x9F}; //DCBAXXXX

  26. //步進(jìn)電機反轉(zhuǎn)的勵磁序列
  27. const uchar REV[] = {0x9F,0x8F,0xCF,0x4F,0x6F,0x2F,0x3F,0x1F}; //DCBAXXXX

  28. //枚舉變量--正反轉(zhuǎn)標(biāo)志
  29. typedef enum
  30.         {FwdRun, RevRun} RunFlag;                                                               
  31. RunFlag flag1 = FwdRun;

  32. uchar speed = 0;

  33. //函數(shù)聲明
  34. void T0_Init();                                        //定時器0初始化函數(shù)聲明
  35. void T1_Init();                                        //定時器1初始化函數(shù)聲明
  36. void KeyService();                        //按鍵服務(wù)函數(shù)聲明
  37. void delay_ms(uint t);        //毫秒延時函數(shù)聲明
  38.         
  39. //-----------------------------------------------------------------
  40. // 主程序
  41. //-----------------------------------------------------------------
  42. void main()
  43. {        
  44.         T0_Init();                                        //定時器0初始化
  45.         T1_Init();                                        //定時器1初始化
  46.         FWD_LED = 0;                                //正轉(zhuǎn)指示燈亮,默認(rèn)初始化是正轉(zhuǎn)
  47.         
  48.         delay_ms(500);                        //延時500ms,待各個模塊上電穩(wěn)定
  49.         EA = 1;                                                        //開啟中斷
  50.         while(1)
  51.         {        
  52.                 KeyService();                //按鍵服務(wù)程序
  53.         }
  54. }        

  55. //-----------------------------------------------------------------
  56. // Timer0 初始化,模式1,允許中斷,1ms定時
  57. // Timer0 用于按鍵掃描
  58. //-----------------------------------------------------------------
  59. void T0_Init()
  60. {
  61.         TMOD &= 0xF0;
  62.         TMOD |= 0x01;                                                                                //T0工作于模式1,16位定時器
  63.         TH0 = (65536 - 1000) >> 8;                        //1ms定時
  64.         TL0 = (65536 - 1000) & 0xFF;
  65.         ET0 = 1;                                                                                                //允許T0中斷
  66.         TR0 = 1;                                                                                                //啟動T0
  67. }

  68. //-----------------------------------------------------------------
  69. // Timer1 初始化,模式1,允許中斷
  70. // Timer1 用于改變步進(jìn)電機轉(zhuǎn)速
  71. //-----------------------------------------------------------------
  72. void T1_Init()
  73. {
  74.         TMOD &= 0x0F;
  75.         TMOD |= 0x10;                                                        //定時器1工作于模式1,16位定時器
  76.         TH1 = Timer[speed][0];
  77.         TL1 = Timer[speed][1];                //定時器1,定時用于步進(jìn)電機轉(zhuǎn)速控制
  78.         ET1 = 1;                                                                        //允許T1中斷
  79.         PT1 = 1;                                                                        //定時器1優(yōu)先級高
  80.         TR1 = 0;                                                                        //關(guān)閉定時器1
  81. }

  82. //-----------------------------------------------------------------
  83. // Timer0 中斷服務(wù)程序
  84. //-----------------------------------------------------------------
  85. void InterruptTime0() interrupt 1
  86. {
  87.         TH0 = (65536 - 1000) >> 8;                //1ms
  88.         TL0 = (65536 - 1000) & 0xFF;
  89.         KeyScan();                                                                                //按鍵掃描
  90. }


  91. //-----------------------------------------------------------------
  92. // Timer1 中斷服務(wù)程序
  93. //-----------------------------------------------------------------
  94. void InterruptTime1() interrupt 3
  95. {
  96.         static step1 = 0;                                                        
  97.         static step2 = 0;
  98.         TH1 = Timer[speed - 1][0];                        //根據(jù)不同的轉(zhuǎn)速檔位,給定時器1賦定時器值
  99.         TL1 = Timer[speed - 1][1];                        
  100.         
  101.         //按照定時器1的頻率循環(huán)發(fā)送正轉(zhuǎn)勵磁序列的脈沖給步進(jìn)電機,使其不停地轉(zhuǎn)動
  102.         if(flag1 == FwdRun)//正轉(zhuǎn)
  103.         {
  104.                 MotorDriver = FFW[step1++];               
  105.                 if(step1 == 8) step1 = 0;
  106.         }
  107.         
  108.          //按照定時器1的頻率循環(huán)發(fā)送反轉(zhuǎn)勵磁序列的脈沖給步進(jìn)電機,使其不停地轉(zhuǎn)動
  109.         else if(flag1 == RevRun)      
  110.         {
  111.                 MotorDriver = REV[step2++];
  112.                 if(step2 == 8) step2 = 0;
  113.         }
  114. }

  115. //-----------------------------------------------------------------
  116. // 按鍵服務(wù)程序
  117. //-----------------------------------------------------------------
  118. void KeyService()
  119. {
  120.         switch (KeyCode)
  121.         {
  122.                 case 1:        flag1 = FwdRun;                                                                                //正轉(zhuǎn)
  123.                                                 FWD_LED = 0;        REV_LED = 1;                                //正轉(zhuǎn)指示燈亮
  124.                                                 KeyCode = 0;
  125.                                                 break;                                                        
  126.                 case 2:        flag1 = RevRun;                                                                                //反轉(zhuǎn)
  127.                                                 FWD_LED = 1;        REV_LED = 0;                                //反轉(zhuǎn)指示燈亮
  128.                                                 KeyCode = 0;
  129.                                                 break;
  130.                 case 3:        speed++;                                                                                                        //速度加
  131.                                                 if(speed == 10) speed = 1;                                
  132.                                                 SpeedShow = SEG_CODE[speed];
  133.                                                 if(TR1 == 0) TR1 = 1;
  134.                                                 KeyCode = 0;
  135.                                                 break;
  136.                 case 4:        speed--;                                                                                                        //速度減
  137.                                                 if(speed == 0 || speed == -1 ) speed = 9;
  138.                                                 SpeedShow = SEG_CODE[speed];        
  139.                                                 if(TR1 == 0) TR1 = 1;        
  140.                                                 KeyCode = 0;
  141.                                                 break;
  142.                 case 5:        TR1 = 0;                                                                                                        //停止
  143.                                                 SpeedShow = 0xFF;
  144.                                                 MotorDriver = 0x00;
  145.                                                 KeyCode = 0;
  146.                                                 break;        
  147.                 default: ;
  148.         }
  149. }

  150. //-----------------------------------------------------------------
  151. //函數(shù)名稱:        void delay_ms(uint t)
  152. //函數(shù)功能:                延時ms程序(粗略)
  153. //調(diào)用子函數(shù): 無
  154. //輸入?yún)?shù):         t
  155. //返回值:                        無
  156. //-----------------------------------------------------------------
  157. void delay_ms(uint t)
  158. {
  159.         uchar i; while(t--) for(i = 0; i < 125; i++);
  160. }
復(fù)制代碼

  1. //-----------------------------------------------------------------
  2. //  名稱:按鍵處理程序(獨立鍵盤)
  3. //-----------------------------------------------------------------
  4. #include "Key.h"

  5. uchar KeyCode = 0;                                                //按鍵編碼值

  6. //共5個獨立機械按鍵,通過短按實現(xiàn)5種按鍵編碼值
  7. uint KeyTimeCnt[5] = {0,0,0,0,0};                //按鍵去抖動延時計數(shù)器,分別對應(yīng)KEY1/2/3/4/5
  8. uchar KeyLock[5] = {0,0,0,0,0};                        //按鍵觸發(fā)后自鎖的變量標(biāo)志,分別對應(yīng)KEY1/2/3/4/5

  9. //-----------------------------------------------------------------
  10. //函數(shù)名稱:        void KeyScan()
  11. //函數(shù)功能:                按鍵掃描程序,放在定時中斷里,可較快實現(xiàn)按鍵響應(yīng)
  12. //調(diào)用子函數(shù):        無
  13. //輸入?yún)?shù):         無
  14. //返回值:                        無,說明:返回的按鍵編碼值保存在KeyCode變量里
  15. //-----------------------------------------------------------------
  16. void KeyScan()
  17. {
  18. //------KEY1實現(xiàn)-------------------------------------------------
  19.         if(KEY1 == 1)                                                        //IO是高電平,說明按鍵沒有被按下,這時要及時清零一些標(biāo)志位
  20.         {        KeyLock[0] = 0;                                        //按鍵自鎖變量標(biāo)志清零
  21.                 KeyTimeCnt[0] = 0;                  //按鍵去抖動延時計數(shù)器清零
  22.         }
  23.         else if(KeyLock[0] == 0)
  24.         {
  25.                  KeyTimeCnt[0]++;
  26.                  if(KeyTimeCnt[0] > KEY_TIME_SHORT)  
  27.                  {
  28.                                 KeyTimeCnt[0] = 0;
  29.                                 KeyLock[0] = 1;                  //自鎖按鍵置位,避免一直觸發(fā)
  30.                                 KeyCode = 1;
  31.                  }
  32.         }
  33.         
  34. //------KEY2實現(xiàn)-----------------------------------
  35.         if(KEY2 == 1)
  36.         {        KeyLock[1] = 0;
  37.                 KeyTimeCnt[1] = 0;
  38.         }
  39.         else if(KeyLock[1] == 0)
  40.         {
  41.                  KeyTimeCnt[1]++;
  42.                  if(KeyTimeCnt[1] > KEY_TIME_SHORT)         //消抖
  43.                  {        
  44.                                 KeyTimeCnt[1] = 0;                                                                 //按鍵去抖動延時計數(shù)器清零
  45.                                 KeyLock[1] = 1;                                                                          //自鎖按鍵置位,避免一直觸發(fā)
  46.                                 KeyCode = 2;                                                                    
  47.                  }
  48.         }

  49. //------KEY3實現(xiàn)-----------------------------------
  50.         if(KEY3 == 1)
  51.         {        KeyLock[2] = 0;
  52.                 KeyTimeCnt[2] = 0;               
  53.         }
  54.         else if(KeyLock[2] == 0)
  55.         {
  56.                  KeyTimeCnt[2]++;
  57.                  if(KeyTimeCnt[2] > KEY_TIME_SHORT)
  58.                  {        
  59.                                 KeyTimeCnt[2] = 0;
  60.                                 KeyLock[2] = 1;  
  61.                                 KeyCode = 3;                                                                    
  62.                  }
  63.         }

  64. //------KEY4實現(xiàn)-----------------------------------
  65.         if(KEY4 == 1)
  66.         {        KeyLock[3] = 0;
  67.                 KeyTimeCnt[3] = 0;               
  68.         }
  69.         else if(KeyLock[3] == 0)
  70.         {
  71.                  KeyTimeCnt[3]++;
  72.                  if(KeyTimeCnt[3] > KEY_TIME_SHORT)
  73.                  {        
  74.                                 KeyTimeCnt[3] = 0;
  75.                                 KeyLock[3] = 1;  
  76.                                 KeyCode = 4;                                                                    
  77.                  }
  78.         }
  79.         
  80. //------KEY5實現(xiàn)-----------------------------------
  81.         if(KEY5 == 1)
  82.         {        KeyLock[4] = 0;
  83.                 KeyTimeCnt[4] = 0;               
  84.         }
  85.         else if(KeyLock[4] == 0)
  86.         {
  87.                  KeyTimeCnt[4]++;
  88.                  if(KeyTimeCnt[4] > KEY_TIME_SHORT)
  89.                  {        
  90.                                 KeyTimeCnt[4] = 0;
  91.                                 KeyLock[4] = 1;  
  92.                                 KeyCode = 5;                                                                    
  93.                  }
  94.         }
  95. }
復(fù)制代碼
程序有些問題 無法轉(zhuǎn)動
步進(jìn)電機正反轉(zhuǎn)調(diào)速系統(tǒng)設(shè)計.7z (3.73 MB, 下載次數(shù): 244)

評分

參與人數(shù) 1黑幣 +5 收起 理由
GUOXUAN + 5 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:159872 發(fā)表于 2017-1-4 14:53 | 顯示全部樓層
大神!
回復(fù)

使用道具 舉報

ID:159872 發(fā)表于 2017-1-4 14:54 | 顯示全部樓層
收下了
回復(fù)

使用道具 舉報

ID:204503 發(fā)表于 2017-6-7 21:01 | 顯示全部樓層
在找這方面的東西   很有幫助
回復(fù)

使用道具 舉報

ID:238776 發(fā)表于 2017-10-12 09:54 | 顯示全部樓層
想問 接電路板的時候有什么注意的地方
回復(fù)

使用道具 舉報

ID:249545 發(fā)表于 2018-4-19 09:38 | 顯示全部樓層
感謝老師貢獻(xiàn)資料
回復(fù)

使用道具 舉報

ID:434106 發(fā)表于 2018-11-29 12:35 | 顯示全部樓層
正好近期做類似的設(shè)計 借鑒一下
回復(fù)

使用道具 舉報

ID:560055 發(fā)表于 2019-6-11 16:24 | 顯示全部樓層
收下了
回復(fù)

使用道具 舉報

ID:570601 發(fā)表于 2019-6-24 11:04 | 顯示全部樓層
謝謝,很有用
回復(fù)

使用道具 舉報

ID:768329 發(fā)表于 2020-6-3 12:39 | 顯示全部樓層
你的Key.h沒放上
回復(fù)

使用道具 舉報

ID:1003452 發(fā)表于 2022-12-30 10:28 | 顯示全部樓層
仿真用不了
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 祝你幸福电影在线观看 | 午夜精品久久久久久久久久久久久 | 狠狠爱综合| 国产欧美性成人精品午夜 | 欧美日韩视频在线第一区 | 欧州一区二区三区 | 国产精品成人品 | 国产精品久久久久久久久久三级 | 欧美在线视频网站 | 九七午夜剧场福利写真 | 久久不射电影网 | 天天操天天干天天爽 | 久久久久久免费毛片精品 | 亚洲精品乱码久久久久久蜜桃91 | 亚洲性视频网站 | 国产欧美日韩一区二区三区在线观看 | 中文字幕亚洲一区 | 欧美涩| 另类 综合 日韩 欧美 亚洲 | 亚洲精品二区 | 国产a视频 | 欧美区精品 | 免费视频一区二区 | 特级黄一级播放 | 中文字幕在线播放第一页 | 中文久久 | 羞视频在线观看 | 亚洲一区二区三区在线 | 免费a在线| 久久的色| 成人不卡视频 | 欧美精品在线一区二区三区 | 亚州中文字幕 | 午夜精品久久久久久久久久久久久 | 成人免费视频网 | 国产精品久久久久久二区 | 精品国产一区二区三区性色av | 黄色片视频免费 | 午夜精品久久久久久久久久久久 | 欧美不卡一区 | 亚洲www啪成人一区二区麻豆 |