Приветствую всех заглянувших сюда!
Хотел бы поделиться проектом полноценного намоточного станка с автоматической укладкой провода.
Сначала небольшая предыстория. Этот проект создавался по просьбе моего хорошего знакомого Яна (здесь он присутствует под соответствующим ником). Он нашёл и повторил вот
эту конструкцию, но, как оказалось, работает она очень плохо. Получить нужный шаг намотки затруднительно, реальное перемещение укладчика за один оборот вала с каркасом не соответствует установленному значению. Также в этой конструкции для экономии выводов использовано подключение кнопок к АЦП, и из-за недоработанной программной реализации опроса кнопок периодически возникают глюки - срабатывает не та кнопка, которая должна. И эти проблемы появились у многих, кто повторил конструкцию, как следует из
темы с обсуждением.
Поскольку механика намоточного станка была уже готова, проект нужно было завершить. Я посмотрел оригинальную программу для Ардуино, и понял, что проще сделать всё с нуля, а не пытаться исправить имеющееся.
Механическая часть содержит два шаговых двигателя: один вращает вал, на который крепится каркас наматываемой катушки, а второй посредством ходового винта приводит в движение укладчик провода - механизм, направляющий провод в нужную точку каркаса. Управляет этими двумя двигателями микроконтроллер ATmega8A. Схема устройства:
Шаговые двигатели управляются при помощи готовых китайских платок драйверов (в данном случае использованы DRV8825, но можно поставить и любые другие). Драйвер U3 управляет двигателем намотки, а U2 - двигателем укладчика. Дополнительно предусмотрена возможность подключения энкодера, установленного на валу двигателя намотки (разъём U7), однако, в настоящий момент программной поддержки этого узла нет.
Органы управления устройством остались такие же, как и в оригинальной конструкции: энкодер (с кнопкой) и ещё пять кнопок. Информация выводится на индикатор 2004 (20 символов, 4 строки) с контроллером, совместимым с HD44780.
Для установки всех параметров намотки используется энкодер, реализовано простейшее меню. Сначала поворотом энкодера выбирается требуемый параметр (пункт меню). Курсор в виде символа ">" указывает на выбранный пункт меню.
Для входа в режим редактирования параметра нужно нажать кнопку энкодера (назовём её кнопкой
OK). при этом вокруг значения параметра появятся символы ">" и "<". Далее вращением энкодера устанавливается необходимое значение. При нажатии кнопки
OK устройство снова переходит в режим выбора параметра. Числовые параметры с большим числом разрядов устанавливаются поразрядно. Переход к следующему разряду осуществляется кнопкой
OK. Изменяемый в данный момент разряд разряд мигает, при повороте энкодера мигание временно приостанавливается.
Намоточный станок имеет два режима работы: автоматический (
Auto) и ручной (
Manual). Режим выбирается в пункте меню Mode.
В автоматическом режиме устанавливаются следующие параметры:
1.
Turns - число витков;
2.
Spacing - расстояние между витками, т.е. шаг намотки (величина смещения укладчика за один оборот катушки), мм;
3.
Length - длина намотки, мм;
4.
Turns/layer - число витков в слое;
5.
Speed - скорость намотки, об./с;
6.
Direction - начальное направление движения укладчика (на первом слое);
7.
Pause - автоматическая приостановка намотки в конце каждого слоя (например, для прокладки межслойной изоляции).
Для запуска намотки нужно нажать и удерживать в течение одной секунды кнопку
OK. Намотка производится послойно с изменением направления между слоями. В конце каждого слоя станок останавливается, если в пункте меню
Pause выбрано
On. Также поставить намотку на паузу можно в любой момент, нажав кнопку
OK. Для возобновления процесса намотки нужно также нажать
OK. Текущее состояние отображается в правом верхнем углу индикатора:
Ready - устройство готово к запуску;
Running - намотка запущена;
Paused - намотка приостановлена;
Done - намотка завершена.
В процессе намотки, а также в режиме паузы, можно изменять скорость вращением энкодера. Кнопка
Stop мгновенно останавливает намотку, устройство переходит в меню.
Наличие в меню одновременно параметров
Length и
Turns/layer требует пояснения. Очевидно, эти величины связаны между собой. А именно,
<Length> = (<Turns/layer> + 1) * <Spacing>.
Единица в формуле появилась из-за того, что реальная длина намотки больше величины смещения укладчика на диаметр провода. Например, один виток при намотке "виток к витку" имеет длину, равную двум диаметрам провода.
При изменении одного из параметров
Length и
Turns/layer второй меняется автоматически. В случае, если изменяется длина намотки, выбирается максимально возможное число витков, умещающихся на этой длине. Число витков в слое меняется от 1 до общего числа витков, а длина намотки - в диапазоне от удвоенного шага до длины, соответствующей общему числу витков. Таким образом, при изменении длины число витков будет также лежать в пределах от 1 до общего числа витков.
Немного сложнее обстоит дело, если изменяется шаг намотки (
Spacing). В этом случае длина намотки остаётся неизменной, а число витков в слое пересчитывается (и опять берётся максимально возможное значение). Если полученное число витков превышает общее число витков, длина намотки уменьшается до (<Turns> + 1) * <Spacing>, а если получено число 0, то длина увеличивается до 2 * <Spacing>. Число витков в этих случаях корректируется соответствующим образом.
Кнопки
Left,
Right,
Up,
Down образуют подобие джойстика. Они позволяют вручную выставить укладчик и повернуть катушку. Работают они в том случае, если не запущена намотка (слово
Ready в левом верхнем углу). При нажатии на любую из них на индикатор выводятся текущие координаты (об этом я расскажу подробнее в описание режима
Manual). Если нажата одна из кнопок
Up и
Down (т.е. производится поворот катушки), выводится также текущее значение скорости вращения, которую можно менять прямо в процессе при помощи энкодера.
Режим
Manual имеет следующие отличия от режима
Auto:
1. Управление шаговыми двигателями производится только при помощи кнопок.
2. Сигнал ENABLE с драйверов ШД не снимается после остановки двигателей, т.е. реализован режим удержания.
3. Текущие координаты отображаются постоянно, а не только при нажатии на кнопки перемещения.
Меню в режиме
Manual состоит из двух пунктов:
1.
Speed - аналогичен такому же пункту в режиме
Auto;
2.
Reset position - обнуление текущих координат.
Координаты представляют собой два числа:
T (Turn) и
G (Guide). Первое соответствует числу витков (вернее, числу оборотов), второе - положению укладчика (в мм). Координаты могут быть как положительными, так и отрицательными.
Ручной режим имеет несколько применений. Во-первых, его можно использовать для намотки с укладкой провода вручную. Режим удержания ШД исключает проворот двигателя намотки из-за натяжения провода. Во-вторых, можно наматывать катушки со сложной конфигурацией обмоток (переменный шаг или ещё что-то подобное). В-третьих, поскольку координаты постоянно видны на индикаторе, легко можно осуществить начальное позиционирование укладчика. Например, если нужно намотать на одну катушку несколько обмоток, то в ручном режиме можно до намотки первой обмотки обнулить координаты у левого края каркаса, потом выполнить автоматическую намотку в один слой, а затем снова в режиме
Manual вернуть укладчик от правого края каркаса в положение, близкое к нулю. Возможно, есть и ещё какие-то способы использования этого режима. Двигателями можно управлять как угодно, поэтому удастся реализовать любую идею.
Поскольку у желающих повторить этот проект могут быть различные двигатели, ходовой винт и прочее, я выкладываю исходники, чтобы любой желающий смог подправить их под свою конструкцию. Программа написана на языке Си. В качестве среды разработки использовался Code::Blocks, компилятор - avr-gcc версии 8.3.0. Теоретически, можно обойтись без Code::Blocks, создав Makefile, но я этого пока что не делал.
В файлах pins.h и lcdlibrary/lcd_definitions.h можно переназначить выводы МК. Во втором из них описывается подключение индикатора, а в первом - всего остального. При переназначении выводов есть ряд ограничений:
1. Неиспользуемый пока что энкодер на валу двигателя намотки должен подключаться только к PD2 и PD3, т.е. его подключение менять нельзя.
2. Энкодер для настройки параметров нужно подключать к двум соседним битам одного порта (PB4 и PB5, PD3 и PD2 и прочее). "Положительным" направлением вращения считается то, в котором контакт, подключенный к цепи ENCODER_A, замыкается первым (раньше).
3. Для возможности внутрисхемного программирования МК к выводам программирования SCK, MISO, MOSI (PB5, PB6, PB7) не рекомендуется подключать выводы D4..D7 индикатора, а также входы ENABLE и STEP драйверов ШД.
Параметры механики задаются в файле winding.h. Там задаётся число шагов на 1 оборот каждого из шаговых двигателей, дробление шага (микрошаг, установленный на драйвере), шаг резьбы ходового винта (в случае многозаходной резьбы - ход резьбы). Также задаётся ускорение двигателей (скорость разгона) в об./с^2 (rps/sec).
В файле winding.h есть параметр MOTOR_STEP_DIVIDER, используемый для оптимизации вычислений. Его следует рассчитать вручную как наибольший общий делитель (НОД) значений TURN_MOTOR_MICROSTEPS_PER_REVOLUTION и GUIDE_MOTOR_MICROSTEPS_PER_REVOLUTION (это число микрошагов на один оборот двигателей). В простейшем случае, если двигатели одинаковы, это число равно произведению числа шагов на дробление шага (т.е. все три значения MOTOR_STEP_DIVIDER, TURN_MOTOR_MICROSTEPS_PER_REVOLUTION и GUIDE_MOTOR_MICROSTEPS_PER_REVOLUTION равны друг другу).
В файле main.c задаются такие параметры, как минимальное и максимальное число витков, минимальный и максимальный шаг намотки, минимальная и максимальная скорость, а также скорость перемещения укладчика при нажатии кнопок
Left и
Right.
Таким образом, может потребоваться отредактировать четыре файла: pins.h, lcdlibrary/lcd_definitions.h, winding.h и main.c.
Напоследок, картинка с фьюзами МК ("галочка" - запрограммировано, т.е. лог. 0):
В архиве находятся: схема в DipTrace, PNG и PDF, проект Proteus для ознакомления с работой устройства, прошивка с исходниками и проект Code::Blocks, картинка с фьюзами.
Прочую полезную для повторения данной конструкции информацию (печатную плату, конструкцию механической части, модели для 3D-печати деталей и т.д.) в скором времени выложит Ян.
Последний раз редактировалось
*Trigger* Вс янв 24, 2021 16:31:22, всего редактировалось 2 раз(а).