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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2173|回復: 2
打印 上一主題 下一主題
收起左側

利用單片機+ULN2001A對步進電機進行調速控制并顯示

[復制鏈接]
跳轉到指定樓層
樓主
設計包含PROTEUS仿真電路圖和程序代碼。設計能實現步進電機的啟停控制,加減檔調速并顯示當前檔位和速度。
  1. /***步進電機調速實驗***/
  2. /***實驗內容:通過程序能夠實現電機的啟停,正反轉,加減速。同時顯示電機當前檔位和速度。***/

  3. #include<reg52.h>

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

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

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

  20. sbit Motor_Dcl=P1^2; //電機減速
  21. sbit Motor_Acl=P1^1; //電機加速
  22. sbit Motor_Bwd=P1^4; //電機反轉
  23. sbit Motor_Fwd=P1^3; //電機正轉
  24. sbit Motor_Control=P1^0; //電機啟停
  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.     函數名: Delay()
  68.     函數功能:延時函數
  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. * 函 數 名         : delay
  81. * 函數功能                   : 延時函數,i=1時,大約延時10us
  82. *******************************************************************************/
  83. void delay(uint i)
  84. {
  85.         while(i--);       
  86. }

  87. /***
  88.     函數名: MotorControl_fwd()
  89.     函數功能: 電機正轉函數
  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.     函數名: MotorControl_bwd()
  104.     函數功能: 電機反轉函數
  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.     函數名:void Key_pros()
  119.     函數功能: 電機反轉函數
  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)  //超速保護,最快10ms一步
  139.                 {
  140.                         count=9;loop=10;
  141.                 }
  142.                 else if(loop>90) //最低轉速限制90ms一步
  143.                 {
  144.                         count=1;loop=90;
  145.                 }
  146.         }
  147.         while(P1!=0xff);        //等待按鍵釋放

  148. }       

  149. /***
  150.     函數名:  VDisplay_pros();
  151.     函數功能: 速度處理顯示
  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.     函數名:void Dig_display()
  164.     函數功能: 4位數碼管顯示函數
  165.     輸入:無
  166.     輸出:無
  167. ***/
  168. void Dig_display()
  169. {
  170.         uint i;
  171.         for(i=0;i<4;i++)
  172.         {
  173.                 switch(i)         //位選,選擇點亮的數碼管,
  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];//發送段碼
  185.                 delay(100); //間隔一段時間掃描       
  186.                 P0=0x00;//消隱
  187.         }
  188. }
復制代碼


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

捕獲2.PNG

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

捕獲1.PNG

stepmotor.rar

33.92 KB, 下載次數: 34, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:808695 發表于 2020-8-7 12:35 | 只看該作者
程序在配合仿真電路調試時需要局部調整,因為51的點數不夠用了。
回復

使用道具 舉報

板凳
ID:336378 發表于 2020-8-14 10:30 | 只看該作者
    高手,學習下,看高手過招,如進入迷宮。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文无码日韩欧 | 欧美精品一区二区三区四区 在线 | 韩国毛片一区二区三区 | 日韩成人在线视频 | 精品久久99 | 国产成人精品免费视频大全最热 | www.99热这里只有精品 | www国产成人免费观看视频,深夜成人网 | 亚洲精品一区二区网址 | 国产欧美精品一区二区三区 | 日本久久久久久久久 | 国产美女福利在线观看 | 亚洲欧美一区二区三区在线 | 久久亚洲综合 | 亚洲精品久久久久中文字幕欢迎你 | 欧美国产日韩精品 | 99这里只有精品视频 | 日日操操 | 欧美精品一区二区三区在线播放 | 野狼在线社区2017入口 | 国产精品色| 午夜精品| 日韩视频 中文字幕 | 国产在线观看一区二区三区 | 久久久久国产精品一区二区 | 天天综合久久网 | 中文字幕精品一区久久久久 | 2019天天干天天操 | 91高清免费 | 午夜欧美 | 激情毛片| www.色.com| 国产一区二区免费 | 国产传媒在线播放 | 91欧美激情一区二区三区成人 | 亚洲国产成人精品女人久久久 | 欧美午夜精品 | 国产精品视频一二三区 | 国产区在线视频 | 午夜在线 | 精品在线 |