image

В прошлой статье я рассказал о схеме ИК пульта дистанционного управления, выполненном на микросхемах стандартной логики. В этот раз мне хочется продолжить эту тему и предложить вашему вниманию схему декодера RC-5, которая также выполнена только на логических микросхемах и таймерах.

Данная схема позволяет принимать команды от стандартного ИК пульта управления и выводит принятый код команды на семисегментный индикатор, и все это без единого микроконтроллера. Вы будете удивлены, на сколько простой получилась схема.

Я уже писал, что взялся помочь с разработкой задания для конкурса по электронике. Схему пульта на жесткой логике в конечном итоге мы забраковали, т.к. нужно было снабдить каждого конкурсанта дополнительным устройством, которое принимало бы команды от пульта для проверки его работоспособности. Поэтому было решено купить недорогие пульты, а вот декодер выдать в качестве задания для конкурсантов. Решено, и я снова принялся за проектирование.

Если вы не читали прошлую статью, предлагаю предварительно ознакомиться с ней по этой ссылке.

Структурная схема


Для меня процесс разработки структурной схемы это как решение головоломки. На этом этапе я определяю необходимое количество функциональных блоков и связи между ними. Также примерно прикидываю, какие схемотехнические решения могут подойти для каждого функционального блока. А уже после этого начинаю отрабатывать каждый кусок схемы по отдельности и складывать из них общую электрическую схему.

Не будем пропускать этот важный шаг и в этот раз. На рисунке ниже показана структурная схема декодера RC-5, которая у меня получилась. Дальше вы увидите, что не все элементы структурной схемы понадобятся при реализации электрической.

image

Давайте постепенно разбираться, как работает моя схема.

Прием ИК сигнала


ИК пульты дистанционного управления обычно используют светодиоды с длинной волны 940нм, и модулируют сигнал на частоте 36кГц для исключения влияния фоновой засветки. Самым рациональным и простым способом принять такой сигнал было бы применить специализированный приемник типа TSOP. Он сразу имеет в своем составе все необходимое: фототранзистор, демодулятор на 36кГц, схему автоматического регулирования усиления, удобный диапазон питания и выход с открытым коллектором.

image

Но это же задание для конкурса, поэтому мы пошли другим путем, использовали фототранзистор и фильтры на операционных усилителях, ни каких АРУ и прочих наворотов. В рамках статьи опустим этот нюанс, и будем считать, что прием и демодуляция ИК сигнала производится специализированным ИК датчиком.

Самосинхронизация декодера по сигналу пульта


Итак, в основе кода RC-5 используется манчестерское кодирование, основным преимуществом которого является самосинхронизация. Посылка от пульта к декодеру передается последовательно по одному каналу. И для приема данных декодер с пультом должен синхронизироваться. Для этого из посылки необходимо извлечь сигнал синхронизации.

Чтобы разобраться, как получить сигнал синхронизации, посмотрим на произвольную посылку, которую можно принять от пульта дистанционного управления.

image

Такую посылку будет отправлять пульт управления телевизором при нажатии на цифру 9. Обратите внимание, что не зависимо от состояния бита данных, в середине каждого периода обязательно происходит смена уровней. При передаче единицы происходит переход из низкого уровня в высокий, а при передаче нуля наоборот.

image

Именно благодаря такому способу кодирования, по переходу в середине периода можно синхронизировать приемник под битовую скорость пульта дистанционного управления.

Давайте рассмотрим принцип работы схемы детектирования сигнала синхронизации.

Я уже говорил, что ИК приемник имеет выход с открытым коллектором, при наличии ИК импульсов он открывает встроенный транзистор и «переворачивает» сигнал пульта управления. Чтобы вернуть сигнал в исходное положение используется логический вентиль XOR U1:A, включенный как инвертор. Фильтр нижней частоты на R1-C1 необходим для того, чтобы снизить влияние внешних помех.

image

«Выуживать» синхронизацию из посылки будем схемой детектора переходов на основе одного логического вентиля XOR U1:B.

