как декодировать манчестерский код

🏠 Интернет Всего 🚗

как декодировать манчестерский код. man diagram. как декодировать манчестерский код фото. как декодировать манчестерский код-man diagram. картинка как декодировать манчестерский код. картинка man diagram. Введите число и нажмите "Encode Manchester!":

Введите число и нажмите «Encode Manchester!«:

Теперь давайте внимательно посмотрим на картинку и попробуем проанализировать и перечислить основные преимущества и недостатки преобразования данных в Манчестерский Код:

Комбинация логических уровней 11 однозначно говорит о последнем принятом 0, а комбинация 00, соответственно, говорит о 1. Таким образом после одной из них приёмник синхронизируется

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

Сначала пишем тест

Теперь сами тесты. Более простой задачей является преобразование данных в Манчестерский Код (encode), поэтому с неё, пожалуй, и начнём:

Преобразовать данные в Манчестерский Код очень легко:

Предположительная реализация процесса декодирования Манчестерского кода:

Сборка и запуск тестов

Если Вы работаете в связке Windows + Visual Studio, необходимо выполнить следующее:

как декодировать манчестерский код. win gtest gmock run. как декодировать манчестерский код фото. как декодировать манчестерский код-win gtest gmock run. картинка как декодировать манчестерский код. картинка win gtest gmock run. Введите число и нажмите "Encode Manchester!":

При использовании Linux + gcc g++:

как декодировать манчестерский код. suse tests run. как декодировать манчестерский код фото. как декодировать манчестерский код-suse tests run. картинка как декодировать манчестерский код. картинка suse tests run. Введите число и нажмите "Encode Manchester!":

Практика

Источник

Манчестерский код. Синхронизация, приём и декодирование

Итак, для начала поговорим о том, что представляет собой «манчестерское» кодирование.

как декодировать манчестерский код. manchester 1. как декодировать манчестерский код фото. как декодировать манчестерский код-manchester 1. картинка как декодировать манчестерский код. картинка manchester 1. Введите число и нажмите "Encode Manchester!":

В «манчестерском» коде единица кодируется переходом сигнала в середине битового интервала из состояния «OFF» в состояние «ON», а ноль — наоборот, переходом сигнала в середине
битового интервала из состояния «ON» в состояние «OFF».

Что такое состояния «ON» и «OFF»?
Состояния сигнала «ON» и «OFF» — это логические состояния. В общем случае «OFF» — это неактивное состояние, такое же, как при отсутствии какого-либо обмена вообще, а «ON» — это активное состояние, то есть такое, которое как-либо отличается от неактивного. Поэтому, несмотря на то, что на картинке справа состояние сигнала «ON» показано высоким уровнем сигнала, а состояние «OFF» показано низким уровнем, это не нужно понимать буквально (просто с высоким и низким уровнем картинка привычнее и нагляднее). На самом деле состояния «ON» и «OFF» могут быть закодированы совершенно по-разному. Например, ИК-пульты кодируют эти состояния наличием или отсутствием импульсов на определённой частоте, интегральные фотоприёмники (у которых чаще всего неактивным является высокий уровень сигнала на выходе) выдают код, в котором «ON» закодировано низким уровнем, а «OFF» — высоким и т.д.

Длительность нуля и единицы в манчестерском кодировании одинаковая, то есть длина сообщения не зависит от того, сколько в сообщении нулей или единиц, а зависит только от общего количества бит.

как декодировать манчестерский код. manchester 2. как декодировать манчестерский код фото. как декодировать манчестерский код-manchester 2. картинка как декодировать манчестерский код. картинка manchester 2. Введите число и нажмите "Encode Manchester!":

Ключевым свойством «манчестерского» кодирования является то, что при передаче каждого бита обязательно присутствуют оба состояния сигнала: «ON» и «OFF» (ещё раз смотрим на рисунок вверху). То есть, во время передачи каждого бита сигнал должен хотя бы раз изменить своё состояние. То есть «манчестерский» код может состоять только из интервалов одинарной, если соседние биты одинаковые, и двойной, если соседние биты отличаются, длительности (это продемонстрировано на рисунке слева).

