Автоламинатор на ШД
-
- Сообщения: 19
- Зарегистрирован: 08 дек 2017, 19:59
Автоламинатор на ШД
Доброго времени суток!
-
- Сообщения: 19
- Зарегистрирован: 08 дек 2017, 19:59
Re: Автоламинатор на ШД
Доброго времени суток, Эдуард !
Попался нам как-то на работе заказ : клеить по периметру двухсторонний скотч на узкое изделие (6-10х60-90 см). И всё бы ничего, да количество - 1/2/3/5 тысяч штук! Ну, напряглись всей командой, сделали. Потом еще раз заказ. Тут уже по длинной стороне сразу 2 полосы стали накатывать с помощью ламинатора - быстрее намного, но не более 1 тыс.шт., да это еще 2 человека нужно отнять от работы, ламинатор в простое, а есть и другие заказы, ну человеческий фактор присутствует в виде " не успел доставить лист"/" слишком рано всунул лист" и т.п.
Поучаствовав лично пару раз в этих забегах мне стало жалко ребят и я решился собрать автоматический/полуавтоматический мини ламиминатор. Но в виду отсутствия времени начал уже махать рукой на это дело, и тут - Ваши уроки! Это меня взбодрило, появились сдвиги в понимании программы, появилась надежда!
Однако, спустя время, я понял, что даже простые вещи гораздо сложнее в реализации, чем в голове! В общем больше, чем за неделю (сегодня таки), смог добиться корректной остановки ШД, но не более
. Хотя на данном этапе задача простая, вроде бы : ШД ждет сигнала от щелевого оптрона, ждет 0.5 сек., работает, пока оптрон неактивный, досылает N шагов, ждет нового листа. Пробовал метод с кнопкой, но , почему-то, результат или нулевой или обратный ожиданиям. Кстати именно с Вашей библиотекой ШД смог добиться стабильного останова ШД! Хотя есть и минусы : ШД не всегда может стартовать ( думаю не хватает тока на обмотках), поэтому нужно колхозить хотя бы подобие ускорения на старте, чтобы ШД не залип на старте.
Скетч мне выкладывать тут стыдно, если честно, но если у Вас есть интерес и время помочь и поучаствовать я буду крайне благодарен ибо есть желание на этом не останавливаться и творить дальше!
Из железа :
- UNO R3;
- CNC sheeld V3;
- DRV8825 ;
- японские ШД с непонятными параметрами, известно, что 200 шагов/оборот, 0.5 Ом/обмотку, 57/56х76мм габариты, производитель (предположительно) SHINANO KENSHI. Почему именно эти - их много и они есть.
Попался нам как-то на работе заказ : клеить по периметру двухсторонний скотч на узкое изделие (6-10х60-90 см). И всё бы ничего, да количество - 1/2/3/5 тысяч штук! Ну, напряглись всей командой, сделали. Потом еще раз заказ. Тут уже по длинной стороне сразу 2 полосы стали накатывать с помощью ламинатора - быстрее намного, но не более 1 тыс.шт., да это еще 2 человека нужно отнять от работы, ламинатор в простое, а есть и другие заказы, ну человеческий фактор присутствует в виде " не успел доставить лист"/" слишком рано всунул лист" и т.п.
Поучаствовав лично пару раз в этих забегах мне стало жалко ребят и я решился собрать автоматический/полуавтоматический мини ламиминатор. Но в виду отсутствия времени начал уже махать рукой на это дело, и тут - Ваши уроки! Это меня взбодрило, появились сдвиги в понимании программы, появилась надежда!

Однако, спустя время, я понял, что даже простые вещи гораздо сложнее в реализации, чем в голове! В общем больше, чем за неделю (сегодня таки), смог добиться корректной остановки ШД, но не более

