Помощь в осмыслении.

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
Zauruss34
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Сб авг 16, 2025 20:33:24

Помощь в осмыслении.

Сообщение Zauruss34 »

Здравствуйте уважаемые. Возникла необходимость в сверлильном станочке для сверления плат (после аварии плохо работает правая рука).
Понимаю что проще ЧПУ станок.
Но пока нет ни денег ни возможностей (может и будет но гораздо позже).
Начал с Логики работы такого станка.
Далее начал писать код на 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 (мм/с)

microsteps — текущий режим микрошагов (1, 2, 4, 8, 16, 32)

3. Вычисления шагов на мм
stepsPerMM = (200 * microsteps) / 4.0


(где 200 — шагов на оборот, 4.0 мм — шаг ШВП 1204)

4. Общий алгоритм сверления
Для обоих режимов:

Вычислить surface_mm = pcbThickness

Стартовая позиция:

start_mm = surface_mm + 2.0
start_steps = start_mm * stepsPerMM


Переместиться в стартовую позицию с speedMove

Drill (одиночное сверление):

Опуститься до:

target_mm = surface_mm - drillDepth


с speedDrill
2. Подняться в start_mm с speedMove

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 оборота)

Библиотеки:
- LiquidCrystal_PCF8574 (Mathertel)
- AccelStepper (Mike McCauley)
- Bounce2

Важно:
- Используется HAL для конфигурации TIM1 PWM (PA8/PA9) — требует ядро Arduino STM32 c HAL.
*/

#include <Wire.h>
#include <LiquidCrystal_PCF8574.h>
#include <AccelStepper.h>
#include <Bounce2.h>

extern "C" {
#include "stm32f1xx_hal.h"
}

/* Пины */
#define PIN_STEP PB0
#define PIN_DIR PB1
#define PIN_ENABLE PB12

#define PIN_MS1 PB10
#define PIN_MS2 PB11

#define PIN_Z_MIN PA0 // NC -> GND, INPUT_PULLUP, активный LOW
#define PIN_Z_MAX PA1 // NC -> GND, INPUT_PULLUP, активный LOW
#define PIN_TOUCH PA2 // активный LOW при касании пластины

#define BTN_DRILL PA3
#define BTN_DRILL_PCB PA4
#define BTN_UP PA5
#define BTN_DOWN PA6
#define BTN_TOOL_CHANGE PA7

#define ENC_A PB13 // прерывание по CHANGE
#define ENC_B PB14
#define ENC_BTN PB15 // прерывание по FALLING

#define PIN_SPINDLE_PWM PA8 // TIM1 CH1
#define PIN_LED_PWM PA9 // TIM1 CH2
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Помощь в осмыслении.

Сообщение Just_Fluffy »

Не хватает координатного стола - и будет ЧПУ.
А так - расскажите идею устройства и алгоритм работы на нем.
Есть у вас механизм "прицеливания" центра сверла в центр будущего отверстия? Ибо смысл этой всей автоматизации нужен только если есть нормальный механизм прицеливания.
Поскольку если руками/глазами - то Peck drill может и промахнуться, а откатиться будет поздно.
СпойлерЯ обычно опускаю сверло под самую плату, дальше корректирую положение платы, что б будущее отверстие было в середине пояска.... Иногда, если плата маленькая - сверло на высоких оборотах само чуток корректирует положение платы, что б оказаться в серединке заготовки под отверстие.
А вот так вот - выставить как то плату и сверлить - мне кажется, много времени уйдет на точную установку центра отверстия, если нет какого то помогающего механизма.
Где то был проект, когда прицеливание осуществлялось отодвигающейся автоматически камерой. Т.е. прицеливание газками по большой картинке на дисплее, дальше кнопка - камера отодвинулась ,сверло просверлило, камера вернулась.
Есть еще вариант двух маломощных лазеров, дающих крестик прицела. Их раз отьюстировать с центром сверла - тогда уже можно и автоматизацию.
Белая и Пушистая
Аватара пользователя
Zauruss34
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Сб авг 16, 2025 20:33:24

Re: Помощь в осмыслении.

Сообщение Zauruss34 »

Думал про лазер но отказался. Использую стационарно закрепленную веб камеру через переходные кольца (подключена к старому андроид смартфону по OTG)
Позиционировать легко. Камера не мешает сверлению и ее не нужно убирать. Не хватает только перекрестия как в проекте HILDI лазерной засветки фоторезиста.
Вложения
Полная логика проекта — пошагово.pdf
(165.19 КБ) 143 скачивания
Последний раз редактировалось Zauruss34 Вс авг 17, 2025 17:27:47, всего редактировалось 2 раза.
Аватара пользователя
Муркиз
Друг Кота
Сообщения: 25763
Зарегистрирован: Пн фев 09, 2009 22:19:49
Откуда: Когда-то был прекрасный город для людей

Re: Помощь в осмыслении.

Сообщение Муркиз »

Ну так известны решения, когда позиционирование идёт сверху по оси сверла, но сверло подаётся из-под низа стола.
Аватара пользователя
Zauruss34
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Сб авг 16, 2025 20:33:24