Описанное свойство позволяет дополнительно синхронизировать приёмник с передатчиком при приёме каждого бита, определять — может ли вообще принимаемый код быть «манчестерским», диагностировать конец сообщения или «потерю» сигнала передатчика.

Скажем, если предположить, что частота передатчика не может скачком измениться более чем в 1,5 раза, то отсутствие изменения состояния сигнала в течении 3-х полубит можно смело трактовать как конец сообщения или «потерю» сигнала передатчика (если мы заранее знаем длину сообщения). Или, например, при исследовании какого-то неизвестного кода, если мы видим, что в коде присутствует более двух вариантов интервалов между состояниями «ON» и «OFF», то можно однозначно сделать заключение о том, что исследуемый код не «манчестерский».

Надеюсь, с тем, что такое «манчестерский» код, всё более или менее понятно, поэтому переходим к следующему вопросу — как этот код принимать и декодировать.

Ну, очевидно, что определить начало передачи данных можно по изменению состояния сигнала, воспринимаемого приёмником, с «OFF» на «ON». Однако тут есть один нюанс. Поскольку передача единицы тоже начинается с состояния «OFF», то при первом изменении сигнала из «OFF» в «ON» мы совершенно никак не сможем диагностировать что это — середина передачи единицы или начало передачи нуля. Единственное, что тут можно сделать — это заранее условиться, какой бит должен передаваться первым (то есть ввести специальный старт-бит, значение которого будет всегда строго определено).

Всё, теперь, если мы знаем с какого бита посылка начинается, знаем длительности интервалов состояний «ON» и «OFF», наш приёмник обладает точным, стабильным генератором и мы
точно знаем сколько хотим принять бит, то можно составить первый простейший алгоритм восстановления исходной, закодированной «манчестерским» кодом посылки:

Вариант второй. Мы знаем с какого бита посылка начинается, знаем длительности интервалов «ON» и «OFF», наш приёмник обладает стабильным генератором, но мы ничего не знаем о длине сообщения. В этом случае можно воспользоваться тем свойством манчестерского кода, что сигнал не может оставаться постоянным в течении 3-х и более полубит. То есть, момент, когда сигнал в течении 3-х полубит остаётся в состоянии «OFF» можно считать концом сообщения. Алгоритм восстановления исходного кода в этом случае может выглядеть так:

Вариант третий. Мы знаем с какого бита посылка начинается, но не знаем длительности интервалов, в течении которых сигнал находится в состоянии «ON» и «OFF». Что нам делать в
этом случае? Если вы по счастливой случайности знаете значение не только первого бита, но и второго, — значит вам точно известно, через какие интервалы (через целый бит или через половину)
произойдут первые 2 переключения и вы с лёгкостью можете необходимые интервалы засечь или, научно выражаясь, — синхронизировать приёмник с передатчиком.
(Ага, вот мы и раскусили зачем у RC-5 целых 2 стартовых бита. Кстати, в сетях ethernet, где тоже используется «манчестерское» кодирование, для начальной синхронизации используется целая 56-битная преамбула).
Далее можно легко воспользоваться первым или вторым из приведённых выше алгоритмов.

Ну и, предположим, ещё один вариант. Мы знаем первые два бита посылки, но наш генератор — полное говно, хотя и работает (или, говоря научными терминами, мы можем гарантировать, что за время, равное длительности полубита, частота генератора не может измениться в 1,5 раза и более). Тут-то как быть?

Да просто надо по каждому новому фронту заново вычислять значения длительности полубита и целого бита. То есть, другими словами, нужно синхронизировать приёмник с передатчиком не один раз в самом начале, а по каждому новому фронту (под фронтом будем понимать переключения между состояниями «ON»/»OFF»), благо при манчестерском кодировании у нас новый фронт присутствует в каждом передаваемом бите.

