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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2286|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

利用單片機(jī)+ULN2001A對步進(jìn)電機(jī)進(jìn)行調(diào)速控制并顯示

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
設(shè)計(jì)包含PROTEUS仿真電路圖和程序代碼。設(shè)計(jì)能實(shí)現(xiàn)步進(jìn)電機(jī)的啟停控制,加減檔調(diào)速并顯示當(dāng)前檔位和速度。
  1. /***步進(jìn)電機(jī)調(diào)速實(shí)驗(yàn)***/
  2. /***實(shí)驗(yàn)內(nèi)容:通過程序能夠?qū)崿F(xiàn)電機(jī)的啟停,正反轉(zhuǎn),加減速。同時(shí)顯示電機(jī)當(dāng)前檔位和速度。***/

  3. #include<reg52.h>

  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. void Delay_ms(uint x);//延時(shí)函數(shù)
  7. void Key_pros(); //聲明按鍵函數(shù)
  8. void MotorControl_fwd();//聲明電機(jī)控制函數(shù)
  9. void MotorControl_bwd();
  10. void Dig_display();//4位數(shù)碼管顯示函數(shù)
  11. void Data_pros(uint temp);//速度處理顯示

  12. uchar code  Motor_fwd[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //正轉(zhuǎn)動數(shù)組
  13. uchar code  Motor_bwd[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //反轉(zhuǎn)動數(shù)組
  14. uchar code  segcode[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰顯示段碼,用于共陽數(shù)碼管取反。
  15. uchar V_pros[4];
  16. uchar count=5; //初始擋位5檔
  17. uint loop=50,j; //初始速度50ms一步,通過改變loop調(diào)整調(diào)整脈沖頻率達(dá)到調(diào)速的目的
  18. uchar flag=1;  //正反轉(zhuǎn)標(biāo)志位 1正0反
  19. uchar state=1; //啟停標(biāo)志位 1啟動0關(guān)閉

  20. sbit Motor_Dcl=P1^2; //電機(jī)減速
  21. sbit Motor_Acl=P1^1; //電機(jī)加速
  22. sbit Motor_Bwd=P1^4; //電機(jī)反轉(zhuǎn)
  23. sbit Motor_Fwd=P1^3; //電機(jī)正轉(zhuǎn)
  24. sbit Motor_Control=P1^0; //電機(jī)啟停
  25. sbit LSA=P2^0;
  26. sbit LSB=P2^1;
  27. sbit LSC=P2^2;

  28. void main()
  29. {
  30. while(1)
  31.   {
  32.                 uint speed;
  33.           Key_pros();  
  34.           while(state==1)
  35.                 {
  36.                  if(flag==1)
  37.                  {
  38.                          MotorControl_fwd();
  39.                          P2=~segcode[count];
  40.                          Key_pros();
  41.                  }
  42.                  if(flag==0)
  43.                  {
  44.                   MotorControl_bwd();
  45.                   Key_pros();
  46.                         P2=~segcode[count];
  47.                  }
  48.          switch(loop)
  49.           {
  50.            case 10:speed=1900;break;
  51.            case 20:speed=1800;break;
  52.            case 30:speed=1700;break;
  53.            case 40:speed=1600;break;
  54.            case 50:speed=1500;break;
  55.            case 60:speed=1400;break;
  56.            case 70:speed=1300;break;
  57.            case 80:speed=1200;break;
  58.            case 90:speed=1100;break;
  59.            default:break;
  60.           }
  61.                 Data_pros(speed);
  62.                 Dig_display();
  63.    }
  64.   }
  65. }
  66. /***
  67.     函數(shù)名: Delay()
  68.     函數(shù)功能:延時(shí)函數(shù)
  69.     輸入:j
  70.     輸出:無
  71. ***/
  72. void Delay_ms(uint x)
  73. {
  74.        
  75.         uint i,j;
  76.         for(i=0;i<x;i++)
  77.                 for(j=0;j<112;j++);
  78. }
  79. /*******************************************************************************
  80. * 函 數(shù) 名         : delay
  81. * 函數(shù)功能                   : 延時(shí)函數(shù),i=1時(shí),大約延時(shí)10us
  82. *******************************************************************************/
  83. void delay(uint i)
  84. {
  85.         while(i--);       
  86. }

  87. /***
  88.     函數(shù)名: MotorControl_fwd()
  89.     函數(shù)功能: 電機(jī)正轉(zhuǎn)函數(shù)
  90.     輸入:無
  91.     輸出:無
  92. ***/

  93. void MotorControl_fwd()
  94. {
  95. uchar z;
  96. for(z=0;z<8;z++)
  97.         {
  98.          P3=Motor_fwd[z];
  99.          Delay_ms(loop);       
  100.         }
  101. }       

  102. /***
  103.     函數(shù)名: MotorControl_bwd()
  104.     函數(shù)功能: 電機(jī)反轉(zhuǎn)函數(shù)
  105.     輸入:無
  106.     輸出:無
  107. ***/

  108. void MotorControl_bwd()
  109. {
  110. uchar z;
  111. for(z=0;z<8;z++)
  112.         {
  113.          P3=Motor_bwd[z];
  114.          Delay_ms(loop);
  115.         }
  116. }

  117. /***
  118.     函數(shù)名:void Key_pros()
  119.     函數(shù)功能: 電機(jī)反轉(zhuǎn)函數(shù)
  120.     輸入:
  121.     輸出:
  122. ***/
  123. void Key_pros()
  124. {
  125.   P1=0xff;           
  126.         if(P1!=0xff)
  127.         Delay_ms(10);
  128.         if(P1!=0xff)
  129.         {
  130.                 switch(P1)        
  131.                 {
  132.                         case 0xfe:state=~state;break;
  133.                         case 0xfd:loop-=10;count++;break;
  134.                         case 0xfb:loop+=10;count--;break;
  135.                         case 0xf7:flag=1;break;
  136.                         case 0xef:flag=0;break;
  137.                 }
  138.                 if(loop<10)  //超速保護(hù),最快10ms一步
  139.                 {
  140.                         count=9;loop=10;
  141.                 }
  142.                 else if(loop>90) //最低轉(zhuǎn)速限制90ms一步
  143.                 {
  144.                         count=1;loop=90;
  145.                 }
  146.         }
  147.         while(P1!=0xff);        //等待按鍵釋放

  148. }       

  149. /***
  150.     函數(shù)名:  VDisplay_pros();
  151.     函數(shù)功能: 速度處理顯示
  152.     輸入:speed
  153.     輸出:無
  154. ***/

  155. void Data_pros(uint temp)
  156. {
  157.         V_pros[0]=segcode[temp/1000];
  158.         V_pros[1]=segcode[temp%1000/100];
  159.   V_pros[2]=segcode[temp%100/10];
  160.         V_pros[3]=segcode[temp%10];
  161. }

  162. /***
  163.     函數(shù)名:void Dig_display()
  164.     函數(shù)功能: 4位數(shù)碼管顯示函數(shù)
  165.     輸入:無
  166.     輸出:無
  167. ***/
  168. void Dig_display()
  169. {
  170.         uint i;
  171.         for(i=0;i<4;i++)
  172.         {
  173.                 switch(i)         //位選,選擇點(diǎn)亮的數(shù)碼管,
  174.                 {
  175.                         case(0):
  176.                                 LSA=0;LSB=0;LSC=0; break;//顯示第0位
  177.                         case(1):
  178.                                 LSA=1;LSB=0;LSC=0; break;//顯示第1位
  179.                         case(2):
  180.                                 LSA=0;LSB=1;LSC=0; break;//顯示第2位
  181.                         case(3):
  182.                                 LSA=0;LSB=1;LSC=1; break;//顯示第3位
  183.                 }
  184.                 P0=~V_pros[i];//發(fā)送段碼
  185.                 delay(100); //間隔一段時(shí)間掃描       
  186.                 P0=0x00;//消隱
  187.         }
  188. }
復(fù)制代碼


捕獲2.PNG (98.38 KB, 下載次數(shù): 46)

捕獲2.PNG

捕獲1.PNG (106.26 KB, 下載次數(shù): 37)

捕獲1.PNG

stepmotor.rar

33.92 KB, 下載次數(shù): 34, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:808695 發(fā)表于 2020-8-7 12:35 | 只看該作者
程序在配合仿真電路調(diào)試時(shí)需要局部調(diào)整,因?yàn)?1的點(diǎn)數(shù)不夠用了。
回復(fù)

使用道具 舉報(bào)

板凳
ID:336378 發(fā)表于 2020-8-14 10:30 | 只看該作者
    高手,學(xué)習(xí)下,看高手過招,如進(jìn)入迷宮。
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品二区 | 一级片在线播放 | 亚洲91精品| 日韩一级不卡 | 欧美成人在线网站 | 午夜寂寞影院列表 | 涩涩导航 | 欧美大片久久久 | 亚洲色图婷婷 | 久久久精品网站 | 亚洲二区视频 | 久久久www成人免费无遮挡大片 | 欧美亚洲综合久久 | 91资源在线 | 亚洲精品麻豆 | 殴美黄色录像 | 国产精品一区二区免费看 | 久国产视频 | 国产一区二区在线免费播放 | 中文字幕在线观看一区 | www.成人免费视频 | 国产成人a亚洲精品 | 国产91视频免费 | 亚洲欧美精品在线观看 | 久久国产亚洲精品 | 欧美一级片a | 国产免费av网 | 欧美精品在线视频 | 国产精品免费一区二区三区 | 国产成人精品一区二区在线 | 日本激情一区二区 | 毛片毛片毛片毛片 | 欧美人妇做爰xxxⅹ性高电影 | 亚洲国产精品一区在线观看 | www国产成人 | 波多野结衣精品 | 在线一区视频 | 日本精品视频一区二区 | 精品一区二区三区视频在线观看 | 欧美一级在线免费 | 狠狠艹 |