Skip to content

Latest commit

 

History

History
executable file
·
125 lines (92 loc) · 17.1 KB

READMEru.md

File metadata and controls

executable file
·
125 lines (92 loc) · 17.1 KB

Регулятор высоты плазменной горелки

Регулятор высоты плазменной горелки на базе Arduino (МК ATmega328P). Применим для улучшения качества реза неровных листов и заготовок металла методом плазменной резки. Регулятор полностью перехватывает на себя управление вертикальной осью от станка ЧПУ (т.е. включается "в разрыв"). На случай необходимости предусмотрен режим работы "в обход", при котором контроль высоты не активен. Текущая высоты горелки во время реза определяется из напряжении плазменной дуги: чем выше напряжение, тем больше высота, и наоборот.

Функциональность

  • Прием сигналов от ЧПУ для начального позиционирования горелки по высоте, а также для ручного подъема/опускания;
  • API для подключения любого привода оси Z (уже реализованы 2 типа драйверов для шагового двигателя: биполярное 4-проводное включение и 2-проводный "умный" драйвер (STEP + DIRECTION));
  • Автоматическое определение напряжения (высоты) удержания при заданной высоте прокола (позволяет абстрагироваться от толщины, материала металла и других параметров);
  • Регулируемый по ширине интервал нечувствительности регулятора (гистерезис);
  • Программная фильтрация шумов и скачков напряжения (рекомендуется к применению наряду с аппаратным фильтром);
  • Отображение текущего напряжения дуги, измеренного напряжения удержания (позволяет оценить процесс регулировки);
  • Детектирование касания металла при включении (не требуется предварительно выставлять начальную высоту, достаточно просто указать ее в настройках);
  • Режим работы "в обход", при котором система воспринимает только сигналы движения вверх/вниз;
  • Подробное меню для настройки необходимых параметров (стандартный двухстрочный ЖК дисплей типа HD44780);
  • Параметры сохраняются после выключения устройства.

Алгоритм работы

  • ЧПУ либо пользователь совершают начальное позиционирование (например, переезд до точки начала реза);
  • После отправки станком ЧПУ сигнала на включение плазмы горелка опускается до касания с листом металла;
  • После касания горелка приподнимается на высоту прокола (параметр задается);
  • Горелка удерживается в данной позиции на время прокола (параметр задается);
  • Запускается регулировка по уровню напряжения. Начинается процесс непосредственного вырезания детали;
  • После подачи станком ЧПУ сигнала на отключение плазмы регулятор переходит в изначальное состояние (ждущий режим).

Подключение

Регулятор включается в разрыв текущей цепи управления и перехватывает на себя соответствующие сигналы.

Входы

В скобках указаны выводы ATmega328P и Arduino.

  • UP (PB2, 10) - сигнал подъема горелки. Подъем осуществляется все время, пока подается данный сигнал;
  • DOWN (PB3, 11) - сигнал опускания горелки. Опускание осуществляется все время, пока подается данный сигнал. Данные сигналы "Вверх" и "Вниз" игнорируются во время реза;
  • PLASM (PB4, 12) - сигнал включения плазмы. Сигнал должен поступать как в регулятор, так и непосредственно запускать плазму в горелке (можно использовать, например, реле с двумя группами контактов);
  • TOUCH (PB1, 9) - сигнал касания горелкой листа металла. Возможно несколько вариантов, в зависимости от конструкции горелки и оси Z. В частности, емкостный датчик (работает как кнопка), либо подключение к соплу горелки (при касании металла напряжение на сопле становится равно потенциалу листа металла);
  • FEEDBACK (PC1, A1) - аналоговый сигнал напряжения дуги, приведенный к интервалу входных напряжений АЦП ATmega328P (0-5 Вольт, желательно с запасом), например, резистивным делителем. Резкие скачки и перепады, а также шумы в сигнале крайне желательно устранить установкой фильтра;
  • SETTINGS ADC (PC0, A0) - аналоговый вход для настройки параметров. Обычно - потенциометр сопротивлением 3-100 кОм и размахом напряжений 0-5 В;
  • SETTINGS BUTTON (PB0, 8) - кнопка циклического выбора меню. Все цифровые входы по умолчанию - типа "активный ноль", и должны быть подтянуты к питанию (+5В DC - питание Arduino). Во избежание влияния наводок и помех необходимо осуществить качественный монтаж и не располагать устройство вблизи высоковольтных или силовых частей. При необходимости сделайте экранировку. Для безопасности компонентов также рекомендуется развязать все связи с остальными частями станка и использовать отдельный гальванически развязанный источник питания.

Мотор

В папке /lib находятся две версии драйвера для шагового мотора: для использования с набором ключей (MotorControl) и для "умных" драйверов с сигналами STEP-DIR (MotorDriver). Выберите один из них, подключив соответствующий заголовочный файл в TorchHeightControl.h. Также вы можете создать свой драйвер, реализовав 5 необходимых функций.

MotorControl

MOTOR_PHASE_A, MOTOR_PHASE_B, MOTOR_PHASE_C, MOTOR_PHASE_D - четыре вывода (фазы) шагового двигателя (A, B, C, D). Подключение через любые ключи: реле, дискретные полевые/биполярные транзисторы, сборки, драйверы и т.д. Правильный порядок включения фаз: A-C-B-D. По умолчанию настроены выводы PC2-PC5 (A2-A5):

  • PC2 (A2) - A;
  • PC3 (A3) - C;
  • PC4 (A4) - B;
  • PC5 (A5) - D.