Короче говоря, рассматривать разные комбинации можно долго, запомните главное преимущество, за которое «манчестерский» код всем так полюбился: при передаче каждого бита существует изменение состояния «ON»/»OFF», которое даёт возможность синхронизировать передатчик и приёмник.

как декодировать манчестерский код. manchester 3. как декодировать манчестерский код фото. как декодировать манчестерский код-manchester 3. картинка как декодировать манчестерский код. картинка manchester 3. Введите число и нажмите "Encode Manchester!":

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

Самодельные ИК-пульты и приёмники сигналов дистанционного управления

Источник

Конфигурируемые логические ячейки в PIC микроконтроллерах

Первоначальный замысел статьи состоял в описании Периферии Независимой от Ядра микроконтроллеров Microchip, но тема оказалась весьма обширной, поэтому в качестве первого шага расскажем о CLC – конфигурируемых логических ячейках (Configurable Logic Cell).

В статье (Использование конфигурируемых логических ячеек для управления светодиодной лентой WS2812 [1]) было рассмотрено как логические ячейки CLC PIC-контроллеров могут существенно упростить решение задачи формирования сигналов управления драйверами WS2812 и аппаратно реализовать функции, на программное решение которых может не хватать быстродействия простого микроконтроллера.
Цель представленной статьи заключается в более близком знакомстве с конфигурируемыми логическими ячейками в PIC микроконтроллерах Microchip, в демонстрации примеров реализаций и, по возможности, натолкнуть читателя на мысли по использованию CLC своих проектах.

Часть 1. Конфигурируемые логические ячейки в PIC микроконтроллерах
Часть 2. Порты Ввода/Вывода
Часть 3. АЦП с вычислителем

Введение.
Описание. Варианты конфигурации. Что может быть входами и выходами

Конфигурируемые логические ячейки CLC являются частью ПНЯ – Периферии Независимой от Ядра (Core Independent Peripheral, CIP), т.е. функционирование такой периферии не зависит (почти) от тактовой частоты микроконтроллера и его состояния (RUN, IDLE, SLEEP).
Конечно же, подобная периферия конфигурируется программой микроконтроллера, но дальнейшее функционирование может быть независимым.

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

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис.1. Структура одной логической ячейки CLC

Каждая из логических ячеек имеет 4 входа, сигналы для которых выбираются входным мультиплексором, при этом каждый вход может быть прямым или инверсным. Часть входов может не использоваться и подключаться к уровню лог.0 или лог.1.
Входы для ячеек могут иметь внешние подключения (порты ввода/вывода) и внутренние (сигналы другой периферии: ШИМ, компараторы, таймеры и др. и выходы самих CLC).
Выход ячейки CLC имеет управляемую полярность, может подключаться на выходной порт микроконтроллера, к другой периферии, формировать запрос на прерывание по изменению состояния (по фронту и/или спаду).

Логическая функция каждой ячейки выбирается из 8-и вариантов (см. табл.1)

лог. ячейкалог. ячейка
как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":
как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":
как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":
как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Таблица 1. Варианты функций логических ячеек.

Так как логические ячейки имеют массу настроек, то проще всего конфигурировать CLC через плагин MPLAB Code Configurator в среде разработки MPLAB X, который создает Си файлы настроек задействованной периферии.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 2. Среда разработки Mplab X IDE с запущенным плагином Mplab Code Configurator (MCC)
где:
1 – редактируемая ячейка;
2 – настройка входного мультиплексора и полярности входов;
3 – функция логической ячейки;
4 – резервирование портов ввода/вывода.

Обратите внимание на входные гейты на входе CLC (рис.2, п.2), которые выполнены как элементы 4-ИЛИ.
При необходимости, в соответствии законам де Моргана, входные гейты можно преобразовать из базиса ИЛИ в И (см. Табл.2).

Таблица 2. Преобразование логических функций

