Программируемый логический контроллер
Предлагаемый вашему вниманию Бейсик-контроллер представляет собой масштабную действующую модель программируемых логических контроллеров (ПЛК), которые широко применяются в «большой» автоматике в качестве «строительных» модулей при создании различных систем распределенного контроля и управления. Данный модуль представляет собой небольшое устройство, позволяющее решать задачи управления, регулирования. Тем не менее, этому малышу не составит труда «позвонить» при помощи модема на удалённый компьютер и отправить, например, результаты измерений. Кроме этого, он может реализовывать функции управления, выдавая различные управляющие сигналы.
Как и традиционный ПЛК, он имеет дискретный, аналоговый ввод-вывод и коммуникационный интерфейс, который может быть использован для связи с другими устройствами или перезагрузки управляющей программы. Управляющая программа представляет собой текст на языке Бейсик. Задачей контроллера является интерпретация и исполнение команд этого языка.
Контроллерная реализация Бейсика имеет средства для работы с линиями ввода-вывода, с АЦП и ЦАП. Внешний вид контроллера показан на рис.1
Рис.1
Контроллер имеет следующие характеристики:
- бодовая скорость, bps 57600
- количество бит данных 8
- количество стоповых бит 1
- бит чётности отсутствует
- согласование потока аппаратное
Схема контроллера приведена на рисунке 2
Рис.2 Схема контроллера в формате PDF (151kb).
Микросхема U3 – AVR микроконтроллер ATMEGA8. Управляющая программа для этого контроллера, содержащая интерпретатор языка Бейсик, заносится в контроллер, когда схема полностью собрана. Для этой цели служит разъём внутрисхемного программирования XP3. Авторы использовали программатор PonyProg, который можно взять на сайте http://www.lancos.com/prog.html. На рис.3 показано как надо запрограммировать служебные биты микроконтроллера.
Рис.3
Микросхема U1 служит для преобразования уровней сигналов ТТЛ/КМОП в уровни интерфейса RS-232. Микросхема U2 – линейный стабилизатор. Если предполагается питание от стабилизированного источника 5 Вольт, микросхему можно исключить и запаять перемычку между контактными площадками 1 и 3 этой микросхемы. В качестве динамика (“пищалки”) может быть использован излучатель любой системы, важно, чтобы он был пассивным (не содержал встроенного генератора) и ток, потребляемый от ножки 5 микросхемы U3, не превышал 20 мА., что определяется величиной резистора R1.
Чтобы избежать возможного непреднамеренного стирания содержимого программной памяти, использована перемычка JP1. предназначена для защиты от случайной перезаписи пользовательской программы. Когда перемычка установлена, запись программы невозможна.
Светодиоды D1…D4 предназначены для индикации состояния дискретных выводов. Светодиод D5 служит для индикации состояния программы. Если D5 горит, то программа находится в цикле. Погашенный светодиод означает останов программы, например, ожидание ввода символа при использовании оператора INPUT или при формировании задержки оператором DELAY.
Кнопочный переключатель SW1 управляет линией RESET микроконтроллера ATMEGA8 и активно используется при записи программы пользователя, вывода содержимого программной памяти и пуска программы в работу. Кнопочные переключатели SW2…SW5 служат для изменения состояния дискретных линий ввода для тестовых и учебных целей.
Разъёмы XP1 и XP2 предназначены для включения в схему устройства пользователя. Контроллер как “чёрный ящик” показан на рисунке 4.
Рис.4
Нагрузочная способность линий дискретного вывода определяется нагрузочной способностью микроконтроллера ATMEGA8 и составляет 20 мА на вывод, следует учитывать, что порядка 8 мА потребляют светодиоды, подключенные к каждому выводу.
Дискретный ввод совместим по уровням с ТТЛ и КМОП при напряжении питания 5 Вольт. Необходимо иметь в виду, что к каждому входу подключен кнопочный ключ на плате контроллера, образуя с источником сигнала монтажное ИЛИ. В общем случае, не следует пользоваться кнопочными ключами на плате, при наличии внешнего источника сигнала.
На аналоговый входы могут подаваться сигналы в диапазоне от 0 до 5 вольт, что соответствует дискретному представлению от 0 до 1023 единиц. АЦП работает в режиме непрерывной дискретизации (с периодом около 30 мкС), но реальная дискретизация зависит от частоты считывания при помощи оператора ADC и зависит от длины цикла, в который это оператор включен.
Аналоговый вывод представляет собой на самом деле дискретный выход с ШИМ частотой 5,4 кГц. Значению 0 соответствует напряжению 0В на ШИМ выходе, а значению 1023 – напряжение питания контроллера +5В. Остальные значения соответствуют усредненному значению импульсного сигнала с шириной импульса, пропорциональной введенному при помощи оператора DAC значению. Параметры RC-цепи определяются пользователем. В общем случае, вместо R10 должна быть запаяна перемычка, а конденсатор C17 отсутствует.
Конструктивно контроллер представляет собой печатную плату размером 80 x 90 мм. С целью обеспечения возможности использования «лазерно-утюжной технологии» печатные проводники выполнены с одной стороны. Однако желательно использовать и верхний слой, как экранный, подключенный к цепи GND. Это снизит уровень электромагнитного излучения от цепей контроллера.
Под микросхему U3 желательно установить панельку. Это позволит использовать плату контроллера как “программатор”. Ведь отлаженный контроллер, предназначенный для встраивания в изделие, может иметь очень ограниченный набор компонентов. В пределе это сам AVR-микроконтроллер, кварцевый резонатор и 3 керамических конденсатора.
Вид проводников печатной платы показан на Рис.5
Рис.5
Сборочный чертёж показан ниже
Рис.6
|
|
|
|
Цены в Чип-Дип на 27.06.2006, |
C1…C4, C6…C9, |
13 |
Конденсаторы серии К10-17 импортные |
0.1 мкФ 50В |
0,50 |
C5,C10 |
2 |
Электролитические конденсаторы |
47мкФ 25 В |
4,60 |
C11,C12 |
Конденсаторы серии К10-17 импортные |
18 пФ 50 В |
0,50 |
|
D1 |
1 |
204RD св.диод красн. d=3мм |
2,40 |
|
D2…D5 |
4 |
2,40 |
||
LS1 |
Пьезоизлучатель KPE-120 |
18,00 |
||
SW1…SW5 |
5 |
TS_A4PS_130 |
3,50 |
|
R1,R5…R9 |
6 |
С2-23-0.125 5% |
470 |
0,70 |
R2…R4,R10 |
4 |
С2-23-0.125 5% |
10K |
0,70 |
U1 |
1 |
42.00 |
||
U2 |
1 |
7805 |
9,10 |
|
U3 |
1 |
79,00 |
||
XS1 |
1 |
DRB9FB |
16,0 |
|
XS2 |
1 |
Гнездо питания DS-210 |
5,00 |
|
XP1…XP3 |
3 |
IDC-10,BH-10 |
15,00 |
|
Y1 |
11MHZ0592 |
8,40 |
Встроенное программное обеспечение микроконтроллера ATMEGA8 содержит интерпретатор языка Бейсик и систему загрузки текста пользовательской программы в постоянное запоминающее устройство.
В основе интерпретатора лежит код, найденный в Интернете текст интерпретатора языка Tiny Basic на языке Си под DOS, авторство не указано, текст файла датирован 1992 годом. Надо упомянуть, что Tiny Basic был разработан хакерами в середине семидесятых годов (тогда хакерами называли компьютерных самодельщиков). Существовало множество реализаций этого языка. Он имел сокращённый набор команд и размещался в нескольких килобайтах памяти. Была даже разработана спецификация на него. В то славное время Бил Гейтс трудится над своим бейсиком Альтаир и уже готов оставить учёбу в Гарварде, чтобы основать Майкрософт.
В Интернете можно найти Tiny Basic от фирмы Intel для однокристального микроконтроллера MCS-51 (INTEL INSITE LIBRARY FILE BF10:TB51 V2.2 (MCS-51 TINY BASIC). Реализация сделана на языке ассемблера.
Существует коммерческий продукт фирмы Parallax (www.parallax.com) BASIC Stamp microcontrollers, представляющий собой линейку микроконтроллеров со встроенным интерпретатором языка Parallax PBASIC. Текст программы для такого контроллера подвергается преобразованию в промежуточный язык при помощи специального программного обеспечения на персональном компьютере. Фирма позиционирует свои изделия как ПЛК для малых профессиональных проектов, учебных целей и любительского применения.
При реализации данного проекта авторы добавили в Tiny Basic ряд команд, позволяющих обслуживать периферийные устройства предлагаемого модуля. Кроме того, были добавлены, отсутствовавшие в спецификации Tiny Basic операторы SCALE и REM. Первый из них позволяет повысить точность целочисленных вычислений. Назначение второго общеизвестно. Ввод-вывод остался консольным (консолью называли телетайпный аппарат, с помощью которого оператор общался с компьютером), вместо консоли теперь можно использовать любой персональный компьютер, подключенный по интерфейсу RS-232, с запущенной терминальной программой. Причём, работа через консоль актуальна только на этапе загрузки и отладки программы или когда контроллер взаимодействует с другим устройством, например с модемом. Следует отметить, что в целях ускорения процесса загрузки пользовательской программы, использован способ обмена с квитированием. Это означает, что загрузочный кабель должен иметь в дополнение к линиям RX, TX, GND еще как минимум линии RTS,CTS.
Покажем, как нужно настроить терминальную программу для работы с контроллером на примере терминала Hyper Terminal, входящего в операционную систему WINDOWS.
Для этого нужно начать движение от меню Пуск по пути Пуск -> Программы ->Стандартные -> HyperTerminal. После чего появится окно программы HyperTerminal и диалоговое окно Описания подключения. Заполнить поле Название подключения и выбрать значок, как показано на рис.7, после чего нажать кнопку ОК.
Рис.7
Выбрать свободный коммуникационный порт, к которому предполагается подключать контроллер (Рис.8)
Рис.8
Установить параметры коммуникационного порта, как показано на рис.9
Рис.9
После чего последовательно нажать кнопки Применить и ОК
После чего порт терминала готов к работе, но требуется настройка параметров передачи символов, для чего нужно нажать на кнопку в позиции 1, как показано на Рис.10
Рис. 10
Далее в свойствах соединения необходимо выбрать закладку Параметры (Рис.10, позиция 1). На этой закладке установить эмулятор терминала ANSI или ANSIW, это позволит, при выводе на терминал, управлять цветом и позиционированием курсора. Далее нажать кнопку Параметры ASCII (Рис.10, позиция 2). Установить в параметрах ASCII дополнение символов возврата каретки переводами строк для отправляемых символов, как показано на Рис. 11.
Рис.11
Сохранить текущую настройку терминала, воспользовавшись пунктами главного меню терминала Файл -> Сохранить как. Это позволит избежать повторной настройки параметров при следующем вызове терминальной сессии.
Для запуска терминала в работу необходимо использовать пункты главного меню Вызов -> Вызов, после чего терминал готов к работе.
Подготовка контроллера для записи пользовательской Бейсик программы заключается в том, что необходимо убедиться в отсутствии перемычки JP1. Дело в том, что когда перемычка снята, контроллер, после подачи питания (или нажатия кнопки RESET) не сразу переходит на выполнение пользовательской программы, а ожидает прихода символов по интерфейсу RS-232 в течение секундного интервала – временного окна. Если за время действия временного окна пришёл символ Enter, то контроллер выводит по интерфейсу RS-232 текст содержащейся в нём программы. А если получен символ пробела, то контроллер выводит слово Reflash и ожидает текст Бейсик программы по интерфейсу RS-232. Отменить этот режим можно повторным нажатием кнопки RESET.
Ниже показан пример работы с контроллером и с консолью. В текстовом редакторе создаётся текст, а затем копируется в стандартный буфер обмена Windows
Рис.12
Далее на котроллере нажимается кнопка RESET, в течение секундного временного окна с терминала должен быть передан код клавиши пробел (просто нажимается клавиша пробела) и контроллер переходит в режим ожидания текста.
Рис.13
В терминале, по нажатию правой кнопки мышки вызывается выпадающее меню и выбирается пункт Передать главному компьютеру (главный в данном случае - контроллер).
Далее происходит передача текста в контроллер, на каждый записанный блок размером 64 байта, контроллер выводит символ W.
Рис.14
По окончании загрузки выводится OK. Для запуска приложения нужно снова нажать RESET, через одну секунду программа запустится на исполнение. Данный пример показывает весь цикл работы с контроллером. Из этого видно, что специальную программистскую “кухню” организовывать не придётся. Для загрузки в контроллер собственной программы на языке Бейсик никакого специального оборудования или программного обеспечения не требуется. Для этой цели годится практически любой компьютер, у которого есть интерфейс RS-232 и может быть запущена терминальная программа (наладонные компьютеры, ноутбуки современные и древние, настольные PC). А вот так выглядит консоль на КПК
Рис.15
Контроллерная версия языка Tiny-Basic
Особенностью данного диалекта языка Tiny Basic является то, что в одной строке записывается один оператор, и строки не нумеруются. Для обозначения точек перехода используются метки.
Операторы
|
|
|
|
|
|
|
|
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
|
|
|
|
||
|
|
||
|
|
|
|
|
|
||
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Числа:
Все числа являются знаковыми целыми в диапазоне -32767 до +32767
Переменные:
Существует 26
переменных, обозначаемых буквами от A до Z.
Внутреннее
представление 16-битное.
Операторы
Арифметические:
Сравнения (используются только оператором IF):
Выражения
Выражения составляются из чисел, переменных, арифметических и битовых операторов. Операторы сравнения не могут быть использованы в выражениях. Вычисления производятся слева направо. Применением скобок можно изменить порядок вычислений.
Существует 3 уровня.
Метки
Набор от 1 до 3
символов, состоящий из цифр. Метка ставится в
начале строки, на которую предполагается делать переход или адресовать вызов
подпрограммы
Пример допустимых меток: 10, 200, 210.
Системные биты контроллера
Биты ввода
Номер бита |
Назначение |
1 |
Дискретный ввод 1 |
2 |
Дискретный ввод 2 |
3 |
Дискретный ввод 3 |
4 |
Дискретный ввод 4 |
126 |
Бит-признак наличия данных в буфере консоли. Служит для организации чтения символов на лету |
Пример 1. Программа циклически считывает состояние бита ввода и выводит состояние этого бита на терминал
|
|
|
Пример 2. Программа на лету опрашивает состояние консоли и, если в буфере есть данные, выполняет оператор INPUT
|
|
|
Биты вывода
Номер бита |
Назначение |
1 |
Дискретный вывод 1 |
2 |
Дискретный вывод 2 |
3 |
Дискретный вывод 3 |
4 |
Дискретный вывод 4 |
127 |
Бит разрешения генерации звука биппером |
128 |
Бит переключения канала АЦП 0 – канал 1 |
Пример. Программа формирует двойной сигнал биппера
|
|
|
Интерпретатор осуществляет диагностику времени исполнения. Когда встречается ошибка, выполнение останавливается, и на консоль выводятся код ошибки и номер строки, в которой ошибка была встречена.
Код ошибки |
Значение ошибки |
0 |
Синтаксическая ошибка |
1 |
Нарушена парность скобок |
2 |
Ожидалось выражение |
3 |
Ожидался знак выражения |
4 |
Ожидалась переменная |
5 |
Таблица меток переполнена |
6 |
Несколько меток с одинаковыми именами |
7 |
Неопределённая метка |
8 |
Ожидался оператор THEN |
9 |
Ожидался оператор TO |
10 |
Слишком много вложенных циклов |
11 |
Встречен оператор NEXT, не принадлежащий оператору FOR |
12 |
Слишком много вложенных подпрограмм |
13 |
Встретился оператор RETURN, но вызова подпрограммы не было |
Далее приведены небольшие проекты, реализованные с использованием данного контроллера.
1. Пример простой программы “Бегущий огонь”
|
|
|
2. Покажем применение контроллера при создании электронного ключа кода Морзе. Данный вариант реализации, вполне имеет право на жизнь и хорошо демонстрирует возможности контроллера. Кроме собственно функций ключа, выполнена функция телеграфного VOX. “Ввод” скорости и времени задержки отпускания VOX производится путём измерения напряжения на движках потенциометров как показано на рисунке 16.
Рис.16
|
|
|
3. Другой пример, автоматический измеритель КСВ
Схема включения будет иметь вид, показанный на рисунке 17
Рис.17
В данном приложении контроллер является точнее вычислителем, входящим в состав измерителя.
На входы АЦП подаются нормированные, детектированные сигналы от направленных ответвителей. Нормирование должно быть выполнено таким образом, чтобы максимальной мощности соответствовало напряжение питания AVR-микроконтроллера (5 Вольт).
Вывод показаний производится на стрелочный прибор.
Положение “С”, переключателя является сервисным и служит для градуировки шкалы при изготовлении измерителя. В этом положении (терминальная программа должна быть подключена) производится запрос ввода значений КСВ, умноженных на 100 (для КСВ 1.5 нужно вводить 150). Перед началом градуировки нужно ввести значение -1, это приведёт к тому, что в ЦАП будет выведено значение 1000, для которого нужно подобрать величину резистора R1 на ток полного отклонения стрелки миллиамперметра. Далее производить последовательный ввод значений КСВ для градуировки шкалы.
Значение резистора R1 можно предварительно рассчитать по формуле:
R1 = 0.976 * U/I – Rр,
- где U – напряжение питания контроллера;
- I – ток полного отклонения стрелки прибора;
- Rр – сопротивление рамки постоянному току.
Назначение некоторых переменных в программе:
- N – количество отсчётов для усреднения;
- K – определяет “растяжку” шкалы”
Конечная точка шкалы в КСВ определяется по формуле КСВ=(10+K)/K
- Ноль шкалы соответствует КСВ=1
- При K=1, конечная точка шкалы 11
- При K=2, конечная точка шкалы 6
- При K=3, конечная точка шкалы 4.333
- При K=4, конечная точка шкалы 3.5
- При K=5, конечная точка шкалы 3
- При K=6, конечная точка шкалы 2.666
|
|
|
На этом заканчивается раздел, показывающий возможные применения данного контроллера.
Следующий раздел посвящен описанию программы симулятора данного контроллера.
Для того, чтобы можно было в комфортных условиях, не прибегая к программированию реального контроллера, освоить язык, отладить алгоритмы, произвести предварительное тестирование, был разработан симулятор контроллера на PC. Симулятор эмулирует практически все ресурсы реального контроллера, за исключением эмуляции биппера, к тому же консоль симулятора не распознаёт управляющие последовательности ANSI терминала.
Симулятор позволяет создавать, сохранять, загружать тексты программ и запускать их в работу. Возможно пошаговое исполнение команд, запуск и останов на лету. Для остановки программы в нужном месте, в текст вставляется оператор STOP, после чего программу нужно перезапустить. При выполнении оператора STOP, исполнение останавливается. Можно просмотреть состояние переменных и периферии и продолжить исполнение в пошаговом режиме или в режиме запуска. Панель симулятора показана на Рис.18.
Рис.18
Все ресурсы контроллера лежат на поверхности, видны все переменные и периферия. Загрузка, сохранение программ производится через меню File командами Load, Save и Save as…
Процесс отладки производится четырьмя клавишами или соответствующими кнопками
F2 – принудительный останов запущенной программы. Программа останавливается на следующем операторе. Текущий оператор будет выполнен до конца. Поэтому, например задержка, сформированная оператором DELAY, будет выполнена до конца и только после этого произойдёт останов на следующей строчке. После останова можно модифицировать переменные и изменять состояние других ресурсов.
F4 – Сброс симулятора,
F9 – запуск программы, при этом обнуляются все переменные. После запуска можно наблюдать состояние ресурсов и влиять на ресурсы (дискретный, аналоговый ввод и состояние бита готовности данных в приёмнике RS-232)
F8 – пошаговое исполнение, при этом индицируется текущее состояние всех ресурсов контроллера.
В окне редактора работают все обычные операции копирования, вставки и отмены, вызываемые по Ctrl+C, Ctrl+V,Ctrl+Z
Документация в электронном виде, файл для программирования микроконтроллера ATMEGA8 и симулятор
Авторы:
Александр Костюк (UA6ANN)
Евгений Фадеев (RV3BJ)
Эта статья опубликована в журнале "Радио" 2006, №10,11.