В то же время, существует путаница в обозначениях обмоток шаговых моторов, поэтому при отсутствии вращения можно попробовать изменить порядок подключения (прежде всего, B и C).

Также для различных двигателей различные оптимальные длительности импульса и периода.

Дисплей

По умолчанию двухстрочный ЖК-дисплей типа HD44780 подключается к выводам порта D с PD1 по PD7 (Arduino 1-7):

  • PD4 (4) - DB4;
  • PD5 (5) - DB5;
  • PD6 (6) - DB6;
  • PD7 (7) - PD7;
  • PD1 (1) - RS;
  • PD2 (2) - RW
  • PD3 (3) - E.

Настройка параметров программы

Перед прошивкой микроконтроллера (МК) можно изменить некоторые параметры в основных файлах программы TorchHeightControl.cpp/h и заголовочных файлах соответствующих библиотек:

  • Порты ввода-вывода (если было установлено отличное от рекомендуемого подключение);
  • Значение по умолчанию петли гистерезиса регулировки (setpoint_offset_EEPROM), интервал допустимых для установки в меню значений (SETPOINT_OFFSET_MIN/MAX_SET_VOLTAGE);
  • Значение по умолчанию высоты прокола (cutting_height_EEPROM);
  • Значение по умолчанию времени прокола (pierce_time_EEPROM);
  • Режим "в обход" (bypass_ON_flag_EEPROM): ВКЛ (1) или ВЫКЛ (0);
  • Число значений для определения напряжения дуги, которое будет удерживать регулятор (NUM_OF_VALUES_FOR_SETPOINT_DEFINITION). Слишком маленькое значение не позволит точно определить нужное напряжение, а слишком большое будет занимать много времени (особенно при высокой зашумленности и неоднородности сигнала);
  • Число значений для усреднения при программном усреднении напряжения дуги (PRESCALER_MAIN_ALGO). Это значение также влияет на частоту алгоритма контроля и, следовательно, на скорость реакции системы: чем больше значений усредняется, тем ниже частота отклика;
  • Интервал нечувствительности при программном усреднении напряжения дуги (OFFSET_FOR_AVRG).

Сборка программы и прошивка

Для сборки рекомендуется использовать программу PlatformIO.

Консольный режим

При необходимости настройте параметры прошивки в файле platformio.ini (например, укажите, использовать для прошивки программатор или нет). Затем, в папке с проектом выполните:

$ pio run  # компиляция

$ pio run -t program  # загрузка через программатор
или
$ pio run -t upload  # загрузка через встроенный программатор Arduino

$ pio run -t uploadeep  # загрузка в EEPROM значений по умолчанию

IDE (Atom или VScode)

  • Импортируйте папку репозитория: File -> Add Project Folder;
  • При необходимости настройте параметры прошивки в файле platformio.ini (например, укажите, использовать для прошивки программатор или нет);
  • Запустите сборку PlatformIO -> Build;
  • Откройте встроенный терминал и выполните команду (при загрузке через программатор):
    $ pio run -t program; pio run -t uploadeep
    При загрузке через плату Arduino:
    $ pio run -t upload; pio run -t uploadeep

Использование

После прошивки регулятора на дисплее отображается главное меню (ждущий режим). На нем отображаются текущие настройки интервала гистерезиса при регулировании, высоты (lft) и задержки (dlay) прокола. Нажатием кнопки меню перейдите к настройкам и задайте параметр с помощью потенциометра. В скобках указано текущее значение параметра. Нажимайте кнопку меню, пока не настроите все параметры и не вернетесь в главное меню.

После замыкания реле плазмы отображается надпись start.... После касания горелкой листа металла надпись сменяется на pierce... и сохраняется все время прокола. Затем промаргивает надпись define sp..., во время которой система определяет напряжение дуги для удержания, и, наконец, дисплей переходит в рабочий режим: верхняя строчка отображает измеренное напряжение удержания, нижняя - текущее напряжение (усредненное). Если надпись define sp... сохраняется слишком долго, то это говорит о слишком большом количестве точек для определения уставки (NUM_OF_VALUES_FOR_SETPOINT_DEFINITION), либо слишком маленьком интервале усреднения (OFFSET_FOR_AVRG), либо сильно зашумленном сигнале.

По возвращении в режим ожидания (после размыкания реле плазмы) в первой строчке будет отображаться последнее измеренное значение напряжения дуги.

Для входа в режим обхода удерживайте нажатой кнопку меню около 8 секунд. На экране отобразится надпись regulation off. Регулятор будет реагировать только на сигналы подъема/опускания. Текущий режим сохраняется при сбросе и отключении питания. Для выхода из режима также удерживайте кнопку меню в течение 8 секунд.

Замечания

Поведение контроллера при подаче нескольких управляющих сигналов одновременно (например, сигнал зажигания плазмы и касания) в общем случае не определено и зависит от порядка их обработчиков в коде прерывания PCINT0_vect. Благодаря конструкции if - else if исключается выполнение нескольких блоков за один проход прерывания, однако все же данные ситуации крайне не рекомендуются. Впрочем, при работе в реальном устройстве подобные случаи не должны встречаться.

Диаграмму переходов конечного автомата (UML), можно посмотреть в файлах torch-height-control-uml.* (создано с помощью draw.io).