Логическая функцияЭквивалентное представление в CLC
4-ИЛИ (OR)как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":
4-ИЛИ-НЕ (NOR)как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":
4-И-НЕ (NAND)как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":
4-И (AND)как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Примеры использования CLC

Плавное изменение яркости светодиода (мерцание)

Если сигналы двух ШИМ с близкими частотами подключить к входам CLC сконфигурированной как элемент XOR (исключающее ИЛИ), то можно организовать «мерцание» светодиода (периодическое изменение скважности). При этом решение полностью аппаратное и не требует участия ядра МК (программы).

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 3a. Схема «ШИМ модулятора»

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 3b. Диаграммы демонстрирующие принцип изменения скважности

Если под такую простую задачу жалко использовать два ШИМ-модуля, то возможны варианты реализации без ШИМ:

А) Используем сигналы переполнения двух таймеров (события), плюс три ячейки CLC.
На два JK- триггера в счетном режиме подаем сигналы с таймеров (postscaled out) – получаем на выходе меандры, которые затем подаем на элемент XOR.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 3c. Реализация ШИМ модулятора без входных ШИМ сигналов

Б) Используем сигналы переполнения двух таймеров и одну CLC.
На входы RS триггера подаем сигналы с Таймера (postscaled out) – получаем на выходе «пилообразный ШИМ» (рис. 3e).

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Делитель частоты

Схема делителя частоты на 2 приведена на рис. 4a. Используется один D-триггер в счетном режиме. Входной сигнал подается на вход тактирования, вход D соединен с инверсным выходом триггера. В момент поступления на вход тактирования фронта на входе D всегда будет инверсный сигнал относительно текущего состояния триггера, т.е. состояние триггера будет меняться только по фронту входного сигнала.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис.4а. Делитель на 2.

В плагине MPLAB Code Configurator подобная схема может выглядеть так:

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 4b. Делитель на 2 в настройках MCC.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис.4c. Диаграмма на входе и выходе делителя.

Делитель на 3 изображен на рис. 4d.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 4d. Делитель на 3.

Делитель на 4 это два последовательно включенных делителя на 2 😉

Где могут применяться делители? Там, где нужно поделить частоту.
Следующий пример использует делители частоты.

Драйвер шагового двигателя

Один из самых простых вариантов управления Шаговым Двигателем (ШД) это полношаговое управление (full step). В этом варианте сигналы управления сдвинуты на 90°. Поэтому можно взять периодический сигнал, на один делитель частоты подать его в прямом виде, на другой – в инверсном.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 5a. Формирователь сигналов управления шаговым двигателем.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 5b. Диаграмма на выходе формирователя.

Изменение частоты на входе CLC будет изменять частоту управляющих сигналов шагового двигателя. Входную частоту можно брать с входа микроконтроллера (внешний сигнал), либо от внутреннего источника – ШИМ или NCO генератора.
При управлении ШИМ-ом нужно менять 2 параметра: регистр периода (частота) и регистр скважности, так как управляющий сигнал должен быть с 50% скважностью.
Применение NCO (Numerically Controlled Oscillator, управляемый генератор) выглядит более привлекательным, так как это генератор может автоматически формировать меандр, поэтому для изменения частоты нужно менять значения только в одном регистре.
Для смены направления нужно инвертировать сигналы на одной из фаз.

Задержка. Формирование импульса по фронту, спаду, изменениям

Для некоторых задач может понадобиться формирование задержанного импульса.
Для этого можно применить D-триггер. На счетный вход подаем входной сигнал, на вход тактирования – какой либо высокочастотный сигнал (например тактовой частоты Fosc). Таким образом, изменение выхода триггера будет происходить только по фронту тактового сигнала.
Данный метод будет сдвигать фронт и спад сигала на период Fosc (тактовой частоты) только если оба сигнала синхронны. Поэтому для гарантированного сдвига на 1 период Fosc сдвигаемый сигнал должен формироваться самим микроконтроллером (ШИМ, NCO и др.). Если входной сигнал асинхронный, то на входе можно поставить синхронизатор на точно таком же D-триггере (т.е. сперва сдвинуть асинхронный сигнал до первого тактового импульса, а затем сдвинуть на полный период тактового сигнала).

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 6a. Формирователь задержанного сигнала.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 6b. Диаграммы на входе и выходе формирователя задержанного сигнала.

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