Из-за интегрирующей цепочки R2-C2 импульсы на второй вход XOR приходят с небольшой задержкой, ее хорошо видно на общем графике по середине рисунка. За счет этого при смене уровня сигнала manchester входы элемента XOR на короткий период принимают разные значения. Логический элемент XOR детектирует эту неравнозначность и выдает короткий импульс на своем выходе. Длительность импульса определяется порогами переключения входов и номиналами интегрирующей цепочки.

Из сигнала синхронизации необходимо сделать тактовые импульсы «правильной» формы. Для этого воспользуемся таймером U2 NE555 по стандартной схеме одновибратора.

image

Импульс запуска одновибратора должен иметь обратную полярность, чтобы перевернуть сигнал синхронизации используем логический вентиль XOR U1:C по схеме инвертора.

Не удивляйтесь, что вместо инверторов я использовал XOR в обоих случаях. Микросхема 74НС86 имеет четыре вентиля. Один я использовал для детектора переходов, осталось еще три. Их можно либо не использовать, и они будут просто занимать место на плате и жрать питание, а можно использовать как инверторы и сократить количество микросхем в схеме.

На графике видно, что тактовый импульс на выходе одновибратора имеет длину в полтора периода сигнала синхронизации. Это сделано не просто так. Нас не интересуют импульсы синхронизации, возникающие между битами, их нужно отсеять. Тем более, что они появляются только при передачи подряд нескольких одинаковых битов. Схема должна срабатывать лишь по середине бита. К тому же, не всегда схемы пультов управления синхронизируются кварцем, их собственная частота может гулять в широком пределе, и запас в половину периода сигнала синхронизации позволяет нивелировать эту проблему.

image

В итоге тактовый сигнал перекрывает «нежелательные» импульсы и имеет частоту, равную битовой скорости пульта управления. Ловко, не правда ли? А дальше вы увидите, что смещение тактового сигнала на половину периода нам только на руку.

Давайте еще раз посмотрим, как происходит манчестерское кодирование одного бита. По сути, получается, что наш бит целехонький помещается во второй половине периода. А впервой находится его инверсная копия для обеспечения синхронизации. И нам только остается записать принятый бит в сдвиговый регистр. Очень удобно, не правда ли?

image

Защита от потери данных и определение конца сообщения


При передаче данных по средствам эфира нет никакой гарантии, что наш декодер получит все сообщение целиком. Да и мало ли еще помех летает в воздухе? Поэтому схема должна обрабатывать предельное время приема одной единицы данных. Если схема не получит следующий бит данных вовремя, она должна перейти к исходному состоянию и ждать следующую посылку.

image

Схема построена на счетчике 74НС393. На счетный вход подаются импульсы на частоте примерно 3кГц, это значение подобранно примерно таким образом, чтобы схема срабатывала при потере одного тактового импульса. При регулярном наличии тактового сигнала clk, счетчик практически не успевает вести счет. Но, если тактовый импульс пропадет, счетчик U4:B считает до переполнения, и формирует сигнал timeout, который в свою очередь сбрасывает всю схему в исходное состояние и удерживает его.

Дополнительные логические вентили U3:A, U3:B, U3:C необходимы, чтобы остановить счетчик при отсутствии тактового сигнала. Если убрать их из схемы, то счетчик продолжит счет после переполнения. Сигнал timeout при этом будет пульсировать, а вся схема станет работать не корректно. Посмотрите, как изменятся графики сигналов при их отсутствии.

image

Второй вентиль этого же счетчика отмеряет длину принятой посылки. Чтобы не добавлять еще одну микросхему и просто для схемотехнического разнообразия, в схеме используется монтажное И на диодах. Немного двоичной магии, и счетчик отсчитывает ровно 14 тактовых импульсов. А выходной сигнал endPack может защелкнуть выходной буфер сдвигового регистра.

image

Запись кода команды


Запись кода команды производится в две микросхемы сдвиговых регистров 74HC595, включенных последовательно друг за другом. Код команды записывается в младшие биты выходов. Если не обрабатывать биты адреса в посылке, можно было бы обойтись и одним регистром.

image

К выводам Q0-Q3 регистра U5 можно подключить семисегментный дешифратор, за ним светодиодный индикатор и наблюдать коды принятых команд.

