РадиоКот >Схемы >Цифровые устройства >Защита и контроль >

Теги статьи:

Счетчик попугаев с лимитом

Автор: CODE43, code43@meta.ua
Опубликовано 30.10.2016
Создано при помощи КотоРед.
Участник Конкурса "Поздравь Кота по-человечески 2016!"

Краткое вступление #1.

Читаю коменты к конкурсным статьям. И вот повальное большинство жалуется на то, что, мол, неинтересные какие-то схемы. Все, мол, на одних контроллерах, всем не хватает исходников, прошивок, пихают ни в чем не повинные контроллеры в утюги и чайники, и нет уже в современной микроконтроллерной электронике никакой изюминки, ну и далее в том же духе. И вдруг вспомнил о своем одном нереализованном проекте (почему не реализованном – чуть ниже).

Вот вам, уважаемые коты, схема на ЧИСТЕЙШЕЙ ЛОГИКЕ. Целых, мать его, 23 DIP-корпуса + разная расспуха! БЕЗ всяких контроллеров! Именно так может выглядеть цифровая схема, выполняющая простейшие операции, без использования МК.  

Коты постарше могут по-ностальгировать и вспомнить детство, юность и молодость, и с чего начиналась электроника (цифровая), ну а совсем юным котятам изложенное ниже, надеюсь, поможет понять – что же творится в «этих ваших контроллерах» внутри.

Вступление #2. (При чем тут попугаи, и о нелегких буднях разработчика)

… Поступил как-то мне заказ, суть которого была вот в чем: человеку (назовем его – Заказчик) нужно было считать движущиеся предметы и при достижении определенного количества, счет прекращать и включать исполнительное устройство. Но Заказчика не устраивала цена на готовые промышленные устройства такого типа (проще говоря – душила Большая Зеленая Жаба (БЗЖ) . Согласился за пол стоимости фирменного устройства сделать то, что он просит.

Естественно, в современных реалиях, самое простое решение – МК. На следующий день был готов прототип – кусок макетки размером со спичечный коробок с распаянным микроконтроллером, светодиодными 7-сегментными индикаторами и несколько кнопок. Несложный код на асме – и вот контроллер уже весело считает нажатия кнопки и отображает циферки на индикаторах.  Позвал Заказчика, продемонстрировал. Тот посмотрел на это все и говорит, мол, все устраивает и работает, как он и хотел. – Только, - спрашивает, - Деньги за что платить?! За вот этот мелкий кусок текстолита с одной микросхемой (помним про БЗЖ)?! - Тут же нет ничего! Ты давай, это, придумай что-нибудь посолиднее. …И ушел. – Ладно, - думаю, - Хочешь счетчик размером с два кирпича – Будет! И пошел по принципу – чем больше микросхем -  тем лучше. Так и родилась это схема.

… Потом Заказчик приходил еще раз. Демонстрировал ему симуляцию в Протеусе, крутил-вертел уже разведенные платы в 3D. Словом, уже можно было приступать к изготовлению. Он почесал репу, сказал – Я подумаю, - и ушел. Думает  и по сегодняшний  день. А проект так пока и остался не реализованным и живет себе в Протеусе.

Ах, да! Причем же попугаи в названии статьи? А ни при чем. Просто это первое, что пришло в голову, по ассоциации со словом «считать» :-)

Итак, как вы уже наверное догадались, речь пойдет о схеме счетчика импульсов. Что же умеет эта схема? Схема собрана целиком и полностью на КМОП-логике и делает то, что и положено любому счетчику – считает приходящие на вход импульсы до 1000 (больше не нужно было). Еще схема умеет останавливать счет при достижении значения, введенного вами, противно пищать при этом, и щелкать релюхой (включать или отключать какую-либо нагрузку). Схема счетчика представлена на рисунках ниже.

Чтоб было проще разобраться, на схемах функционально законченные модули подписаны и выделены рамками. Выбор той, или иной микросхемы обусловливался её наличием в домашних закромах (чтоб ничего не покупать и заказывать).

Рассмотрим сначала работу, собственно, самого счетчика. К разъему J8 (на схеме – блок «Индикация и управление») нужно подключить датчик, который должен выдавать импульсы уровня лог. 1 (5В). Также на этот разъем выведено питание +5В и корпус (на случай, если это нужно датчику).