Формирование импульсов по фронту и спаду

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 7a. Формирователь импульсов по фронту и спаду

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 7b. Диаграммы на входе и выходе формирователя импульсов по фронту и спаду

Формирование импульсов по фронту

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 8a. Формирователь импульсов по фронту.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 8b. Диаграммы на входе и выходе формирователя импульсов по фронту

Формирование импульсов по спаду

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 9a. Формирователь импульсов по спаду

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 9b. Диаграммы на входе и выходе формирователя импульсов по спаду

Где могут применяться подобные схемы?
Можно использовать, например, при построении импульсного источника питания для бланкирования сигнала обратной связи от компаратора во время переключения силового ключа (подробнее см.ниже).

Подавление дребезга контакта

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

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис.10a. подавление дребезга.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис.10b. Диаграммы сигналов на входе и выходе схемы подавления дребезга.

Где применяется?
Собственно опрос кнопок, предотвращение многократных ложных срабатываний.

Еще варианты

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис.10c. Подавление дребезга с задержкой с RC-цепочкой

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис.10d. подавление дребезга

В отличие от предыдущего примера задержка определяется параметрами RC цепи и не требует задействование таймера.

Квадратурный энкодер

Квадратурный энкодер это устройство, при вращении оси которого формируются два квадратурных сигнала (сдвинутых по фазе). Применяется в определении скорости (угла поворота или числа оборотов) и направления вращения/перемещения. Пожалуй, самое известное применение это колесо мышки.

Ниже приведены две схемы декодирования сигналов квадратурного энкодера.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 11a. Квадратурный декодер со счетным выходом и сигналом направления.

Эта схема детектирует фазы входных сигналов (состояние выхода D показывает направление вращения энкодера) и выдает тактовые сигналы (выход С).

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис 11b. Квадратурный декодер с двумя счетными выходами

Эта схема выдает импульсы. Один выход при вращении по часовой стрелке, второй выход – при обратном вращении.

При переключении контактов энкодер выдает множественные ложные срабатывания (дребезг контактов).

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 11c. Сигналы с выходов механического квадратурного энкодера

Вот тут фрагмент покрупнее:

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 11d. Сигналы с выходов механического квадратурного энкодера

Поэтому обе схемы нуждаются в очищенных от дребезга сигналов. Ранее мы уже рассматривали варианты подавления дребезга аппаратно на ячейках CLC.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 11e. Входные сигналы с энкодера и очищенные от дребезга.

Под обработку сигналов квадратурного энкодера понадобятся 4 ячейки CLC – две для подавления дребезга и две для детектирования.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 11f. Диаграммы сигналов обработки квадратурного энкодера для схемы с выходом направления

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 11g. Диаграммы сигналов обработки квадратурного энкодера для схемы с двумя счетными выходами.

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

Где применяется?
Механические и оптические энкодеры, подсчет числа входящих и выходящих людей, закрытие турникета при прохождении в неположенном направлении ))

Манчестерский кодер

Манчестерское кодирование широко применяется при передаче сигналов. Каждый бит делится на два интервала, после первого интервала (в середине информационного бита) происходит смена уровня сигнала. Передача каждого информационного бита сопровождается изменением уровня, Нули и Единицы отличаются фазой (1 – перепад из 0 в 1, «0» — из 1 в 0). Таким образом, манчестерский код имеет следующие особенности:

Схема кодирования очень проста и использует один логический элемент ИСКЛЮЧАЮЩЕЕ ИЛИ.

