Gnevko
КористувачіПовідомлення, опубліковані користувачем Gnevko
-
-
Кстати закралась мне в голову такая идея: сейчас скорость вращения шпинделя и дистанция отображается каждые 200 милисекунд, даже если особых изменений и нет, что есть неоправданный расход ресурсов ардуины, но если предположить, что отображение изменения скорости вращения шпинделя с 891 оборотов/мин. до 891,2 не важно, то это обновление экрана можно и опустить.
1 -
Тогда давайте поподробнее, что Вы имеете ввиду под словами "но скетч их не видит"? Компилятор выдает ошибку?
0 -
Это не то что бы библиотеки, скорее части одного скетча, который разнесен в несколько файлов (модулей, классов - называйте как хотите). Все ниже приведенные на изображении файлы должны лежать в одной папке вместе с LatheArduinoAssistant.ino:
0 -
Ну вот и славненько.
Лучше всего понимается логика собственноручно написанного скетча, да и то только первые пол года Вы можете спокойно удалить (по очереди) у себя все ненужные If'ы, благо они находятся только в одном единственном файле GJoystick.cpp, за одно и в логике модуля разберетесь, может быть даже и баг какой заметите - все ж польза.
0 -
Строки пусть вас не смущают, так как поддержка второго шагового мотора на Х - это песня дааааааалекого будущего, поэтому JOYSTICK_X_FORWARD_PIN вообще нигде не используется. По идее JOYSTICK_X_FORWARD_PIN и JOYSTICK_X_BACKWARD_PIN можно просто пока что удалить из кода.
По поводу 5 вольт. Не только дополнительные кнопки, но и контакты джойстика замыкаются на +5 вольт. Все 4 пина объявлены как "входящие" и переходят в состояние HIGH, когда на них поступает +5 вольт. Как то так ... (возможно вы контакты джойстика на землю пытаетесь замкнуть?)
Схема подключения принципиально не изменилась, а все используемые пины специально вынесены в Config.h, что бы каждому было удобно использовать именно тот пин, до которого дотянется паяльник Если у вас JOYSTICK_Z_FORWARD_PIN установлен/припаян на 33ий пин, то пусть так и остается, в программе просто поставьте 33 вместо 39.
Перед тем, как выложить код, я его некоторое время все же тестировал на своей машине (как и обещал), так что давайте разбираться, что и куда у вас подключено, и ошибку мы точно найдем!
1 -
Новая версия программы (V-01-03-00): https://github.com/Gnevko/Lathe-Arduino-Assistant
Что нового?
1. Добавлена возможность переключаться между двумя режимами поддержки джойстика: с нунчакой и без. Параметр называется JOYSTICK_TYPE (находиться в файле Config.h, раздел "Joystick") и может принимать два значения:
- 1 - поддержка нунчак включена
- 2 - поддержка нунчак полностью удалена.
2. Добавлены две новые кнопки:
- JOYSTICK_BUTTON_A_PIN - кнопка для быстрого перемещения суппорта
- JOYSTICK_BUTTON_B_PIN - сброс текущей позиции в ноль
Настройка номера пина на ардуине для этих кнопок так же осуществляется в файле Config.h (см предыдущий рисунок)
Подключение кнопок:
0 -
Как настроить программу под свой станок?
На самом деле есть всего один параметр - это дистанция в миллиметрах, которые проходит суппорт за один микрошаг. Для этого нужно знать собственно кол-во микрошагов, которые вы выставили на своем драйвере шагового двигателя и шаг винта. В моем случае это 800 микрошагов и 2мм соответственно.
Настройка осуществляется в файле Config.h в разделе "Z Axe Stepper", название параметра - "MM_PER_Z_STEP":
Как вы можете заметить, настройки для 3200, 1600 и 200 микрошагов закоментированы. Пример расчета так же приведен - 2мм деленные на 800 микрошагов, итого получаем 0.0025 мм на один микрошаг. Полученное таким образом ВАШЕ значение прописываем вместо 0.0025 в строчке:
#define MM_PER_Z_STEP 0.0025 //2mm / 800 steps;
Сохраняем файл, заливаем программу на Ардуино и все.
0 -
Господа, дело сдвинулось с мертвой точки, проект с теплицой вроде бы завершен, полив работает и есть немного времени продолжить этот проект.
На данный момент перепечатал корпус, добавил джойстик и две кнопки:
Следующий шаг - подключить это все к плате, потом правка и доработка кода, так как обработка этих двух кнопок реализована пока что только для нунчак.
0 -
Задача ясна. Попытаюсь сделать конфиругацию, что бы можно было использовать тот же код, так как две параллельных версии тянуть - это не рационально.
Это займет некоторое время, так как нужно будет не только переписать, но и протестировать (задизайнить корпус под джойстик и кнопки, напечатать, собрать и немного погонять систему в таком режиме). Усугубляется все это однако тем, что сейчас весна, а моя теплица не совсем еще готова (в частности автоматическая система смещивания удобрений и капельного полива, тоже на шаговых движках ... да я занаю, что извращенец ). Но постараюсь не затягивать.
0 -
Ну вот, кажется я вовремя вернулся Спасибо Старому Человеку (OldMan) за сообщение в личку. Сообщения о новых постах в теме на мой эл. почтовый ящик как не доходили так и не доходят, так что я уж подумал, что тема давно умерла и никого не интересует. Ан нет и это отрадно!
Дабы не отвечать на уже решенные вопросы предлагаю "начать с чистого листа" и насущные проблемы озвучить еще раз. Я постараюсь разобраться (в силу возможностей и ума).
Единственное на что с самого начала стоит обратить внимание во всем этом безобразии - это экранирование всего чего только можно, особенно кабели подключения сенсоров, кнопок, экрана и тд. Даже такой маленький станок как у меня умудряется выдавать не хилые наводящие токи (особенно при включении и остановке) и как следствие этого всевозможные совершенно не предсказуемые зависания, сбои изображения на экране и прочие мелкие пакости.
Так же забегая вперед - нунчаки. Панове! Это ж игрушка и была прикручена временно (Правда у меня она как то прижилась, так и осталась - нет ничего постояннее временного!). Тем не менее это I2C подключение, а I2C подключение - это первый враг систем, жизненно зависящих от прерываний ибо I2C подключение само использует прерывания (если я не ошибаюсь). Так что тут палка о двух концах - быстродействие и стабильность взамен удобству (возможно сомнительному) и чем быстрее вы от этой нунчаки избавитесь, тем скорее всего будет лучше.
1 -
Что делать:
1) Перейти к файлу TimerThree.h в библтотеке TimerThree и переименовать функции:
void attachInterrupt(void (*isr)()) __attribute__((always_inline)) {
и
void attachInterrupt(void (*isr)(), unsigned long microseconds) __attribute__((always_inline)) {
в
void attachInterruptFunction(void (*isr)()) __attribute__((always_inline)) {
и
void attachInterruptFunction(void (*isr)(), unsigned long microseconds) __attribute__((always_inline)) {
соответственно (в двух местах).
Или скачайте файл TimerThree.h из этого сообщения TimerThree.h.
Или скачайте файл по ссылке:
https://github.com/Gnevko/Lathe-Arduino-Assistant/blob/master/ThreeTimeFix/TimerThree.h
Откуда эти грабли:
определение функции attachInterrupt конфликтует с другими библиотеками, проблема в инете известная, одно из решений - просто переименовать функции. Возможно кто то подскажет более элегантный способ ее решения.
0 -
Конечно же я, джойстик не задумывался изначально как основной элемент управления, поэтому и "подключение" библиотеки к нему я не вынес в Config.h. Но нет ничего постояннее временного.
Хождение по граблям - дело не благодарное, поэтому вам огромное спасибо!
0 -
-
Спасибо, Sebra, за помощь! От себя добавлю, что в Config.h указаны так же и другие библиотеки, которые понадобятся для зборки.
0 -
5 часов назад, Вуйко сказал:Если я правильно догадываюсь, то "No such ..." - это "No such file found" или что то в этом роде.
Очень похоже на то, что вы загрузили (скачали) только сам скетч, но не все остальные файлы программы, такие как Config.h, GDisplay.h, GDisplay.cpp и так далее:
Все файлы должны находиться в той же папке, что и сам скетч "LatheArduinoAssistant.ino".
PS: можно было бы конечно все запихнуть и в один файл скетча, то тогда бы он получился просто гиганским, и ни о какой прозрачности и легкочитаемости и удобстве при внесении изменений речи бы уже не шло.
0 -
"Не могу загрузить" в каком смысле? Не находит файлы, библиотеки или что то еще?
0 -
В языках ли счастье ... но это уже тема для отдельного обсуждения.
"Чётко симметричный импульс" в данной реализации программы не нужен, но потенциально он может быть полезен в случае, если вы захотите удвоить скорость реакции системы на изменения частоты вращения шпинделя. Например, у вас при нарезании резьбы очень сильно "проседает" скорость вращения шпиделя. Правда, в этом случае прийдется и в программе покопаться, и кое что переделать.
Датчик вызывает опасения хотябы тем, что ему нужно от 10В ... ардуино работает с 5В.
Джойстик заменить можно на вот такой переключатель
Схема подключения
+ прийдется добавить две кнопки для сброса показаний позиции суппорта в ноль и для ускоренной подачи.
Для продолжения автоматизации по оси Х нужен фрезеровочный станок, так как без дополнительных танцев с бубном там уже мотор не прикрепить. И такой станок у меня уже появился (маленький но все же), пока что осваиваю его и в процессе осваивания пришел к мысли, что программа один к одному, без каких либо изменений станет и на него (для управления координатным столом), стоит только прикрутить шаговики. Так что продолжение в любом случае будет.
0 -
Господа, спокойствие, только спокойствие. О каких наездах идет речь? Окститесь, только здоровый диалог!
3 мм/об на 600 об/хв - это был пример не удачного подбора скорости для ускоренной подачи в режиме "Thread" (в коде я этот режим уже переименовал в "Sync", так как это больше соответствует его возможностям).
А вообще, панове, система не идеальна, и если кто хочет поучаствовать в ее улучшении - то не стеснайтесь, прошу вас, весь код лежит в открытом доступе и что то даже задокументированно, сам код весьма прост и местами даже приметивен, что должно только улучшить его восприятие.
1 -
Не то что бы не повредит, но и не поможет:
1) когда вы будете задавать скорость в 3мм система может еще и не знать, сколько у вас оборотов будет. Или же даже, если вы будете менять значение скорости с включенным шпинделем, то далеко не факт, что вы не повысите скорость уже после того, как выставили 3мм.
2) Это в моем конкретном случае, с моим шаговиком и драйвером нет возможности стартовать на такой скорости, а может быть с другим железом это и возможно. С более же слабым железом может быть и 0.75 мм на оборот при 600 оборотах уже много будет.
1 -
Режим "Thread" всего лишь согласует скорости вращения шпинделя и подачи суппорта, режим "Auto" - подает суппорт с независимой от вращения шпинделя скоростью, а вот направление движения суппорта в обоих режимах полностью зависит от оператора. Это позволяет, на пример, нарезать резьбу вообще не останавливая шпиндель, тем более нет необходимости менять направление вращения оного, что бы отвести суппорт в начальную позицию - это очень удобно и экономит массу времени.
Мой опыт показывает (во всяком случае мне), что любые запреты, оправданные в одном процессе, становятся огромной обузой в другом процессе, о наличие которого разработчик даже и не подозревает.
Однако, мысль переключать в режим "Auto" у меня была, но только в том случае, если скорость вращения шпинделя вообще отсутствует, как и переключать в режим "Thread", как только шпиндель начал вращение, так как название режима "Thread" не в полной мере отображает его сути и возможностей. В этом режиме чудно осуществляются как черновые, так и чистовые проходы.
Так же есть идея переключатся в режим "Auto", при ускоренной подаче, даже из режима "Thread". Причина банальна - в режиме "Thread" очень трудно подобрать такую скорость синхронизации подачи суппорта, что бы это работало на всех скоростях вращения шпинделя. Пример - выставляю для ускоренного режима "Thread" скорость в 3мм на оборот. На скорости вращения шпиндаля около 100 оборотов в минуту все ок, а вот уже на 600 оборотах шаговик просто "срывает", так как он не может без программируемого ускорения взять такую скорость. А программируемое ускорение в режиме "Thread" - это зло.
1 -
14 часа назад, OldMan сказал:ТС, присоединяюсь к вопросу. Сам хотел его задать. Как при таком подходе контролируется направление вращения шпинделя?
Никак. Для определеня направления вращения шпинделя достаточно поставить второй оптический энкодер, с таким же зазором в 180 градусов, только смещенный на 90 градусов относительно первного, как я изначально и задумывал. Но ... мне так и не пришла в голову реальная ситуация, при которой на программном уровне мне нужно было бы знать/определить направление вращения шпинделя. А чисто для наглядности, что б только на экране отобразить - то оно этого для меня не стоило + опять же только дополнительный и не оправданный расход мощностей ардуино.
1 -
Хотя ... в принципе ... любое кол-во срабатываний за один оборот можно "выдать" за одно. Предположим, что срабатываний 360, тогда если при каждом срабатывании делить счетчик на 360 и следить за остатком от деления, то при оном равном 0 у вас будет один оборот шпинделя. Но, есть одно жирное но - большое кол-во страбатываний грузит ардуино весьма серьезно, таким образом в таком подходе так же нет большого смысла. А вот одно срабатывание - самое оно, последнее время работал на скорости около 1300 оборотов шпинделя в минуту - все стабильно (конечно резьбы я на такой скорости не резал, а вот финальные проходы тестировал на разных скоростях синхронизированной подачи суппорта).
0 -
В 2/23/2018 в 08:25, Вуйко сказал:Говорила мне мама - "учи, сынок, китайский" ... но я был не очень послушным ребенком.
Если этот энкодер можно настроить на на одно срабатывание за один оборот шпинделя, то можно использовать без переделки кода. Если же нет - то кроме того, что прийдется в коде покапаться (хотя это и не сложно), все равно вам понадобиться еще один энкодер, который сможет срабатывать только один раз - для повторяемости захода при нарезании резьбы. Но тогда зачем танцы с бубном?
Если же резьбы - это не ваша цель, а хочется просто синхронизировать скорости вращения шпинделя и подачи суппорта, тогда да, так как необходимость в "метке" в этом случае отпадает.
ЗЫ: прошу прощения за поздний ответ, уведомления о новых постах в теме почему то до австрийских лугов не доходят
0 -
Сегодня приехала замена первоначального основания, с виду ровно, но все равно не шлифовано (слева новая, справа старая).
0
в Верстати та системи ЧПК
Опубліковано:
Так это ... как его ... что то вы меня озадачили - в новой версии все кнопки: две на джойстике (вперед, назад), ускоренная подача и сброс в ноль управляются как бы через плюс. Может я вас не правильно понял и вы о каких то других кнопках (хотя вроде бы других и нет, не считая энкодера) ?