Тема: Нагрев шагового двигателя с 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();
}