欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機如何控制步進電機停止 [打印本頁]

作者: zjjmw    時間: 2018-1-16 12:08
標題: 單片機如何控制步進電機停止
我個人猜想的是用TR0=0來暫停但是沒用。。。求大佬看看
void main(void)
{ u16 j,i;
time();       

       
        j=0;
        for(i=0;i<64;i++)
          {P1=0x00;
           P1=FFW[j];
           j++;
           if(j>=8) j=0;
           delay(500);
           }
           TR0=0;
}       
這個是我實現步進電機動起來的部分

          
       
       



作者: HC6800-ES-V2.0    時間: 2018-1-16 13:32
不發脈沖就可以讓步進電機不轉動。
作者: zjjmw    時間: 2018-1-16 14:36
HC6800-ES-V2.0 發表于 2018-1-16 13:32
不發脈沖就可以讓步進電機不轉動。

大佬,我的i只循環64次,也就是說64次脈沖后應該就停了啊>_<可是完全停不下來了啊
作者: 漫步經心    時間: 2018-1-16 15:54
time()和你后面一大段代碼有關系么?     TR0=0
作者: scmianyangzly    時間: 2018-1-16 15:55
感覺你是8位并口 操作 。
第一你得確定你的端口位。
第二你的FFW[j]數據邏輯對不對。這里你的循環就錯了  if(j>=8) j=0;  多執行了一次。
作者: 漫步經心    時間: 2018-1-16 15:55
TR0=0?你是打算關掉定時器?可是跟你控制步進電機的程序有關系么
作者: HC6800-ES-V2.0    時間: 2018-1-16 16:35
zjjmw 發表于 2018-1-16 14:36
大佬,我的i只循環64次,也就是說64次脈沖后應該就停了啊>_

看我的:
  1. #include <reg52.h>

  2. #define Rotation P1//步進電機,只用低四位
  3. unsigned char code FFW1[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
  4. unsigned char code FFW2[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};

  5. sbit k1=P3^1;                //以下四個為獨立鍵盤
  6. sbit k2=P3^0;
  7. sbit k3=P3^2;
  8. sbit k4=P3^3;

  9. unsigned int Time;
  10. unsigned int jd;
  11. bit k=0,key1=0,key2=0;

  12. void Delay10ms(unsigned int c)
  13. {
  14.     unsigned char a,b;
  15.     for(c;c>0;c--)
  16.         for(b=38;b>0;b--)
  17.             for(a=130;a>0;a--);
  18. }

  19. void Delay(unsigned int i)
  20. {
  21.         while (--i);
  22. }

  23. void  Motor()//電機旋轉子函數
  24. {
  25.         unsigned char i;
  26.         for(i=0;(i<8);i++)
  27.         {
  28.                 if (jd==0)        //jd為0則停轉
  29.                 {
  30.                         Rotation=0xf0;
  31.                         break;
  32.                 }
  33.                 if (k==0)
  34.                 {
  35.                         Rotation=FFW2[i];//輸出正轉的相
  36.                 }               
  37.                 else
  38.                 {
  39.                         Rotation=FFW1[i];//輸出反轉的相
  40.                 }
  41.                 Delay(Time);//最小120,最快
  42.                 jd--;
  43.                                                         
  44.         }
  45. }

  46. void main()
  47. {        
  48.         unsigned char m;
  49.         m=0;
  50.         Time=255;
  51.         jd=20480;//可以轉5圈
  52.         while(1)
  53.         {
  54.                
  55.                 if(k1==0)
  56.                 {
  57.                         Delay10ms(1);
  58.                         if(k1==0)
  59.                         {
  60.                                 if (key1==0)//按第奇數次,正轉,偶數次反轉
  61.                                 {
  62.                                         Time=105;
  63.                                         k=0;//正轉
  64.                                         jd=20480;
  65.                                         key1=1;
  66.                                 }
  67.                                 else
  68.                                 {
  69.                                         Time=105;
  70.                                         k=1;//反轉
  71.                                         jd=20480;
  72.                                         key1=0;
  73.                                 }

  74.                                 while((m<50)&&(k1==0))
  75.                             {
  76.                                     Delay10ms(1);
  77.                                     m++;
  78.                             }
  79.                             m=0;
  80.                         }
  81.                 }

  82.                 if(k2==0)
  83.                 {
  84.                         Delay10ms(1);
  85.                         if(k2==0)
  86.                         {
  87.                                 if (key2==0)//按奇數次轉180度,偶數次90度
  88.                                 {
  89.                                         Time=255;
  90.                                         k=1;
  91.                                         jd=2048;
  92.                                         key2=1;
  93.                                 }
  94.                                 else
  95.                                 {
  96.                                         Time=205;
  97.                                         k=0;
  98.                                         jd=1024;
  99.                                         key2=0;
  100.                                 }

  101.                                 while((m<50)&&(k2==0))
  102.                             {
  103.                                     Delay10ms(1);
  104.                                     m++;
  105.                             }
  106.                             m=0;
  107.                         }
  108.                 }

  109.                 if(k3==0)
  110.                 {                                                         
  111.                         Delay10ms(1);
  112.                         if(k3==0)
  113.                         {
  114.                                 
  115.                                 Time=Time+100;//最大500
  116.                                 if (Time>505)
  117.                                 {
  118.                                         Time=505;
  119.                                 }
  120.                                 jd=20480;

  121.                                 while((m<50)&&(k3==0))
  122.                             {
  123.                                     Delay10ms(1);
  124.                                     m++;
  125.                             }
  126.                             m=0;
  127.                         }
  128.                 }

  129.                 if(k4==0)
  130.                 {
  131.                         Delay10ms(1);
  132.                         if(k4==0)
  133.                         {

  134.                                 Time=Time-100;//最小105
  135.                                 if (Time<105)
  136.                                 {
  137.                                         Time=105;
  138.                                 }
  139.                                 jd=20480;

  140.                                 while((m<50)&&(k4==0))
  141.                             {
  142.                                     Delay10ms(1);
  143.                                     m++;
  144.                             }
  145.                             m=0;
  146.                         }
  147.                 }
  148.                 Motor();
  149.         }
  150. }
復制代碼

這是我多年前做步進電機試驗時的程序,現在看起來很“小兒科”。不過,正反轉動、加速減速都有。
適用電路:





作者: zl2168    時間: 2018-1-16 21:18
要停還不簡單?斷電就是了!
作者: qq1105424012    時間: 2018-1-16 21:45
TR0是51單片機定時器T0的開定時器位,有可能你的用到了中斷了 你還是把所有的程序貼出來看看把
作者: zjjmw    時間: 2018-1-17 17:10
漫步經心 發表于 2018-1-16 15:55
TR0=0?你是打算關掉定時器?可是跟你控制步進電機的程序有關系么

哈,這個跟定時器沒關嘛>_<
作者: st_zaiyuzhong    時間: 2018-1-17 17:24
通過pwm控制,不給pwm
作者: 貪戀    時間: 2018-1-17 21:53
沒有方波信號輸出時,步進電機不會轉的
作者: 1354221508    時間: 2018-1-18 16:57
學習大神資料
作者: zjjmw    時間: 2018-1-18 20:55
st_zaiyuzhong 發表于 2018-1-17 17:24
通過pwm控制,不給pwm

emmm我才知道pwm。。。是個啥,學習下
作者: sunny_liam    時間: 2020-4-23 17:05
請問下是如何控制步進電機停止的呢
作者: zhaoyun123    時間: 2020-4-23 18:15
步進電機是靠脈沖控制的,如果你不給脈沖,自然就停下來了




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