Для одного социально-ориентированного проекта возникла необходимость подключения купюроприемника к стиральной машине через некий управляющий блок. Изначально планировалось, что при получении купюроприемником купюры определенного достоинства от купюроприемника поступает импульс на управляющий блок, который имитирует нажатия на кнопки на панели управления стиральной машинки. Поскольку финансовая сторона проекта была минимальна и практически все приобреталось за свой счет, то изначально было принято решение отказаться от использования персонального компьютера. «Сердцем» управляющего блока был выбран микроконтроллер PIC16F628A.
Под эту задачу была разработана схема.
В принципе эта схема не представляет ничего сложного и легко реализуема. Блок питания взят готовый 220 Вольт – 12 Вольт. Питание микроконтроллера осуществляется от блока питания через стабилизатор 7805 (на схеме не показан). В качестве транзисторов можно использовать КТ315 и им подобные. Реле РЭС-49 на 12 Вольт (естественно, возможно применение реле других типов). Светодиоды D1, D2 в реальности подключены также через транзисторные ключи, для возможности подключения информационных табло большего размера. Последовательность нажатия кнопок на панели стиральной машинки зависит от конкретной модели стиральной машинки и легко реализуется программой микроконтроллера. Управляющий блок имеет полную гальваническую развязку от стиральной машинки. Управляющие выходы реализованы посредством контактов реле РЭС-49. Реле выбраны в целях полной имитации кнопок на панели стиральной машины. Контакты реле на замыкание подсоединены параллельно кнопкам на панели управления стиральной машинки. Для используемой нами машинки LG назначение и последовательность срабатывания реле была следующая: Реле RL1 – включение питания, RL2 – срабатывание 6 раз, что соответствует выбору режима «Обычная стирка». Все переключения реле производятся с задержкой в 0,2 — 1 сек, чтобы реле и машинка успевала отрабатывать команды. Процесс стирки контролируется по индикатору «Закрыт. Дверца», который в начале процесса стирки загорается и гаснет по окончании стирки. Для этого параллельно индикатору включена оптопара U2. На схеме для имитации работы индикаторы используется кнопка BUT2 и резисторы R4-R7. Поскольку существует вероятность запуска процесса стирки с незагруженным бельем было принято решение сделать ещё одну кнопку «Старт»для ручного подтверждения запуска процесса стирки — BUT1. Кнопку «Старт/Пауза» на машинке имитирует реле RL3. С целью дальнейшего расширения возможностей управляющего блока (допусти при выборе другой модели стиральной машины) на плате предусмотрены места для дополнительных реле и оптопар.
Поиски купюроприемника выявили, что у нас достать купюроприемник, работающий в пульсовом режиме (в таком режиме работает большинство купюроприемников в игровых и торговых автоматах), нереально. В итоге остановились на купюроприемнике фирмы CashCode, работающим по протоколу CCNET через порт RS-232. Благо в МК PIC16F628A имеется аппаратно-реализованный USART. К разработанной схеме пришлось добавить преобразователь уровней TTL-RS232 на микросхеме MAX232. Был взят готовый модуль, разработанный ранее для компьютера.
Общая схема соединений:
Отмечу, что вывод RXD с блока управления соединяется с выводом TXD купюроприемника, а вывод TXD блока управления – с выводом RXD купюроприемника.
Осталось реализовать протокол CCNET в микроконтроллере. Ознакомиться с протоколом и его командами можно на официальном сайте CashCode. Поскольку возможности протокола CCNET намного шире, чем это необходимо для поставленной задачи, было принято решение реализовать лишь необходимые команды инициализации и управления купюроприемником без их контроля. Также было решено не вычислять контрольные суммы для каждой команды, а использовать готовые кодовые последовательности. Это позволило сэкономить ресурсы МК и упростить управляющую программу. С другой стороны это привязывает программу к данному купюроприемнику, поскольку ответы от разных купюроприемников могут быть разные. Хорошо это или плохо — это как посмотреть. Моделированием на персональном компьютере было выявлено, что для данной модели купюроприемника для инициализации достаточно выполнить следующую последовательность команд (стрелочка -> означает посылку команды к купюроприемнику, стрелочка <- означает прием ответа от купюроприемника):
->RESET
<- ACK
-> 02 03 06 30 41 B3
<- 02 03 06 00 C2 82
————————————————————————-
->POLL
<- DISABLED
-> 02 03 06 33 DA 81
<- 02 03 06 19 82 0F
-> 02 03 06 00 C2 82
————————————————————————-
->IDENTIFICATION
<- Part Number :MSM-KG1115
<- SN:
<- Asset: FFF4004D4D5108F0
-> 02 03 06 37 FE C7
<- 02 03 27 4D 53 4D 2D 4B 47 31 31 31 35 20 20 20 20 20 00 00
<- 00 00 00 00 00 00 00 00 00 00 F4 00 4D 4D 51 09 F0 69 F1
-> 02 03 06 00 C2 82
————————————————————————-
->POLL
<- DISABLED
-> 02 03 06 33 DA 81
<- 02 03 06 19 82 0F
-> 02 03 06 00 C2 82
————————————————————————-
->SET SECURITY
-> Security settings: 000000
<- ACK
-> 02 03 09 32 00 00 00 26 1F
<- 02 03 06 00 C2 82
————————————————————————-
->POLL
<- IDLING
-> 02 03 06 33 DA 81
<- 02 03 06 14 67 D4
-> 02 03 06 00 C2 82
————————————————————————-
->POLL
<- IDLING
-> 02 03 06 33 DA 81
<- 02 03 06 14 67 D4
-> 02 03 06 00 C2 82
————————————————————————-
->POLL
<- IDLING
-> 02 03 06 33 DA 81
<- 02 03 06 14 67 D4
-> 02 03 06 00 C2 82
Когда идет ответ IDLING – это означает, что купюроприемник находится в режиме готовности к приему купюры. Когда происходит прием купюры, то купюроприемник выдает последовательности, обозначающие номинал принятой купюры и процесс продвижения купюры внутри купюроприемника. Поскольку у нас простейшая система, то мы не анализируем аварийные ситуации типа замятия купюры и, в некоторых случаях, это может привести к бесконечному ожиданию готовности купюроприемника. При поступлении от купюроприемника данных о принятии купюры определенного номинала МК последовательно через реле включает питание стиральной машинки и выбирает режим работы. После этого ждет нажатия кнопки «Старт». При нажатии на кнопку микроконтроллер имитирует нажатие кнопки «Старт/Пауза» на стиральной машинке. При загорании светодиода «Закрыт. дверца» на панели стиральной машинки поступает сигнал через оптопару на МК и считаем, что процесс стирки начался. По окончании стирки светодиод «Закрыт. дверца» гаснет, соответственно и пропадает сигнал с оптопары на МК. МК посылает на купюроприемник команду опроса «POOL» и получает ответ от купюроприемника. Как уже было отмечено выше, мы не анализирует аварийные ситуации. При получении вариантов ответа, что все прошло нормально и купюра в укладчике купюроприемника цикл работы начинается заново. При аварийных же ситуациях на этом этапе происходит остановка программы или переход в бесконечный цикл инициализации купюроприемника. Практика показала, что иногда при замятии банкноты в тракте укладчика повторная инициализация купюроприемника вызывает проваливание банкноты и исчезновение ошибки.
Задача сформирована, переходим к программированию МК. И тут выявилась одна особенность. В протоколе CCNET часть команд в своей кодовой последовательности содержит комбинацию «00» и длина ответа от купюроприемника может меняться. При моделировании на персональном компьютере в среде VisualBasic происходили непосредственные запись и чтение данных из COM-порта при поступлении байта в буфер приема. Как-то так само собой получилось, что на компьютере не использовалась функция посылки/приема строковой переменной в COM-порт. На МК же при попытке реализовать обмен данными возникла проблема. Как оказалось, согласно стандарта RS-232 последовательность «00» означает окончание передачи данных или отсутствие данных для передачи. Соответственно готовые библиотечные функции посылки-приема строки данных через UART реализуют это правило. В итоге через коммуникационный порт данные не передавались, или не принимались или количество принятых байт не соответствовало ожидаемому. Попытки обойти данную проблему приводили либо к нестабильной работе купорюприемника, либо к бесконечному ожиданию приема ответа от купюроприемника. Понятно, что эта особенность передачи-приема нулевой последовательности обусловлена самим стандартом RS-232 и никак не связана с аппаратной реализацией. На помощь пришел пакет FlowCode. В функциях работы с USART пакета FlowCode добавлено свойство тайм-аут, ограничивающее время приема данных и по истечении которого микроконтроллер продолжал выполнение программы. С помощью тайм-аута удалось избежать зависания программы. Прием нулевой последовательности происходил корректно без потери данных. Посылка нулевой последовательности осуществляется непосредственной записью кодовой последовательности в порт USART. Посылка же последовательности ACK осталась через строковую переменную и при моделировании в Протеусе на осциллограмме отлично видно, что посылка ACK имеет более короткую длительность, чем остальные. Конечно же, все эти возможности можно было бы реализовать и в других средах программирования.
Программа реализует по сути бесконечный цикл, в теле которого последовательно осуществляются:
— инициализация и цикл опроса купюроприемника;
— выдача управляющих команд посредством устройства коммутации (реле),задающих режим работы стиральной машины;
— опрос кнопки «Старт» для подтверждения загрузки белья для стирки;
— выдача команды «Старт» для стиральной машинки;
— цикл контроля за индикатором процесса стирки;
— сброс купюроприемника и переход к началу цикла работы.
Так как в программе фактически реализован линейный алгоритм, то структуру данной программы выложить в районе статьи нереально. Желающие ознакомиться с программой могут просмотреть ее в пакете FlowCode из архива Washing.rar. У кого же нет данного пакета могут ознакомиться с программой по картинке в файле Washing.fcf.rar.
При программировании микроконтроллера необходимо отключить WDT. Тактирование от встроенного генератора. Вывод GP3 работает как порт ввода-вывода. Остальные параметры существенного влияния не оказывают. В итоге слово конфигурации в двоичном коде имеет вид: 00111110010100.
В архиве:
1. Схемы в Протеус для компьютерного моделирования работы с купюроприемником через COM-порт компьютера. Внимание: для моделирования на компьютере с подключенным купюроприемником надо использовать схему без преобразователя на MAX232. Функции преобразователя выполняет COM-порт компьютера.
2. Программа в пакете FlowCode. HEX-файл для PIC16F628A.
3. Печатные платы управляющего блока и преобразователя уровней.
Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот
U1
МК PIC 8-битPIC16F628A1
U2
ОптопараPC8171
U3
ИС RS-232 интерфейсаMAX2321
Q1,Q2,Q3
Биполярный транзисторКТ315А3
R1-R7
Резистор МЛТ-0,125430 Ом7
С1-С4
Конденсатор0.1 мкФ4
R8-R9
Резистор МЛТ-0,125220 Ом1
RL1-RL3
РелеРЭС-493
Добавить все
Скачать список элементов (PDF)
Прикрепленные файлы:
- Washing.rar (55 Кб)
- washing_fcf.rar (395 Кб)