找回密码
 立即注册

QQ登录

只需一步,快速开始

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

新手求个步进电机控制程序和接线法tb6560驱动42

[复制链接]
跳转到指定楼层
楼主
大家好,我是新手,想求个程序和接线图,用51控制TB6560驱动42步进电机,我上图大家指点下,非常感谢!这是TB6560的接线,有两种接法,不知道哪种可以用,还有步进划分,如何设置?





我用的单片机是stc90c516RD+,下一步准备换个带ad的,控制方法为,按下键步进电机动,松开不动,可以加减速,先谢谢了
这是我的板子


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

7#
ID:451559 发表于 2019-3-25 21:27 | 只看该作者
好好学习 下
回复

使用道具 举报

6#
ID:139429 发表于 2016-9-17 01:57 | 只看该作者
这个根本不是这种步进电机的,而且也没有通过驱动
回复

使用道具 举报

5#
ID:111294 发表于 2016-3-30 23:55 | 只看该作者
本帖最后由 bg8sya 于 2016-3-31 00:00 编辑

这个不能反转#include <reg52.h>       //51芯片管脚定义头文件
#include <intrins.h>  //内部包含延时函数 _nop_();
unsigned char code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //正转相序代码
unsigned char 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;       //蜂鸣器


/*********************************************************
1ms延时
*********************************************************/
void delay(unsigned int t)
{                          
   unsigned int k;
   while(t--)
     for(k=0; k<125; k++);
}

/**********************************************************
0.1ms延时
  **********************************************************/
void delayB(unsigned char n)   
{
   unsigned char i;
   while(n--)
     for (i=0; i<13; i++);
}

/**********************************************************/


/*蜂鸣器*/
void beep()
{
  unsigned char i;
  for(i=0;i<100;i++){
  BEEP=~BEEP;
  delayB(4);
}
BEEP=1;
}

/********************************************************/
/*
/*步进电机正转
/*
/********************************************************/
void  motor_ffw()
{
   unsigned char i;
   unsigned int  j;
   for (j=0; j<8; j++)         //转1*n圈
    {
     if(K3==0){
   delay(15); //消陡
   if(K3==0)
    break;
  }                //退出此循环程序
      for (i=0; i<8; i++)       //一个周期转45度
        {
          P1 = FFW;          //取数据
          delay(2);            //调节转速
        }
    }
}

/********************************************************/
/*
/*步进电机反转
/*
/********************************************************/
void  motor_rev()
{
     unsigned char i;
  unsigned int  j;
  for (j=0; j<8; j++)       //转1×n圈
      {
      if(K3==0){
   delay(15); //消陡
   if(K3==0)
    break;
  }                //退出此循环程序
        for (i=0; i<8; i++)     //一个周期转45度
        {
          P1 = REV;          //取数据
          delay(2);            //调节转速
        }
      }
}

/********************************************************
*                                                      
*  主程序                                             
*                                                     
*********************************************************/

void main()
{

   unsigned char r,N=64;             //N 步进电机运转圈数 因为步进电机是减速步进电机 减速比是1/64 所以这里N=64时 步进电机外部的主轴转1圈
   while(1)
    {
      if(K1==0)
   {
    delay(10);
  if(K1==0){
   beep();
      for(r=0;r<N;r++)
            {
         motor_ffw();       //电机正转
          if(K3==0){
        delay(10);
     if(K3==0){
               beep();
      break;
     }
      }    //退出此循环程序
      }  
     }
      }
   else if(K2==0)
      {
    delay(10);
  if(K2==0){
        beep();
     for(r=0;r<N;r++)
           {
           motor_rev();       //电机反转
           if(K3==0){
        delay(10);
     if(K3==0){
               beep();
      break;
     }
         }    //退出此循环程序
      }
   }
       }
    else
   P1 = 0xf0;    //关闭电机
}


}

/********************************************************/



回复

使用道具 举报

地板
ID:111294 发表于 2016-3-30 23:23 | 只看该作者
hubaba 发表于 2016-3-30 13:44
TB6560驱动42步进电机例程

你好,http://www.51hei.com/bbs/dpj-47351-1.html,关于这个控制,我实验不成功,请再次帮忙,谢谢,我是新手
回复

使用道具 举报

板凳
ID:111294 发表于 2016-3-30 18:19 | 只看该作者
hubaba 发表于 2016-3-30 13:44
TB6560驱动42步进电机例程

好人,谢谢了
回复

使用道具 举报

