Простейший программируемый логический контроллер на базе микросхемы FT2232.
При знакомстве с функциональными возможностями чипа FT2232, в частности исследовался BitBang режим, была написана программка для связи компа с внешним миром. Потом возникла идея сделать программу, которая обрабатывала бы входную информацию и что-то передавала на выход (отродясь не писал таких заумных слов, надеюсь, получилось не очень страшно).
Работа, прежде всего, предназначена для моргания светодиодами, так же будет полезна подрастающему поколению, только вступившему на тернистый путь освоения электроники, ещё может использоваться при изучении работы не очень сложных микросхем, опять же, если срочно надо поменять микросхему, а под рукой ничего нет, можно эмулировать работу чипа, короче вещь в хозяйстве незаменимая)
Программа.
Программа писалась на VB6 в среде Windows XP. Для полного счастья необходимо скачать драйвера на сайте производителя чипа www.ftdichip.com/Drivers/D2XX.htm и запустить программу (если лень возиться с железом и драйверами, будет работать и так, но полного кайфа уже не получите).
После запуска программы попадаем на вкладку Configuration.
Здесь, в правом верхнем углу нам показывают, что у нас подключены два девайса, именуемые А и В. Надо запомнить эти названия, потому, что после мы будем общаться с ними по имени. Ещё можно узнать, что чувствуют они себя отлично и главное, что с ними можно работать. С левой стороны у нас находятся два квадратика. Здесь мы должны определить, какие ножки будут работать на вывод, а какие на ввод. На верхнем квадратике конфигурируем канал А, на нижнем – В. Делается это просто: наводим мышкой на интересующий вывод, и нажимаем левую кнопку мыши, тем самым мы устанавливаем его функциональное назначение, IN/OUT, ввод/вывод, соответственно. Обозначения D7…D0 говорят о том, что в нашем распоряжении имеется аж по восемь ножек на каждом канале. Там ещё кнопочки есть, написано Apply, если устройство подключено, то они будут активны и их необходимо нажать, для того, чтобы прописать конфигурацию в чип. Остался последний квадратик справа внизу. На нем написано Timers, 0.1s это таймеры, их тоже восемь штук именуются они Т7…Т0, их тоже надо запомнить на всякий случай, может пригодится, и, если они нам понадобятся в текстовом поле указать интервал через который выбранный таймер сработает, дискретность интервала составляет 0,1 секунды или 100 миллисекунд. Максимальное число составляет 9999.
И так, смотрим еще раз на картинку, что мы имеем: все ножки канала А будут работать на ввод (IN), канала В – на вывод (OUT). Также я хочу использовать два таймера Т0 и Т1, для этого я написал 5 в соответствующих полях.
Переходим на закладку Program.
Начнем с не совсем чистого листа, большой белый холст вверху это то место, где вы будете творить ваши бессмертные произведения, т.е. поле для ввода программ. Справа в нижнем квадратике расположены кнопки для ввода и редактирования. Остановимся на них поподробнее. Видно, что по цвету, кнопки разделены на пять групп.
Зеленым цветом окрашены кнопки при помощи, которых мы будем обращаться к ножкам микросхемы, конфигурацию которых мы определили на предыдущей закладке, т.е. если надо посмотреть состояние D0 канала А жмём кнопку А0, или, к примеру надо вывести сигнал на пятую ножку канала В, смело давим на В5.
Синим цветом обозначены биты внутренней памяти М7…М0 её можно использовать для временного хранения данных.
Желтым цветом обозначены таймеры Т7…Т0, про них я уже немного писал.
Фиолетовые кнопки это логические операторы.
NOT — инверсия, операция НЕ, результат меняется на противоположный была 1, стал 0, и наоборот, в программе обозначается знаком
.
AND – логическое И двух операндов, обозначается &.
OR – логическое ИЛИ двух операндов, обозначается |.
XOR — исключающее ИЛИ двух операндов, обозначается ^.
= — операция присваивания.
Красным цветом окрашены кнопки редактирования.
Open – открытие программ.
Save – сохранение программ.
INS – вставка команд.
DEL- удаление команд.
И, наконец, пробел, ничего не пишет, просто для наведения красоты.
Остались еще два квадратика обозначенные Force Channel A и Force Channel В.
Здесь будет отображаться состояние выводов чипа, синим цветом – логический 0, красным – 1, окрашиваются только во время выполнения программы. Ещё есть возможность принудительной установки бита в нужное нам состояние. Для этого щелкаем мышью интересующий бит, появится контекстное меню, где можно выбрать, что нам требуется от этого вывода, если бит форсирован, на нем появится буква F.
Force 1 – установит логическую 1.
Force 0 — установит логический 0.
Unforce – состояние вывода определяется программой или внешним сигналом.
И последнее, остались две кнопки с зеленым треугольником и красны квадратом, это соответственно запуск и остановка программы.
В следующем посте напишу непосредственно о программировании, и выложу доки на железо, а на сегодня хватит, Пасха все-таки)))
И ещё не судите очень строго, это первая проба пера.
Источник
Дешевый ПЛК на 16 входов и 16 выходов
Программируемые логические контроллеры (ПЛК) прочно вошли в современную промышленную электронику. Номенклатура выпускаемых в настоящее время ПЛК настолько обширна, что трудно представить задачу, для решения которой не нашлось бы подходящего ПЛК. Богатая периферия, мощные процессора, большой объем памяти, наличие модулей расширения — это только краткий перечень свойств современных ПЛК.
Однако, следует отметить, что в условиях производства очень часто не требуется огромных вычислительных мощностей. Большинство станков, использующихся в производстве, выполняют четко заданные операции и не являются универсальными. Очень часто у этих станков даже нет дисплея, а все параметры задаются с помощью кнопок или переключателей. Грубо говоря, установленные на этих станках ПЛК порой используются для замены стойки с пускателями/реле/концевиками. И довольно часто встречаются ситуации, когда на замену устаревшего оборудования, выполненного с использованием пускателей, поступает оборудование этого же производителя с аналогичной функциональностью, но уже с использованием ПЛК.
Как-бы то ни было, иногда возникает ситуация, что ПЛК выходят из строя и ремонт возможен только у производителя. Ведь простая замена ПЛК на точно такой же ничего не дает, поскольку отсутствует управляющая программа. Хорошо, если производитель в такой ситуации может оказать помощь. А если нет? Брать другой ПЛК и программировать его самостоятельно? Но если уж приходится самостоятельно программировать, то почему обязательно ПЛК? Не будет ли проще и дешевле запрограммировать систему на базе микроконтроллера? Ведь, как отмечалось выше, в ПЛК заложено много избыточных функций и вычислительных возможностей, за которые приходится платить.
Именно из соображений, изложенных выше, была разработана схема простого ПЛК для замены вышедшего из строя ПЛК KUAX667 на швейном автомате VS3005 — AMF Reece S 2000. Не будем останавливаться на описании данного швейного автомата, тем более, что рассматриваемая здесь схема повторно использовалась на другом станке в мебельном производстве. При разработке ПЛК ставилась задача создать схему максимально дешевую, из доступных деталей, с возможностью диагностики даже с учетом отсутствия дисплея. Также было принято решение отказаться от гальванической развязки входных цепей, поскольку датчиками служили кнопки, концевики и переключатели, осуществляющие простой механической контакт.
Схема устройства и принцип работы аналогичны построению большинства промышленных ПЛК. Есть центральный микроконтроллер и есть порты ввода-вывода.
За основу взят микроконтроллер фирмы Microchip PIC12F629. Этот микроконтроллер выбран исходя из доступности и дешевизны. Входа и выходы реализованы с помощью сдвиговых регистров. Логически они разбиты на две группы по 8 контактов. Передача данных происходит в последовательном виде. Протокол передачи данных идентичен протоколу SPI, однако он полностью реализован программно и на 16 бит. Цепи для входных данных и выходных данных сделаны раздельными. Это, на мой взгляд, облегчает понимание работы и упрощает контроль. Кроме того это позволило использовать ранее написанные модули для приема-передачи данных в сдвиговые регистры. Ну и все-равно эти выводы остались бы неиспользованными, так зачем пропадать добру 🙂 . Входными элементами являются концевики, кнопки, переключатели с коммутацией на общий провод. Поэтому входа реализованы без использования оптопар. Конечно, это снижает надежность схемы. Но, как показала практика, ПЛК работает стабильно. При использовании регистров 155ИР9 или 555ИР9 подтягивающие резисторы к +5 В можно не устанавливать (именно этот вариант представлен на фото ниже). При использовании регистров 74HC165 наличие подтягивающих резисторов обязательно. Особо следует отметить вход 1.0. Этот вход реализован с использованием оптопары и расширителем импульсов на микросхеме 155ЛА3. В одном из станков датчиком вырабатывался импульс +24 Вольта и длительностью около 1 мксек. Поскольку реальная частота опроса входов составляла около 1 кГц, то был риск, что импульс будет пропущен. Для исключения этого в схему был введен расширитель импульсов, увеличивающий время импульса примерно до 0,1 сек. Время импульса определяется элементами C1, R4. Перестановкой джамперов на плате (на схеме джамперы не указаны, их можно отследить по печатной плате) возможна коммутация входа 1.0 минуя оптопару, минуя расширитель импульсов или минуя оптопару и расширитель импульсов. Благодаря встроенным в регистры триггерам, фиксирующим входные уровни по сигналу строба, исключена возможная неопределенность уровней логический «0» или «1». Это, а также последовательный опрос входных цепей микроконтроллером, позволило не учитывать явление «дребезга», характерное для механических датчиков. Исполнительными механизмами являются обмотки пневмоклапанов и реле, которые подсоединены к сдвиговым регистрам 74HC595 через микросхемы-драйвера ULN2803. Питание осуществляется от источника постоянного напряжения +24 Вольта, имеющегося в станке для питания обмоток реле и пневмоклапанов, через импульсный стабилизатор напряжения на LM2576 (микросхема в корпусе TO-263 для поверхностного монтажа, расположена со стороны фольги, фольга же служит и радиатором), включенной по типовой схеме.
Вся схема собрана на плате 100*130 мм. Рядом с каждой микросхемой по питанию стоит конденсатор, емкостью по 0,1 mkF (на схеме не показаны). Как уже выше отмечалось, в устройстве использовались микросхемы 555ИР9, не требующие подтягивающих резисторов. Тем не менее, для использования 74HC165, на плате предусмотрена возможность установки подтягивающих резисторов, которые могут быть от 1 до 10 кОм. В качестве подтягивающих резисторов хорошо использовать сборки сопротивлений типа 9A472J (неиспользуемые выводы просто обкусываются), которые широко применялись в компьютерах на базе 286-486 процессоров.
Программа для микроконтроллера написана в среде PIC Simulator IDE, которая использует диалект языка BASIC. Использование BASIC позволяет легко разрабатывать программы не особо погружаясь в архитектуру микроконтроллеров. Кроме того, так или иначе, с реализациями языка BASIC приходится сталкиваться начиная со школьной скамьи и у большинства непрофессиональных разработчиков он не вызывает почтительного опасения. Рассмотрим программу и остановимся на тех местах, где непосредственно происходит настройка на тот или иной станок.
Программа прилагается в полной версии для швейного автомата. Сначала идет секция описания переменных и символов. При переделке программы под другое оборудование неизменными будут строки с 7 по 11, здесь объявляются переменные для полученных/передаваемых данных и служебная переменная и с 18 по 28, относящиеся к описанию контактов для протокола приема/передачи данных. Далее в программе с 50-й по 96-ю строки идет проверка на включение режима «Тест» и реализация тестового режима. Режим «Тест» включается установкой перемычки между выводом GP2 (5-й вывод) и общей шиной (кнопка «Test» по схеме) до подачи питания на схему. При подаче питания микроконтроллер устанавливает вывод GP2 как вход (строка 54), включаем подтягивающие резисторы (стоки 64,65), производит опрос состояния вывода GP2 (строка 76). Если режим тестирования установлен, то после снятия перемычки начинается бесконечный цикл (стоки 81-95), в котором состояние выходов напрямую зависит от состояния входов. Таким образом последовательно замыкая входа мы можем проверить срабатывание исполнительных элементов, подсоединенных к выходам, т.е. произвести тестирование оборудования от датчиков до исполнительных механизмов.
При подаче питания без установленной перемычки микроконтроллер перейдет к участку программы, где запрограммирован непосредственно рабочий режим станка (в данной программе это строки 98-261). Эта часть программы оставлена для примера и, поскольку она привязана непосредственно к оборудованию, то особо ее рассматривать не будем. Остановимся только на общих принципах работы и подпрограммах приема-посылки данных. В простейшем случае при работе оборудования производится опрос входов (подпрограмма data_input, используемая в ней подпрограмма sinchro_input). Состояние входов в программе сохраняется в переменных data_in1 и data_in2. В зависимости от алгоритма работы оборудования в программе анализируется состояние входов, принимается решение об изменении состояния выходов и это решение записывается в данные data_out1 и data_out2. После этого производится вывод данных (подпрограмма data_out, используемая в ней подпрограмма sinchro_out). И так цикл повторяется до прекращения подачи питания. В случае необходимости возможна организация программы с использованием прерываний микроконтроллера. К примеру, это может понадобится при осуществлении операций на оборудовании, ограниченных по времени.
При программировании микроконтроллера необходимо установить слово конфигурации в &h31С4. Расшифровку можно посмотреть на рисунке ниже.
P.S. Этот абзац специально для критиков. Как уже выше отмечалось, программа писалась не «с нуля», а с использованием уже готовых наработок. Поэтому в программе много комментариев от предыдущих программ, в том числе имеются и комментарии, касательно использования прерываний по таймеру. Я специально не стал их убирать, поскольку считаю, что они могут помочь другим людям при модификации программы. Если же данную программу переписать заново, то наверняка можно достичь более оптимального кода и более высокой частоты опроса входных элементов. Как говориться «нет такой программы, которую нельзя сократить хотя бы на одну команду». Но даже в таком виде программа занимает менее 700 байт и станок, под управлением данной программы, работает стабильно.
Ну и напоследок фотографии собранной и установленной в станок платы.
В архиве:
1. PLC 12F629 — исходный файл и HEX файл.
2. Проект в Proteus.
3. Печатная плата в Sprint-Layout
Источник