- PVSM.RU - https://www.pvsm.ru -
Разработка инверторов и систем управления для электроприводов очень непростое, как может показаться на первый взгляд дело. На это есть несколько причин. Дело в том, что приходится работать с электромеханической системой, которая может накапливать энергию одновременно в нескольких местах:
Собственно сеть или аккумулятор;
Индуктивности кабельных линий;
Емкости DC звена инвертора;
Магнитная система электродвигателя;
Кинетическая энергия ротора и механизма.
Дополнительно влияют:
Упругие деформации валов или канатов. (Зависит от механизма);
Люфты (соединение вала энкодера, например тоже с ними).
При этом один вид энергии может лихо перетекать в другой без вашего желания. Заметим в системе будет оставаться энергия даже когда отключен аварийный автомат! Например разогнали паровоз электродвигатель с постоянными магнитами, что то случилось, отключили контактор, закрыли транзисторы инвертора, но двигатель разогнан и является уже генератором, который с пламенем открытым может разрывать транзисторы. И получить ток КЗ в килоамперы можно от небольшой машины. /например Капица П.Л., специально загонял машину в такой режим, для получения в пике 50МВт на нагрузке.
Все указанные факторы должны быть отработаны, и получено требуемое качество регулирования электропривода, а настройка САУ это всегда творческий процесс. Один из моментов плясок с бубном работы с приводом я и расскажу.
Было это на заре туманной юности когда работал в интересной фирмочке ООО НПФ Интехсиб, г. Новокузнецк. (Фирма есть эта и ныне, занимается тем же, но формат работы несколько изменился.) Базовые принципы работы фирмы:
Только аналоговые системы управления. Допускается только КР140УД708, LM2904, LM358, BC817/807, КТ837Ф, ну и реле SHRACK;
Каждый узел, должен быть custom;
Только нормальные читаемые схемы с номиналами, без миллиона переходов с листа на лист и непонятных бесконечных кубиков. /ЕСКД в топку/;
От такого списка многих затрясет, но технический руководитель фирмы, еще за «Венеры» получал премии, которые летали по настоящему так то. Про надежность, помехоустойчивость, качество регулирования и цену аналоговых систем напишу отдельную статью. Скажу что это феноменально красивые и надежные решения, по габаритам даже поменьше цифровых современных аналогов.
Несмотря на любовь к аналоговой схемотехнике, до внедрения стандарта обязательного наличия на шахтных подъемных машинах электронных регистраторов, была разработана своя аппаратура еще в далеком 2004г. Для понимания масштабов это ЦШ 5х8. Каждый «моторчик» около 5-6МВт.
Шкаф плавного разгона преобразовательного агрегата Генератор-Двигатель (бережем синхронный двигатель и электроэнергию)
Тиристорная сборка плавного пуска
Возбудитель синхронного двигателя
Шкаф релейный (99% объема шкафа клеммники для подключения огромного количество кабелей, а сама автоматика все остальное 3 блока всего размером)
Реверсивный возбудитель генератора( с системой регулирования скорости привода, фото выше)
Возбудитель подъемного двигателя
Пленка сверху, так как вода с крыши капает.
Аппаратура давала примерно вот такие картинки:
Скажу сразу, что это не прокатный стан и главное - минимальные переходные процессы.
Частота сэмплов была примерно 10-15Гц, запись была круглосуточной, с архивом на годы. На компах того времени. Отстраивать САУ с того момента стало очень удобно.
В 2014г. после перехода на «вольные хлеба», был интересный заказ. Сервопривод на базе SRM машины. Доделать его не получилось по многим причинам, но сам электродвигатель получился отличный и даже родилось искусство проектирования SRM /Иногда очень полезно не копировать и не смотреть как делают другие./. Проблема таких машин в том, что они имеют большую пульсацию момента, шумят, преобразователь сложный и нестандартный, тем не менее делать можно, если не идти напролом и не пытать все выправить электроникой.
Ключевой проблемой настройки стало отсутствие мониторинга с высокой частотой сэмплов.
С одной стороны с точки зрения электроники электродвигатель такое медленное устройство, с другой транзистор за 10мкс сгорает при аварийных процессах. И страшно не то что сгорело, а когда понять невозможно. А почему сгорело?
За 10 последующих лет было предпринято несколько попыток ПО такое сделать, но не было заказов, где была бы острая нужда в наблюдательном инструменте.
В 2020г. Было сделано вот этот вариант. Концепт устроил, но довести до ума так и не удалось.
https://github.com/gravl4/ADC_UDP_LOGGER [1]
и генератор потока https://github.com/gravl4/ADC_UDP_STREAM_LPC1778 [2]
Основные изменения, это интерфейс — Ethernet. Плюсы
Он везде есть и одинаковый!
Нет проблем с драйверами;
Нет проблем со скоростью;
Дополнительная гальваническая изоляция;
Легко работать на программном уровне как со стороны ПК так и МК;
В 2024г появилась возможность заняться электроприводами. Стало понятно, что нужно выстраивать свою экосистему проектирования и изготовления инверторов. Причем в штучных или мелкосерийных партиях. Вопрос мониторинга встал остро. Основные требования в реалиях 2025г.
Ethernet или WiFi интерфейс, UDP протокол;
Медленные сэмплы 1кГц-10кГц, «аварийные» сэмплы до 1МГц;
Время записи до 20мин или 3-5млн. измерений;
Два аналоговых окна, синхронизированных по шкале;
Масштабирование, перетаскивание;
Сохранение настроек и осциллограмм;
Desktop, Linux, Rust;
16 аналоговых каналов;
32 цифровых;
Частота кадров не менее 20Гц;
Timestamp ставит микроконтроллер;
В инверторе есть массив сэмплов с частотой работы основного цикла и некоторые важные каналы даже выше. Пока нет аварии или синхроимпульса, данные идут медленно. Из массива берутся не все сэмплы. Если есть аварийное событие или синхроимпульс, то выдаем весь массив с разрешением до 1мкс. Дальше думаем почему что то случилось или почему САУ дергается.
Почему так сложно:
1. Поток данных в моем случае на 1МГц — 50МБайт/с - 60ГБайт/20мин, все сохранить и обработать на данном этапе собственного развития, не реально.
2. В отличие от видео на осциллограмме надо смотреть как всю запись за 20мин, так и микросекунды, либо как то посередине. Это либо весь «фильм» в один кадр преобразовать, либо 100кадров в один пересчитать либо покадрово вручную пролистывать.
Есть альтернативный способ, как делают многие приводчики, пишут на флешку, потом утилитой смотрят. Это не совсем удобный способ. Есть режимы, когда надо крутить привод и на ходу коэффициенты менять, естественно и видеть сразу что происходит.
Начались поиски подрядчиков, было интересно понимать, как не любят Rust. Почему именно он?
Руководитель всегда прав;
Rust заставляет тебя обрабатывает исключения. Как эмбеддеру мне просто феноменально это нравиться. У меня в эмбеде целевой код это 1-5%. Остальное либо инструментарий, либо обработка событий датчик отвалился, что делать? Или пришли данные битые, как быть? Модуль связи не отвечает на AT команды. и т. д.
Вообще Rust и UI это слезы. Тем не менее после хелло ворлд выделил три. slint, egui, gpui
Slint отпал так как предлагает еще один свой язык. Мне как эмбеддеру хватает заклинаний: С, ASM, Make, GDB, Скрипт линкера, Json для VSC
Еще в один вникать не хотелось совсем, отдавать на откуп подрядчикам и за каждым чихом их вызывать тоже. Пришлось взяться за программирование для ПК самому, 25 лет спустя после Delphi в институте.
Очень впечатлил gpui, но пришлось отказаться так как нативного plot нет, а plotter медленная библиотека когда пару тысяч точек на канал. Сильно хотелось свой plot сделать в философии gpui на wgpu, но как всегда время/ресурсы.
Тестировались разные подходы:
Gnu plotter + minifb — внешняя программа, получалось медленно
просто minifb — быстро, но нужно свои компоненты создавать или с тем же egui совмещать
egui + wgpu — хорошо, так миллионы точек все равно не обработать
Остановился в итоге на egui + rayon + egui_plotter = готовить максимум 2000 точек на канал + максимально параллельные вычисления. egui_plot по факту пришлось делать свою сборку.
Делал запрос, pull request но отклонили [3]. Немного не устраивал их штатный режим автомаштабирования. Данные решил обрабатывать следующим образом. Меня как разработчика интересуют не значения, а экстремумы. Алгоритм берет интервал времени приходящийся на 1 пиксель, определяет мин и максимум, и оба идут в отображение. Результат трудов:
Параметры:
Пакеты UDP;
16 аналоговых/32 цифровых, все в настраиваемых цветах;
Все масштабируется, перетаскивается;
Conversion — это пересчет в физическую величину, Reduction — это масштабирование на графике. Иногда надо 100А смотреть вместе с 10000об/мин
Осциллограммы, настройки можно сохранять открывать.
Баги как обычно есть, но пользоваться уже можно. Из-за egui жрёт ресурсы как не в себя, но делать нечего :-(. Сборка выложена здесь BUILDS. Исходники здесь [4].
Сборка сделана в отладочном варианте, поэтому размер ну вот такой большой :-) Планы по развитию (при наличии ресурсов естественно)
Настройка параметров привода из программы мониторинга
Режим простого осциллографа
Перенести на gpui и сделать свой wgpu основанный plot компонент
Автор: VauAG
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/rust/423775
Ссылки в тексте:
[1] https://github.com/gravl4/ADC_UDP_LOGGER: https://github.com/gravl4/ADC_UDP_LOGGER
[2] https://github.com/gravl4/ADC_UDP_STREAM_LPC1778: https://github.com/gravl4/ADC_UDP_STREAM_LPC1778
[3] pull request но отклонили: https://github.com/emilk/egui_plot/pull/77/commits/11de996460742af8a697b26ef27d95b47fb3cefc
[4] Исходники здесь: https://gitflic.ru/project/gravl4/vaumototool
[5] Источник: https://habr.com/ru/articles/922548/?utm_source=habrahabr&utm_medium=rss&utm_campaign=922548
Нажмите здесь для печати.