沙发
ID:110653 发表于 2016-3-30 13:44 | 只看该作者
TB6560驱动42步进电机例程
  1. #include "reg51.h"
  2. #include "stdio.h"
  3. #include < intrins.h >
  4. #include<math.h>
  5. #define uchar unsigned char
  6. #define uint  unsigned int
  7. //************************管脚定义************************************/
  8. sbit A_key = P0^2;//前
  9. sbit B_key = P0^0;//右
  10. sbit C_key = P0^3;//左
  11. sbit D_key = P0^1;//后
  12. sbit en_left = P1^0;//左电机使能控制位
  13. sbit cw_left= P1^1;//左电机方向控制位
  14. sbit clk_left= P1^2;//左电机脉冲控制位
  15. sbit en_right = P1^3;//右电机使能控制位
  16. sbit cw_right= P1^4;//右电机方向控制位
  17. sbit clk_right= P1^5;//右电机脉冲控制位
  18. /////////////////////////函数声明////////////////////////////////////////
  19. void timer1_init();  //定时器1初始化函数
  20. void move_left(uint speed_l,uchar cw,uchar en);//左电机运动函数
  21. void move_right(uint speed_r,uchar cw,uchar en);//右电机运动函数
  22. void clk(uint speed,uint step);
  23. void delay(uint speed);
  24. //////////////////变量定义////////////////////////////////////////////////
  25. uint n;//进定时器1中断次数计数
  26. uint speed;//电机速度控制变量
  27. /**************函数体******************************************/

  28. /*******************************/
  29. void timer1_init()
  30. {
  31.         TMOD=0X10;
  32.         ET1=1;
  33.         EA=1;
  34.         TH1=(65536-100)/256;
  35.         TL1=(65536-100)%256;
  36.         TR1=1;//定时器启动后  运动控制脉冲将一直产生   小车的运动方式受 cw 和en控制
  37. }



  38. void main (void)
  39. {   
  40.    delay(10);
  41.    timer1_init();
  42.         while(1)
  43.                 {
  44.                         if(A_key==1&&B_key==0&&C_key==0&&D_key==0)
  45.                         {
  46.                                 EA=1;
  47.                                 move_left(20,0,1);
  48.                                 move_right(20,1,1);
  49.                             
  50.                         }
  51.                         else if(A_key==0&&B_key==1&&C_key==0&&D_key==0)
  52.                         {
  53.                                  EA=1;
  54.                                 move_left(20,0,1);
  55.                                 move_right(20,0,1);
  56.                        
  57.                         }
  58.                         else if(A_key==0&&B_key==0&&C_key==1&&D_key==0)
  59.                         {
  60.                                  EA=1;
  61.                                 move_left(20,1,1);
  62.                                 move_right(20,1,1);
  63.                                
  64.                         }
  65.                         else if(A_key==0&&B_key==0&&C_key==0&&D_key==1)
  66.                         {
  67.                                 EA=1;
  68.                                 move_left(20,1,1);
  69.                                 move_right(20,0,1);
  70.                                          
  71.                         }
  72.                         else
  73.                         {
  74.                                 EA=0;
  75.                         }
  76.                
  77.                 }

  78.    
  79. }
  80. void delay(uint speed)
  81. {
  82.         while(speed--)
  83.         {
  84.                 ;
  85.         }
  86. }
  87. void timer1_serve() interrupt 3
  88. {
  89.         TH1=(65536-100)/256;
  90.         TL1=(65536-100)%256;
  91.         n=n+1;
  92.         if(n==speed)
  93.         {
  94.         clk_left=~clk_left;
  95.         clk_right=~clk_right;
  96.         n=0;       
  97.         }

  98.                
  99.                
  100. }

  101. void move_right(uint speed_r,uchar cw,uchar en)
  102. {                                //speed_r速度控制变量 cw方向控制变量 en使能控制变量
  103.         speed=speed_r;         //speed数值与速度成反比  请结合实际情况进行调节,
  104.         if(cw==1)                 //但速度不能无限加快因为步进电机有速度上限
  105.         {                                 //而且速度加快是力矩会下降,容易导致丢步现象
  106.                 cw_right=1;         //所以实际应用当中应调节到速度可力矩比较合适的数值
  107.         }                                 //应考虑到电池电压,轮胎直径等因素
  108.         else
  109.         {
  110.                 cw_right=0;          //cw 控制电机正反转,1与0各代表一个方向
  111.         }
  112.         if(en==1)
  113.         {                                  //en 为使能位  1:能 0:不能
  114.                 en_right=1;
  115.         }
  116.         else
  117.         {
  118.                 en_right=0;
  119.         }
  120.        
  121. }
  122. void move_left(uint speed_l,uchar cw,uchar en)
  123. {                           //speed_l速度控制变量 cw方向控制变量 en使能控制变量
  124.         speed=speed_l;
  125.         if(cw==1)
  126.         {
  127.                 cw_left=1;
  128.         }
  129.         else
  130.         {
  131.                 cw_left=0;
  132.         }
  133.         if(en==1)
  134.         {
  135.                 en_left=1;
  136.         }
  137.         else
  138.         {
  139.                 en_left=0;
  140.         }
  141.        
  142. }
复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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