На выходе получаем кодированный поток.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 12. Диаграммы формирователя Манчестерского кода

Декодер манчестерского кода

Схема манчестерского декодера гораздо сложнее. Её задача выделить синхро-импульсы и битовый поток.

В примере применения AN1470 [2] предлагается следующая реализация аппаратного декодирования Минчестерского кода на основе CLC и NCO (управляемого генератора).

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис.13a. Схема декодера Манчестерского кода

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 13b. Диаграммы, поясняющие работу декодера

Стадия 1 – D-Триггер
Ячейка CLC4 (D-триггер) защелкивает входной поток по спаду сигнала синхронизации. Выход с этого триггера будет являться декодированными (восстановленными) данными из входного потока.

Стадия 2 – элемент XOR (CLC2)
Поскольку в Манчестерском кодировании изменение сигнала происходит в середине каждого информационного бита, то можно использовать элемент ИСКЛЮЧАЮЩЕЕ ИЛИ чтобы обеспечить нарастающий фронт на стадии 3 в середине каждого бита, т.е. мы синхронизируем декодер в середине каждого бита.

Стадия 3 – NCO + AND-OR (CLC1)
модуль NCO, используется для генерации ¾ битового интервала по завершении которого производится захват (фиксация) данных. NCO используется в режиме с активным низким состоянием. Длительность импульсов можно регулировать с помощью регистров. Модулю NCO необходим источник тактовых импульсов, которые поступают ему из CLC1.
Эти два блока являются наиболее важными в декодере. Они создают импульсы фиксированной длины после каждого нарастающего фронта сигнала, выходящего из «стадия 2». Выходной сигнал NCO подается обратно в элемент И-ИЛИ так, что если выход из «стадия 2» становится равным нулю, то NCO будет продолжать тактироваться до своего переполнения.

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

Ждущий мультивибратор

Для формирования одиночного импульса по фронту или спаду входного сигнала служат ждущие мультивибраторы.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 14a. Схема ждущего мультивибратора на JK-триггере.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 14b. Реализация ждущего мультивибратора на JK-триггере в PIC-контроллере.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 14c. Диаграммы поясняющие работу ждущего мультивибратора

Инвертирование сигнала на входе синхронизации реализует ждущий мультивибратор с запуском по спаду входного сигнала (Рис.14d).

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 14d. Диаграммы ждущего мультивибратора с запуском по спаду.

В отличие от рассмотренных ранее формирователей импульса по фронту и спаду (см.рис 8а, 9а) у данной схемы длительность импульса задается не частотой сигнала на входе тактирования, а параметрами RC-цепочки.

Мультивибратор

Простейший генератор можно сделать на двух CLC (D-триггер + инвертер).
Недостатком является низкая стабильность, так как пороги переключения зависят от уровней лог.0 и 1 конкретного типа микроконтроллера, которые могут «гулять» от температуры, напряжения питания и др. К тому же не очень правильно когда на цифровом входе уровень сигнала продолжительное время находится между 0 и 1.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис. 15a. Простейший мультивибратор на D-триггере.

Следующая схема использует два встроенных компаратора и одну CLC. В этой схеме пороги срабатывания компараторов задаются источником опорного напряжения и внешним делителем (или встроенным ЦАП). Схема будет более стабильной и к тому же компараторы имеют аналоговые входы и позволяют любые напряжения на входе в пределах напряжения питания.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис.15b. Мультивибратор на двух компараторах и RS-триггере.

Для данного примера от ПНЯ помимо CLC нам понадобятся 2 компаратора, а так же источники опорного напряжения (внешние на делителе или внутренние).
В начальном состоянии на выходе триггера установлен уровень лог.0, конденсатор разряжен, на компараторе COMP1 на выходе появляется лог.1, триггер устанавливается в 1, конденсатор заряжается через резистор до уровня напряжения верхнего порога (Vref hi), при достижении которого на входе R триггера появляется лог.1. Триггер перекидывается в противоположное состояние, конденсатор начинает разряжаться через резистор и т.д… Таким образом, мы получили полностью программно-независимый генератор. Но в данной схеме микроконтроллер может программно изменять частоту с помощью изменения порога срабатывания одного из компараторов (изменением опорного напряжения встроенным ЦАП или др.).

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис.15c. Диаграммы сигналов мультивибратора

