標(biāo)題: 單片機(jī)控制步進(jìn)電機(jī)轉(zhuǎn)向(順逆轉(zhuǎn))設(shè)計(jì)(keil C51代碼+Proteus仿真) [打印本頁(yè)]

作者: 測(cè)控系吳~    時(shí)間: 2019-7-14 20:21
標(biāo)題: 單片機(jī)控制步進(jìn)電機(jī)轉(zhuǎn)向(順逆轉(zhuǎn))設(shè)計(jì)(keil C51代碼+Proteus仿真)
利用51單片機(jī)控制步進(jìn)電機(jī)轉(zhuǎn)向(順逆轉(zhuǎn))的一個(gè)簡(jiǎn)單程序和電路仿真。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


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

  2. #include <reg52.h>
  3. #define out P2
  4. sbit pos=P0^0;
  5. sbit neg=P0^1;
  6. sbit stop=P0^2;           //設(shè)置一個(gè)停止按鍵
  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};          //只會(huì)作用于低四位,轉(zhuǎn)換成二進(jìn)制,發(fā)現(xiàn)是單雙八拍工作方式
  28. void main()
  29. {
  30. u8 i=0;
  31. out =0x03;         //只會(huì)在p2口低四位作用

  32. //無(wú)限循環(huán)的開(kāi)始
  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é)拍一次進(jìn)行,如果i!<8,進(jìn)行循環(huán)
  45.         out =turn[i];
  46.         delayms(50);         //第一拍完后,轉(zhuǎn)換到第二拍時(shí)有個(gè)時(shí)差
  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提供下載:
電機(jī)正反轉(zhuǎn)程序與Proteus仿真.zip (102.78 KB, 下載次數(shù): 82)



作者: 測(cè)控系吳~    時(shí)間: 2019-7-14 23:25
大家有說(shuō)明問(wèn)題可以問(wèn)喲
作者: 鵬博士PBs    時(shí)間: 2019-7-15 09:22
請(qǐng)問(wèn)樓主采用的是TTL電平進(jìn)行電機(jī)驅(qū)動(dòng)的嗎
作者: 測(cè)控系吳~    時(shí)間: 2019-7-19 15:02
鵬博士PBs 發(fā)表于 2019-7-15 09:22
請(qǐng)問(wèn)樓主采用的是TTL電平進(jìn)行電機(jī)驅(qū)動(dòng)的嗎

采用的是達(dá)林頓管
作者: hxtong    時(shí)間: 2019-7-26 09:52
想問(wèn)下,怎樣可以加個(gè)加速減速鍵,就是改那個(gè)延時(shí)

作者: 測(cè)控系吳~    時(shí)間: 2019-7-30 16:56
hxtong 發(fā)表于 2019-7-26 09:52
想問(wèn)下,怎樣可以加個(gè)加速減速鍵,就是改那個(gè)延時(shí)

首先,你要知道家減速的原理,就是控制節(jié)拍間的延時(shí)來(lái)的
作者: qq35404085    時(shí)間: 2019-8-7 15:30
下載來(lái)學(xué)習(xí)學(xué)習(xí)
作者: aatcs    時(shí)間: 2019-9-8 12:38
試過(guò),這個(gè)可以轉(zhuǎn)起來(lái).謝樓主




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1