找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9133|回复: 6
打印 上一主题 下一主题
收起左侧

旋转编码器通过单片机控制步进电机怎么编程?

[复制链接]
跳转到指定楼层
楼主
ID:279974 发表于 2018-1-26 19:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
怎么编程用旋转编码器控制步进电机,就是编码器转动,步进电机也跟着转动(主从控制),编码器有A,B两相
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:280247 发表于 2018-1-27 18:00 | 只看该作者
简单:利用芯片正交编码功能(通常DSP等芯片具有),计数和旋转方向,利用测速方法测量出当前编码器的速度,然后作为电机的速度给定,闭环控制即可。

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:276654 发表于 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;
                         }

评分

参与人数 1黑币 +80 收起 理由
admin + 80 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:279974 发表于 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个脉冲。
回复

使用道具 举报

5#
ID:325557 发表于 2018-5-13 00:33 来自手机 | 只看该作者
那你的要求不高嘛
回复

使用道具 举报

6#
ID:86450 发表于 2018-5-13 01:58 来自手机 | 只看该作者
就是一个多轴的同步控制
回复

使用道具 举报

7#
ID:416410 发表于 2018-12-21 14:03 | 只看该作者
有代码能给学习一下吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表