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

QQ登錄

只需一步,快速開始

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

旋轉(zhuǎn)編碼器通過單片機(jī)控制步進(jìn)電機(jī)怎么編程?

[復(fù)制鏈接]
ID:279974 發(fā)表于 2018-1-26 19:49 | 顯示全部樓層 |閱讀模式
怎么編程用旋轉(zhuǎn)編碼器控制步進(jìn)電機(jī),就是編碼器轉(zhuǎn)動(dòng),步進(jìn)電機(jī)也跟著轉(zhuǎn)動(dòng)(主從控制),編碼器有A,B兩相
回復(fù)

使用道具 舉報(bào)

ID:280247 發(fā)表于 2018-1-27 18:00 | 顯示全部樓層
簡單:利用芯片正交編碼功能(通常DSP等芯片具有),計(jì)數(shù)和旋轉(zhuǎn)方向,利用測(cè)速方法測(cè)量出當(dāng)前編碼器的速度,然后作為電機(jī)的速度給定,閉環(huán)控制即可。

評(píng)分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:276654 發(fā)表于 2018-2-11 18:19 | 顯示全部樓層
uchar min=0;        //定義分鐘和秒變量
uchar jizhun=0;
/* 定義編碼開關(guān)控制引腳 */ //中間腳(第2腳)接地  
sbit CodingsWitch_B=P3^3; //A腳定義(即1腳) 這兩腳必須接10K上拉電阻
sbit CodingsWitch_A=P3^4; //B腳定義(即3腳)
/********以下是步進(jìn)電機(jī)1相勵(lì)磁法正轉(zhuǎn)函數(shù)********/
void  motor_up(uint n)
{
        uchar i;
  uint  j;
  for (j=0; j<1*n; j++)            //轉(zhuǎn)n圈
  {
          for (i=0; i<4; i++)     //4次共轉(zhuǎn)7.5°×4=30度,這樣,轉(zhuǎn)12次可轉(zhuǎn)360°(即1圈)
       {
                       P1 = up_data[i];          //取正轉(zhuǎn)數(shù)據(jù)
                  Delay_ms(3);         //轉(zhuǎn)一個(gè)角度停留的時(shí)間,可調(diào)節(jié)轉(zhuǎn)速
             }
        }
}
/********步進(jìn)電機(jī)1相勵(lì)磁法反轉(zhuǎn)函數(shù)********/
void  motor_down(uint n)
{
        uchar i;
        uint  j;
        for (j=0; j<1*n; j++)                    //轉(zhuǎn)n圈
  {
          for (i=0; i<4; i++)             //4次共轉(zhuǎn)7.5°×4=30度,這樣,轉(zhuǎn)12次可轉(zhuǎn)360°(即1圈)
       {
                       P1 = down_data[i];   //取反轉(zhuǎn)數(shù)據(jù)
                  Delay_ms(3);            //轉(zhuǎn)一個(gè)角度停留的時(shí)間,可調(diào)節(jié)轉(zhuǎn)速
       }
        }
}         
/********************旋轉(zhuǎn)編碼開關(guān)判斷函數(shù)***********************************************/
void CodingsWitch(void)
{

static uchar Aoid,Boid;
static uchar st=0;
  
          if(CodingsWitch_A&&CodingsWitch_B)
              st=1;
                                  if(st)
                                    {
                                          if(CodingsWitch_A==0&&CodingsWitch_B==0)
                                             {
                                                  if(Boid)
                                                    {
                                                          st=0;
                                                          if(min>=90)
                                                             min=90;
                                                                  else
                                                                      min++;
                              
                                                                                }
                                                  if(Aoid)
                                                    {
                                                          st=0;
                                                          if(min<1)
                                                             min=0;
                                                                  else
                                                                      min--;
                                                        }
                                                }
                                         }

                                Aoid=CodingsWitch_A;       
                 Boid=CodingsWitch_B;

}   
//以下是編碼器控制步進(jìn)電機(jī)方法
CodingsWitch();                           //調(diào)旋轉(zhuǎn)編碼開關(guān)函數(shù)
                                                                           
                          if(min>jizhun)
                            {
                                  motor_up(min-jizhun);                                                            
                                               
                                 jizhun=min;
                                  }

      

               if(min<jizhun)
                             {
              
                            motor_down(jizhun-min);
                                  
                           jizhun=min;
                         }

評(píng)分

參與人數(shù) 1黑幣 +80 收起 理由
admin + 80 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:279974 發(fā)表于 2018-3-6 15:40 | 顯示全部樓層
AFFF 發(fā)表于 2018-2-11 18:19
uchar min=0;        //定義分鐘和秒變量
uchar jizhun=0;
/* 定義編碼開關(guān)控制引腳 */ //中間腳(第2腳)接地   ...

謝謝,我看的有點(diǎn)懵。我的意思是:編碼器旋轉(zhuǎn)一周能發(fā)出600個(gè)脈沖,步進(jìn)電機(jī)旋轉(zhuǎn)一周需要255個(gè)脈沖(步距角1.6°),步進(jìn)電機(jī)驅(qū)動(dòng)器只有使能、脈沖、方向、電源4條線接單片機(jī).我的想法是單片機(jī)每接收編碼器的600/255個(gè)脈沖,就給步進(jìn)電機(jī)1個(gè)脈沖。
回復(fù)

使用道具 舉報(bào)

ID:325557 發(fā)表于 2018-5-13 00:33 來自觸屏版 | 顯示全部樓層
那你的要求不高嘛
回復(fù)

使用道具 舉報(bào)

ID:86450 發(fā)表于 2018-5-13 01:58 來自觸屏版 | 顯示全部樓層
就是一個(gè)多軸的同步控制
回復(fù)

使用道具 舉報(bào)

ID:416410 發(fā)表于 2018-12-21 14:03 | 顯示全部樓層
有代碼能給學(xué)習(xí)一下嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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