[Из песочницы] Применение STM32 в промышленных станках на примере выдувного автомата CHODOS (Чехия)

В одном из цехов предприятия, на котором я работаю, стоит станок, который изготавливают пластиковую тару. Станок называется выдувной автомат. Он выпущен в 1988 году в Карловых Варах компанией CHODOS: image

Управляет циклом электроника на микросхемах TTL логики (типа К155(555) или SN74xx). Под катом расскажу, как электронику прошлого века я заменил на микроконтроллер STM32.Принцип работы выдувного автомата вкратце таков: поступающая из бункера пластмассовая крошка плавится и выдавливается шнеком под давлением через сопла, формируя «рукава». После этого «рукава» отрезаются и подаются в выдувные формы, в которых под давлением подаваемого воздуха формируется изделие (в моем случае — это пластиковая бутылка).

Управляет станком пара десятков плат TTL-логики, несколько плат коммутаторов нагрузки с семисторами для включения клапанов и пускателей, несколько плат преобразователей уровней входных сигналов от концевиков. Все платы вставлены в корзину с разъемами в шкаф уравления. В корзине всё соединено методом накрутки. Платы TTL логики собраны на микросхемах производства TESLA (аналоги К155(555) либо SN74XX).

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

Фото корзины с платами (2 фото) 6671c731212b4c6da1392dcb0b9c1067.jpg9ba1da91a6614ade987352f262a97f35.jpg

Было принято решение перевести контроль и управление циклом литья на микроконтроллеры. Первым подопытным контроллером был Arduino Mega 2560. Контроллер оказался очень «нежным» для работы в условиях сильных электромагнитных всплесков от пускателей и электродвигателей. Он просто зависал, когда ему вздумается. Не помогло ни экранирование самого контроллера, ни замена всех кабелей, идущих от концевых выключателей на заземленный МКЭШ 3×0,5. Ну и конечно, была полностью заменена вся электропроводка станка. Одним из вариантов решения проблемы с зависаниями было использование бутлоадера optiboot для Arduino с задействованной функцией watchdog с сохранением состояния в EEPROM и восстановление состояния с продолжением цикла после сброса. Но и это не помогло.В общем, было решено отказаться от Atmega и перейти на STM32.

В качестве STM32 был приобретен контроллер NUCLEO-F401RE. Все сигналы от концевиков собирались через оптроны PC817. Управление электроклапанами и пускателями было сделано на SSR SHARP S202S02 (можно использовать и пару MOC3041 + BT138).

image

В качестве индикатора был заказан и оплачен на Aliexpress LCD12864 (ST7920), но продавец прислал LCD 20×4 (в ходе спора деньги вернули обратно, а дисплей остался) и решил применить его.

Программу писал в онлайн компиляторе mbed.

Теперь немного по методам программирования данного контроллера в mbed. Работа с сигналами от концевого выключателя, управление нагрузкой и работа с таймерами:

Вырезка из кода Весь код занимает примерно 2000 строк. Выкладывать не буду. Скажу только, что из контроллера постоянно выходит сервисная информация через COM порт (сделал для себя).Покажу только ключевые фрагменты.

// Начальные установки// Регулируемые оператором переменные программа хранит в eeprom памяти.#include »_24LCXXX.h» // Библиотека работы с микросхемой eeprom памяти_24LCXXX eeprom (&i2c, 0×50); // Подключаем микросхему eepromDigitalIn S41(PC_8); // Концевик S41 подключен через оптрон к выводу PC_8 контроллераDigitalOut Y43 (PA_13); // Управление гидравлическим клапаном Y43 (катушка 220В) через вывод PA_13Timer T48; // T48 — таймер применяемый в цикле литьяfloat SetT48 = 15.0; // Переменная регулируемая оператором. Время на которое включается таймер T48.…void setup (){…S41.mode (PullDown); // Задействую подтягивающий резистор…}int main () // Основной цикл{…// Метод работы с сигналом от концевикаif (S41==LOW) { //Проверка состояния концевика…}…// Метод управления нагрузкойY43==1; // Включить гидроклапан Y43Y43==0; // Выключить гидроклапан Y43…// Работа с таймеромT48.reset (); // Сброс таймера Т48T48.start (); // Старт таймера Т48…CurrentT48=T48.read (); // Считываем текущее значение счета таймера Т48if (CurrentT48 > SetT48) {// Сравниваем с заданной величинойT48.stop ();}// Вывод динамического состояния таймера на LCDlcd.printf («T48=%4.1f», CurrentT48);…// Метод работы с eeprom: eeprom.nbyte_read (0×00, &SetT48, 4); // Чтение из еепром 4-х байт начиная с адреса 0×00 и запись содержимого в память отведенной переменной SetT48 (тип переменной float — 4 байта)eeprom.nbyte_write (0×00, &SetT48, 4); // Запись в еепром 4-х байт начиная с адреса 0×00 значений памяти отведенной переменной SetT48 (тип переменной float — 4 байта)…}

Контроллер прошит. NUCLEO прошивается очень легко. После подключения USB кабеля от NUCLEO в компьютер в последнем появляется съемный диск. В него копируем бинарник, полученный после компиляции в онлайн компиляторе и всё — прошивка сама зальется в кристалл. Были моменты, когда приходилось заливать бинарник прямо с Galaxy Nexus через OTG кабель.Сделал печатную плату методом ЛУТ. Спаял. Смонтировал в шкаф станка. Запустил. Научил Операторов-наладчиков.

Фото результата aa87f877807844dc99932ba6c41f1bab.jpg Видео результата [embedded content]

На сегодняшний день «пробег» составляет более 100 тыс циклов! Ни единого сбоя по вине электроники.Итог. Контроллер выдувного автомата имеет 13 входов с оптической развязкой, 11 выходов с оптической развязкой, каждый коммутирует до 8А нагрузки. Программную организацию цикла литья. Светодиодную индикацию входов и выходов. Вывод на экран различной информации. Автоматический и ручной режимы управления. В ручном режиме есть возможность включать и выключать каждый силовой выход по отдельности с программной защитой от аварийных состояний (например, управление пускателями реверса трехфазного двигателя одного из механизмов станка) для диагностики исправности отдельных узлов станка.

Станков у нас три. Остальные два тоже переведу на контроллер.

Про цены не пишу. Курс прыгает. Да и все детальки можно найти на Aliexpress, где я всё и покупал.

Спасибо. На вопросы отвечу.

P.S. На следующем этапе замена древнего управления нагревом шести зон шнека и «головы» станка на современную электронику (6xMAX6675+Atmega328+6xMOC3061+6xBT138–600+LCD20×4). Соберу всё в небольшой ящик и наконец выкину громадный шкаф управления.

© Habrahabr.ru