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

QQ登錄

只需一步,快速開始

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

單片機(jī)+TB6600+42步進(jìn)電機(jī)測(cè)試通過 附程序

  [復(fù)制鏈接]
ID:626079 發(fā)表于 2020-2-23 16:01 | 顯示全部樓層 |閱讀模式
     經(jīng)過年前到年后幾個(gè)月,終于搞清我這個(gè)步進(jìn)電機(jī)的性能。感謝CCC888在24小時(shí)必答區(qū)解答了我的問題,也把這個(gè)程序分享給大家。
附件程序測(cè)試連接42步進(jìn)電機(jī)運(yùn)行正常通過。
    發(fā)現(xiàn)電機(jī)對(duì)時(shí)間要求很高,如果主程序里的WHILE(1)里如果執(zhí)行程序如果占用太多過長(zhǎng),會(huì)38影響步進(jìn)電機(jī)的運(yùn)行,還是新手沒辦法對(duì)時(shí)間進(jìn)行很好的把控啊。

程序說明:
特色:程序是電機(jī)自動(dòng)正反轉(zhuǎn)120度(回到初始的地方)

主程序while(1)只是掃描一個(gè)按鍵,這個(gè)時(shí)間很快。對(duì)步進(jìn)電機(jī)運(yùn)行沒有問題。
本想加一個(gè)TM1638模塊,用它的按鍵,但是發(fā)現(xiàn)加了后電機(jī)工作會(huì)有失步的情況。為哈這個(gè)電機(jī)這么嬌氣。?
http://www.torrancerestoration.com/bbs/dpj-180026-1.html

附件程序是對(duì)步進(jìn)電機(jī)用了1細(xì)分, 細(xì)分多了,滿足不了我的需求,轉(zhuǎn)速會(huì)慢,STC52的端口輸出頻率太低了。
程序是電機(jī)自動(dòng)正反轉(zhuǎn)120度(回到初始的地方), 我最開始的想法是做一個(gè)自動(dòng)手搖扇子,就是大炮打蚊子了,比較符合了。期間不能快遞沒辦法做成品了。
中斷里的時(shí)間是調(diào)試過無數(shù)次,有個(gè)簡(jiǎn)單的加速減速的過程,只是時(shí)間有點(diǎn)短,有勝于無吧,中斷里用了DELAY函數(shù)來對(duì)電機(jī)在反轉(zhuǎn)時(shí)進(jìn)行一個(gè)延時(shí)短停來保護(hù)一下電機(jī)的沖擊,這個(gè)時(shí)間遠(yuǎn)遠(yuǎn)少于進(jìn)入中斷的時(shí)間,所以也不會(huì)影響步進(jìn)電機(jī)的脈沖產(chǎn)生時(shí)間得。

回復(fù)

使用道具 舉報(bào)

ID:626079 發(fā)表于 2020-2-23 16:05 | 顯示全部樓層

TB6600+42步進(jìn)電機(jī)測(cè)試通過