Импульсы с датчика поступают на один из входов элемента U8:D (здесь, и далее, сохранены обозначения Протеуса, чтоб не путаться) микросхемы CD4011 (561ЛА7, здесь и далее в скобках - отечественные аналоги). На втором входе этого элемента присутствует (пока-что) лог. 0 и разрешает прохождение импульсов на выход элемента. Счет разрешен, импульсы приходят на счетный вход CLK счетчика единиц U13:B CD4025 (561ИЕ10). Здесь следует сделать отступление. Счетчиков 4025 у меня целое ведро, поэтому они здесь и использованы. Это – двоичные синхронные счетчики-делители и они считают импульсы аж до 16-ти. Но нам это не нужно, нам нужно считать только до 10-ти. Пришлось заставить их считать так, как надо. Это делают два элемента U14:C и U14:D микросхемы CD4011 (561ЛА7, которых тоже ведро и еще чуть-чуть). Как только двоичный код на выходе счетчика станет равным 10-ти (0101), на выходе элемента U14:D сформируется лог. 1, которая поступит на счетный вход счетчика десятков (U13:А) и через диод D3 на вход MR сброса счетчика. Все, мы досчитали до 10-ти. Счетчик обнулится, и счет начнется сначала. Счетчики десятков и сотен работают аналогично. Двоичный код с выходов счетчиков поступает на дешифраторы U10, U12, U15 CD4511 (прямых аналогов не нашел, приближенные – 564ИД4, ИД5), которые преобразуют двоичный код в код для 7-сегментных индикаторов. К дешифраторам подключены одиночные 7-сегментные индикаторы HG1 – HG3 SM820561 зеленого цвета свечения, на которых и отображается количество поступивших на вход импульсов с датчика. Для сброса счетчика служит кнопка SW3 «RESET». При нажатии этой кнопки лог. 1 («+» питания) через диоды D4, D5, D6 поступит на входы сброса MR всех счетчиков и они обнулятся.   

Далее рассмотрим схему установки предела, до которого нужно считать импульсы. Здесь все тоже самое – три пересчетные декады со своими счетчиками, дешифраторами и индикаторами. Установка лимита осуществляется двумя кнопками SW1 «SET+» и  SW2 «SET-». При нажатии и удерживании SW1 «SET+», импульсы с задающего генератора на элементах U7:A, U7:B, U8:A микросхем CD4001 (561ЛЕ5), частотой, примерно, 2Гц (задается конденсатором С8) через замкнутые контакты кнопки, поступают на счетный вход CLK реверсивного счетчика единиц U6 CD4029 (561ИЕ14). Этот счетчик десятичный и извращаться, как с предыдущими счетчиками, не нужно – он исправно считает до 10-ти, формирует сигнал переноса для счетчика десятков, сбрасывается и начинает счет сначала. Счетчики десятков и сотен (U2, U4) работают аналогично. Двоичный код с выходов счетчиков поступает на дешифраторы U1, U3, U5 CD4511 и далее отображается на индикаторах HG4-HG6 SM420361 красного цвета свечения. Держать кнопку нужно до достижения желаемого предела счета. Если, вдруг, кнопку передержали и нужно уменьшить значение  предела – нажимаем и удерживаем SW2 «SET-». В этом  случае через одну пару замкнутых контактов кнопки на счетный вход счетчика единиц поступят все те же импульсы с задающего генератора. А вторая пара контактов кнопки замкнет входы U/D всех счетчиков на «+» питания (установится лог. 1). Счетчики начнут считать в обратную сторону. Для сброса установки лимита служит кнопка SW4 «RESET_SET». В счетчиках CD4029 нет входа сброса, зато есть входы предустановки значения, с которого начнется счет (A, B, C, D). По нажатию SW4 входы разрешения записи в счетчики (РЕ) притянутся к земле (установится лог. 0) и в счетчики запишется код, который присутствует на входах A, B, C, D. В данном случае все входы соединены на корпус и на них присутствует код 0000. Таким образом, в счетчики запишется 0, с которого и будет начинаться счет.

