标题: 旋转编码器通过单片机控制步进电机怎么编程? [打印本页]

作者: 阿联520    时间: 2018-1-26 19:49
标题: 旋转编码器通过单片机控制步进电机怎么编程?
怎么编程用旋转编码器控制步进电机,就是编码器转动,步进电机也跟着转动(主从控制),编码器有A,B两相

作者: perfect_co    时间: 2018-1-27 18:00
简单:利用芯片正交编码功能(通常DSP等芯片具有),计数和旋转方向,利用测速方法测量出当前编码器的速度,然后作为电机的速度给定,闭环控制即可。
作者: AFFF    时间: 2018-2-11 18:19
uchar min=0;        //定义分钟和秒变量
uchar jizhun=0;
/* 定义编码开关控制引脚 */ //中间脚(第2脚)接地  
sbit CodingsWitch_B=P3^3; //A脚定义(即1脚) 这两脚必须接10K上拉电阻
sbit CodingsWitch_A=P3^4; //B脚定义(即3脚)
/********以下是步进电机1相励磁法正转函数********/
void  motor_up(uint n)
{
        uchar i;
  uint  j;
  for (j=0; j<1*n; j++)            //转n圈
  {
          for (i=0; i<4; i++)     //4次共转7.5°×4=30度,这样,转12次可转360°(即1圈)
       {
                       P1 = up_data[i];          //取正转数据
                  Delay_ms(3);         //转一个角度停留的时间,可调节转速
             }
        }
}
/********步进电机1相励磁法反转函数********/
void  motor_down(uint n)
{
        uchar i;
        uint  j;
        for (j=0; j<1*n; j++)                    //转n圈
  {
          for (i=0; i<4; i++)             //4次共转7.5°×4=30度,这样,转12次可转360°(即1圈)
       {
                       P1 = down_data[i];   //取反转数据
                  Delay_ms(3);            //转一个角度停留的时间,可调节转速
       }
        }
}         
/********************旋转编码开关判断函数***********************************************/
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;

}   
//以下是编码器控制步进电机方法
CodingsWitch();                           //调旋转编码开关函数
                                                                           
                          if(min>jizhun)
                            {
                                  motor_up(min-jizhun);                                                            
                                               
                                 jizhun=min;
                                  }

      

               if(min<jizhun)
                             {
              
                            motor_down(jizhun-min);
                                  
                           jizhun=min;
                         }
作者: 阿联520    时间: 2018-3-6 15:40
AFFF 发表于 2018-2-11 18:19
uchar min=0;        //定义分钟和秒变量
uchar jizhun=0;
/* 定义编码开关控制引脚 */ //中间脚(第2脚)接地   ...

谢谢,我看的有点懵。我的意思是:编码器旋转一周能发出600个脉冲,步进电机旋转一周需要255个脉冲(步距角1.6°),步进电机驱动器只有使能、脉冲、方向、电源4条线接单片机.我的想法是单片机每接收编码器的600/255个脉冲,就给步进电机1个脉冲。
作者: 981860764    时间: 2018-5-13 00:33
那你的要求不高嘛
作者: jjwangxu2008    时间: 2018-5-13 01:58
就是一个多轴的同步控制
作者: 木禾    时间: 2018-12-21 14:03
有代码能给学习一下吗?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1