1

Тема: Нагрев шагового двигателя с Motor shield

Эта проблемма серьезно мешает процессу моего творческого проекта. Пытаюсь сделать XY платформу которая бы функционировала длительное время до 10 часов. Вот есть видео того что пока получилось
https://vimeo.com/30379866
У меня через serial посылаются значения положения шаговиков. Использую библеотеки AccelStepper и AFMotor.
Читал что типа ничего не сделаеш такова особенность шаговиков. Но вот в библеотеке AccelStepper  есть комманда disableOutputs (). Поидее то что надо -  в момент остановки шаговика выключалось бы напряжение на него и он бы остывал. Вот только в моем случае не работает. Незнаю куда вписать эту комманду. В коде пока ее нет и как вписать понимание есть но вот если просто даже я впишу stepper1.disableOutputs () в конце лупа  - неработает. Мотор все равно продолжает ездить по коммандам.

Такой код ардуино:

#include <AccelStepper.h>
#include <AFMotor.h>

AF_Stepper motor1(96, 1);
AF_Stepper motor2(96, 2);
String inString = "";    // string to hold input
int currentColor = 0;
int m1pos, m1speed, m1accel, m2pos, m2speed, m2accel, blue = 0;

// wrappers for the first motor!
void forwardstep1() { 
  motor1.onestep(FORWARD, SINGLE);
}
void backwardstep1() { 
  motor1.onestep(BACKWARD, SINGLE);
}
// wrappers for the second motor!
void forwardstep2() { 
  motor2.onestep(FORWARD, SINGLE);
}
void backwardstep2() { 
  motor2.onestep(BACKWARD, SINGLE);
}

// Motor shield has two motor ports, now we'll wrap them in an AccelStepper object
AccelStepper stepper1(forwardstep1, backwardstep1); // use functions to step
AccelStepper stepper2(forwardstep2, backwardstep2);

void setup() {
   
//    stepper1.moveTo(0);
//    stepper1.setMaxSpeed(100);
//    stepper1.setAcceleration(100);
   
//    stepper2.setMaxSpeed(300.0);
//    stepper2.setAcceleration(100.0);
//   stepper2.moveTo(0);

  Serial.begin(9600);
}

void loop() {
  int inChar;
  if (Serial.available() > 0) {
    inChar = Serial.read();
  }

  if (isDigit(inChar)) {
    inString += (char)inChar;
  }

  if (inChar == ',') {
    switch (currentColor) {
    case 0:    // 0 = red
      m1pos = inString.toInt();
      // clear the string for new input:
      inString = "";
      break;
    case 1:    // 1 = green:
      m1speed = inString.toInt();
      // clear the string for new input:
      inString = "";
      break;
    case 2:   
      m1accel = inString.toInt();
      inString = "";
      break;
    case 3:   
      m2pos = inString.toInt();
      inString = "";
      break;
    case 4:   
      m2speed = inString.toInt();
      inString = "";
      break;
    case 5:   
      m2accel = inString.toInt();
      inString = "";
      break;
    }
    currentColor++;
  }
  if (inChar == '\n') {
    blue = inString.toInt();
    inString = "";
     
stepper1.moveTo(m1pos); 
stepper1.setMaxSpeed(m1speed+10);
stepper1.setAcceleration(m1accel+10);
stepper2.moveTo(m2pos); 
stepper2.setMaxSpeed(m2speed+10);
stepper2.setAcceleration(m2accel+10);


currentColor = 0;
    }
   
    stepper1.run();
    stepper2.run();
   
}

2

Re: Нагрев шагового двигателя с Motor shield

Все разобрался. Теперь не будут греться шаговики. Просто в данном случае коммада stepper1.disableOutputs () не работает вместо нее надо motor1.release();. Так как управление идет через AFMotor.h.