Измерение Емкости. Емкостной сенсор. Сенсорная кнопка

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

сигналыкомментарий
как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":Осциллограммы без касания сенсора
как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":Осциллограмма при «нажатом» сенсоре

Рис.16a. Диаграммы работы мультивибратора при изменении времязадающей емкости.

Подобным методом можно детектировать протечку воды или определять влажность почвы и использовать для автоматизации полива цветов ))

Импульсный источник питания

Еще один пример использования конфигурируемых логических ячеек совместно со встроенными компараторами.
Таймер TMR периодически устанавливает RS-триггер и открывает силовой транзистор. Ток начинает течь через индуктивность, напряжение на резисторе R1 линейно увеличивается. При достижении напряжения на R1 порогового значения срабатывает компаратор COMP1 и сбрасывает триггер, транзистор закрывается. Ток через индуктивность не может прерваться мгновенно, поэтому ток начинает течь через диод D1 и заряжает выходной конденсатор. По срабатыванию таймера триггер снова устанавливается и процесс повторяется.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис.17a. Простейший импульсный источник питания.

На рисунке приведена схема повышающего источника, но для других топологий (см. рис. 17b) работа схемы будет аналогичной, поэтому выходной каскад далее рисовать не буду.

схемаописание
как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":повышающий
как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":понижающий
как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":Sepic

Рис.17b. Различные топологии импульсных источников питания

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

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис.17c. ИИП с гистерезисным управлением

Включение силового транзистора будет генерировать помеху, которая может приводить к преждевременному срабатыванию компаратора COMP1. Для избавления от этого можно включить RC-фильтр в цепь между R1 и компаратором, а можно добавить рассматриваемый ранее блок бланкирования (формирование импульса по фронту, см. рис 8а, или рис. 14а), который после включения транзистора будет блокировать сброс триггера на короткий интервал времени.

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис.17d. Помеха при коммутации силового ключа

как декодировать манчестерский код. image loader. как декодировать манчестерский код фото. как декодировать манчестерский код-image loader. картинка как декодировать манчестерский код. картинка image loader. Введите число и нажмите "Encode Manchester!":

Рис.17e. ИИП с гистерезисным управлением и бланкированием помехи переключения.

Элементы U1 и U2 можно привести к реализации на элементах ИЛИ и отнести к входу CLC1, тогда вся логическая часть схемы реализуется на трех ячейках CLC (обычно в микроконтроллерах Microchip имеется 4 ячейки).
Все что на схеме изображено левее силового ключа – находится внутри микроконтроллера, связи периферийных модулей так же осуществляются внутри кристалла микроконтроллера. Напряжения порогов Ref и Ref1 могут задаваться встроенными источниками опорного напряжения или ЦАП. Таким образом, импульсный источник питания с регулируемым выходным напряжением можно реализовать на периферийных модулях микроконтроллера. После первоначального конфигурирования схема будет работать полностью аппаратно без необходимости участия ядра в поддержании функции преобразователя. Ядро может заниматься интерфейсными задачами, индикации контроля и др.

Вообще, для построения импульсных источников питания в новых семействах PIC16F17xx микроконтроллеров Microchip есть дополнительные аналоговые (операционные усилители) и специализированные периферийные модули: модули пилообразной компенсации (Slope Compensation) и программируемый рамп-генератор (Programmable Ramp Generator, PRG), операционные усилители, модуль формирования комплементарных выходных сигналов (COG), HLT таймера. Но об этих частях ПНЯ постараемся рассказать в следующий раз.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *