НАСТРОЙКА И РАБОТА КОМПЛЕКТНЫХ СЕРВОПРИВОДОВ SHENLI ДЛЯ РАБОТЫ ПО ПРОТОКОЛУ MODBUS RTU
Применение интерфейса RS485 для управления сервоприводом SHENLI DSL200 при помощи контроллера Serebrum Cobalt.
В данной статье рассмотрим вариант использования сервоприводов в качестве SLAVE устройства в сети MODBUS RTU без использования высокоскоростных генераторов импульсов.
Протокол MODBUS разработан и применяется довольно давно из-за его преимуществ:
1. Высокая помехоустойчивость
2. Удобный монтаж по последовательному интерфейсу RS485
3. Цифровой формат данных
Недостатки ограничены условно низкой скоростью и сложностями в формировании фреймов (посылок). Что касается скорости передачи, то её явно недостаточно для управления в реальном времени, так как одновременное управление несколькими приводами с интерполяцией упрется в пропускную способность интерфейса в этих случаях уже следует использовать Ethercat и подобные ему протоколы, но для задач, в которых не требуется реакция в реальном времени, то данный протокол более чем удобен, что мы ниже и рассмотрим.
Итак, вводные:
- Необходимо управлять скоростью вращения сервопривода, либо моментом (управление по положению при помощи MODBUS RTU данный привод не поддерживает в полной мере, только по пресетам положений)
- Управление должно осуществляться при помощи потенциометра
- Минимальные обороты 20 об/мин
- Максимальные обороты 1500 об/мин (3000 об/мин)
- Контроллер промышленного класса
В данном списке будем отталкиваться от того, что выбранный нами контроллер Serebrum Cobalt не имеет цифровых выходов со скоростью генерации импульсов выше 100 кГц, чего не слишком хватает для покрытия диапазона сервопривода (0 – 400 кГц), а следовательно у нас появляется проблема с сужением доступного диапазона скоростей, даже при использовании электронного редуктора сервоусилителя мы не сможем найти диапазон одинаково удовлетворяющий требованиям минимального значения скорости и максимального, без потерь в плавности. К тому же, сервоусилитель Shenli DSL200 сам рассчитывает параметры ускорения и торможения по установленным параметрам, что снимает необходимость производить эти расчеты на стороне контроллера в случае использования импульсного сигнала для управления.
В данной ситуации мы будем опираться на MODBUS RTU который поддерживается Cobalt. Для активации данного режима в сервоусилителе необходимо выполнить ряд действий после включения сервопривода в первый раз. Давайте перечислим параметры, которые нам нужно настроить.
Согласно таблице режимов управления, нас интересует режим SPEED CONTROL 2 (установка скорости через внутренний регистр)
Соответственно выставляем параметр P1-00 в значение 5. Далее необходимо отключить режим ожидания внешнего возбуждения сервопривода по дискретному сигналу (аналог EN на шаговых двигателях). Для этого нам нужно найти какой параметр управляет режимом SON (Servo ON), согласно инструкции, это параметр P1-04, выставляем его в значение 1 и на 3 секунды зажимаем кнопку SET для сохранения именно этого параметра, остальные параметры не требуют длительного удержания кнопки SET.
Далее, нам нужно выбрать источник сигнала, так как сервопривод SHENLI поддерживает 2 протокола (Step/Dir(cw/ccw) и MODBUS RTU). За данный нюанс у нас отвечает параметр P1-03: control instruction input source setting: 0 - control command terminal given; 1 - control command ModBus RTU communications given (RS-485). Ставим 1 и идем дальше.
Теперь нас интересуют параметры отправки данных для протокола, за настройки протокола передачи данных у нас отвечает группа параметров P3. Необходимо выбрать номер базы через P3-00, мы выставили 2, далее в P3-01 выбираем скорость передачи в бодах, по умолчанию 38400, чего нам достаточно, P3-02 оставляем без изменений и запоминаем что выставлен 0 и он соответствует следующим настройкам серийного порта: (No Check), 1+8+N+1 что означает DATA Bit – 8, четность (parity) – None, Stop bit – 1 bit. P3-03 – внутренний согласующий резистор, так как мы используем одно подчиненное устройство, то оставляем без изменений. P3-05 – ставим 0 (RS485 MODBUS RTU).
На данном этапе подготовка сервопривода закончена и далее нам нужно понять в какой регистр нужно слать данные о скорости чтобы иметь возможность ее изменять. Согласно инструкции, это параметр P4-44, значение данного параметра будет использоваться для вращения сервопривода со скоростью, указанной в нем. В таблице параметров запоминаем адрес данного регистра в памяти (4×1068), далее он нам пригодится.
Данный режим работает следующим образом: при записи значения скорости 0 в регистр 4×1068 сервопривод будет остановлен, при записи значения в диапазоне 0-3000 сервопривод будет вращаться по часовой стрелке с заданной скоростью, при этом используя параметры ускорения, замедления, торможения из настроек сервоусилителя. При записи значения от 0 до -3000 будет осуществляться против часовой стрелки со скоростью равной абсолютному значению параметра 4×1068.
Так как MODBUS RTU не поддерживает отрицательные значения, да и в принципе работает в основном с HEX форматом, то отрицательные значения лежат в особом диапазоне положительных чисел, что несколько усложняет задачу, но контроллер Serebrum Cobalt решает данный вопрос самостоятельно.
Дальнейшая работа связана сугубо с настройкой отправки пакетов по последовательному интерфейсу, для этой цели можно использовать копеечный USB мост на базе CH340 интерфейса либо любой ARDUINO, который способен отправлять данные в серийный порт.
Управление
Наша система будет построена на базе контроллера на ARM архитектуре со своим программным комплексом YART STUDIO, значительно облегчая задачу программирования, так как достаточно иметь представление о логике работы программы, не особо разбираясь в программном коде и его синтаксисе.
Для использования аналоговых портов ввода в первую очередь следует произвести их программную и аппаратную настройку. Первая заключается в том, что необходимо выставить в настройках портов режим работы 0-10 кОм, при этом 4 порта ввода преобразуются в 2, один из которых будет источником напряжения 3,3 В, второй будет считывать напряжение, которое будет проходить через потенциометр.
Аппаратная настройка заключается в переключении джамперов на плате контроллера, напротив каждого аналогового входа. Согласно приложенному рисунку в YART STUDIO.
Данный контроллер имеет 6 дискретных цифровых входов, которые в данной статье нам не интересны, но в проекте мы используем их для кнопок изменения направления и для концевиков.
Также, имеются 4 дискретных выхода с максимальной частотой работы 100 кГц, чего вполне достаточно для работы шагового привода на небольших делениях шагов.
После подключения электрической части мы получаем значения сопротивления в Омах на аналоговом входе, которое меняется в диапазоне от 0 до 10000 Ом (примерно), после математической обработки мы можем использовать значения сопротивления, как значения скорости и записывать их в регистр 4-44 сервопривода, тем самым изменяя скорость вращения. Любые полученные значения могут быть отправлены в последовательный порт контроллера через соответствующий программный блок через переменную.
Теперь вспомним, что номер нашего Slave устройства = 2, регистр 4-44 имеет адрес памяти 1068. Переменная MODBUS SPEED хранит в себе значения потенциометра и блок MBRTUMSRWrite пишет их с периодом 100 мс в серийный порт, настроенный при помощи блока SerialPortParam.
Сервопривод SHENLI принимает фреймы, отправленные с Cobalt и каждые 100 мс обновляет значение 4-44 у себя в памяти, тем самым меняя скорость вращения сервопривода.