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

QQ登錄

只需一步,快速開始

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

STC15W408AS單片機(jī)五向按鍵模塊控制TB6600驅(qū)動(dòng)步進(jìn)電機(jī)源程序

  [復(fù)制鏈接]
ID:422885 發(fā)表于 2021-5-2 00:07 | 顯示全部樓層 |閱讀模式
10檔速度可調(diào),通過五向按鍵模塊控制云臺(tái)實(shí)現(xiàn)上下左右轉(zhuǎn)動(dòng)。
以下代碼一部分是通過網(wǎng)上搜索修改的,有不足的地方請(qǐng)多多指教.
制作出來的實(shí)物圖如下:
IMG_20210501_234713.jpg 1619884238299.jpg

單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. //電機(jī)1控制引腳     ******芯片:STC15W408AS*****
  3. sbit CLK  = P1^0;
  4. sbit ENA  = P1^1;
  5. sbit DIR  = P1^2;
  6. //電機(jī)2控制引腳
  7. sbit CLK1  = P1^3;
  8. sbit ENA1  = P1^4;
  9. sbit DIR1  = P1^5;        
  10. //按鍵控制端
  11. sbit UP  = P3^2;               //電機(jī)1正轉(zhuǎn)
  12. sbit DWN  = P3^3;                   //電機(jī)1反轉(zhuǎn)
  13. sbit LFT = P3^4;         //電機(jī)2正轉(zhuǎn)
  14. sbit RHT = P3^5;         //電機(jī)2反正
  15. sbit SET  = P3^6;           //加速
  16. sbit RST = P3^7;     //減速

  17. unsigned int Tspeed[10]={30,40,60,80,100,200,400,600,800,1000};               //調(diào)速等級(jí)表
  18. bit CY_status=0;
  19. unsigned int CYCLE=20;
  20. unsigned int cy_count=0;
  21. unsigned PWM_count=0;
  22. void Init_time();
  23. void Key_scan();
  24. void main()
  25. {
  26.         ENA=0;
  27.         CLK=0;
  28.         DIR=0;        
  29.         ENA1=0;
  30.         CLK1=0;
  31.         DIR1=0;                //初始化電機(jī)
  32.         Init_time();   //初始化定時(shí)器           
  33.         while(1)
  34.         {
  35.                 Key_scan();
  36.         }        
  37. }
  38. void Init_time()                                 //初始化定時(shí)器
  39. {
  40.         TMOD |= 0x01;
  41.         TH0=(65536-CYCLE)/256;                  //給time0裝初值
  42.         TL0=(65536-CYCLE)%256;
  43.     IE = 0x82;                     //使得time1的優(yōu)先級(jí)高于time0
  44.         TR0=1;                                         //打開中斷
  45. }
  46. void Enter_Timer0() interrupt 1                                //進(jìn)入定時(shí)器中斷
  47. {
  48.         TH0=(65536-CYCLE)/256;
  49.         TL0=(65536-CYCLE)%256;
  50.         CLK=~CLK;
  51.         CLK1=~CLK1;
  52.         PWM_count++;
  53.         if(PWM_count==(2*cy_count)&&CY_status)
  54.         {
  55.                 PWM_count=0;
  56.                 TR0=0;
  57.                 ENA=0;
  58.                 ENA1=0;
  59.         }        
  60. }

  61. /************************按鍵掃描程序************************
  62.    功能:讀取各按鍵值,判斷是否按下,再處理相應(yīng)事件
  63.    
  64.    注:按鍵控制程序,由于按鍵中斷優(yōu)先級(jí)高,且每個(gè)按鍵都設(shè)計(jì)
  65.        為彈起有效, 所以長(zhǎng)時(shí)間按住不放會(huì)導(dǎo)致電機(jī)減速甚至停
  66.            止直至放開按鍵                     
  67. *************************************************************/
  68. void Key_scan()                                             
  69. {
  70.         static char i=0;
  71.         if(UP==0)                                           //電機(jī)1正反轉(zhuǎn)切換
  72.         {
  73.                 if(UP==0)
  74.                 {
  75.                     DIR=1;
  76.                           ENA=1;                  //啟動(dòng)電機(jī)
  77.                                 TR0=1;                  //開啟中斷產(chǎn)生脈沖信號(hào)
  78.                         while(!UP);                //按鍵按下直到放開
  79.                                 ENA=0;                  //關(guān)閉電機(jī)
  80.                                 TR0=0;                  //關(guān)閉中斷停止脈沖信號(hào)
  81.                                 CY_status=0;  //刷新步進(jìn)標(biāo)志位
  82.                 }
  83.         }
  84.         if(DWN==0)                                          
  85.         {
  86.                 if(DWN==0)
  87.                 {
  88.                            DIR=0;
  89.                           ENA=1;                  //啟動(dòng)電機(jī)
  90.                                 TR0=1;                  //開啟中斷產(chǎn)生脈沖信號(hào)                        
  91.                         while(!DWN);        //按鍵按下直到放開
  92.                                 ENA=0;                  //關(guān)閉電機(jī)
  93.                                 TR0=0;                  //關(guān)閉中斷停止脈沖信號(hào)
  94.                                 CY_status=0;  //刷新步進(jìn)標(biāo)志位                        
  95.                 }
  96.         }
  97.         if(LFT==0)                                   //電機(jī)2正反轉(zhuǎn)切換
  98.         {        
  99.                 if(LFT==0)
  100.             {
  101.                                 DIR1=1;
  102.                           ENA1=1;                  //啟動(dòng)電機(jī)
  103.                                 TR0=1;                  //開啟中斷產(chǎn)生脈沖信號(hào)        
  104.                         while(!LFT);
  105.                                 ENA1=0;                  //關(guān)閉電機(jī)
  106.                                 TR0=0;                  //關(guān)閉中斷停止脈沖信號(hào)
  107.                                 CY_status=0;  //刷新步進(jìn)標(biāo)志位               
  108.                 }
  109.         }
  110.         if(RHT==0)                                   
  111.         {
  112.                 if(RHT==0)
  113.                 {
  114.                                  DIR1=0;
  115.                           ENA1=1;                  //啟動(dòng)電機(jī)
  116.                                 TR0=1;                  //開啟中斷產(chǎn)生脈沖信號(hào)        
  117.                         while(!RHT);
  118.                                 ENA1=0;                  //關(guān)閉電機(jī)
  119.                                 TR0=0;                  //關(guān)閉中斷停止脈沖信號(hào)
  120.                                 CY_status=0;  //刷新步進(jìn)標(biāo)志位        
  121.                 }
  122.         }
  123. if(SET==0)                                   //加速
  124.         {               
  125.                 if(SET==0)
  126.             {
  127.                         while(!SET);
  128.                         i--;
  129. ……………………

  130. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
51hei.png
所有代碼51hei提供下載:
6鍵控制TB6600 步進(jìn)電機(jī).zip (37.1 KB, 下載次數(shù): 133)


評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:422885 發(fā)表于 2021-5-2 09:44 | 顯示全部樓層
正在研究使用ps2搖桿模塊替換五向按鍵模塊操作云臺(tái),希望有研究過的老師給點(diǎn)意見.
回復(fù)

使用道具 舉報(bào)

ID:402960 發(fā)表于 2021-7-11 00:11 | 顯示全部樓層
可否提供一下原理圖
回復(fù)

使用道具 舉報(bào)

ID:1005267 發(fā)表于 2022-2-15 15:35 | 顯示全部樓層
鍵盤掃描也需要花較長(zhǎng)時(shí)間,看過用定時(shí)器來做能節(jié)約不少時(shí)間,但現(xiàn)在早已忘了怎么做的了
回復(fù)

使用道具 舉報(bào)

ID:650308 發(fā)表于 2022-2-19 02:29 | 顯示全部樓層
thank you for sharing
回復(fù)

使用道具 舉報(bào)

ID:399179 發(fā)表于 2022-4-13 20:45 來自手機(jī) | 顯示全部樓層
感謝樓主無私奉獻(xiàn)!正在學(xué)習(xí)!
回復(fù)

使用道具 舉報(bào)

ID:1104671 發(fā)表于 2025-3-25 15:03 | 顯示全部樓層
樓主的按鍵都是外接的單片機(jī)最小系統(tǒng)嗎?還是直接用的單片機(jī)開發(fā)板
回復(fù)

使用道具 舉報(bào)

ID:148537 發(fā)表于 2025-3-27 22:20 | 顯示全部樓層
我正想玩下這個(gè)。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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