Намоточный станок по взрослому.

Вопросы программирования в системе Ардуино
Аватара пользователя
Kryz
Сообщения: 2
Зарегистрирован: 12 апр 2019, 21:28

Намоточный станок по взрослому.

Сообщение Kryz » 14 апр 2019, 21:43

Здравствовать всем!
Прогресс в моем хобби (создание ламповых усилителей) настоятельно потребовал создание серьезного намоточного станка. Ибо в схемотехнике по моей идеологии("Лампы и провода") в одном усилителе может доходить до 12 (двенадцати!) моточных изделий. Вручную такое мотать уже не позволяет ни зрение, ни спина.
По этому решил взяться за совершенно незнакомое для меня дело, как программирование. Так или иначе, но проект будет доведен до своего логического завершения. Факт! Желательно, конечно, освоить программирование ардуино самому, ибо зреют еще такие проекты как, модуль управления усилителем, и прецизионный омметр, для создания измерительных резисторов.
Лирики достаточно. Перехожу к сути проекта.

Технические требования к станку:


Софт:
1. Возможность намотать строго заданное количество витков.
2. Возможность задать диаметр провода. (Автоматический пересчет в шаг укладчика)
3. Возможность задавать скорость намотки.
4. Возможность изменять направление намотки.
5. Управление стартом и финишем намотки.
6. Возможность производить намотку вручную.
7. Возможность отматывать витки обратно автоматически.
8. Возможность позиционирования укладчика.
9. Отображение информации на дисплее в реальном времени.
10. Сигнализирование о конце операции.
11. Архиважно плавное ускорение старта, ибо провод тоньше 0,15 мм рвется от чиха.

Хард:
1. Возможность регулировать натяг.
2. Возможность мотать в два провода.
3. Возможность использовать катушки разных габаритов.


Реализация:

Софт:

1. Количество витков задается с клавиатуры путем нажатия цифровых клавиш + клавиша «А». Используется стандартная матрица дедушки Ляо 4х4. Отображение на экране мигающим курсором в процессе задания.
2. Диаметр провода задается с цифровой клавиатуры + клавиша «В».
3. Скорость намотки задается с цифровой клавиатурой + клавиша «С»
4. Направление намотки задается с клавиатуры клавишей «D».
5. Старт и внеплановая остановка намотки производится кликом кнопки. Финиш – автоматически. Число витков следующего ряда, равно как и направление намотки, снова задается с клавиатуры.
6. Намотка вручную производится с помощью энкодера только после остановки автоматической намотки.
7. Реверс намотки (отмотка) задается двойным кликом кнопки. Им же и отменяется. Старт-стоп при помощи кнопки. Длинным нажатием кнопки восстанавливается направление намотки и производится автоматическая домотка заданного изначально числа витков.
8. Позиционирование укладчика производится после длинного нажатия клавиши «#» аналогичными органами управления как и при простой намотке. При этом экран должен выдавать мигающую надпись «POSITIONING». Выход из режима позиционирования осуществляется повторным длинным нажатием клавиши «#».
9. В реальном времени на экране должно отображаться направление намотки и количество намотанных витков. Хорошо бы еще и «прогресс в %». Общая выводимая информация на экране:
9.1. Количество витков. (Coils=XXX)
9.2. Диаметр провода. (Wire =X,XX)
9.3. Скорость намотки. (Speed=XXXrpm)
9.4. Направление намотки. (Dir=>>>)
9.5. Количество намотанных витков ( In progress=xxx; xx%).
Все вмещается в матрицу 20х4 по два столбика.
Coils=XXX Wire=X,XX
Speed = XXX rpm
In progress: xxx=xx%
Direction =>>>>>>>
В перспективе хотелось бы использовать TFT экран и выводить на него больше информации. Например, хотелось бы еще задавать длину катушки и автоматически рассчитывать шаг укладчика до заполнения ширины заданным количеством витков.
10. Сигнализировать о конце операции будем звуком.
Вот такое мне видится техзадание.
Что касается "харда", то с этим проблем не вижу. Натяг будет дополнительным двигателем, подматывающим катушку в обратную сторону, а регулироваться магнитной муфтой.
Позиционирование начальной точки намотки будет производиться с помощью лазера.
Практически все комплектующие уже либо в наличии, либо в пути.
Настало время Ардуино.
Самурай без меча подобен самураю с мечом, но только без меча.


Аватара пользователя
Kryz
Сообщения: 2
Зарегистрирован: 12 апр 2019, 21:28

Re: Намоточный станок по взрослому.

Сообщение Kryz » 15 апр 2019, 08:04

В общем, перепробовав кучу готовых библиотек, понял, что ни одна из них не годится для моих задач. Все либо кривые, либо не дают достаточно возможностей, в связи с чем теряют свой смысл.
Так что, походу, придется создавать собственную библиотеку степпера, хоть я ни разу и не программист. Но дорогу осилит идущий.

Итак, ТЗ для новой библиотеки WindingMachineStepper.

В нее будут входить следующие компоненты:

1. stepsOfRow() // Количество шагов в ряде. Long. / Задается.
2. finalPos() // Конечная позиция. Long. / Высчитывается из stepsOfRow().
3. currentPos() // Текущая позиция. Long. / Высчитывается.
4. zeroPos() // Нулевая позиция. Boolean.
5. SetZeroPos() // Установить нулевую позицию. / Задается.
6. Acceleration() // Ускорение. Int (float?) / Задается.
7. Speed() // Скорость. Int / Задается.
8. Direction() // Направление. HIGH; LOW. / Задается.
9. Start() // Старт. Абсолютное. Int. / Задается.
10. StartTo() // Старт. Относительное. Long. / Задается.
11. Stop() // Мгновенная остановка. / Задается.
12. isRunning() // В движении ли двигатель. Boolean. / Высчитывается.
13. fullTurn() // Полный оборот. Int. Возвращает Boolean. / Высчитывается.
14. steps() // Количество шагов. Int. / Задается.

Применимость:

1. stepsOfRow() Необходима для задания числа витков в выполняемом ряду. Определяется для каждого ряда.
2. finalPos() Необходима для определения докуда домотать после нештатной остановки или реверса.
3. currentPos() Необходима для определения где произошла нештатная остановка.
4. zeroPos() Необходима для возврата при автоматическом реверсе.
5. SetZeroPos() Необходима для установки zeroPos().Определяется при позиционировании укладчика.
6. Acceleration() Необходима для задания ускорения. Высчитывается по экспоненциальной формуле до максимальной скорости. Если количества шагов для ее развития недостаточно, скорость становится такой, для какой достаточно данного количества шагов. Определяется для каждого ряда.
7. Speed() Необходима для задания скорости вращения двигателя. Определяется для каждого ряда.
8. Direction() // Направление. / Задается. Определяется для каждого движения.
9. Start() Необходима для запуска намотки ряда.
10. StartTo() Необходима для запуска после нештатной остановки.
11. Stop() Необходима для нештатной или штатной остановки.
12. isRunning() Пригодится для управления кнопкой или еще чем.
13. fullTurn() Необходима для синхронизации двигателей катушки и укладчика.
14. steps() Необходима для работы от энкодера.
Библиотека будет работать с прерываниями по таймеру аналогично StepDirDriver от Эдуарда.
Господа! Так как я программировании имею весьма слабые знания, очень прошу помочь советом с чего начать и как решать сию задачу. Урок № 9 читал.
Самурай без меча подобен самураю с мечом, но только без меча.


Вернуться в «Программирование Ардуино»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя