Автономный контроллер своими руками.

    Рекомендованный
  • #706
Если не сложно напишите мне команду как строку в IDE для запуска вращения шпинделя, типа Serial.print или write ("..."); Я подключу шлейф и проверю на двигателе железо и связь.
Всё что написал Алексей в предыдущем посте, но иногда нужно добавить не только мощность но и скорость.
У меня реализовано так:

Serial.print (F("M3 S":);
Serial.println (S_podsvetki); // здесь отправляем мощность шпинделя или лазера в заданном диапазоне (0-255 или 0-1000 обычно такие)
Serial.println (F(" G1 F1000":);

Вот так реализовано в лазергрбл:
1709581437471.png

Включение и выключение
 
  • Последнее редактирование:
Последнее редактирование:
Может сначала про команды почитаете?
Я привык делить проекты по технологические разделы. Создается железо+ простейшие скетчи- тесты про проверки кнопок, индикатора и ти.п..
В т.ч. для проверки соединения с самим станком.
Далее станок убирается, я иду за комп и начинаю программировать. Снова проверка со станком по освоенному функционалу и так по кругу.

Так вот. Проверку шлейфа, отправки команд на станок я пока не могу сделать.

Вы пишите, что, якобы достаточно (установив одинаковую скорость порта) отправить на станок команду к примеру Serial.println("M3 S1000"); У меня ничего не начинает крутиться.

И это логично, на мой взгляд. Ибо, прежде нужна какая то инициализация обмена, типа запрос, получение ответа, что станок видит АК и готов принимать команды...

Возможно, что и резисторы в 150 ом велики, или RX TX перепутано. ПОэтому прошу подтвердить, что данной команды ДОСТАТОЧНО для теста связи. Или написать пакет для тестирования.
 
Я привык делить проекты по технологические разделы. Создается железо+ простейшие скетчи- тесты про проверки кнопок, индикатора и ти.п..
В т.ч. для проверки соединения с самим станком.
Далее станок убирается, я иду за комп и начинаю программировать. Снова проверка со станком по освоенному функционалу и так по кругу.

Так вот. Проверку шлейфа, отправки команд на станок я пока не могу сделать.

Вы пишите, что, якобы достаточно (установив одинаковую скорость порта) отправить на станок команду к примеру Serial.println("M3 S1000"); У меня ничего не начинает крутиться.

И это логично, на мой взгляд. Ибо, прежде нужна какая то инициализация обмена, типа запрос, получение ответа, что станок видит АК и готов принимать команды...

Возможно, что и резисторы в 150 ом велики, или RX TX перепутано. ПОэтому прошу подтвердить, что данной команды ДОСТАТОЧНО для теста связи. Или написать пакет для тестирования.
Только что проверил через Hterm, все работает:
посылаю $X (разблокировка станка)
потом M3 S12000 (включение шпинделя)
потом M5 (отключение шпинделя).
У Вас не получается потому, что скорее всего станок не разлочен, и точно не получается потому, что в конце посылаемых комманд должны быть символы перевода каретки и новой строки (CR+LF). Отправляйте так : Serial.println("M3 S1000\r\n");

Интерпретатор команд ожидает всегда эти символы как конец команды.
 

Вложения

  • 222.png
    222.png
    53.4 KB · Просмотры: 25
Насчёт разлочки - справедливо.

и точно не получается потому, что в конце посылаемых комманд должны быть символы перевода каретки и новой строки (CR+LF). Отправляйте так : Serial.println("M3 S1000\r\n");
Функция Serial.println() аналогична функции Serial.print() с единственным отличием, которое заключается в том, что после печатного текста следует символ возврата каретки (ASCII 13, или '\r') и символ перевода строки (ASCII 10, или '\n').
 
Спасибо, заработало, правда, поменял местами Rx и TX. Ну это типичная ошибка:)) Может и без разлочки работало, но проверять не стану. И того много дел впереди.
 
  • Последнее редактирование:
Последнее редактирование:
Я привык делить проекты по технологические разделы. Создается железо+ простейшие скетчи- тесты про проверки кнопок, индикатора и ти.п..
А я начинаю с изучения документации, особенно что касается протоколов обмена и интерфейсов обмена.
После чего подбирается соответствующее железо.

