Здравствуйте уважаемые. Возникла необходимость в сверлильном станочке для сверления плат (после аварии плохо работает правая рука). Понимаю что проще ЧПУ станок. Но пока нет ни денег ни возможностей (может и будет но гораздо позже). Начал с Логики работы такого станка. Далее начал писать код на arduino. На данный момент реализовано: 1. Подсветка PWM на DF6113. 2. управление шаговым двигателем Nema17 драйвером TMC2209 и выставление через меню микрошага 1-32. 3. PWM выход для управления скоростью DC мотора. 4 Частично написано меню для LCD 2004 c редактированием и сохранением во внешней EEPPROM параметров.
В чём суть: Я уже запутался в логике:) Поругайте и предложите свой вариант. Самое главное подскажите как реализовать драйвер для 775 мотора с управлением от STM32
Обновлённая логика 1. Аппаратная часть
STM32F103C8T6 (Blue Pill)
TMC2209 в режиме Step/Dir, управление микрошагами по MS1/MS2
ШВП 1204 (4 мм хода за оборот)
NEMA17, 200 шагов/оборот
LCD 2004 + I2C
Поворотный энкодер с кнопкой
Кнопки:
Drill (сверление по Drill)
Drill PCB (сверление Peck Drill)
UP (ручной подъём)
DOWN (ручное опускание)
2. Переменные, хранящиеся в EEPROM
posDrillStart — стартовая позиция Drill (мм от стола)
posDrillPCBStart — стартовая позиция Drill PCB (мм от стола)
pcbThickness — толщина PCB (мм, 0.5–3.0)
drillDepth — глубина сверления Drill (мм)
peckDepth — глубина одного захода Peck Drill (мм)
speedMoveDrill — скорость перемещения для Drill (мм/с)
speedDrillDrill — скорость сверления для Drill (мм/с)
speedMovePeck — скорость перемещения для Peck Drill (мм/с)
speedDrillPeck — скорость сверления для Peck Drill (мм/с)
currentDepth = peckDepth while currentDepth < drillDepth: опуститься до (surface_mm - currentDepth) с speedDrillPeck подняться до start_mm с speedMovePeck currentDepth += peckDepth
Последний заход:
Если drillDepth % peckDepth != 0, последняя глубина = drillDepth
Подняться в start_mm после завершения цикла
5. Логика меню 1. Установить позицию Drill (мм) 2. Установить позицию Drill PCB (мм) 3. Установить толщину PCB (мм) 4. Установить глубину сверления Drill 5. Установить глубину захода Peck Drill 6. Настройки скоростей: 6.1 Скорость перемещения Drill 6.2 Скорость сверления Drill 6.3 Скорость перемещения Peck Drill 6.4 Скорость сверления Peck Drill 7. Настройка микрошагов (MS1/MS2) 8. Перейти в позицию Drill 9. Перейти в позицию Drill PCB
6. Логика кнопок
Drill → запускает Drill по текущим настройкам
Drill PCB → запускает Peck Drill
UP → ручной подъём (в прерывании)
DOWN → ручное опускание (в прерывании)
Энкодер → перемещение по меню
Нажатие энкодера → вход в режим редактирования / подтверждение
Начало кода:
/* drill_z_final_sync.ino Финальная прошивка для STM32F103C8T6 (Blue Pill)
Железо: - ШД NEMA17 + TMC2209 v985 (Step/Dir, аппаратные MS1/MS2) - ШВП 1204 (4.0 мм/оборот) - Концевики NC -> GND: Z-min (нижний), Z-max (верхний), активный LOW - Touch Plate (щуп высоты инструмента), активный LOW при касании - LCD2004 I2C через PCF8574 (обычно 0x27 или 0x3F), библиотека LiquidCrystal_PCF8574 - Внешняя EEPROM 24LC256 (I2C, 0x50) — работаем через Wire без доп. библиотек - Шпиндель PWM: PA8 (TIM1 CH1) - LED DF6113 DIM PWM: PA9 (TIM1 CH2) - Кнопки: Drill, DrillPCB, Up, Down, ToolChange (INPUT_PULLUP, актив LOW) - Энкодер: каналы A/B + кнопка; A и кнопка на прерываниях
Логика: - Полное меню редактирования всех параметров - Калибровка по концевикам (Z=0 по Z-min; posMax по Z-max; posLimitTop=posMax-12мм) - Калибровка Touch Plate surface_mm = measured - plateThickness - Авто: posDrillPCBStart = surface_mm + 2.0 мм - Защиты: диапазон 0..posLimitTop, стоп по концевикам - Ручное сверление: удержание Drill ? шаги вниз до ограничения оператора (maxManualDepth) - Peck Drill: по peckDepth до общей глубины drill_PCBDepth, с подъемом между проходами - Пункт меню 3.3 «Проверка поверхности» (подъезд к surface и к старту PCB) - Кнопка "Смена инструмента": вверх до Z-max, затем вниз на 12 мм (3 оборота)
Не хватает координатного стола - и будет ЧПУ. А так - расскажите идею устройства и алгоритм работы на нем. Есть у вас механизм "прицеливания" центра сверла в центр будущего отверстия? Ибо смысл этой всей автоматизации нужен только если есть нормальный механизм прицеливания. Поскольку если руками/глазами - то Peck drill может и промахнуться, а откатиться будет поздно.СпойлерЯ обычно опускаю сверло под самую плату, дальше корректирую положение платы, что б будущее отверстие было в середине пояска.... Иногда, если плата маленькая - сверло на высоких оборотах само чуток корректирует положение платы, что б оказаться в серединке заготовки под отверстие. А вот так вот - выставить как то плату и сверлить - мне кажется, много времени уйдет на точную установку центра отверстия, если нет какого то помогающего механизма.
Где то был проект, когда прицеливание осуществлялось отодвигающейся автоматически камерой. Т.е. прицеливание газками по большой картинке на дисплее, дальше кнопка - камера отодвинулась ,сверло просверлило, камера вернулась. Есть еще вариант двух маломощных лазеров, дающих крестик прицела. Их раз отьюстировать с центром сверла - тогда уже можно и автоматизацию.
Думал про лазер но отказался. Использую стационарно закрепленную веб камеру через переходные кольца (подключена к старому андроид смартфону по OTG) Позиционировать легко. Камера не мешает сверлению и ее не нужно убирать. Не хватает только перекрестия как в проекте HILDI лазерной засветки фоторезиста.
По бокам от двигателя, в двух вертикальных взаимоперперндикулярных плоскостях ставятся лазеры, с линзами, дающими линию. И юстируются так, что б перекрестье линий было в точке сверления. Тогда перекрестье будет стоять на оси сверла независимо от высоты подъема шпинделя. Хотя если есть камера и решен вопрос поля зрения - то почему б и нет.
Касательно логики. Если в дальнейшем планируется добавление координатного стола и превращение сверлилки в ЧПУ - то почему бы и нет. А если сверлилка остается ручной - то зачем такая сложность? При мощном высокооборотистом моторе твердосплавыне сверлышки прошивают текстолит аки масло. Почти на любой скорости подачи. Я б оставила только регулировку скорости подачи. И верхний + нижний концевики. У вас же нет задачи сверлить "слепые" отверстия в текстолите? Тут лучше предусмотреть какой то поток воздуха, сдуваюший опилки текстолита в сторону какого то улавливателя....
Добавлено after 2 hours 7 minutes 44 seconds: Похоже идей по логике нет. Реализую свою логику, допишу прошивку и выложу тут на поругание:) Когда не знаю. Скорее всего только после того как с EEPROM разберусь. Может кому и будет полезно.
Добавлено after 1 hour 25 minutes 21 second: Можно удалять тему чтобы не засорять форум.
Zauruss34, на фото не видно, где и как камера стоит, что б прицеливаться....
Zauruss34 писал(а):
после того как с EEPROM разберусь
А шо с ней разбираться.... Читается в большинстве случаев как угодно, пишется блоками... Проще все настройки сложить в структуру и писать ее блоком, с контрольной суммой. С учетом объема еепромки - можно писать 2 экземпляра настроек в разные блоки, тогда в случае сбоя при записи всегда можно откатиться на "резервную копию" настроек.
Карма: 107
Рейтинг сообщений: 3801
Зарегистрирован: Пн фев 09, 2009 22:19:49 Сообщений: 24291 Откуда: Когда-то был прекрасный город для людей
Рейтинг сообщения:0
Цитата:
Похоже идей по логике нет.
Для того, чтобы могли появиться идеи, надо кинематическую схему начертить и алгоритмическую схему работы установки.
А по бессвязным текстам ничего непонятно, за исключением разве одного - для простой трехосевой модели там избыточно много описателей. Значит, будут появляться петли, и значит - толково это работать не будет.
Не выполнена работа по оптимизации связей модели и их избыточности.
Проще все настройки сложить в структуру и писать ее блоком, с контрольной суммой. С учетом объема еепромки - можно писать 2 экземпляра настроек в разные блоки
А лучше: писать в кольцевой буфер в EEPROM. Кольцо из структур.
Переделки: Полностью удалён Peck: нет peckDepth, speedMovePeck, speedDrillPeck, speedPWMDrillPCB, drill_PCBDepth. Режим Drill PCB оставлен и работает как один автоматический проход на одну глубину (параметр pcbDepth). Пояснение: чтобы обеспечить «одну глубину сверления», нужна величина глубины поэтому я ввёл нейтральное поле pcbDepth (это не Peck и не дублирует удалённые параметры). Добавлены ранее удаленные кнопки быстрых переходов на стартовые позиции: posDrillStart posDrillPCBStart (эта позиция автоматически поддерживается как surface_mm + 2.0 мм). Внешняя EEPROM 24LC256 по I2C без сторонней библиотеки (через Wire, с постраничной записью). LCD2004 + PCF8574 через LiquidCrystal_PCF8574. TMC2209 v985: STEP/DIR, MS1/MS2 (с учётом «LL-toggle»). PWM шпинделя на PA8, PWM LED DF6113 на PA9 (TIM1/HAL, 60 кГц база; шпиндель управляется тем же таймером). Полная калибровка по концевикам и Touch Plate; surface_mm вычисляется, а posDrillPCBStart = surface_mm + 2.0. Контроль диапазона Z: все движения в пределах [0 … posLimitTop].
Добавлено after 15 minutes 44 seconds: Всем спасибо за советы. Пока все в процессе. и будет много правок. Например меню на Русском.
Муркиз: Не выполнена работа по оптимизации связей модели и их избыточности. А начинают именно с этого.
Именно этим и занимаюсь.
Кинематика простая: Ось Z. Именно для нее логика. Для двух режимов. Ручном и авто Сверлении. Ручной для сверления заготовки отличной от текстолита.
Уже устаревшая логика в файле ниже.
Добавлено after 7 minutes 30 seconds: jcxz: А лучше: писать в кольцевой буфер в EEPROM. Кольцо из структур.
Для меня это пока наверное сложно. Посмотреть бы на примеры такой реализации.
Добавлено after 3 minutes 9 seconds: Just_Fluffy: на фото не видно, где и как камера стоит, что б прицеливаться....
Пока разбираю старый станочек. Приехали новые детали. Соберу новый.
Добавлено after 59 minutes 38 seconds:
Убрал физические кнопки: UP, DOWN и кнопки перехода на позицию. Перенес и х логику в меню и сделал для них пункты.
Что на данный момент у меня получилось и как работает.
Всё сломал и ничего не работает:) Угробил меню. Теперь восстанавливаю. Делайте резервные копии.
Пока так.
Добавлено after 4 hours 42 minutes 46 seconds: 1. Удалён режим Peck Drill (структуры, функции, меню). 2. Добавлены режимы Drill и DrillPCB (отдельные скорости и мощность шпинделя). 3. Удалены физические кнопки UP/DOWN. Осталось 3 кнопки: Drill DrillPCB Смена инструмента
Добавлены пункты меню: 1. Move Up / Move Down 2. Go to Drill Start / Go to PCB Start
Шпиндель теперь выключается только после возврата к стартовой позиции (Был косяк: Отключался при достижении заданной глубины сверления). (Остановить сверло в заготовке - плохо) Пока работает. (Надо придумать понятные пункты меню и перевести на Русский)
Zauruss34, Если вы удалением нескольких элементов меню сломали всё, то тогда у вас подход неверный. Сначала нарисуйте на бумажке алгоритм. Потом сделайте его в железе. Пусть это будет какой то большой суперцикл, который отрабатывает.... ну каждую миллисекунду по флагу от таймера... Внутри суперцикла вызывайте последовательно задачи - отрисовки дисплея, опроса клавиатуры, управления двигателями, переключением режимов по событиям от клавиатуры, по флагам от датчиков и таймеров... Все задачи не должны взаимодействовать напрямую друг с другом, только через флаги. Далее нарисуйте какое то меню. Как вариант - основной режим работы сверлилки - это тоже один из пунктов меню. Тогда получится какая то универсальность обработчиков. Т.е. сначала у вас заработает только вывод на дисплей. Потом опрос кнопок. Потом можно тестово выводить нажатия кнопок в дисплей. Просто в цикле. Потом туда же прикрутите датчики. Потом можно сделать управление двигателями. И тестить его событиями от клавиатуры. Потом возьмите какой то движок меню (тут на форуме было много вариантов, либо я видела в блоге у GoldenAndy - там у него еще и п рограмма-конструктор менюшек есть... Если надо - дам ссылочку, либо можно воспользоваться гуглопоиском по его нику и слову blogspot).. И таким образом у вас будет работать большой цикл, как "движок" всего. И потом только делать переключения режимов по событиям согласно функциональной карте... Но такой подход не позволит сломаться всей логике программы при каких то изменениях в функциональной карте.
Муркиз писал(а):
А что надо делать, если сверло таки застряло в отверстии, например ?
Просится тахометр... И если застряло - то или импульсные попытки прокрутить сверло далее, или реверс. А вообще для плат лучше твердосплавные сверлышки и высокие обороты..
ПС. Идея со сверлом снизу еще хороша тем, что можно там параллельно сделать сборник стружки от сверления. Можно с минипылесосом.
Just_Fluffy: Спасибо. Обязательно воспользуюсь подсказкой. Просто я решил два дисплея одновременно прикрутить TFT и LCD 2004. И по не знанию еще другой дичи наворотил. Высоких оборотов не достичь. Максимум 50000.
цитата: При необходимости выполнять отверстия не менее 0,1 мм целесообразнее комплектовать станок таким шпинделем, как T188, чья скорость вращения (как видно из названия модели) вплотную приближается к 200 000 об./мин, однако он не имеет вышеуказанных недостатков и способен одинаково эффективно сверлить отверстия диаметром 0,1–6,3 мм. https://tech-e.ru/optimizacziya-sverlen ... t608789061
Муркиз: Будет слом сверла, испорченная заготовка и прочие неприятности. Если заготовка не закреплена. Лично наблюдал как из защитного стекла торчал кусок твердосплавного сверла. Предпочитаю не рисковать а также поддерживать чистоту на рабочем месте.
Вот уже не раз читаю про подачу снизу. А конкретно даже картинки нету да и видео. Вот бы увидеть. А то как в анекдоте про Петьку,Чапая и квадратный трехчлен. Даже представить не могу как это должно работать. Практичность и эфективность. Весь мир до сих пор сверлит сверху.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения