Здравствуйте!
Задача следующая…
Делаю моточный станок для намотки катушек трансформатора. Два ШД : 1 - моточный, 2 - подающий. С первым более менее понятно. На данный момент не могу сообразить, как правильно определить текущее положение ШД1. А точнее, ШД1 должен намотать один виток проволоки, а ШД2 должен сдвинуть каретку на толщину проволоки. и т.д.
Почитав форумы, подходящее решение предлагает библиотека AccelStepper.h. В ней есть функция currentPosition(). Но я не знаю как ее воплотить в реальность.
Использую Arduino UNO, драйверы DRV8825, ШД - NEMA17
Прошу помощи!
#include <AccelStepper.h> // библиотека для работы ШД
AccelStepper STP1(1,2,3); // 2-PIN STEP, 3-PIN DIR
AccelStepper STP2(1,5,6); // 5-PIN STEP, 6-PIN DIR
#define frequency 2250 // пауза между импульсами
// назначаем ПИНы
//ПИНы ШД1 Моточный
#define STEP1_PIN 2
#define DIR1_PIN 3
#define ENABLE1_PIN 4
// ПИНы ШД2 Укладчик
#define STEP2_PIN 5
#define DIR2_PIN 6
#define ENABLE2_PIN 7
//ПИНы кнопок
#define start_button A0 //Кнопка СТАРТ
#define pause_button A1 //Кнопка ПАУЗА
#define stop_button A2 //Кнопка СТОП
// ПИН Концевика Определяет начальное положение укладчика ШД2
#define limit_button A3
//ПИНы Светодиодов
#define start_LED 11 //Светодиод СТАРТ Мигает - Готов к работе, Горит - Выполняется намотка
#define pause_LED 12 //Светодиод ПАУЗА
#define stop_LED 13 //Светодиод ВЫПОЛНЕНО
// Переменные
int flag = 0;
int w = 755; // Количество витков в одной секции
int d = 0.2; // Диаметр проволки в миллиметрах
int l = 40; // Длина катушки в миллиметрах
int step2 = 8; // Шаг перемещения подающего вала в миллиметрах за один оборот подающего двигателя ШД2
int w1 = l/d*0.9; // Количество витков в одном слое. Коэффициент заполнения - 0,9
int st2 = 360/d*step2; // Количество шагов подающего двигателя ШД2 за один оборот моточного ШД1
// 360 - кол-во шагов моточного ШД1 с учетом передаточного числа ременной передачи 20/36 = 1.8
int st1 = w1*st2;
void setup() {
STP1.setMaxSpeed(400); //Максимальная Скорость моточного двигателя ШД1
STP2.setMaxSpeed(400); //Максимальная Скорость подающего двигателя ШД2
STP1.setAcceleration(20); //Ускорение моточного двигателя ШД1
//управление портов для ШД1
pinMode(STEP1_PIN, OUTPUT);
pinMode(DIR1_PIN, OUTPUT);
pinMode(ENABLE1_PIN, OUTPUT);
//управление портов для ШД2
pinMode(STEP2_PIN, OUTPUT);
pinMode(DIR2_PIN, OUTPUT);
pinMode(ENABLE2_PIN, OUTPUT);
//управление портов для Кнопок
pinMode(start_button, INPUT);
pinMode(pause_button, INPUT);
pinMode(stop_button, INPUT);
//управление портом Концевика
pinMode(limit_button, INPUT);
//управление портов для Светодиодов
pinMode(start_LED, OUTPUT);
pinMode(pause_LED, OUTPUT);
pinMode(stop_LED, OUTPUT);
digitalWrite(ENABLE1_PIN , HIGH); //Выключаем ШД1, чтобы не грелся
digitalWrite(ENABLE2_PIN , HIGH); //Выключаем ШД2, чтобы не грелся
}
void loop() {
if (start_button == HIGH) { //Если нажата кнопка СТАРТ, то
flag = 1;
digitalWrite(start_LED, HIGH); //Светодиод СТАРТ светится
// Возвращаем подающую каретку ШД2 в начальную позицию
if (limit_button == LOW) { // Если концевик НЕ нажат, то
digitalWrite(ENABLE2_PIN , LOW); //Включаем мотор ШД2
digitalWrite(DIR2_PIN , LOW); //Задаем направление вращения против часовой стрелки ШД2 (возвращаем каретку в начало)
STP2.setSpeed(200); //Устанавливаем скорость подающего двигателя ШД2
STP2.setAcceleration(50); //Ускорение подающего двигателя ШД2
STP2.runSpeed();
}
else
digitalWrite(ENABLE2_PIN , HIGH); // Выключаем мотор ШД2
digitalWrite(start_LED, HIGH); // Светодиод СТАРТ мигает
delay(500);
//Когда подающая каретка заняла начальное положение, начинаем процесс намотки
if (pause_button == HIGH) { //Если нажата кнопка RUN/PAUSE, то
digitalWrite(start_LED, LOW); //Выключаем светодиод СТАРТ
digitalWrite(pause_LED, HIGH); //Включаем светодиод RUN/PAUSE
//Вращение моточного двигателя ШД1
digitalWrite(ENABLE1_PIN, LOW); //Включаем моточный двигатель ШД1
digitalWrite(DIR1_PIN, LOW); //Задаем направление вращения моточного ШД1 против часовой стрелки
STP1.moveTo(-st1); //Задаем число шагов ШД1 (позиция - число витков одного слоя)
STP1.run(); //Начинает вращение моточный ШД1
//Вращение подающего двигателя ШД2
}
}
}