И это логично, на мой взгляд. Ибо, прежде нужна какая то инициализация обмена, типа запрос, получение ответа, что станок видит АК и готов принимать команды...
Жаль, что намёков вы не понимаете, на будущее учтём.
Это было вчера:
И просто совет, сделайте кнопки с командами $X и $H.
 
  • Последнее редактирование:
Последнее редактирование:
поменял местами Rx и TX. Ну это типичная ошибка
Очень частая ошибка. Вот потому когда я занимался контроллерами Inectra подключая ВТ модули HC-06, много модулей перепробовал, подделок просто тьма, приходилось отбирать...и в запальчивости воткнул модуль не так..и он мгновенно умер по Тх. И тогда с помощью палочки от обсосанного мороженного сделал ключ переходник :D . Больше ошибок не было...и ведь обидно, что сгорел не подделка, а хороший рабочий модуль.
Вот этот ключ.
1709646258431.png
Перепутать не возможно...по другому не вставишь
 
Serial.println("$X");
Serial.println("G21");
Serial.println("G90");
if (b1.isPress(:)
{
lcd.setCursor(10, 0);
lcd.print(11);
Serial.println("G01 X-10 Y0 Z0 F100");
}
if (b1.isRelease(:)
{
lcd.setCursor(10, 0);
lcd.print(12);
Serial.println("M00");
}
На отпускание кнопки команда М00 идет, но станок не останавливается. Проезжает 20 мм, хотя задаю 10. Есть идеи?

В скетчах профи есть функция WaitOK() - ответ с ней связан?
 
  • Последнее редактирование:
Последнее редактирование:
Serial.println("G90");
if (b1.isPress:))
{
lcd.setCursor(10, 0);
lcd.print(11);
Serial.println("G01 X-10 Y0 Z0 F100");
Проезжает 20 мм, хотя задаю 10.
Едешь в абсолютных (G90), а команду даешь X-10, это как машинные стоят вопрос, может и за габариты уехать. Задай G91 поедет куда надо и сколько надо.
 
G91 ничего не изменило. Да нет, тут косяков видимо больше гораздо у меня.
Надо в первую очередь, придумать как останавливать при отпускании кнопки. Я думал, прям в лоб, кодом М00 или М01, а кажется, не так все просто. Пока предыдущая команда не доработает, новая не воспринимается. Так?

По поводу "габаритов". Я не хочу это предотвращать, потому что 1) команды G00 НИКОГДА не будет, я не тороплюсь. Все перемещения на скоростях обработки. 2) рабочая область 100 х 100 мм, и до края жертвенника ой как далеко. 3) есть аварийная кнопка.
Вернемся к М - кодам.
 
Идеи? Для чего? Чтобы ехало по заданным размерам, идеи не нужны. Нужны знания параметров $$.
Ваши сообщения автоматически объединены:

Я думал, прям в лоб, кодом М00 или М01, а кажется, не так все просто.
А что делает команда М1? А команда М0?
 
  • Последнее редактирование:
Последнее редактирование:
Надо в первую очередь, придумать как останавливать при отпускании кнопки.
А если попробовать через это:
$~ — Начать цикл
Начало цикла или команда возобновления, которая может быть введена в любой момент, так как это
команда реального времени. Когда Grbl имеет движения в очереди в буфере и готов идти,
$~ команда запуска цикла начнет выполнение буфера и Grbl начнет перемещение осей. Однако,
по умолчанию, запуск автоматического цикла включен, так что новые пользователи не будут
нуждаться в этой команде, если только не выполняется блокировка подачи . Когда блокировка
подачи выполняется, запуск цикла возобновит программу. начало цикла будет эффективным только
при наличии движения в буфере готового пойти и не будет работать с любым другим процессом, как цикл самонаведения.
$! — Удерживать подачу
Команда блокировки подачи приведет активный цикл к остановке с помощью контролируемого замедления,
чтобы не потерять позиции. В режиме реального времени и может быть активировано в любое время.
После завершения или паузы, Grbl будет ждать, Начала цикла до появления команды, чтобы возобновить
программу. Удержание подачи может только приостановить цикл и не повлияет на самонаведение или любой
другой процесс.
Если вам нужно остановить цикл в середине программы и не можете позволить себе потерять позиции,
выполните удержание подачи, чтобы помочь Grbl довести все до контролируемой остановки. После завершения,
вы можете сделать перезагрузку. Всегда старайтесь выполнить захват подачи, когда машина работает до
резкого сброса, за исключением, конечно, если есть какая-то чрезвычайная ситуация.

