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

QQ登錄

只需一步,快速開始

帖子
查看: 1777|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)+UDN2916 5相4線步進(jìn)電機(jī)的單片機(jī)驅(qū)動(dòng)程序 發(fā)送速度到串口

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:277134 發(fā)表于 2019-11-10 15:35 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
5相4線步進(jìn)電機(jī)驅(qū)動(dòng)程序,可以調(diào)速,正反轉(zhuǎn),發(fā)送速度到串口,用1602顯示

單片機(jī)源程序如下:
  1. /*************************************************************************************
  2. *  標(biāo)題:  步進(jìn)電機(jī)試驗(yàn)一(雙極性步進(jìn)電機(jī))                                                                                         *
  3. *                                                                                                                                                                          *
  4. *    通過本例程了解步進(jìn)馬達(dá)使用及驅(qū)動(dòng)程序編寫                                                                                 *
  5. *;   單相四拍通電驅(qū)動(dòng)時(shí)序:                                                          *
  6. *;   正轉(zhuǎn): A/  B  A  B/
  7. *    反轉(zhuǎn): B/  A  B  A/                                                                                              *
  8. *   
  9. *    UDN2916電流控制真值表:
  10. *          I0    I1        輸出電流
  11. *          L            L                  最大
  12. *          H                L                  最大*2/3
  13. *          L                H                  最大*1/3
  14. *     H     H         0                                                                     *
  15. *  請(qǐng)學(xué)員一定要消化掉本例程                     0x30,0x0e,0x39,0x07                              *
  16.    注意:J14短路冒需斷開                                                                                    *
  17. **************************************************************************************/  
  18. #include "reg52.h"
  19. //Motor
  20. sbit key  = P0^0;          //定義管腳
  21. sbit key1 = P0^1;
  22. sbit key2 = P0^2;          //定義管腳
  23. sbit key3 = P0^3;
  24. sbit key4 = P0^4;          //定義管腳
  25. sbit key5 = P0^5;
  26. sbit key6 = P0^6;          //定義管腳
  27. sbit I01  = P1^0;
  28. sbit I02  = P1^1;
  29. sbit I03  = P1^2;
  30. sbit I04  = P1^3;

  31. int speed=20,zhuangtaiflag=0,gaodu=0,jiaodu=0,gd=0,jd=0;

  32. void delay(int time);
  33. void bujinzhengzhuan(int b)
  34. {
  35.         int i;
  36.         for(i=0;i<b;i++)
  37.         {
  38.                 I01=1;
  39.                 I02=0;
  40.                 I03=0;
  41.                 I04=0;
  42.                 delay(speed);
  43.                 I01=0;
  44.                 I02=1;
  45.                 I03=0;
  46.                 I04=0;
  47.                 delay(speed);
  48.                 I01=0;
  49.                 I02=0;
  50.                 I03=1;
  51.                 I04=0;
  52.                 delay(speed);
  53.                 I01=0;
  54.                 I02=0;
  55.                 I03=0;
  56.                 I04=1;
  57.                 delay(speed);
  58.         }
  59. }

  60. void bujinfanzhuan(int a)
  61. {
  62.         int i;
  63.         for(i=0;i<a;i++)
  64.         {
  65.                 I01=0;
  66.                 I02=0;
  67.                 I03=0;
  68.                 I04=1;
  69.                 delay(speed);
  70.                 I01=0;
  71.                 I02=0;
  72.                 I03=1;
  73.                 I04=0;
  74.                 delay(speed);
  75.                 I01=0;
  76.                 I02=1;
  77.                 I03=0;
  78.                 I04=0;
  79.                 delay(speed);
  80.                 I01=1;
  81.                 I02=0;
  82.                 I03=0;
  83.                 I04=0;
  84.                 delay(speed);
  85.         }
  86. }
  87. void bujinstop(void)
  88. {
  89.         I01=0;
  90.         I02=0;
  91.         I03=0;
  92.         I04=0;
  93. }
  94. /*------------------------------------------------
  95.                     串口初始化
  96. ------------------------------------------------*/
  97. void UsartConfiguration()
  98. {
  99.         SCON=0X50;                        //設(shè)置為工作方式1
  100.         TMOD=0X20;                        //設(shè)置計(jì)數(shù)器工作方式2
  101.         PCON=0X80;                        //波特率加倍
  102.         TH1=0XF3;                    //計(jì)數(shù)器初始值設(shè)置,注意波特率是4800的
  103.         TL1=0XF3;
  104. //        ES=1;                                                //打開接收中斷
  105. //        EA=1;                                                //打開總中斷
  106.         TR1=1;                                            //打開計(jì)數(shù)器
  107. }
  108. /*******************延時(shí)函數(shù)****************************/
  109. void delay(int time)
  110. {
  111.   int i,j;
  112.   
  113.   for(j=0; j <= time; j++)
  114.    for(i =0 ; i <= 120; i++);
  115. }

  116. void main()
  117. {
  118.   int flag;
  119.   UsartConfiguration();
  120.   while(1)
  121.   {
  122.     if(key==0)
  123.                 {
  124.                         delay(10);
  125.                         if(key==0)
  126.                         {
  127.                                 while(key==0);
  128.                                 flag++;
  129.                                 if(flag==3)flag=0;               
  130.                         }
  131.                 }
  132.                
  133.          if(key1==0)
  134.                 {
  135.                         delay(10);
  136.                         if(key1==0)
  137.                         {
  138.                                 while(key1==0);
  139.                                 speed++;
  140.                                 if(speed==50)speed=2;               
  141.                         }
  142.                 }
  143.                
  144.                 if(key2==0)
  145.                 {
  146.                         delay(10);
  147.                         if(key2==0)
  148.                         {
  149.                                 while(key2==0);
  150.                                 speed--;
  151.                                 if(speed<=2)speed=2;               
  152.                         }
  153.                 }
  154.                 if(key3==0)
  155.                 {
  156.                         delay(10);
  157.                         if(key3==0)
  158.                         {
  159.                                 while(key3==0);
  160.                                 zhuangtaiflag++;
  161.                                 if(zhuangtaiflag==0)jd=0;
  162.                                 if(zhuangtaiflag==1)gd=0;
  163.                                 if(zhuangtaiflag==2)zhuangtaiflag=0;
  164.                         }
  165.                 }
  166.                
  167.                 if(key4==0)
  168.                 {
  169.                         delay(10);
  170.                         if(key4==0)
  171.                         {
  172.                                 while(key4==0);
  173.                                 if(zhuangtaiflag==0)jiaodu++;
  174.                                 if(zhuangtaiflag==1)gaodu++;
  175.                         }
  176.                 }
  177.                
  178.                         if(key5==0)
  179.                 {
  180.                         delay(10);
  181.                         if(key5==0)
  182.                         {
  183.                                 while(key5==0);
  184.                                 if(zhuangtaiflag==0)jiaodu--;
  185.                                 if(zhuangtaiflag==1)gaodu--;
  186.                         }
  187.                 }
  188.                
  189.                 if(flag==0)bujinstop();
  190.                 if(flag==1)bujinzhengzhuan(1);
  191.           if(flag==2)bujinfanzhuan(1);
  192.                 if(gaodu-gd>0)
  193.                 {
  194.                         bujinzhengzhuan(100*(gaodu-gd));
  195.                         gd=gaodu;
  196.                 }
  197.                 if(gaodu-gd<0)
  198.                 {
  199.                         bujinfanzhuan(100*(gd-gaodu));
  200.                         gd=gaodu;
  201.                 }
  202.                 if(jiaodu-jd>0)
  203.                 {
  204.                         bujinzhengzhuan(jiaodu-jd);
  205.                         jd=jiaodu;
  206.                 }
  207.                 if(jiaodu-jd<0)
  208.                 {
  209.                         bujinfanzhuan(jd-jiaodu);
  210.                         jd=jiaodu;
  211.                 }
  212.     SBUF=speed;
  213.   }

  214. }
復(fù)制代碼

所有資料51hei提供下載:
bujindianji.zip (32.26 KB, 下載次數(shù): 15)


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

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2019-11-10 16:52 | 只看該作者
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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