久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3759|回復: 0
打印 上一主題 下一主題
收起左側

51四個按鍵控制42/57步進電機啟停正反,但速度一直加不上去

[復制鏈接]
跳轉到指定樓層
樓主
ID:245224 發表于 2018-4-14 14:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
80黑幣
代碼在下面,是我參考的網上代碼改寫的,但是步進電機的速度一直很慢,提不上去,求大神能改下,讓步進電機運動快點,驅動器采用的是tb6600,脈沖加方向控制。
代碼:

  1. #include <reg52.h>
  2. sbit Clk = P2^0;
  3. sbit En = P2^1;        
  4. sbit Dir = P2^2;

  5. sbit CW = P2^4;                //正轉運行按鍵
  6. sbit STOP = P2^5;        //停止運行按鍵
  7. sbit CCW = P2^6;        //反轉運行按鍵
  8. sbit ADJ = P2^7;        //調速運行按鍵

  9. bit Run_Status;                //運行狀態位標志,
  10.                                         //=0表示電機在停止狀態,可以按鍵正轉、反轉均可
  11.                                         //=1表示電機在運行狀態,不支持正反轉按鍵,只有先停止。防止強行換向帶來的電流過大。

  12. unsigned char Run_Dir,t;        //電機運行方向
  13. unsigned char timer1;

  14. #define        F_DIR        0                //正轉
  15. #define        R_DIR        1                //反轉

  16. unsigned int clock;         //周期變量

  17. void Delayms(unsigned int xms)         //延時函數
  18. {
  19.         unsigned int i,j;
  20.         for(i=xms;i>0;i--)
  21.             for(j=9;j>0;j--);
  22. }


  23. void Forward(void)          //電機正轉
  24. {
  25.         TH0=(65536-clock)/256;          //初值大小由clock值決定
  26.         TL0=(65536-clock)%256;          //clock增大,speed減小;clock減小,speed增大         
  27.         Dir=0;
  28.         En=1;
  29.         TR0=1;           //開定時器1中斷
  30. }

  31. void system_Ini()
  32. {
  33.     TMOD|= 0x11;
  34.     TH1 = 0xfe; //11.0592MHz 0.5ms定時
  35.     TL1 = 0x33;
  36.     TR1 = 1; //啟動T1定時
  37.     EA=1;
  38.         ET1=1; //開T0,T1中斷,開總中斷
  39. }                                 

  40. void Reversal(void)         //電機反轉
  41. {
  42.         TH0=(65536-clock)/256;         
  43.         TL0=(65536-clock)%256;         
  44.         Dir=1;
  45.         En=1;            
  46.         TR0=1;
  47. }

  48. char flag1 =0x00;
  49. bit flagstop=0;
  50. void Keyscan()
  51. {
  52.         if(STOP==0 && flagstop==0)                                //任何時候按停止鍵,電機停止運行
  53.                 {        
  54.                         Delayms(1);                //延時去抖動
  55.                         if(STOP==0)                        
  56.                         {               
  57.                                 TR0=0;
  58.                                 Clk=0;
  59.                                                                 TR1=0;
  60.                                 En=0;
  61.                                 flag1=0;
  62.                             flagstop=1;
  63.                                 Run_Status=0;        //電機正在停止的狀態標志
  64.                         }
  65.                 }
  66.             else if(!CW && !Run_Status && (flag1&0xf0)==0x00)        //按正轉鍵同時電機不是正在運行時,電機正轉運行
  67.                 {
  68.                         Delayms(1);                //按下延時去抖動
  69.                         if(!CW && !Run_Status)                        
  70.                         {        
  71.                            { flag1 =0x10;
  72.                                 Run_Status=1;
  73.                                                                 if(t<1)
  74.                                                         {
  75.                                                        
  76.                              Forward();
  77.                                                         }
  78.                             Run_Dir = F_DIR;        //電機運行方向正轉                                
  79.                             flagstop=0;
  80.                                                            if(timer1>100)
  81.                                                         {
  82.                                                             timer1=0; //輸出占空比0.7的PWM脈沖
  83.                                                                 }
  84.                                                         if(timer1<30)
  85.                                                                 {
  86.                                                                     Clk=0;
  87.                                                                 }
  88.                                                         else
  89.                                                                 {
  90.                                                                     Clk=1;
  91.                                                                         }
  92.                                                         }
  93.                                                        
  94.                         }
  95.                 }
  96.               else if(!CCW && !Run_Status && (flag1&0x0f)==0)        //按反轉鍵同時電機不是正在運行時,電機反轉運行
  97.                 {
  98.                         Delayms(1);                //延時去抖動
  99.                         if(!CCW && !Run_Status)                        
  100.                         {        
  101.                                                                 if(t<1)
  102.                                                         {
  103.                                                        
  104.                                 Reversal();
  105.                                                         }
  106.                                 Run_Dir=R_DIR;        //電機運行方向反轉
  107.                                 flagstop=0;
  108.                                                                 flag1 = 1;
  109.                                 Run_Status=1;        //電機正在運行的狀態標志

  110.                                                                 if(timer1>100)
  111.                                                         {
  112.                                                             timer1=0; //輸出占空比0.7的PWM脈沖
  113.                                                                 }
  114.                                                         if(timer1<50)
  115.                                                                 {
  116.                                                                     Clk=0;
  117.                                                                 }
  118.                                                         else
  119.                                                                 {
  120.                                                                     Clk=1;
  121.                                                                         }
  122.                                                         }
  123.                         }
  124.                
  125.                    if(!ADJ)
  126.                 {
  127.                         Delayms(1);                //延時去抖動
  128.                         if(!ADJ)
  129.                         {        
  130.                                 if(clock>201)        clock-=200;        
  131.                                 else                        clock=1000;
  132.                                 Run_Status=1;
  133.                                 TR0=1;
  134.                          }
  135.                 }
  136. }
  137. void Init(void)
  138. {
  139.         Run_Status=0;        //=0表示電機在停止狀態,可以按鍵正轉、反轉均可
  140.         Clk = 0;
  141.         En = 0;
  142.         TH0=(65536-clock)/256;
  143.         TL0=(65536-clock)%256;
  144.         TMOD=0X01;
  145.         EA=1;
  146.         ET0=1;
  147.         TR0 =0;
  148. }


  149. void main(void)
  150. {
  151.                 t=0;
  152.                 timer1=0;
  153.         Init();
  154.                 system_Ini();
  155.         clock=500;
  156.         P1=0xff;
  157.         P3 =0XFF;
  158.         while(1)
  159.           {
  160.           Keyscan();        
  161.     }
  162. }


  163. void Timer0_ISR(void) interrupt 1
  164. {
  165.         TH0=(65536-clock)/256;
  166.         TL0=(65536-clock)%256;
  167.         Clk = ~Clk;     
  168.                 t++;   
  169. }
  170. /*************************************
  171. [ t1 (0.5ms)中斷] 中斷中做 PWM 輸出
  172. ------------1000/(0.02ms*250)=200Hz
  173. *************************************/
  174. void T1zd(void) interrupt 3 //3 為定時器1的中斷號 1 定時器0的中斷號 0 外部中斷1 2 外部中斷2 4 串口中斷
  175. {
  176. //        TH1 = 0xfe; //11.0592MHz 0.5ms定時
  177. //        TL1 = 0x33;
  178.     TH0=(65536-200)/256;
  179.     TL0=(65536-200)%256;
  180.     timer1++; //計數+1
  181. }