То есть организовать замкнутый цикл ($~G1 X1) по условию кнопки. Иначе выйти ($!)
 
  • Последнее редактирование:
Последнее редактирование:
Serial.println("$X");
Serial.println("G21");
Serial.println("G90");
if (b1.isPress:))
{
lcd.setCursor(10, 0);
lcd.print(11);
Serial.println("G01 X-10 Y0 Z0 F100");
}
if (b1.isRelease:))
{
lcd.setCursor(10, 0);
lcd.print(12);
Serial.println("M00");
}
На отпускание кнопки команда М00 идет, но станок не останавливается. Проезжает 20 мм, хотя задаю 10. Есть идеи?

В скетчах профи есть функция WaitOK() - ответ с ней связан?
Для того чтоб непрерывно двигаться по нажатию кнопки и остановке по отпусканию Необходимо выполнить некоторые условия.
Посылаем такие команды с определённой периодичностью:

Serial.print (F("$J=G21G91F":);
Serial.print (F_dvizeniy); //здесь задаётся скорость
Serial.print (F(" X":);
Serial.println (Shag); // здесь задаётся шаг

НО!!! очень важно правильно рассчитать шаг исходя из скорости.
У моей программы формула такая:
Shag = (F_dvizeniy / 60) * 0.03;

После того как отослали команду ждём ответ от контроллера что команда обработана и он ждёт следующую.
Расчёт шага нужен для того чтоб в буфере не накапливалось много команд, а была только одна. (это если не ошибаюсь)

Как только кнопка отпущена посылаем бинарную команду (по моему так называется)

Serial.write(0x85);

Это прекратит движение!
Но если в буфере остались следующие команды, из за неправильного расчёта шага, то движение возобновится.
Ваши сообщения автоматически объединены:

НО!!! очень важно правильно рассчитать шаг исходя из скорости.
здесь почитайте про $Jx = line - запускает режим движения Jog

Здесь про: 0x85: отмена Jog
 
  • Последнее редактирование:
Последнее редактирование:
Sany-sch, конечно, ваши проекты и канал очень крут. Но, можно вас попросить "на пальцах", как отвечают профессора, объяснить мне почему нет способа прерывания движения? Я не спорю, я просто взываю к логике;). Есть же аварийные ситуации, да и М0 недвусмысленно говорит о.... типа чрезвычайном прекращении движения.

Итак. Запустили кнопкой 1 движение командой 1: G01 x100 y0 z0 f10. Отпустили кнопку. Едет. Буфер сериала пуст. Нажали внезапно кнопку 2, послали команду 2 о ЧП. Все остановилось. Реально? Несомненно.
Теперь то же самое, но на нажатие и удержание кнопки - пошла разово команда 1, а стоит отпустить кнопку - пошла команда 2. Чем отличаются оба решения? Зачем нужен некий шаг, контроль буфера и т.п.?
Может это связано с "потерей координат"? хотя не знаю что это такое особо пока.
 
Сверху Снизу
Обнаружен блокировщик рекламы AdBlock

МЫ ДОГАДЫВАЕМСЯ, ЧТО РЕКЛАМА ВАС РАЗДРАЖАЕТ!

Конечно, Ваше программное обеспечение для блокировки рекламы отлично справляется с блокировкой рекламы на нашем сайте, но оно также блокирует полезные функции. Мы стараемся для Вас и не обязываем Вас донатить и скидывать денег на наши кошельки, чтобы пользоваться форумом, но реклама это единственное, что позволяет поддерживать проект и развивать его.

Спасибо за Ваше понимание!

Я отключил свой AdBlock    Нет, я не буду ничего отключать