Теперь рассмотрим схему сравнения. Опять же, будем рассматривать только часть схемы для одного разряда (единиц) – все остальные работают так же. В схеме сравнения используется побитное сравнение двоичного кода с выходов счетчиков, которые считают входные импульсы, с кодом, который присутствует на выходах счетчиков установки лимита. Эту операцию выполняют четыре элемента «Исключающее ИЛИ» микросхемы U16 CD4070 (КР1561ЛП14). Как только код с счетчика входных импульсов (разъем J25) станет равным коду, который присутствует на выходе счетчика установки (разъем J26) – на выходах всех элементов U16 установятся лог. 0. Эти нули поступают на четыре входа элемента «4ИЛИ-НЕ» U17:A микросхемы CD4002 (561ЛЕ6) и на выходе элемента устанавливается лог. 1. В случае, когда совпадения кода нет, на этом выходе присутствует лог. 0. Так работает схема сравнения разрядов единиц. Если есть совпадение в разрядах десятков – лог. 1 установится на выходе U19:A, в разрядах сотен – на выходе U19:В. При полном совпадении кода во всех трех разрядах, три лог. 1 поступают на три входа 4-входового элемента «4И-НЕ» U21:A микросхемы CD4012 (561ЛА8). Четвертый вход этого элемента подтянут к «+» питания. В этом случае на выходе элемента формируется запрещающий сигнал STC (лог. 0). Этот сигнал запрещает счет входных импульсов (элемент U8:D, читаем начало статьи) и через буфер на элементе U21:B (ну, не пропадать же даром лишнему элементу) откроет транзисторный ключ Q1. Сработает реле и включит, или отключит, то, что вам надо (разъем J31).

Этот же сигнал (STC) разрешит работу схемы формирования звукового сигнала. Запустится генератор на элементах U7:C, U7:D микросхемы CD4001 (561ЛЕ5) и элементе U22:A микросхемы CD4011 (561ЛА7). Частота генератора около 1Гц, подбирается конденсатором С23. Импульсы с генератора поступают на счетный вход десятичного счетчика с дешифратором CD4017 (561ИЕ8). В результате на выходах счетчика Q0-Q9 будет последовательно появляться лог. 1 с периодом в 1 сек.  К выходам Q1 и Q3 подключены два входа элемента U17:B «4ИЛИ-НЕ» микросхемы CD4002 (561ЛЕ6), остальные два посажены на корпус. При появлении на любом из двух входов этого элемента лог. 1, выход будет менять свое состояние из лог. 1 в лог. 0. Это изменение, через управляемый инвертор на элементе U24:A такой же микросхемы будет открывать транзисторный ключ Q2, который подает питание на бузер (со встроенным генератором). В результате всего этого из бузера будет издаваться примерно такая звуковая последовательность: 7 сек. тишина – 1 сек «бип» – 1 сек тишина – 1 сек «бип» - и далее по кругу. Последовательность можно изменять по своему вкусу, изменяя подключение входов элемента U17:B к выходам счетчика-дешифратора.

Для возврата схемы в исходное состояние нужно сбросить любой из счетчиков – входных импульсов или установки. В этом случае исчезнет совпадение кода в схеме сравнения, сигнал STC установится обратно в лог. 1, реле возвратит свои контакты в исходное состояние, схема формирования звукового сигнала отключится. Здесь есть один нюанс – если сбросить оба счетчика, то на всех входах схемы сравнения установится код, который соответствует «0». Следовательно, схема сравнения сработает. Чтоб этого не случилось и не возникли какие-то непредвиденные последствия, счетчик установки лучше не сбрасывать, а просто изменять его значение.

Питается схема от простейшего трансформаторного блока питания с маломощным трансформатором, диодным мостом, фильтром и интегральным стабилизатором 7805. Все входы неиспользованных элементов микросхем заземлены.

Конструктивно счетчик состоит из трех печатных плат, которые планировалось разместить одна над другой  (отсюда – много лишних разъемов на принципиальной схеме, которые добавлялись по мере проектирования плат).

Также на схеме можно видеть никуда не подключенные резисторы, номиналом 150 Ом. Они должны соединять аноды светодиодных индикаторов с выходами дешифраторов, размещаются между платой индикации и платой счетчиков-дешифраторов (для уменьшения аппетита буржуйских прожорливых индикаторов и облегчения жизни дешифраторов).   Вот, собственно, и все, что касается схемы этого счетчика импульсов. Ниже - небольшое видео симуляции работы счетчика в Протеусе:

…А теперь, все то же самое, только с применением микроконтроллера. Специально для тех, кто жалуется на «впихивание контроллеров во все и вся». Как говорится, - почувствуйте разницу. Алгоритм работы счетчика такой же (с незначительными изменениями). Вот, собственно, схема.

