Управление мощностью лазера сигналами Zоси на ARDUINO
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 20 янв 2017, 13:23
- Репутация: 39
- Настоящее имя: Вячеслав
- Контактная информация:
Управление мощностью лазера сигналами Zоси на ARDUINO
Случилась такая задача: Китайский лазер для гравировки регулирует мощность от внешнего ШИМ сигнала. Но купленная плата USB контроллера для MACH3 выдает только аналоговый сигнал управления 0-10В. Поэтому было решено сделать преобразователь "Аналог-ШИМ" на простом контроллере ARDUINO.
В результате тестирования вылезла очередная проблема. Мач3 очень долго выполняет команды смены скорости шпинделя из за наличия внутренних задержек. Использовать в таком режиме лазер оказалось очень неудобно. Пришлось доработать проект добавив в него управление мощностью сигналами STEP, DIR от свободной оси. Аналоговый канал остался работоспособен и может функционировать параллельно.
Устройство собрано на контроллере ARDUINO PRO MINI 5В, 16 МГц. Содержит два независимых канала управления мощностью лазерной головки.
Первый канал аналоговый: Входное напряжение 0 - 10 В через делитель напряжения 10к/1,3к подается на вывод A6. Резистор 1,3к стоит между А6 и GND. Резистор 10к между А6 и входным напряжением. На выводе 10 ардуино получаем ШИМ сигнал от 0 до 100% пропорциональный аналоговому напряжению. Дополнительно программно сделал отключение лазера при входном напряжении менее 0,15В - типа защита от помехи и случайного включения.
Второй канал цифровой: Имеет 64 градации мощности. Управляется цифровыми сигналами шага и направления. Сигнал шага STP (положительной полярности) подаем на выв. 2 ардуины. Сигнал направления DIR на выв. 3. С вывода 9 имеем ШИМ сигнал управления лазером. При положительно сигнале DIR, каждый фронт сигнала STP будет увеличивать мощность на одну градацию. Соответственно 63 импульса поднимут мощность от 0% до 100%.
На ноги RAW и GND подается питание для контроллера 6-14 В в обоих вариантах.
Использование цифрового управления позволило практически мгновенно изменять мощность лазерной головки. Возросло качество и резко снизилось время гравировки. Использование осиZ для управления мощностью требует соотв. настройки постпроцессора программы формирующей G-код.
Фото конструкции и программа для ардуино (скетч) во вложениях.
В результате тестирования вылезла очередная проблема. Мач3 очень долго выполняет команды смены скорости шпинделя из за наличия внутренних задержек. Использовать в таком режиме лазер оказалось очень неудобно. Пришлось доработать проект добавив в него управление мощностью сигналами STEP, DIR от свободной оси. Аналоговый канал остался работоспособен и может функционировать параллельно.
Устройство собрано на контроллере ARDUINO PRO MINI 5В, 16 МГц. Содержит два независимых канала управления мощностью лазерной головки.
Первый канал аналоговый: Входное напряжение 0 - 10 В через делитель напряжения 10к/1,3к подается на вывод A6. Резистор 1,3к стоит между А6 и GND. Резистор 10к между А6 и входным напряжением. На выводе 10 ардуино получаем ШИМ сигнал от 0 до 100% пропорциональный аналоговому напряжению. Дополнительно программно сделал отключение лазера при входном напряжении менее 0,15В - типа защита от помехи и случайного включения.
Второй канал цифровой: Имеет 64 градации мощности. Управляется цифровыми сигналами шага и направления. Сигнал шага STP (положительной полярности) подаем на выв. 2 ардуины. Сигнал направления DIR на выв. 3. С вывода 9 имеем ШИМ сигнал управления лазером. При положительно сигнале DIR, каждый фронт сигнала STP будет увеличивать мощность на одну градацию. Соответственно 63 импульса поднимут мощность от 0% до 100%.
На ноги RAW и GND подается питание для контроллера 6-14 В в обоих вариантах.
Использование цифрового управления позволило практически мгновенно изменять мощность лазерной головки. Возросло качество и резко снизилось время гравировки. Использование осиZ для управления мощностью требует соотв. настройки постпроцессора программы формирующей G-код.
Фото конструкции и программа для ардуино (скетч) во вложениях.
- Вложения
-
- pwm.rar
- (1.15 КБ) 552 скачивания
-
- Мастер
- Сообщения: 442
- Зарегистрирован: 22 авг 2016, 12:21
- Репутация: 44
- Настоящее имя: Андрей
- Контактная информация:
Re: Управление мощностью лазера сигналами Zоси на ARDUINO
А чего было просто на grbl не переехать?
-
- Кандидат
- Сообщения: 49
- Зарегистрирован: 25 май 2016, 13:55
- Репутация: 11
- Контактная информация:
Re: Управление мощностью лазера сигналами Zоси на ARDUINO
Вот зачем такие комментарии?Andrey@KZN писал(а):А чего было просто на grbl не переехать?
Человек сделал нормальное устройство, поделился со всеми. Код написан аккуратно.
Многие просто ставят лазер на рабочий фрезер, настроенный работать с Mach3. И предложенное решение вполне актуально.
- rage
- Мастер
- Сообщения: 1006
- Зарегистрирован: 13 окт 2014, 09:14
- Репутация: 618
- Настоящее имя: Константин
- Откуда: Новосибирск
- Контактная информация:
Re: Управление мощностью лазера сигналами Zоси на ARDUINO
Хотя бы потому, что грбл не умеет хомить ось с двумя ШД по двум концевикам и выравнивать портал, да что там хомить, он и осью с двумя ШД управлять по сути не умеет, использует один драйвер для обоих ШД... Но и в целом, грбл хрень полная. Начиная от глючного софта и заканчивая глючными прошивками.Andrey@KZN писал(а):А чего было просто на grbl не переехать?
Re: Управление мощностью лазера сигналами Zоси на ARDUINO
Извольте узнать, что именно изменялось в постпроцессоре?msl272 писал(а): Использование осиZ для управления мощностью требует соотв. настройки постпроцессора программы формирующей G-код.
Re: Управление мощностью лазера сигналами Zоси на ARDUINO
Собрал, прошил. Шим сигнал на 9 пине есть. Но, TTL на самом лазере не срабатывает. походу в самом шиме нет абсолютного нуля. а вот через оптопару работает как положено. Возможно проблема в TTL самого лазера, так как PWM с LPT порта также воспринимает. Автору Спасибо
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 20 янв 2017, 13:23
- Репутация: 39
- Настоящее имя: Вячеслав
- Контактная информация:
Re: Управление мощностью лазера сигналами Zоси на ARDUINO
По поводу постпроцессора у RAGE надо спросить. Он его писал. Я попробую ему сообщить.
-
- Кандидат
- Сообщения: 49
- Зарегистрирован: 25 май 2016, 13:55
- Репутация: 11
- Контактная информация:
Re: Управление мощностью лазера сигналами Zоси на ARDUINO
msl272
Скажи пожалуйста, зачем разделены выходы Аналог и зависимый от оси Z?
Немного не понял алгоритм управления лазером. Можно и скоростью шпинделя - это аналог 0-10В и высотой Z. Но выходы с платы идут раздельно.
Как подключён лазер?
И в программе :
analogWrite(pin_an_pwm,(U_inp >> 2)); //формирование аналоговой ШИМ на выходе
Вроде как получается шим на выходе в 4 раза меньше чем входной сигнал. Или я не прав?
Скажи пожалуйста, зачем разделены выходы Аналог и зависимый от оси Z?
Немного не понял алгоритм управления лазером. Можно и скоростью шпинделя - это аналог 0-10В и высотой Z. Но выходы с платы идут раздельно.
Как подключён лазер?
И в программе :
analogWrite(pin_an_pwm,(U_inp >> 2)); //формирование аналоговой ШИМ на выходе
Вроде как получается шим на выходе в 4 раза меньше чем входной сигнал. Или я не прав?
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 20 янв 2017, 13:23
- Репутация: 39
- Настоящее имя: Вячеслав
- Контактная информация:
Re: Управление мощностью лазера сигналами Zоси на ARDUINO
Изначально планировали просто сделать преобразователь аналогового сигнала в ШИМ. Сделали, но испытания не дали положительного результата. Проблема в программе MACH3. При изменении значения аналогового выхода (т.е. меняем мощность лазера, включаем/отключаем лазер) матч автоматически выполняет остановку и задержку в несколько десятых секунды. Для резки материала это вроде терпимо, а когда делаешь гравировку с контрастами, получаешь кучу остановок каретки на каждой линии рисунка и соотв маленький прожиг в каждой точке останова...
Убрать эту задержку из мача мы не смогли. Она где то в программе зашита. Видимо фрезера не требуют постоянной смены скорости при каждом проходе.
Поэтому было решено переделать управление лазером. В той же программе был организован второй канал управления, полностью независимый от первого. Использовать можно любой, и даже оба сразу не зависимо друг от друга.
Во втором канале лазер управляется сигналами Z оси. У нас так настроено: когда Z=0 головка отключена, если Z= -1mm лазер на полной мощности.
Соответственно постпроцессор должен "поднимать" ось Z до нуля при отключении лазера и "опускать" ось Z на 1 мм (или на меньшее значение для меньшей мощности) для включения головки на полную мощность.
Постпроцессор написан для Арткама. Все как обычно, грузишь контур или рисунок в арткам, получаешь готовую программу. Более детально надо rage спрашивать, он все это писал. Я только аппаратной частью занимался.
analogWrite(pin_an_pwm,(U_inp >> 2));
Элементарное согласование. U_inp имеет тип int и содержит значение с АЦП от 0 до 1023. Функция analogWrite должна получить тип char со значением от 0 до 255.
Убрать эту задержку из мача мы не смогли. Она где то в программе зашита. Видимо фрезера не требуют постоянной смены скорости при каждом проходе.
Поэтому было решено переделать управление лазером. В той же программе был организован второй канал управления, полностью независимый от первого. Использовать можно любой, и даже оба сразу не зависимо друг от друга.
Во втором канале лазер управляется сигналами Z оси. У нас так настроено: когда Z=0 головка отключена, если Z= -1mm лазер на полной мощности.
Соответственно постпроцессор должен "поднимать" ось Z до нуля при отключении лазера и "опускать" ось Z на 1 мм (или на меньшее значение для меньшей мощности) для включения головки на полную мощность.
Постпроцессор написан для Арткама. Все как обычно, грузишь контур или рисунок в арткам, получаешь готовую программу. Более детально надо rage спрашивать, он все это писал. Я только аппаратной частью занимался.
analogWrite(pin_an_pwm,(U_inp >> 2));
Элементарное согласование. U_inp имеет тип int и содержит значение с АЦП от 0 до 1023. Функция analogWrite должна получить тип char со значением от 0 до 255.
-
- Кандидат
- Сообщения: 49
- Зарегистрирован: 25 май 2016, 13:55
- Репутация: 11
- Контактная информация:
Re: Управление мощностью лазера сигналами Zоси на ARDUINO
Спасибо за развёрнутый ответ. Теперь всё понятно.
Забыл что вход аналога 10 бит а шим 8 бит.
Забыл что вход аналога 10 бит а шим 8 бит.
- FLUKE
- Мастер
- Сообщения: 843
- Зарегистрирован: 11 мар 2013, 21:18
- Репутация: 187
- Настоящее имя: Сергей
- Откуда: Смоленск
- Контактная информация:
Re: Управление мощностью лазера сигналами Zоси на ARDUINO
Тоже столкнулся с этой проблемой, только в другой ситуации.msl272 писал(а):автоматически выполняет остановку и задержку в несколько десятых секунды
У меня ethernet smoutchstepper, там нужно использовать коды M62P* и M63P*. Они исполняются в момент начала движения.
-
- Новичок
- Сообщения: 28
- Зарегистрирован: 13 май 2017, 18:30
- Репутация: 5
- Настоящее имя: Marek
- Контактная информация:
Re: Управление мощностью лазера сигналами Zоси на ARDUINO
Какие настройки в MACH3 для виртуальной оси «A»
В основном это параметр «STEPS / PER
В основном это параметр «STEPS / PER
-
- Почётный участник
- Сообщения: 115
- Зарегистрирован: 25 янв 2017, 16:15
- Репутация: 18
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Управление мощностью лазера сигналами Zоси на ARDUINO
А кто подскажет что надо сделать что бы комменты в этом скетче корректно отображались?
Вероятно они написаны на русском языке.
Под спойлером как он у меня открывается.
Вероятно они написаны на русском языке.
Под спойлером как он у меня открывается.
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 20 янв 2017, 13:23
- Репутация: 39
- Настоящее имя: Вячеслав
- Контактная информация:
Re: Управление мощностью лазера сигналами Zоси на ARDUINO
Скетч можно тупо в блокноте открыть и посмотреть.
Если речь про ардуиновскую среду идет, то такие вопросы лучше на их форуме спросить.
Если речь про ардуиновскую среду идет, то такие вопросы лучше на их форуме спросить.
- FLUKE
- Мастер
- Сообщения: 843
- Зарегистрирован: 11 мар 2013, 21:18
- Репутация: 187
- Настоящее имя: Сергей
- Откуда: Смоленск
- Контактная информация:
Re: Управление мощностью лазера сигналами Zоси на ARDUINO
Petrov, давно это было... Переходом на мач 4 я решил эту проблему и то частично на скорости ДО 2м/мин, мач 3 все равно подтормаживает при склейке траектории.
-
- Новичок
- Сообщения: 5
- Зарегистрирован: 26 ноя 2020, 00:05
- Репутация: 0
- Настоящее имя: Андрей
- Контактная информация:
Re: Управление мощностью лазера сигналами Zоси на ARDUINO
Понял, ну а имея мач3 как можно мне решить этот вопрос, управляя лазером вместо шпинделя?как сделать чтобы не было остановки при исполнении кода м3 и a, подскажите пожалуйста
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 20 янв 2017, 13:23
- Репутация: 39
- Настоящее имя: Вячеслав
- Контактная информация:
Re: Управление мощностью лазера сигналами Zоси на ARDUINO
Собственно эта тема для того и начата.
Никак невозможно убрать задержку у mach3 при выполнении команды M03. На фрезере этого даже не заметно, а для лазера это просто гемор какой-то.
Поэтому здесь лазером управляет ось Z. При Z=0 лазер выключен. при Z=-1 лазер включен на полную мощность. Включение/выключение происходит практически мгновенно.
Единственно, нужен построцессор который заменяет в программе коды M3, М5 на Z0, Z-1.
Никак невозможно убрать задержку у mach3 при выполнении команды M03. На фрезере этого даже не заметно, а для лазера это просто гемор какой-то.
Поэтому здесь лазером управляет ось Z. При Z=0 лазер выключен. при Z=-1 лазер включен на полную мощность. Включение/выключение происходит практически мгновенно.
Единственно, нужен построцессор который заменяет в программе коды M3, М5 на Z0, Z-1.
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 20 янв 2017, 13:23
- Репутация: 39
- Настоящее имя: Вячеслав
- Контактная информация:
Re: Управление мощностью лазера сигналами Zоси на ARDUINO
Ардуина подключается к сигналам STP и DIR Z оси контроллера. На выходе ардуины ШИМ сигнал управления лазером.
Формируется 64 градации мощности лазера.
Формируется 64 градации мощности лазера.
-
- Новичок
- Сообщения: 5
- Зарегистрирован: 26 ноя 2020, 00:05
- Репутация: 0
- Настоящее имя: Андрей
- Контактная информация:
Re: Управление мощностью лазера сигналами Zоси на ARDUINO
Понял вас, спасибо всем)