让步进电机正反转如何编程

如题所述

可以使用表控TPC4-4TD的控制器来实现,参考下图接线:

接线很简单,参考接线图接线。表控与驱动器的接线只有三根线,5V、Y1和Y2,分别连接步进电机驱动器的输入信号端,5V连接步进电机驱动器输入信号的正极,Y1连接脉冲输入信号的负极,Y2连接方向输入信号的负极。

在电脑的功能设置表上设置的正反转功能,见下图:

第1行设置X1作为启动开关,由Y1输出脉冲,频率2000赫兹,脉冲数是2000。如果驱动器细分设置为2000,设置脉冲数为2000正好转一圈。

第2行设置延时1秒,作为正反转间隔的时间。

第3行设置Y2输出方向信号10秒钟,由脉冲结束时关闭此行。

第4行设置的与第一行相同,由于与第3行的方向输出端同事被第2行延时后启动,因此第3、4行实现反转的功能。反转一圈回到原位。

下图是自动生成的汉字显示:

使用表控作为步进电机控制,有几个有点:接线方便、设置简单,表格设置方法代替编程,没学过编程的人员也可以使用。更多功能可以查看详细说明书和视频教程。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-02-27

    让步进电机正反转如何编程:

            只要控制在四相绕组上输入脉冲的顺序,就可以控制电机的正转/反转。(控制延时就能控制转速。)

    步进电机正反转控制方式:

    步进电机有四相绕组A、B、C、D,当一绕组通电时在电动机内部形成N-S极,产生磁场,当通电的相发生变化,磁场发生旋转,在磁场的作用下,转子将转动,若步进电机按双四拍的方式来工作。

    在A、B、C、D四相绕组上输入脉冲的顺序为AB→BC→CD→DA→AB,步进电机沿顺时针方向转动,即正转;若在A、B、C、D四相绕组上依次输入脉冲AB→DA→CD→BC→AB;步进电机将沿逆时针方向旋转,即反转。

    程序代码示例如下:

#include <reg51.h>       //51芯片管脚定义头文件
#include <intrins.h>  //内部包含延时函数 _nop_();
#define uchar unsigned char
#define uint  unsigned int
uchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};  //四相八拍正转编码
uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};  ////四相八拍反转编码
sbit  K1   = P3^2;       //正转
sbit  K2   = P3^3;       //反转
sbit  K3   = P3^4;       //停止
sbit  BEEP = P3^6;       //蜂鸣器
/********************************************************/
/*                                                  
/* 延时t毫秒 
/* 11.0592MHz时钟,延时约1ms                                     
/*                                                      
/********************************************************/
void delay(uint t)
{                           
   uint k;
   while(t--)
   {
     for(k=0; k<125; k++)
     { }
   }
}
/**********************************************************/
void delayB(uchar x)    //x*0.14MS
 {
   uchar i;
   while(x--)
   {
     for (i=0; i<13; i++)
     { }
   }
 }
/**********************************************************/
void beep()
 {
   uchar i;
   for (i=0;i<100;i++)
    { 
     delayB(4);
     BEEP=!BEEP;                 //BEEP取反
    } 
     BEEP=1;                    //关闭蜂鸣器
 }
/********************************************************/
/*
/*步进电机正转
/*
/********************************************************/
void  motor_ffw()
 { 
   uchar i;
   uint  j;
   for (j=0; j<8; j++)         //转1*n圈 
    { 
     if(K3==0)
        {break;}                //退出此循环程序
      for (i=0; i<8; i++)       //一个周期转45度
        {
          P1 = FFW[i];          //取数据
          delay(2);            //调节转速
        }
    }
 }
/********************************************************/
/*
/*步进电机反转
/*
/********************************************************/
void  motor_rev()
{
     uchar i;
  uint  j;
  for (j=0; j<8; j++)       //转1×n圈
      {
     if(K3==0)
         {break;}               //退出此循环程序
        for (i=0; i<8; i++)     //一个周期转45度
        {
          P1 = REV[i];          //取数据
          delay(2);            //调节转速
        }
      }
 }
/********************************************************
*                                                       
*  主程序                                               
*                                                      
*********************************************************/
main()
 { 
      uchar r,N=64;             //N 步进电机运转圈数
   while(1)
    {  
      if(K1==0)
   {
        beep();
  for(r=0;r<N;r++)
         { 
     motor_ffw();       //电机正转
      if(K3==0)
           {beep();break;}    //退出此循环程序
      }
      }
   else if(K2==0)
       { 
     beep();
  for(r=0;r<N;r++)
         {
        motor_rev();       //电机反转
     if(K3==0)
           {beep();break;}    //退出此循环程序
   }
       }
    else  
   P1 = 0xf0;
    }
 }
/********************************************************/

本回答被网友采纳
第2个回答  2019-12-26

使用SM1P步进伺服电机控制器来实现。

相似回答