В качестве контролера – первое, что попало под руку в коробках - PIC16F873A. У него как раз необходимое количество портов, чтоб подключить всю необходимую периферию без всяких ухищрений (дополнительные сдвиговые регистры, дешифраторы, и т. д., и т. п.). Совсем коротко о работе схемы.

Микроконтроллер работает на частоте 4 МГц. Порт А - настроен как цифровой ввода/вывода. Его первые три ножки (А0-А2) настроены на вход, к ним подключены кнопки управления – установка лимита («SET+», «SET-») и сброс («RESET/RESET SET») сразу двух счетчиков. Для правильной работы схемы этого оказалось достаточно. Остальные ножки порта настроены на вывод, к ним подключены бузер (А3), а к А4 можно подключать исполнительные устройства. На вывод В0/INT порта В (работает как вход и настроено прерывание по спаду входящего импульса) подаются входные импульсы с какого-либо датчика импульсов. Остальные ножки порта В настроены на вывод, к ним подключены семь сегментов светодиодных индикаторов с общим катодом. К порту С, настроенному на вывод, подключены катоды двух четырехразрядных индикаторов (в моем Протеусе нет трехразрядных, поэтому, чего уж мелочится – счетчик пришлось заставить считать до 10000).

Схема работает так же, как и предыдущая: с помощью кнопок «SET+» и «SET-» устанавливаем необходимый лимит счета и подаем на вход В0/INT импульсы, которые необходимо считать. При достижении предела, счет остановится, бузер будет прерывисто пищать, а на выходе А4 установится лог. 1 для управления исполнительными устройствами. Для сброса – нажимаем «RESET/RESET SET». Схема вернется в исходное состояние, на индикаторах будут нули.

В исходном коде приблизительно 360 строк вместе с комментариями. И только 14 из них реализуют сам счет и сравнение импульсов. Приведу, в качестве примера, эти строки. Они размещаются в обработчике прерываний и исполняются при наступлении прерывания по входу В0 (пришел входящий импульс):

 

Переменные Seth и Setl – старший и младший байты счетчика установки, Couh и Coul – старший и младший байты счетчика входных импульсов. Весь остальной код – это вся необходимая обслуга: реализация динамической индикации, оброс кнопок, формирование звукового сигнала и т. д. Подробно расписывать не буду, код с множеством комментариев и прошивка прилагаются, кто захочет, и кому надо – разберется. Небольшая демонстрация работы счетчика в Протеусе:

Схема создана в Протеусе только для демонстрации, печатная плата не разрабатывалась. Если вы захотите ее собрать в железе – нужно как минимум подключить к микроконтроллеру  кварц на 4 МГц с необходимыми конденсаторами, добавить ключи для исполнительных устройств и бузера (для последнего – не обязательно), ну и, само собой, простейший блок питания.  К статье прилагается архив с проектами Протеуса 7 и 8, в котором есть все, что нужно.

Куда это все можно применить? Ну, первое, что взбрело в голову, - счетчик витков для намоточного станка. Ввели нужное количество витков, и мотайте, пока не запищит. В качестве датчика можно использовать геркон и кусок магнита на валу станка. Или можно сделать таймер до 999/60 = 16 мин. для первой схемы, или до 9999/60/60 = 2 часов для микроконтроллерной схемы. Нужно только подать на вход счетчика импульсы логических уровней (+5В) от любого простейшего генератора частотой 1 Гц. В этом случае на дисплеях будет отображаться время в секундах. Заказчику (речь о котором во вступлении) нужно было зачем-то считать зубья ленточных пил в заточном станке этих самых пил и останавливать, по достижению заданного количества, станок. В общем, все зависит от фантазии – считать можно что угодно, при наличии соответствующего датчика. Даже попугаев, если у вас их развелось слишком много :-).

P. S.

А Радиокота, и всех, кто к нему причастен – с очередним Днем Рождения!

 

Использованная литература:

  1. МРБ, выпуск 1145. В. Л. Шыло. «Популярные цифровые микросхемы». Издание 2-е, исправленное. Москва, «Радио и связь», 1989 г.
  2. МРБ, выпуск 1103. С. А. Бирюков. «Цифровые устройства на интегральных микросхемах». Москва, «Радио и связь», 1987 г.
  3. PIC16F87X. Data Sheet. 28/40-Pin 8-Bit CMOS FLASH Microcontrollers. 2001. Microchip Technology Inc. DS30292C.
  4. https://www.piclist.com/techref/piclist/index.htm

Файлы:
Архив со всем


Все вопросы в Форум.