找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機控制步進電機轉(zhuǎn)向(順逆轉(zhuǎn))設(shè)計(keil C51代碼+Proteus仿真)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:584041 發(fā)表于 2019-7-14 20:21 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
利用51單片機控制步進電機轉(zhuǎn)向(順逆轉(zhuǎn))的一個簡單程序和電路仿真。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. //該程序能實現(xiàn)延時 ,但是不足之處是第一次按鍵也要延時

  2. #include <reg52.h>
  3. #define out P2
  4. sbit pos=P0^0;
  5. sbit neg=P0^1;
  6. sbit stop=P0^2;           //設(shè)置一個停止按鍵
  7. typedef unsigned char u8;
  8. typedef unsigned int u16;
  9. u16 m=0;
  10. void delayms(u16 k) ;
  11. void delayms(u16 j)
  12. {
  13. u8 i;
  14. for(;j>0;j--)
  15. {
  16. i=250;
  17. while(--i);
  18. i=249;
  19. while(--i);
  20. }
  21. }

  22. void delayDS(u16 z)
  23. {
  24. while(z--)
  25. ;
  26. }

  27. u8 code turn[]={0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03};          //只會作用于低四位,轉(zhuǎn)換成二進制,發(fā)現(xiàn)是單雙八拍工作方式
  28. void main()
  29. {
  30. u8 i=0;
  31. out =0x03;         //只會在p2口低四位作用

  32. //無限循環(huán)的開始
  33. while(1)
  34. {

  35. //正轉(zhuǎn)鍵按下
  36. if(!pos)
  37. {
  38.         m++;
  39.         if(m!=0)
  40.         delayDS(50000);
  41. //        m=0;
  42.         while(1)
  43.         {
  44.         i=i<8?i+1:0;  //如果i<8,i 就依次加1,節(jié)拍一次進行,如果i!<8,進行循環(huán)
  45.         out =turn[i];
  46.         delayms(50);         //第一拍完后,轉(zhuǎn)換到第二拍時有個時差
  47.         if((!neg)||(!stop))
  48.         {       
  49.         m++;                                        
  50.         break;
  51.         }
  52. //        break;
  53.         }
  54. }


  55. //反轉(zhuǎn)鍵按下
  56. if(!neg)
  57. {
  58.         m++;

  59.         if(m!=0)
  60.         delayDS(50000);
  61. //        m=0;
  62.         while(1)
  63.         {
  64.         i=i>0?i-1:7;
  65.         out =turn[i];
  66.         delayms(50);
  67.         if((!pos)||(!stop))
  68.         {
  69.         m++;
  70.         break;
  71.         }
  72. //        break;
  73.         }


  74. }

  75. if(!stop)
  76. {
  77.         m++;
  78.         if(m!=0)
  79.         delayDS(50000);
  80. //        m=0;
  81.         while(1)
  82.         {
  83.         out = 0x00;
  84.         if((!neg)||(!pos))
  85.         {
  86.         m++;
  87.         break;
  88.         }
  89.         }
  90. }
  91. }
  92. }
復(fù)制代碼

所有資料51hei提供下載:
電機正反轉(zhuǎn)程序與Proteus仿真.zip (102.78 KB, 下載次數(shù): 82)


評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:584041 發(fā)表于 2019-7-14 23:25 | 只看該作者
大家有說明問題可以問喲
回復(fù)

使用道具 舉報

板凳
ID:282095 發(fā)表于 2019-7-15 09:22 | 只看該作者
請問樓主采用的是TTL電平進行電機驅(qū)動的嗎
回復(fù)

使用道具 舉報

地板
ID:584041 發(fā)表于 2019-7-19 15:02 | 只看該作者
鵬博士PBs 發(fā)表于 2019-7-15 09:22
請問樓主采用的是TTL電平進行電機驅(qū)動的嗎

采用的是達林頓管
回復(fù)

使用道具 舉報

5#
ID:586687 發(fā)表于 2019-7-26 09:52 | 只看該作者
想問下,怎樣可以加個加速減速鍵,就是改那個延時
回復(fù)

使用道具 舉報

6#
ID:584041 發(fā)表于 2019-7-30 16:56 | 只看該作者
hxtong 發(fā)表于 2019-7-26 09:52
想問下,怎樣可以加個加速減速鍵,就是改那個延時

首先,你要知道家減速的原理,就是控制節(jié)拍間的延時來的
回復(fù)

使用道具 舉報

7#
ID:387700 發(fā)表于 2019-8-7 15:30 | 只看該作者
下載來學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報

8#
ID:61950 發(fā)表于 2019-9-8 12:38 | 只看該作者
試過,這個可以轉(zhuǎn)起來.謝樓主
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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