Re: Помощь в осмыслении.

Сообщение Zauruss34 »

Муркиз: Может ваше предложение и проще. Но пока так как есть.
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Помощь в осмыслении.

Сообщение Just_Fluffy »

По бокам от двигателя, в двух вертикальных взаимоперперндикулярных плоскостях ставятся лазеры, с линзами, дающими линию. И юстируются так, что б перекрестье линий было в точке сверления. Тогда перекрестье будет стоять на оси сверла независимо от высоты подъема шпинделя. Хотя если есть камера и решен вопрос поля зрения - то почему б и нет.

Касательно логики. Если в дальнейшем планируется добавление координатного стола и превращение сверлилки в ЧПУ - то почему бы и нет. А если сверлилка остается ручной - то зачем такая сложность? При мощном высокооборотистом моторе твердосплавыне сверлышки прошивают текстолит аки масло. Почти на любой скорости подачи.
Я б оставила только регулировку скорости подачи. И верхний + нижний концевики. У вас же нет задачи сверлить "слепые" отверстия в текстолите?
Тут лучше предусмотреть какой то поток воздуха, сдуваюший опилки текстолита в сторону какого то улавливателя....
Белая и Пушистая
Аватара пользователя
Zauruss34
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Сб авг 16, 2025 20:33:24

Re: Помощь в осмыслении.

Сообщение Zauruss34 »

Just_Fluffy: Полностью с вами согласен.
Но мой вариант не хуже других :)
Себестоимость копеечная. Купил только направляющие и STM32. Остальное из хлама.

Ни как не могу картинку сюда отправить с моим тестовым стендом:)
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Re: Помощь в осмыслении.

Сообщение vem566 »

Картинку бы конечно хотелось.
Аватара пользователя
Zauruss34
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Сб авг 16, 2025 20:33:24

Re: Помощь в осмыслении.

Сообщение Zauruss34 »

Картинка

Добавлено after 2 hours 7 minutes 44 seconds:
Похоже идей по логике нет.
Реализую свою логику, допишу прошивку и выложу тут на поругание:) Когда не знаю.
Скорее всего только после того как с EEPROM разберусь.
Может кому и будет полезно.

Добавлено after 1 hour 25 minutes 21 second:
Можно удалять тему чтобы не засорять форум.
Вложения
1755444222188.gif
(168.7 КБ) 156 скачиваний
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Помощь в осмыслении.

Сообщение Just_Fluffy »

Zauruss34, на фото не видно, где и как камера стоит, что б прицеливаться....
Zauruss34 писал(а):после того как с EEPROM разберусь
А шо с ней разбираться....
Читается в большинстве случаев как угодно, пишется блоками...
Проще все настройки сложить в структуру и писать ее блоком, с контрольной суммой. С учетом объема еепромки - можно писать 2 экземпляра настроек в разные блоки, тогда в случае сбоя при записи всегда можно откатиться на "резервную копию" настроек.
Белая и Пушистая
Аватара пользователя
Муркиз
Друг Кота
Сообщения: 25763
Зарегистрирован: Пн фев 09, 2009 22:19:49
Откуда: Когда-то был прекрасный город для людей

Re: Помощь в осмыслении.

Сообщение Муркиз »

Похоже идей по логике нет.
Для того, чтобы могли появиться идеи, надо кинематическую схему начертить и алгоритмическую схему работы установки.

А по бессвязным текстам ничего непонятно, за исключением разве одного - для простой трехосевой модели там избыточно много описателей.
Значит, будут появляться петли, и значит - толково это работать не будет.

Не выполнена работа по оптимизации связей модели и их избыточности.

А начинают именно с этого.
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: Помощь в осмыслении.

Сообщение jcxz »