42motorTB6600FB120自動(dòng)正反可用單片機(jī)源程序如下:
  1. #include<reg52.h>

  2. //電機(jī)控制引腳
  3. sbit CLK  = P1^0;          //PUL-
  4. sbit ENA  = P1^1;           //ENA-
  5. sbit DIR  = P1^2;          //DIR-
  6.                   
  7. //按鍵控制端
  8. sbit speedup = P3^2;         //調(diào)速+
  9. sbit speeddown = P3^0;         //調(diào)速-
  10. sbit StopStart  = P3^1;           //停止與啟動(dòng)
  11. unsigned int count=0;
  12. unsigned int Tspeed[5]={250,500,1000,2500,3000};               
  13. //調(diào)速等級(jí)表,5個(gè)檔位。1細(xì)分, 200脈沖一圈。         一個(gè)脈沖是1.8度。
  14. //計(jì)算:
  15. //4000,8ms一個(gè)脈沖(高電平4MS,低電平4MS,共是8MS)。 200個(gè)脈沖就是:1.6秒, 即1.6秒步進(jìn)電機(jī)走一圈。37.5圈/分
  16. //4000 起步會(huì)失步在1細(xì)分的情況下。
  17. //3000        6ms                                                                                                                        1.2                                                          50圈/分
  18. //2000, 4ms一個(gè)脈沖(高電平2MS,低電平2MS,共是4MS)。 200個(gè)脈沖就是:0.8秒, 即0.8秒步進(jìn)電機(jī)走一圈。75圈/分
  19. //1000,就是0.4秒/圈, 150圈/分。
  20. //500       0.2秒/圈,  300圈/分
  21. //250       0.1秒/圈   600圈/分。  500US一個(gè)脈沖。1S就是2000個(gè)脈沖,IO輸出就是2MHZ.在STC89C52的范圍內(nèi)。
  22. //再細(xì)分下去,超出C52的范圍。

  23. //我這步進(jìn)最佳最快有效是600轉(zhuǎn)/分。最快1000圈/分

  24. bit Run_Status=1;                                                   //默認(rèn)是電機(jī)啟動(dòng)狀態(tài)
  25. unsigned int SPEED=0;                                   //脈沖頻率初始6ms
  26. unsigned int counttemp=0;                                   //暫存停止前的COUNT計(jì)數(shù)


  27. void Init_time();
  28. void Key_scan();
  29. void delay(unsigned int hehe);                           //延時(shí)hehe毫秒                          

  30. void main()
  31. {
  32.         CLK=0;
  33.         ENA=1;                                 //ENA-接的控制口,但一樣的,如果ENA=0,步進(jìn)電機(jī)卡起
  34.         DIR=1;                                 //DIR-接的控制口。初始化電機(jī)        低電平有效,測(cè)試,DIR=1,是正轉(zhuǎn), DIR=0反轉(zhuǎn)。
  35.         SPEED=Tspeed[4];
  36.         P2=0X00;
  37.         delay(2000);                            //延時(shí)2秒等待系統(tǒng)穩(wěn)定。
  38.         P2=0XFF;
  39.        
  40.         Init_time();                 //初始化定時(shí)器       
  41.        
  42.         while(1)
  43.         {
  44.                 Key_scan();
  45.          
  46.          }       
  47. }
  48. void Init_time()                                 //初始化定時(shí)器
  49. {
  50.         TMOD |= 0x01;
  51.         TH0=(65536-SPEED)/256;                  //給time0裝初值
  52.         TL0=(65536-SPEED)%256;
  53.     IE = 0x82;
  54.         TR0=0;                       //開啟中斷產(chǎn)生脈沖信號(hào)
  55.         EA=0;

  56. }
  57. void Enter_Timer0() interrupt 1         //進(jìn)入定時(shí)器中斷
  58. {

  59.         TH0=(65536-SPEED)/256;
  60.         TL0=(65536-SPEED)%256;
  61.         CLK=~CLK;                                          //發(fā)送脈沖……
  62.         count++;
  63.         if(count<100)
  64.         SPEED=3000;                                          //如果調(diào)到2000失控   1細(xì)分
  65.         if(count<200)
  66.         SPEED=2000;
  67.         else                              
  68.         SPEED=3000;
  69.         if(count==300)        //計(jì)數(shù)2次為一個(gè)脈沖周期          所以180度為計(jì)數(shù)200.如果計(jì)數(shù)100只有90度
  70.                         {
  71.                                
  72.                                 DIR=~DIR;
  73.                                 count=0;
  74.                                 CLK=0;
  75.                                 TR0=0;                       //開啟中斷產(chǎn)生脈沖信號(hào)
  76.                                 EA=0;
  77.                                 delay(300);
  78.                                 CLK=0;
  79.                                 TR0=1;
  80.                                 EA=1;


  81.                         }       

  82. }

  83. void delay(unsigned int n)                           //delay幾個(gè)毫秒,入口參數(shù)為幾個(gè)毫秒
  84.                                                                           //正反轉(zhuǎn)切換時(shí)速度太快了。延時(shí)保護(hù)電機(jī)
  85. {
  86. unsigned int i,y;

  87. for(i=n;i>0;i--)

  88. for(y=114;y>0;y--);                                  
  89. }


  90. void Key_scan()                                             
  91. {
  92.         if(StopStart==0)
  93.         {
  94.                 delay(10);
  95.                 if(StopStart==0)
  96.                 {
  97.                        
  98.                         Run_Status=~Run_Status;
  99.                         if(Run_Status)
  100.                         {
  101.                                 count=counttemp;
  102.                                 TR0=1;                       //開啟中斷產(chǎn)生脈沖信號(hào)
  103.                     EA=1;
  104.                                
  105.                         }
  106.                         else
  107.                         {
  108.                                 counttemp=count;
  109.                                     TR0=0;                       //關(guān)閉中斷停止脈沖信號(hào)
  110.                       EA=0;
  111.                         }
  112.                 } while(!StopStart);
  113.         }
  114. }
  115. /**********************************
  116.         static char i=0;
  117.         static char j=4;

  118.         if(speedup==0)                                   //加速
  119.         {
  120.                 delay(10);                       
  121.                 if(speedup==0)
  122.             {
  123.                
  124.                         j--;
  125.                         if(j<1)
  126.                         j=0;
  127.                         SPEED=Tspeed[j];               
  128.                 }
  129.         }          while(!speedup);
  130.         if(speeddown==0)                                   //減速
  131.         {
  132.                 delay(10);
  133.                 if(speeddown==0)
  134.                 {
  135.                        
  136.                         i++;
  137.                         if(i>4)
  138.                         i=4;
  139.                         SPEED=Tspeed[i];
  140.                 }
  141.         } while(!speeddown);


  142. }
  143.    *************************************/       
