В одном из цехов предприятия, на котором я работаю, стоит станок, который изготавливают пластиковую тару. Станок называется выдувной автомат. Он выпущен в 1988 году в Карловых Варах компанией CHODOS:
Управляет циклом электроника на микросхемах TTL логики (типа К155(555) или SN74xx). Под катом расскажу, как электронику прошлого века я заменил на микроконтроллер STM32.
Принцип работы выдувного автомата вкратце таков: поступающая из бункера пластмассовая крошка плавится и выдавливается шнеком под давлением через сопла, формируя «рукава». После этого «рукава» отрезаются и подаются в выдувные формы, в которых под давлением подаваемого воздуха формируется изделие (в моем случае — это пластиковая бутылка).
Управляет станком пара десятков плат TTL-логики, несколько плат коммутаторов нагрузки с семисторами для включения клапанов и пускателей, несколько плат преобразователей уровней входных сигналов от концевиков. Все платы вставлены в корзину с разъемами в шкаф уравления. В корзине всё соединено методом накрутки. Платы TTL логики собраны на микросхемах производства TESLA (аналоги К155(555) либо SN74XX).
Индикация состояния цикла практически отсутствует и поэтому во время его сильных глюков понять, что с ним, практически невозможно. К тому же платы со временем выходят из строя и перед тем, как их ремонтировать, нужно пройти бесконечный квест с мультиметром и кучей бумажных схем, да еще и в неудобных позах.
Было принято решение перевести контроль и управление циклом литья на микроконтроллеры. Первым подопытным контроллером был Arduino Mega 2560. Контроллер оказался очень «нежным» для работы в условиях сильных электромагнитных всплесков от пускателей и электродвигателей. Он просто зависал, когда ему вздумается. Не помогло ни экранирование самого контроллера, ни замена всех кабелей, идущих от концевых выключателей на заземленный МКЭШ 3х0,5. Ну и конечно, была полностью заменена вся электропроводка станка. Одним из вариантов решения проблемы с зависаниями было использование бутлоадера optiboot для Arduino с задействованной функцией watchdog с сохранением состояния в EEPROM и восстановление состояния с продолжением цикла после сброса. Но и это не помогло.
В общем, было решено отказаться от Atmega и перейти на STM32.
В качестве STM32 был приобретен контроллер NUCLEO-F401RE. Все сигналы от концевиков собирались через оптроны PC817. Управление электроклапанами и пускателями было сделано на SSR SHARP S202S02 (можно использовать и пару MOC3041 + BT138).
В качестве индикатора был заказан и оплачен на Aliexpress LCD12864 (ST7920), но продавец прислал LCD 20×4 (в ходе спора деньги вернули обратно, а дисплей остался) и решил применить его.
Программу писал в онлайн компиляторе mbed.
Теперь немного по методам программирования данного контроллера в mbed. Работа с сигналами от концевого выключателя, управление нагрузкой и работа с таймерами:
Покажу только ключевые фрагменты.
// Начальные установки
// Регулируемые оператором переменные программа хранит в eeprom памяти.
#include "_24LCXXX.h" // Библиотека работы с микросхемой eeprom памяти
_24LCXXX eeprom(&i2c, 0x50); // Подключаем микросхему eeprom
DigitalIn S41(PC_8); // Концевик S41 подключен через оптрон к выводу PC_8 контроллера
DigitalOut Y43 (PA_13); // Управление гидравлическим клапаном Y43 (катушка 220В) через вывод PA_13
Timer T48; // T48 – таймер применяемый в цикле литья
float SetT48 = 15.0; // Переменная регулируемая оператором. Время на которое включается таймер T48.
…
void setup()
{
…
S41.mode(PullDown); // Задействую подтягивающий резистор
…
}
int main() // Основной цикл{
…
// Метод работы с сигналом от концевика
if (S41==LOW) { //Проверка состояния концевика
…
}
…
// Метод управления нагрузкой
Y43==1; // Включить гидроклапан Y43
Y43==0; // Выключить гидроклапан Y43
…
// Работа с таймером
T48.reset(); // Сброс таймера Т48
T48.start(); // Старт таймера Т48
…
CurrentT48=T48.read(); // Считываем текущее значение счета таймера Т48
if (CurrentT48 > SetT48) {// Сравниваем с заданной величиной
T48.stop();
}
// Вывод динамического состояния таймера на LCD
lcd.printf(«T48=%4.1f», CurrentT48);
…
// Метод работы с eeprom:
eeprom.nbyte_read(0x00, &SetT48, 4 ); // Чтение из еепром 4-х байт начиная с адреса 0х00 и запись содержимого в память отведенной переменной SetT48 (тип переменной float – 4 байта)
eeprom.nbyte_write(0x00, &SetT48, 4); // Запись в еепром 4-х байт начиная с адреса 0х00 значений памяти отведенной переменной SetT48 (тип переменной float – 4 байта)
…
}
Контроллер прошит. NUCLEO прошивается очень легко. После подключения USB кабеля от NUCLEO в компьютер в последнем появляется съемный диск. В него копируем бинарник, полученный после компиляции в онлайн компиляторе и всё — прошивка сама зальется в кристалл. Были моменты, когда приходилось заливать бинарник прямо с Galaxy Nexus через OTG кабель.
Сделал печатную плату методом ЛУТ. Спаял. Смонтировал в шкаф станка. Запустил. Научил Операторов-наладчиков.
На сегодняшний день «пробег» составляет более 100 тыс циклов! Ни единого сбоя по вине электроники.
Итог. Контроллер выдувного автомата имеет 13 входов с оптической развязкой, 11 выходов с оптической развязкой, каждый коммутирует до 8А нагрузки. Программную организацию цикла литья. Светодиодную индикацию входов и выходов. Вывод на экран различной информации. Автоматический и ручной режимы управления. В ручном режиме есть возможность включать и выключать каждый силовой выход по отдельности с программной защитой от аварийных состояний (например, управление пускателями реверса трехфазного двигателя одного из механизмов станка) для диагностики исправности отдельных узлов станка.
Станков у нас три. Остальные два тоже переведу на контроллер.
Про цены не пишу. Курс прыгает. Да и все детальки можно найти на Aliexpress, где я всё и покупал.
Спасибо. На вопросы отвечу.
P.S. На следующем этапе замена древнего управления нагревом шести зон шнека и «головы» станка на современную электронику (6xMAX6675+Atmega328+6xMOC3061+6xBT138-600+LCD20x4). Соберу всё в небольшой ящик и наконец выкину громадный шкаф управления.
ссылка на оригинал статьи http://habrahabr.ru/post/256981/
Добавить комментарий