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

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

QQ登錄

只需一步,快速開始

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

51四個(gè)按鍵控制42/57步進(jìn)電機(jī)啟停正反,但速度一直加不上去

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:245224 發(fā)表于 2018-4-14 14:02 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
80黑幣
代碼在下面,是我參考的網(wǎng)上代碼改寫的,但是步進(jìn)電機(jī)的速度一直很慢,提不上去,求大神能改下,讓步進(jìn)電機(jī)運(yùn)動(dòng)快點(diǎn),驅(qū)動(dòng)器采用的是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;                //正轉(zhuǎn)運(yùn)行按鍵
  6. sbit STOP = P2^5;        //停止運(yùn)行按鍵
  7. sbit CCW = P2^6;        //反轉(zhuǎn)運(yùn)行按鍵
  8. sbit ADJ = P2^7;        //調(diào)速運(yùn)行按鍵

  9. bit Run_Status;                //運(yùn)行狀態(tài)位標(biāo)志,
  10.                                         //=0表示電機(jī)在停止?fàn)顟B(tài),可以按鍵正轉(zhuǎn)、反轉(zhuǎn)均可
  11.                                         //=1表示電機(jī)在運(yùn)行狀態(tài),不支持正反轉(zhuǎn)按鍵,只有先停止。防止強(qiáng)行換向帶來(lái)的電流過(guò)大。

  12. unsigned char Run_Dir,t;        //電機(jī)運(yùn)行方向
  13. unsigned char timer1;

  14. #define        F_DIR        0                //正轉(zhuǎn)
  15. #define        R_DIR        1                //反轉(zhuǎn)

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

  17. void Delayms(unsigned int xms)         //延時(shí)函數(shù)
  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)          //電機(jī)正轉(zhuǎn)
  24. {
  25.         TH0=(65536-clock)/256;          //初值大小由clock值決定
  26.         TL0=(65536-clock)%256;          //clock增大,speed減。籧lock減小,speed增大         
  27.         Dir=0;
  28.         En=1;
  29.         TR0=1;           //開定時(shí)器1中斷
  30. }

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

  40. void Reversal(void)         //電機(jī)反轉(zhuǎn)
  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)                                //任何時(shí)候按停止鍵,電機(jī)停止運(yùn)行
  53.                 {        
  54.                         Delayms(1);                //延時(shí)去抖動(dòng)
  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;        //電機(jī)正在停止的狀態(tài)標(biāo)志
  64.                         }
  65.                 }
  66.             else if(!CW && !Run_Status && (flag1&0xf0)==0x00)        //按正轉(zhuǎn)鍵同時(shí)電機(jī)不是正在運(yùn)行時(shí),電機(jī)正轉(zhuǎn)運(yùn)行
  67.                 {
  68.                         Delayms(1);                //按下延時(shí)去抖動(dòng)
  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;        //電機(jī)運(yùn)行方向正轉(zhuǎn)                                
  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)        //按反轉(zhuǎn)鍵同時(shí)電機(jī)不是正在運(yùn)行時(shí),電機(jī)反轉(zhuǎn)運(yùn)行
  97.                 {
  98.                         Delayms(1);                //延時(shí)去抖動(dòng)
  99.                         if(!CCW && !Run_Status)                        
  100.                         {        
  101.                                                                 if(t<1)
  102.                                                         {
  103.                                                        
  104.                                 Reversal();
  105.                                                         }
  106.                                 Run_Dir=R_DIR;        //電機(jī)運(yùn)行方向反轉(zhuǎn)
  107.                                 flagstop=0;
  108.                                                                 flag1 = 1;
  109.                                 Run_Status=1;        //電機(jī)正在運(yùn)行的狀態(tài)標(biāo)志

  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);                //延時(shí)去抖動(dòng)
  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表示電機(jī)在停止?fàn)顟B(tài),可以按鍵正轉(zhuǎn)、反轉(zhuǎn)均可
  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 為定時(shí)器1的中斷號(hào) 1 定時(shí)器0的中斷號(hào) 0 外部中斷1 2 外部中斷2 4 串口中斷
  175. {
  176. //        TH1 = 0xfe; //11.0592MHz 0.5ms定時(shí)
  177. //        TL1 = 0x33;
  178.     TH0=(65536-200)/256;
  179.     TL0=(65536-200)%256;
  180.     timer1++; //計(jì)數(shù)+1
  181. }
復(fù)制代碼
我想的是先低速啟動(dòng),然后再加速運(yùn)行,如果能夠直接快速啟動(dòng)也行。


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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区二区在线 | 日本在线视 | 特级黄一级播放 | 中文字幕亚洲欧美日韩在线不卡 | 天天综合天天 | 91免费视频| 国产精品免费视频一区 | 超黄毛片 | 欧美亚洲国语精品一区二区 | 国产1区在线 | 亚洲网站在线观看 | 99免费看| 亚洲福利在线观看 | 亚洲日韩中文字幕一区 | 不卡一区二区三区四区 | 婷婷中文在线 | 天天综合久久 | 久久综合久 | 久久久噜噜噜www成人网 | 理论片午午伦夜理片影院 | 国产精品污www一区二区三区 | 亚洲成人精品国产 | 欧美韩一区二区 | 成人久久网 | 欧美1区| 精品国产欧美在线 | 日韩三级免费观看 | 浴室洗澡偷拍一区二区 | 欧美成人一区二区三区 | 北条麻妃一区二区三区在线视频 | 成人精品鲁一区一区二区 | 亚洲一区精品在线 | 国产精品日韩 | 精久久久| 超碰免费在线 | 精品亚洲二区 | 亚洲一区二区三区四区五区午夜 | 黄色免费av | 日本三级做a全过程在线观看 | 亚洲一区二区三区 | 韩日一区二区三区 |