復(fù)制代碼

評(píng)分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:626079 發(fā)表于 2020-2-23 19:05 來自手機(jī) | 顯示全部樓層
是270度哈,中斷初始化是沒有開的,按一下鍵就開啦
回復(fù)

使用道具 舉報(bào)

ID:626079 發(fā)表于 2020-2-23 19:07 來自手機(jī) | 顯示全部樓層
這些都可以自行改得。。
回復(fù)

使用道具 舉報(bào)

ID:712831 發(fā)表于 2020-4-21 10:56 | 顯示全部樓層
請(qǐng)問用32單片機(jī)控制TB6600驅(qū)動(dòng)42步進(jìn)電機(jī)轉(zhuǎn)動(dòng)與停止 ,如果按下一個(gè)確認(rèn)按鍵,電機(jī)轉(zhuǎn)動(dòng),還要用定時(shí)器或外部中斷不
回復(fù)

使用道具 舉報(bào)

ID:917021 發(fā)表于 2021-9-21 22:32 | 顯示全部樓層
為什么我的會(huì)抖動(dòng),我是初學(xué)者,能教一下嗎
回復(fù)

使用道具 舉報(bào)

ID:1005267 發(fā)表于 2022-2-15 14:43 | 顯示全部樓層
為什么定時(shí)器初始化中的TH0和TL0中的speed直接用數(shù)字帶入,電機(jī)的轉(zhuǎn)速要快的多?若將鍵盤掃描中的delay全部取消,速度依然為什么?
回復(fù)

使用道具 舉報(bào)

ID:324780 發(fā)表于 2022-5-31 15:50 | 顯示全部樓層
簡(jiǎn)單看了一下,下載下來學(xué)習(xí)研究,
回復(fù)

使用道具 舉報(bào)

ID:1037586 發(fā)表于 2022-6-30 14:08 | 顯示全部樓層
附程序下載到普中A2開發(fā)板電機(jī)不轉(zhuǎn),不知什么原因
回復(fù)

使用道具 舉報(bào)

ID:262 發(fā)表于 2022-7-6 16:27 | 顯示全部樓層
樓上的 最好不要在開發(fā)板上做,io連了其他設(shè)備可能驅(qū)動(dòng)能力不夠 自己焊接一個(gè)最小系統(tǒng)個(gè)就好了,再就是樓主設(shè)置了1細(xì)分  這個(gè)你也要在模塊上設(shè)置一下
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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