glmyc 发表于 2016-6-2 12:37:30

用6个TB6560及1个UNO同时驱动6台工业步进电机

//用了大连好人的带加速库的步进电机驱动库,表示感谢。大家可以学习检索下载
//TB6560设置:SW1:ON,SW2:OFF,SW3:OFF,DIP1:OFF,DIP2:OFF,DIP3:ON,DIP4:ON,DIP5:OFF,DIP6:ON
#include <EasyStepper.h>//使用大连好人的步进电机驱动库
#define STEP1_PIN 2//设定步进电机1速度(接TB6560"CLK+","CLK-"共地)在UNO的2脚
#define DIR1_PIN 3//设定步进电机1方向(接TB6560"CW+","CW-"共地)在3脚
#define STEP2_PIN 4//设定步进电机2速度在UNO的4脚
#define DIR2_PIN 5//设定步进电机2方向在5脚
#define STEP3_PIN 6//设定步进电机3速度在UNO的6脚
#define DIR3_PIN 7//设定步进电机3方向在7脚
#define STEP4_PIN 8//设定步进电机4速度在UNO的8脚
#define DIR4_PIN 9//设定步进电机4方向在9脚
#define STEP5_PIN 10//设定步进电机5速度在UNO的10脚
#define DIR5_PIN 11//设定步进电机5方向在11脚
#define STEP6_PIN 12//设定步进电机6速度在UNO的12脚
#define DIR6_PIN 13//设定步进电机6方向在13脚
#define DIR_PIN_INVERTED true
#define EN_PIN_INVERTED true

int EN_PIN = 0;//所有的TB6560的"EN+"和"EN-"共地,就是使能接地,步进电机连接不脱机

EasyStepper stepper1(STEP1_PIN, DIR1_PIN, EN_PIN, DIR_PIN_INVERTED, EN_PIN_INVERTED);
EasyStepper stepper2(STEP2_PIN, DIR2_PIN, EN_PIN, DIR_PIN_INVERTED, EN_PIN_INVERTED);
EasyStepper stepper3(STEP3_PIN, DIR3_PIN, EN_PIN, DIR_PIN_INVERTED, EN_PIN_INVERTED);
EasyStepper stepper4(STEP4_PIN, DIR4_PIN, EN_PIN, DIR_PIN_INVERTED, EN_PIN_INVERTED);
EasyStepper stepper5(STEP5_PIN, DIR5_PIN, EN_PIN, DIR_PIN_INVERTED, EN_PIN_INVERTED);
EasyStepper stepper6(STEP6_PIN, DIR6_PIN, EN_PIN, DIR_PIN_INVERTED, EN_PIN_INVERTED);

void setup()
{
Serial.begin(9600);
stepper1.debugMode(false);
stepper1.startup();
stepper2.debugMode(false);
stepper2.startup();
stepper3.debugMode(false);
stepper3.startup();
stepper4.debugMode(false);
stepper4.startup();
stepper5.debugMode(false);
stepper5.startup();
stepper6.debugMode(false);
stepper6.startup();
}

void loop()
{
rtt(1, 12000, 10000, 0); //第1台步进电机按12000的速度顺时针走5000步加速度0
rtt(2, 11000, -9000, 1); //第2台步进电机按11000的速度逆时针走9000步加速度1
rtt(3, 10000, 8000, 2);//第3台步进电机按10000的速度顺时针走8000步加速度2
rtt(4, 9000, -7000, 3);//第4台步进电机按 9000的速度逆时针走7000步加速度3
rtt(5, 8000, 6000, 4);   //第5台步进电机按 8000的速度顺时针走6000步加速度4
rtt(6, 7000, -5000, 5);//第6台步进电机按 7000的速度逆时针走5000步加速度5
}

void rtt(int bh, int sd, int bs, int jsd)
{
switch (bh)
{
    case 1:
      stepper1.rotate(sd, bs, jsd);
      stepper1.run();
      while (!stepper1.isDone()) {
      stepper1.run();
      }
      break;
    case 2:
      stepper2.rotate(sd, bs, jsd);
      stepper2.run();
      while (!stepper2.isDone()) {
      stepper2.run();
      }
      break;
    case 3:
      stepper3.rotate(sd, bs, jsd);
      stepper3.run();
      while (!stepper3.isDone()) {
      stepper3.run();
      }
      break;
    case 4:
      stepper4.rotate(sd, bs, jsd);
      stepper4.run();
      while (!stepper4.isDone()) {
      stepper4.run();
      }
      break;
    case 5:
      stepper5.rotate(sd, bs, jsd);
      stepper5.run();
      while (!stepper5.isDone()) {
      stepper5.run();
      }
      break;
    case 6:
      stepper6.rotate(sd, bs, jsd);
      stepper6.run();
      while (!stepper6.isDone()) {
      stepper6.run();
      }
      break;
    default:
      break;
}
}

wwwymq 发表于 2016-6-2 17:48:57

6个电机同时运动还是顺序动作?

哈哈哈123 发表于 2016-7-26 16:36:26

楼主,你这个程序不能同时工作啊,怎么改可以同时工作?小白请教,万分感谢
页: [1]
查看完整版本: 用6个TB6560及1个UNO同时驱动6台工业步进电机