Скетч мне выкладывать тут стыдно, если честно, но если у Вас есть интерес и время помочь и поучаствовать я буду крайне благодарен ибо есть желание на этом не останавливаться и творить дальше!
Из железа :
- UNO R3;
- CNC sheeld V3;
- DRV8825 ;
- японские ШД с непонятными параметрами, известно, что 200 шагов/оборот, 0.5 Ом/обмотку, 57/56х76мм габариты, производитель (предположительно) SHINANO KENSHI. Почему именно эти - их много и они есть.
Re: Автоламинатор на ШД
Здравствуйте!
Помогу. Спрашивайте, в чем конкретно проблема. Может вам поможет эта тема http://mypractic-forum.ru/viewtopic.php?t=62. Мне кажется, там похожая задача. По крайней мере можно структуру программы оттуда взять.
Помогу. Спрашивайте, в чем конкретно проблема. Может вам поможет эта тема http://mypractic-forum.ru/viewtopic.php?t=62. Мне кажется, там похожая задача. По крайней мере можно структуру программы оттуда взять.
-
- Сообщения: 19
- Зарегистрирован: 08 дек 2017, 19:59
Re: Автоламинатор на ШД
Там сенсор на АЦП, я на нем проверял оптрон( уровни сигнала, после чего переставил на цифровой пин. Так-то, вроде, похоже, но не совсем та логика работы. Нужно подумать, как адаптировать для пробы. Усреднение, мне кажется тут по вред будет - нужно четко отработать по датчику, чтобы не было произвольных промежутков, между листами.
-
- Сообщения: 19
- Зарегистрирован: 08 дек 2017, 19:59
Re: Автоламинатор на ШД
Вобщем пока так получилось. Но не смог прикрутить повышение скорости, только 2 ступени и работает как-то странно.
#include <StepDirDriverL.h>
#include <MsTimer2.h>
//int state;
int lastState;
bool state;
int c = 0;
int volatile count;
int dir_pin = 6;
int step_pin = 3 ;
int dataPin = 12;
int enablePin = 8;
StepDirDriverL stepperq(3, 6, 8);
void setup() {
MsTimer2::set(1, timerInt);
MsTimer2::start();
stepperq.setMode(0, false);
digitalWrite(enablePin, HIGH);
Serial.begin(115200);
stepperq.setDivider(4);
pinMode(dataPin, INPUT_PULLUP);
}
void loop () {
int sensor = 0;
sensor = digitalRead(dataPin);
Serial.print("Data:");
Serial.print(sensor);
Serial.print("\n");
// Serial.print("State:");
// Serial.print(state);
// Serial.print("\n");
state = false;
if (sensor == 1) {
state = true;
if (state == true) {
//stepperq.setDivider(4);
stepperq.step(-sensor * 10);
stepperq.setDivider(2);
Serial.println(stepperq.readSteps());
lastState == true;
}
}
if (sensor == 0) {
if (lastState == true) {
stepperq.step(-75);
Serial.println("movingCounter");
lastState == false;
Serial.print("LastState:");
Serial.print(lastState);
Serial.print("\n");
}
}
lastState = state;
}
void timerInt () {
// Serial.println(count);
stepperq.control();
count++;
}
-
- Сообщения: 19
- Зарегистрирован: 08 дек 2017, 19:59
Re: Автоламинатор на ШД
Видео работы
https://youtu.be/1B402KK-GYE
https://youtu.be/1B402KK-GYE
Re: Автоламинатор на ШД
Здравствуйте!
Как-то все запутано. Вы четко выделили режимы. Создайте для них скелет и заполняйте.
Например, вот такая структура.
Программа ходит в основном цикле по одному из программных блоков. Какой блок определяет переменная mode. Для перехода в другой блок достаточно изменить эту переменную. Я выделили следующие режимы. Вы можете добавить свои.
Теперь надо заполнить режимы. Примерно это выглядит так. Я мог ошибиться. Вы можете заполнять блоки по очереди и проверять работу части программы. Все блоки заполните и проверите - будет рабочая программа. Если надо, отладочные данные на компьютер отсылайте в момент перехода на новый блок.
Поймите сам принцип, все будет очень просто. Выделяете устойчивый режим и создаете для него блок. Можете посмотреть урок 17. Там подробно рассказывается о построении программ по подобной структуре.
Как-то все запутано. Вы четко выделили режимы. Создайте для них скелет и заполняйте.
Например, вот такая структура.
Код: Выделить всё
byte mode=0; // режим
void setup() {
}
void loop() {
if(mode == 0) {
// ожидание сигнала от датчика
}
else if(mode == 1) {
// пауза 0,5 сек
}
else if(mode == 2) {
// вращение двигателя с начальной скоростью
}
else if(mode == 3) {
// вращение двигателя, ожидания сигнала от датчика
}
else if(mode == 4) {
// ожидание окончания дополнительных шагов
}
else mode=0;
}
Программа ходит в основном цикле по одному из программных блоков. Какой блок определяет переменная mode. Для перехода в другой блок достаточно изменить эту переменную. Я выделили следующие режимы. Вы можете добавить свои.
Теперь надо заполнить режимы. Примерно это выглядит так. Я мог ошибиться. Вы можете заполнять блоки по очереди и проверять работу части программы. Все блоки заполните и проверите - будет рабочая программа. Если надо, отладочные данные на компьютер отсылайте в момент перехода на новый блок.
Код: Выделить всё
#include <TimerOne.h>
#include <StepDirDriverL.h>
unsigned int count;
int dir_pin = 6;
int step_pin = 3 ;
int dataPin = 12;
int enablePin = 8;
StepDirDriverL stepperq(3, 6, 8);
byte mode=0; // режим
void setup() {
Timer1.initialize(500); // инициализация таймера 1, период 500 мкс
Timer1.attachInterrupt(timerInt, 500); // задаем обработчик прерываний}
stepperq.setMode(0, false);
digitalWrite(enablePin, HIGH);
Serial.begin(115200);
stepperq.setDivider(4);
pinMode(dataPin, INPUT_PULLUP);
}
void loop() {
if(mode == 0) {
//--------------------------------------- ожидание сигнала от датчика
if(digitalRead(dataPin) == HIGH) {
// переход на режим 1
count=0;
mode=1;
}
}
else if(mode == 1) {
//--------------------------------------- пауза 0,5 сек
if(count > 1000) {
// прошли 0,5 сек, переход на режим 2
stepperq.setDivider(10); // начальная скорость вращения
stepperq.step(-20); // число шагов начальной скорости
mode=2;
}
}
else if(mode == 2) {
//--------------------------------------- вращение двигателя с начальной скоростью
if(stepperq.readSteps() == 0) {
// двигатель остановился, переход на режим 3
stepperq.setDivider(5); // скорость вращения
stepperq.step(-30000); // постоянное вращение
mode=3;
}
}
else if(mode == 3) {
//--------------------------------------- вращение двигателя, ожидания сигнала от датчика
stepperq.step(-30000); // постоянное вращение
if(digitalRead(dataPin) == LOW) {
// переход на режим 4
stepperq.step(-100); // дополнительные шаги
count=0;
mode=4;
}
}
else if(mode == 4) {
//--------------------------------------- ожидание окончания дополнительных шагов
if(stepperq.readSteps() == 0) {
// двигатель остановился, переход на режим 0
mode=0;
}
}
else mode=0;
}
void timerInt () {
stepperq.control();
count++;
}
Поймите сам принцип, все будет очень просто. Выделяете устойчивый режим и создаете для него блок. Можете посмотреть урок 17. Там подробно рассказывается о построении программ по подобной структуре.
-
- Сообщения: 19
- Зарегистрирован: 08 дек 2017, 19:59
Re: Автоламинатор на ШД
Ну, код да, на букву Г, согласен, но там многое для отладки, чтобы видеть, что происходит в цикле. Да и не я писал, я настаивал на алгоритмах обработки и Ваших библиотеках ( изначально другие не подошли - не стабильная точка остановки, долгий разгон/торможение). И этот скетч пока только делает часть алгоритма, хотя в ручном режиме уже 1 человек может делать эту работу , а не 2 и ламинатор ( большой) в работе.
В Вашей библиотеки странность - скорость есть только после установки 10 шагов, и не сбрасывается в ноль. Если меньше 10 шагов за цикл, то мотор работает медленно и рывками. Может это из-за работы с ком портом?
В Вашей библиотеки странность - скорость есть только после установки 10 шагов, и не сбрасывается в ноль. Если меньше 10 шагов за цикл, то мотор работает медленно и рывками. Может это из-за работы с ком портом?
Re: Автоламинатор на ШД
Не знаю. Я проверял тщательно. В уроке 35 есть даже программа верхнего уровня (на компьютере) для проверки библиотеки.
-
- Сообщения: 19
- Зарегистрирован: 08 дек 2017, 19:59
Re: Автоламинатор на ШД
Скорее всего, как я пока понял, останов нужно инициировать в прерывании, иначе 10 шагов обрабатывает до конца. Непонятно, как разгонять - ступень работает только одна почему-то. А в Вашей программе по управлению мотором через АТ команды. Смог выжать порядка 6к импульсов, что не фонтан, но скорость хорошая.
-
- Сообщения: 19
- Зарегистрирован: 08 дек 2017, 19:59
Re: Автоламинатор на ШД
До 35 урока еще не добрался, к сожалению((( у меня мало времени очень, а Ваша школа, назовем так)))), этому программеру неизвестна. Поэтому мои предложения работы алгоритмов отработки задач обрабатываются после часа-другого неудач))) но потом работает)) .
-
- Сообщения: 19
- Зарегистрирован: 08 дек 2017, 19:59
Re: Автоламинатор на ШД
Теперь вот думаю ехать завтра на работу проверить Ваш код))
Re: Автоламинатор на ШД
Этот код для примера. Значения шагов, скоростей взяты от фонаря. Надо просмотреть каждый блок и подкорректировать.
-
- Сообщения: 19
- Зарегистрирован: 08 дек 2017, 19:59
Re: Автоламинатор на ШД
Значения и скорости неважны, важна четкая последовательность. Тем более, что это так, набросок - дальше 2 потока , автоподача, разрез деталей друг от друга. Промотрел Ваш код - элегантно, буду пилить так, даже, если его код будет работать нужно пилить свой.
-
- Сообщения: 19
- Зарегистрирован: 08 дек 2017, 19:59
Re: Автоламинатор на ШД
Залил Ваш код сегодня ( отобрали под другой проект ) заработал сразу! Потом начал пробовать плавно ускорять ШД. Тут не получилось. Хотя, как мне сейчас кажется, что нужно было добавить еще один блок режимов и еще пару счётчиков и всё получится))) . кстати вот видео работы : https://youtu.be/KF48Wfv-uvk
-
- Сообщения: 19
- Зарегистрирован: 08 дек 2017, 19:59
Re: Автоламинатор на ШД
С наступающим новым годом! как уже показал - Ваш код работает отлично и легко настраивать! буду играться с ним в январе. Огромное СПАСИБО Вам!
Вернуться в «Шаговые двигатели и драйверы»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей