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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求助:用這個程序步進電機不能連續旋轉,為什么?

[復制鏈接]
跳轉到指定樓層
樓主
/*步進電機(正轉一圈 反轉一圈)*/       
#include "reg52.h"

void delay(unsigned int t);

//Motor
sbit F1 = P1^0;
sbit F2 = P1^1;
sbit F3 = P1^2;
sbit F4 = P1^3;

unsigned char code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; //反轉
unsigned char code FFZ[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; //正轉
unsigned int  K;


/**********************************************************************
*                                                                                                                                          *
*                       步進電機驅動                                                                  *
*                                                                                                                                          *
***********************************************************************/
void  motor_ffw()
{
   unsigned char i;
   unsigned int  j;
          for (j=0; j<12; j++)         //轉1*n圈
    {

      for (i=0; i<8; i++)       //一個周期轉30度
        {
          if(K==1) P1 = FFW[i]&0x1f;  //取數據
                  if(K==2) P1 = FFZ[i]&0x1f;
          delay(20);                   //調節轉速
        }
     }
}

/******************************************************
*
*                     延時程序
*
********************************************************/
void delay(unsigned int t)
{                           
   unsigned int k;
   while(t--)
   {
     for(k=0; k<80; k++)
     { }
   }
}


main()
{
    while(1)
        {
         K=1;
         motor_ffw();
         K=2;
         motor_ffw();

         }
}
電機有反應,像是震動,不是旋轉。謝謝,指導。

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

使用道具 舉報

沙發
ID:77707 發表于 2017-8-13 15:49 | 只看該作者
這個程序也不轉,有震動。
/*************************************************************************************
*  標題:  步進電機試驗一                                                                                                                         *
*                                                                                                                                                                          *
*    通過本例程了解步進馬達使用及驅動程序編寫                                                                                 *
*;   單雙八拍工作方式:                                                                    *
*;   A-AB-B-BC-C-CD-D-DA (即一個脈沖,轉 3.75 度)                                                                       *
*    J14短路冒需斷開                                                                       *
*  請學員一定要消化掉本例程                                                                    *
                                                                                                                               *
**************************************************************************************/  
#include "reg52.h"
//Motor
sbit A = P1^0;          //定義管腳
sbit b = P1^1;
sbit C = P1^2;
sbit D = P1^3;

///////////////////////////////////////
//步進電機驅動
unsigned char MotorStep=0;  //步進馬達步序
unsigned int  MotorDelay,Speed=1,TIM,CT;

#define speed 15 // 調整速度 數值不要設的太低 低了會引起震動。

/*****************************************************
*            初始化馬達                                                                 *
******************************************************/
void InitMotor()
{
  A = 1;
  b = 1;
  C = 1;
  D = 1;
}



void SetMotor()
{
  //  if(Speed == 0) return;

    MotorDelay=Speed;        //調整速度
    switch(MotorStep)
    {
       case 0:
          if(TIM)   // A
          {                                    
            A = 0;                    //0xf1  
            b = 1;
                        C = 1;
            D = 1;
            MotorStep = 1;
                        TIM=0;
          }
       break;

       case 1:                 // AB
         if(TIM)
          {       
            A = 0;                   //0xf3
            b = 0;
                   C = 1;
            D = 1;
            MotorStep = 2;
                        TIM=0;
          }
       break;

       case 2:           //B
         if(TIM)
          {
           
                  A = 1;
            b = 0;                  //0xf2
            C = 1;
            D = 1;
           
            MotorStep = 3;
                        TIM=0;
          }
       break;


       case 3:                //BC
         if(TIM)
          {       
            A = 1;
            b = 0;                    //0xf6
            C = 0;
            D = 1;
            MotorStep = 4;
                        TIM=0;
          }
       break;
     case 4:                 //C
         if(TIM)
          {       
            A = 1;
            b = 1;                    //0xf4
            C = 0;
            D = 1;
            MotorStep = 5;
                        TIM=0;
           }
       break;
        case 5:                          //CD
         if(TIM)
          {       
            A = 1;
            b = 1;                    //0xfc
            C = 0;
            D = 0;
            MotorStep = 6;
                        TIM=0;
          }
       break;
        case 6:                          //D
         if(TIM)
          {       
            A = 1;
            b = 1;                    //0xf8
            C = 1;
            D = 0;
            MotorStep = 7;
                        TIM=0;
          }
       break;
        case 7:                        //DA
         if(TIM)
          {       
            A = 0;
            b = 1;                    //0xf9
            C = 1;
            D = 0;
            MotorStep = 0;
                        TIM=0;
          }
       break;
       
        }

}


void system_Ini()
{
    TMOD|= 0x11;
    TH0=0xDC; //11.0592M
    TL0=0x00;       
        IE = 0x8A;       
    TR0  = 1;


}

main()
{ system_Ini();
   InitMotor();
    while(1)
        {
         SetMotor();

         }



  }

/************************************************
*                                                                                                *
*              定時中斷延時                                                    *
************************************************/
  void Tzd(void) interrupt 1
{
   TH0 = 0xfe;    //11.0592
         TL0 = 0x33;

        if( CT++==speed)
          {TIM=1;
           CT=0;
          }
}
回復

使用道具 舉報

板凳
ID:61876 發表于 2017-8-13 16:39 | 只看該作者
我在用步進電機的時候,剛開始也遇到了振動不轉的現象,多數時候是接線有問題,所以樓主第一要處理的就是線一定要分清。如果是四線電機,最好用L298H橋驅動,用別的驅動電路,多數會出現不轉的現象。
回復

使用道具 舉報

地板
ID:77707 發表于 2017-8-13 17:10 | 只看該作者
gaozhaohong 發表于 2017-8-13 16:39
我在用步進電機的時候,剛開始也遇到了振動不轉的現象,多數時候是接線有問題,所以樓主第一要處理的就是線 ...

非常感謝,我遵旨檢查。
回復

使用道具 舉報

5#
ID:229353 發表于 2017-8-25 17:32 | 只看該作者
你好,想問下您這個步進電機的問題解決了嗎?我也遇到類似的問題了。
回復

使用道具 舉報

6#
ID:229362 發表于 2017-8-25 18:29 | 只看該作者
檢查線路
回復

使用道具 舉報

7#
ID:60379 發表于 2017-8-25 19:15 | 只看該作者
以下內容來源于《51單片機輕松入門 基于STC15W4K系列》程序和電路肯定是能用的。完整工程見附件。 1—正反轉.rar (15.68 KB, 下載次數: 6)




  1. /****************《51單片機輕松入門-基于STC15W4K系列》配套例程 *************
  2. ★★★★★★★★★★★★★★★★★★★★★★★★
  3. 《51單片機輕松入門-基于STC15W4K系列》 一書已經由北航出版社正式出版發行。
  4.   作者親手創作的與教材配套的51雙核實驗板(2個MCU)對程序下載、調試、仿真方便,不需要外部
  5.   仿真器與編程器,這種設計方式徹底解決了系統中多個最高優先級誰也不能讓誰的中斷競爭問題。
  6.   淘寶店地址:shop117387413點taobao點com
  7.   QQ群:STC51-STM32(3) :515624099 或 STC51-STM32(2):99794374。
  8.         驗證信息:STC15單片機
  9.   郵箱:xgliyouquan@126.com
  10.   ★★★★★★★★★★★★★★★★★★★★★★★★*/


  11. // 程序功能:上電后順轉200步,然后反轉200步,如此循環。
  12. // 使用P20、P21、P22、P23口驅動電機
  13. #include "STC15W4K.H "
  14. unsigned char code BiaoGe[8]={0x08,0x0C,0x04,0x06,0x02,0x03,0x01,0x09};
  15.                                         // 表格,換算成二進制 1000,1100,0100, 0110 ,0010,0011, 0001 1001
  16.                                         // P2口輸出低4位驅動電機   A  B  /A  /B      
  17.                                         // 1——2相勵磁,發8次脈沖(順序輸出上面表格)轉動4步
  18. void delay3ms(void)
  19. {
  20.         unsigned char i,j,k;
  21.         for(i=1;i>0;i--)         // 注意后面沒分號
  22.         for(j=65;j>0;j--)        // 注意后面沒分號
  23.         for(k=254;k>0;k--);      // 注意后面有分號         
  24. }
  25. void delay1s(void)
  26. {
  27.    unsigned char i,j,k;
  28.    for(i=85;i>0;i--)        // 注意后面沒分號
  29.    for(j=254;j>0;j--)       // 注意后面沒分號
  30.    for(k=255;k>0;k--);      // 注意后面有分號
  31. }                                         

  32. void PROT_Init(void)
  33. {         
  34.         P2M1 = 0x80;     // 1000 0000   P2.0、P2.1、P2.2、P2.3、接驅動功率管,推挽輸出
  35.         P2M0 = 0x0f;         // 0000 1111   P2.7 接接霍爾傳感器信號輸入,高阻輸入
  36. }
  37. void shun200()                           // 順轉200步
  38. {
  39.         unsigned int i;
  40.         unsigned char n;
  41.         n=0;
  42.         for(i=0;i<400;i++)         // 200步,i/2為實際步數
  43.         {        
  44.                 P2=BiaoGe[n]|0xf0;           // 不影響P2口高4位               
  45.                 delay3ms();
  46.                 n=n+1;      
  47.                 if (n>7)
  48.                 {                           
  49.                 n=0;
  50.                 }                       
  51.         }
  52.         P2&=0xf0;                                          // 保證電機繞組斷電
  53. }
  54. void fan200()                                          // 反轉200步
  55. {
  56.         unsigned int i;
  57.         unsigned char n;
  58.         n=8;                       
  59.         for(i=0;i<400;i++)            // 200步,i/2為實際步數
  60.         {        
  61.             n=n-1;               
  62.                 P2=BiaoGe[n]|0xF0;              // 不影響P2口高4位                       
  63.                 delay3ms();
  64.                 if (n==0)
  65.                 {                           
  66.                 n=8;
  67.                 }                       
  68.         }
  69.         P2&=0xf0;                                          // 保證電機繞組斷電        
  70. }
  71. void main(void)                                 
  72. {                  
  73.         PROT_Init();                      // 初始化端口      
  74.         while(1)
  75.         {
  76.                 shun200();
  77.                 delay1s();
  78.                 fan200();
  79.                 delay1s();
  80.         }      
  81. }
復制代碼





回復

使用道具 舉報

8#
ID:229387 發表于 2017-8-25 21:06 | 只看該作者
脈沖分配不規律
回復

使用道具 舉報

9#
ID:223788 發表于 2017-8-25 22:03 | 只看該作者
應該要加一個延時吧
回復

使用道具 舉報

10#
ID:229353 發表于 2017-8-26 09:21 | 只看該作者

什么意思,能說詳細一點么?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 新疆少妇videos高潮 | 在线一区观看 | 一级黄色毛片a | 亚洲欧美视频一区 | aaa大片免费观看 | 日韩欧美一区二区三区四区 | 欧美精品v国产精品v日韩精品 | 久久久av | 亚洲欧洲精品在线 | 日韩精品久久一区 | 亚洲国产视频一区 | 成人一区二区视频 | 天堂网avav | 久久久精品综合 | 国产亚洲一区二区精品 | 乱码av午夜噜噜噜噜动漫 | 91偷拍精品一区二区三区 | 久久精品一区二区三区四区 | 激情网站在线观看 | 天堂成人国产精品一区 | 精品久久久久久久久久久久久久 | 免费一级毛片 | 欧美 日韩 中文 | 国产日日操 | 色综合av | 91不卡在线 | 国产一区二区三区精品久久久 | 日日人人 | 91青青草视频 | 亚洲毛片在线观看 | 欧美国产一区二区 | 国产精品永久免费视频 | 亚洲一区二区 | 成人av网页 | 一区视频 | 久在线观看 | 国产成人精品免费视频大全最热 | 成人免费大片黄在线播放 | 干一干操一操 | av天天干 | 99精品欧美一区二区三区综合在线 |