На следующем графике вы можете увидеть, как происходит переключение выходов сдвигового регистра при последовательной передаче кодов 9, 6 и 0.

image

Электрическая схема


Давайте посмотрим, что получилось в итоге. Электрическая схема построена всего на 5 микросхемах стандартной логики и двух 555 таймерах. Один генератор на 3 кГц я не нарисовал, он тоже реализован на NE555. Не так уж и плохо для технологии из прошлого века?

image

И, я просто обязан вам показать, за что так люблю ISIS Proteus. Не нужно пытаться убеждать меня в том, что виртуальное моделирование электрических схем это просто игрушка. Вы же можете позволить себе вечерком запустить доту или каэску? А кто-то до сих пор шпилит в героев! Тогда, почему я не могу вечерком побаловаться в симуляторе электронных схем?

image

Сборка макета


Доработка эскиза схемы до схемы прототипа, разработка печатной платы и сборка прототипов производилась в Ярославле. Мой товарищ решил выполнить эту часть работы самостоятельно. Плата разрабатывалась в альтиуме, картинки он, конечно, генерирует великолепно.

image

Ну и конечно же демонстрация устройства в работе. Для этого нашли первый попавшийся ИК-пульт от телека.

Конкурс по электронике прошел успешно… в 2018 году. Дети остались довольны. Даже страшно подумать, что эти мальчишки на фотке уже взрослые мужики!

image



Если вам понравилась эта статья, то вы можете посмотреть другие мои проекты. Ссылки на них вы можете найти под спойлером.

Комментарии (10)


  1. KotovladeletsGT
    15.01.2024 08:20
    +2

    Плата разрабатывалась в альтиуме, картинки он, конечно, генерирует великолепно.

    Приятно видеть, как с каждой версией у Альтиума улучшается графический интерфейс и отрисовка плат в 3D. Кто-то конечно скажет, что эти графические рюшечки не нужны настоящему инженеру, но мне, после вынужденного знакомства с Спринт-Лайаут и Пикадом 2006, Альтиум видится манной небесной

    Плата в Альтиуме 21 версии
    Плата в Альтиуме 21 версии

    P.S. Диоды у вас конечно жирноваты для такой функции, но что ж, понимаю, иногда проще воткнуть какие есть под рукой, чем искать 1N4148


    1. OldFashionedEngineer Автор
      15.01.2024 08:20
      +2

      Визуализация это очень важный момент. Я сейчас сам платы не проектирую, это делает тополог. И проверять его работу по 3D модели значительно проще.

      Далее, еще один важный момент это визуализация проекта. Допустим, для презентации проекта заказчику. Ну и в конструкторской работе тоже удобно иметь хорошую модель. Как минимум, чтоб высоту компонентов учитывал и их геометрию. Ну и чтоб платы вверх ногами не ставили в корпус.


      1. KotovladeletsGT
        15.01.2024 08:20

        Всё так


      1. SAeMon_DS
        15.01.2024 08:20

        Протеус тоже выдаёт шикарные 3d визуализации) давно прижился у меня как любимая САПР)


        1. OldFashionedEngineer Автор
          15.01.2024 08:20

          Не, я как-то не смог себя заставить в протеусе трассировать платы. Альтиум все же лучше, хоть и сложнее


    1. steadyI
      15.01.2024 08:20
      +1

      KiCad 6


      1. OldFashionedEngineer Автор
        15.01.2024 08:20

        В кикад сейчас встроенными средствами 3D моделирование поддерживается, или с помощью внешнего приложения?


        1. acc0unt
          15.01.2024 08:20

          Компоненты моделятся во внешнем приложении. В стандарной либе довольно много моделей - но если не хватает, то можно делать в SolidWorks или в FreeCAD - кому как удобнее. Ну или попросту скачивать готовое.

          Модель платы рисуется самим KiCad.


  1. Vitaliy_dzen
    15.01.2024 08:20

    У Вас в начале ссылка на "предыдущюю статью" ведет сама на себя, поправьте пожалуйста. Большое спасибо за материал, было приятно читать.


    1. OldFashionedEngineer Автор
      15.01.2024 08:20

      Спасибо за комментарий! Поправлю, видимо увлекся в процессе