復制代碼
我想的是先低速啟動,然后再加速運行,如果能夠直接快速啟動也行。


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: av网站在线播放 | 波多野吉衣在线播放 | 狠狠爱综合 | 欧美视频| 一区二区影院 | 日韩三级在线观看 | 91久久久久久 | 中文字幕不卡在线观看 | www国产亚洲精品久久网站 | 亚洲国产欧美国产综合一区 | 天天草天天 | 欧美成人一区二免费视频软件 | 鲁视频| 欧美激情久久久久久 | 欧美人人| 久久精品网 | 日本一级淫片免费啪啪3 | 又黑又粗又长的欧美一区 | 精品久久国产 | 久久国产精品无码网站 | 在线观看国产www | 成人久久 | 欧美激情在线播放 | 亚洲精品在线视频 | 亚洲成人一区 | 日韩欧美专区 | 在线视频亚洲 | 国产精品久久一区二区三区 | 日韩中文字幕在线视频 | 日韩在线播放一区 | 欧美一区二 | 国产成人精品一区二区三区在线 | 日本一区精品 | 99热精品在线 | 亚洲第一成年免费网站 | 免费xxxx大片国产在线 | 久久久久久久av | 99re热这里只有精品视频 | 日韩中文字幕视频在线观看 | 日本三级在线网站 | 欧美 日韩 国产 成人 在线 |