[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4739581#p4739581"]Проще все настройки сложить в структуру и писать ее блоком, с контрольной суммой. С учетом объема еепромки - можно писать 2 экземпляра настроек в разные блоки[/uquote]А лучше: писать в кольцевой буфер в EEPROM. Кольцо из структур.
Аватара пользователя
Zauruss34
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Сб авг 16, 2025 20:33:24

Re: Помощь в осмыслении.

Сообщение Zauruss34 »

Переделки:
Полностью удалён 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:
Всем спасибо за советы. Пока все в процессе. и будет много правок. Например меню на Русском.
Аватара пользователя
Муркиз
Друг Кота
Сообщения: 25763
Зарегистрирован: Пн фев 09, 2009 22:19:49
Откуда: Когда-то был прекрасный город для людей

Re: Помощь в осмыслении.

Сообщение Муркиз »

Да какая разница... Пока это лишь одни слова, это многозначная бессмыслица.
Аватара пользователя
Zauruss34
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Сб авг 16, 2025 20:33:24

Re: Помощь в осмыслении.

Сообщение Zauruss34 »

Муркиз: Не выполнена работа по оптимизации связей модели и их избыточности.
А начинают именно с этого.

Именно этим и занимаюсь.

Кинематика простая:
Ось 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

Шпиндель теперь выключается только после возврата к стартовой позиции (Был косяк: Отключался при достижении заданной глубины сверления).
(Остановить сверло в заготовке - плохо)
Пока работает. (Надо придумать понятные пункты меню и перевести на Русский)
Вложения
Полная логика проекта — пошагово.pdf
(165.19 КБ) 132 скачивания
Аватара пользователя
Муркиз
Друг Кота
Сообщения: 25763
Зарегистрирован: Пн фев 09, 2009 22:19:49
Откуда: Когда-то был прекрасный город для людей

Re: Помощь в осмыслении.

Сообщение Муркиз »

А что надо делать, если сверло таки застряло в отверстии, например ?
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Помощь в осмыслении.

Сообщение Just_Fluffy »

Zauruss34, Если вы удалением нескольких элементов меню сломали всё, то тогда у вас подход неверный.
Сначала нарисуйте на бумажке алгоритм. Потом сделайте его в железе.
Пусть это будет какой то большой суперцикл, который отрабатывает.... ну каждую миллисекунду по флагу от таймера...
Внутри суперцикла вызывайте последовательно задачи - отрисовки дисплея, опроса клавиатуры, управления двигателями, переключением режимов по событиям от клавиатуры, по флагам от датчиков и таймеров... Все задачи не должны взаимодействовать напрямую друг с другом, только через флаги.
Далее нарисуйте какое то меню. Как вариант - основной режим работы сверлилки - это тоже один из пунктов меню. Тогда получится какая то универсальность обработчиков.
Т.е. сначала у вас заработает только вывод на дисплей. Потом опрос кнопок. Потом можно тестово выводить нажатия кнопок в дисплей. Просто в цикле.
Потом туда же прикрутите датчики. Потом можно сделать управление двигателями. И тестить его событиями от клавиатуры.
Потом возьмите какой то движок меню (тут на форуме было много вариантов, либо я видела в блоге у GoldenAndy - там у него еще и п рограмма-конструктор менюшек есть... Если надо - дам ссылочку, либо можно воспользоваться гуглопоиском по его нику и слову blogspot)..
И таким образом у вас будет работать большой цикл, как "движок" всего. И потом только делать переключения режимов по событиям согласно функциональной карте...
Но такой подход не позволит сломаться всей логике программы при каких то изменениях в функциональной карте.
Муркиз писал(а):А что надо делать, если сверло таки застряло в отверстии, например ?
Просится тахометр... И если застряло - то или импульсные попытки прокрутить сверло далее, или реверс.
А вообще для плат лучше твердосплавные сверлышки и высокие обороты..

ПС. Идея со сверлом снизу еще хороша тем, что можно там параллельно сделать сборник стружки от сверления. Можно с минипылесосом.
Белая и Пушистая
Nranddek
Вымогатель припоя
Сообщения: 598
Зарегистрирован: Сб авг 09, 2025 22:08:28

Re: Помощь в осмыслении.

Сообщение Nranddek »

[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4739916#p4739916"]импульсные попытки прокрутить сверло далее[/uquote] наверное, будет риск слома сверла
Аватара пользователя
Муркиз
Друг Кота
Сообщения: 25763
Зарегистрирован: Пн фев 09, 2009 22:19:49
Откуда: Когда-то был прекрасный город для людей

Re: Помощь в осмыслении.

Сообщение Муркиз »

Угу. И как всегда, все у них всегда работает лишь в идеальных больничных условиях, без шума и пыли..
Аватара пользователя
Zauruss34
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Сб авг 16, 2025 20:33:24

Re: Помощь в осмыслении.

Сообщение Zauruss34 »

Just_Fluffy:
Спасибо. Обязательно воспользуюсь подсказкой.
Просто я решил два дисплея одновременно прикрутить TFT и LCD 2004.
И по не знанию еще другой дичи наворотил.
Высоких оборотов не достичь. Максимум 50000.

цитата:
При необходимости выполнять отверстия не менее 0,1 мм целесообразнее комплектовать станок таким шпинделем, как T188, чья скорость вращения (как видно из названия модели) вплотную приближается к 200 000 об./мин, однако он не имеет вышеуказанных недостатков и способен одинаково эффективно сверлить отверстия диаметром 0,1–6,3 мм.
https://tech-e.ru/optimizacziya-sverlen ... t608789061

Муркиз:
Будет слом сверла, испорченная заготовка и прочие неприятности. Если заготовка не закреплена.
Лично наблюдал как из защитного стекла торчал кусок твердосплавного сверла.
Предпочитаю не рисковать а также поддерживать чистоту на рабочем месте.

Вот уже не раз читаю про подачу снизу. А конкретно даже картинки нету да и видео.
Вот бы увидеть. А то как в анекдоте про Петьку,Чапая и квадратный трехчлен. Даже представить не могу как это должно работать.
Практичность и эфективность. Весь мир до сих пор сверлит сверху.
Вложения
Краткое описание кода управления сверлильным станком от АЛИСЫ.pdf
(188.81 КБ) 127 скачиваний
Ответить

Вернуться в «ARM»