欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

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

[復(fù)制鏈接]
ID:808695 發(fā)表于 2020-8-7 12:32 | 顯示全部樓層 |閱讀模式
設(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)容:通過(guò)程序能夠?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)動(dòng)數(shù)組
  13. uchar code  Motor_bwd[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //反轉(zhuǎn)動(dòng)數(shù)組
  14. uchar code  segcode[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰顯示段碼,用于共陽(yáng)數(shù)碼管取反。
  15. uchar V_pros[4];
  16. uchar count=5; //初始擋位5檔
  17. uint loop=50,j; //初始速度50ms一步,通過(guò)改變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啟動(dòng)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.     輸出:無(wú)
  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.     輸入:無(wú)
  91.     輸出:無(wú)
  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.     輸入:無(wú)
  106.     輸出:無(wú)
  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.     輸出:無(wú)
  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.     輸入:無(wú)
  166.     輸出:無(wú)
  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
捕獲1.PNG

stepmotor.rar

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

回復(fù)

使用道具 舉報(bào)

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í)下,看高手過(guò)招,如進(jìn)入迷宮。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表