50 оттенков ПНЯ* Порты ввода/вывода микроконтроллеров Microchip

  • ПНЯ — Периферия Независимая от Ядра известная так же как CIP — Code Independent Peripheral.

Предыдущая статья [1] (назовём её «часть 1» цикла статей, так как надеюсь, что энтузиазма и сил хватит на несколько статей) была посвящена самой очевидной из частей Периферии Независимой от Ядра микроконтроллеров (МК) Microchip — конфигурируемым логическим ячейкам.

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


  • Стандартные функции портов
  • Переназначение функций портов ввода/выхода, PPS
  • контроль тока выходного драйвера порта, CCDM
  • примеры использования
  • надежность, самодиагностика
  • мультивибраторы (генераторы)
  • генератор пилообразного напряжения
  • ШИМ модулятор
  • D-class усилитель

Порты ввода/вывода можно назвать Периферией Независимой от Ядра, так как входы портов являются асинхронными, состояние портов сохраняется в спящем состоянии ядра. Наверное уникальных возможностей у «портовой» периферии найти сложно, но некоторые «фишки» всё же заслуживают внимания.

Порты современных микроконтроллеров PIC имеют набор стандартных функций:


  • Аналоговые входы
    • входы АЦП
    • входы компараторов
    • входы операционных усилителей
    • входы опорного напряжения

  • Аналоговые выходы
    • выходы ОУ
    • выходы ЦАП
    • выходы источника опорного напряжения

  • Цифровые входы
    • настройка типа входа TTL или ST (триггер Шимтта)
    • возможность включения внутренней подтяжки к Vdd
    • выходы источника опорного напряжения

  • Цифровые выходы
    • стандартный выход или выход типа открытый сток
    • возможность ограничения скорости нарастания фронта/спада (полезная функция для уменьшения EMI помех)
    • высокая нагрузочная способность выхода (обычно для PIC контроллеров втекающий/вытекающий ток имеет верхнее значение 25 мА, но у некоторых семейств нагрузочная способность пары выводов портов увеличена до 50 или даже до 100 мА)

Из «не стандартных», но весьма полезных особенностей следует отметить возможность переназначения функций портов (Peripheral Pin Select, PPS).
Переназначение функций портов интересно тем, что предоставляет следующие возможности:


  • оптимизация трассировки печатной платы — разработчик может «перетащить» те или иные входы/выходы периферии по выводам контроллера
  • уменьшение влияния помех (можно максимально отдалить высокочастотные цифровые выводы (ШИМ, интерфейсы и др) от аналоговых цепей
  • наиболее полное использование периферии (микроконтроллеры Microchip всегда славились обилием периферийных модулей, но из-за ограничения числа выводов корпусов микросхем разработчику не всегда удавалось использовать нужный ему набор периферии, так как разная периферия могла использовать один и тот же вывод микросхемы, т.е. приходилось чем-то жертвовать)
  • увеличение нагрузочной способности порта — выход периферии (UART, ШИМ и др.) можно подключить к нескольким портам МК, эти порты соединить на плате и тем самым увеличить нагрузочную способность
  • объединение функций на один вывод (к примеру один и тот же вход можно подключить к входу UART и входу прерывания)
  • тестирование и отладка. Вы наверное уже догадываетесь (или я писал об этом ранее?), что в концепции ПНЯ периферия может соединяться внутри МК и не иметь выходов наружу. Для конечного отлаженного устройства это замечательно, так как позволяет минимизировать размер корпуса МК и изделия (и скрыть от конкурентов возможность понять внутреннюю логику работы ПНЯ), но на этапе отладки бывает полезно через PPS часть «тестовых» сигналов вывести наружу и отладить работу «железа»


855d2160e69846059a6bb57b27db69ac.png

Рис. 1. Пример конфигурирования PPS в среде разработке MPLAB X IDE

В некоторых новейших семействах, например PIC16F18855, появилась доселе невиданная в PIC функция — контроль тока выходного драйвера, т.е. контроль втекающего/вытекающего тока (Current-Control Drive Mode, CCDM). Теперь можно установить какой ток будет вытекать или втекать в порт. При включении данного режима для каждого вывода микроконтроллера можно включить контроль тока, причем имеется возможность индивидуального разрешения контроля втекающего и вытекающего тока.

Вариантов значений токов не так много — можно выбрать значения 1, 2, 5 и 10 мА, к тому же выбранное значение будет единым для всех контролируемых выходов.
Но, контроль тока выходных драйверов портов дает массу возможностей:


  • самодиагностика, обеспечение надежности;
  • уменьшение числа токоограничивающих резисторов на плате, упрощение печатной платы;
  • уменьшение излучаемых помех;
  • возможность формирования пилообразных сигналов
  • … (чтобы придумать еще? ;-)

Лучше всего можно прочувствовать возможности новых функций портов на конкретных примерах


Надежность, Самодиагностика

Допустим, на плате произошло короткое замыкание между двумя портами, настроенными на выход. Если один порт будет в состоянии лог.1, а второй в лог.0, то через порт будет протекать ток. При нагрузочной способности до 25 мА (реально до 50 мА) через порты будет протекать большой ток, что может привести к выходу порта или контроллера из строя.

Функция ограничения тока может предотвратить повреждение порта.
В дополнение можно организовать диагностирование портов, определение нагрузки.

При необходимости тестирования порта используют подобные схемы (см. рис. 2). В этом случае можно подать сигнал на один порт и считать состояние другим выводом порта. В принципе, за счет структуры портов МК Microchip, можно тестировать без внешнего резистора (подать в порт какой-либо лог. уровень и считать вход этого же порта), но при КЗ по выходу не будет ограничения тока.


09ba0759a3104e75ada6336edb443133.png

Рис. 2. Самотестирование порта МК.

При наличии функции ограничения тока порта мы можем обеспечить безопасное тестирование порта, так как ток КЗ будет ограничен с помощью функции CCDM.


b7e7579386474261a9d782b18b2c9189.png

Рис. 3. Самотестирование с использованием ограничения тока порта.

Например, в программе настраиваем порт (RC7) на выход с ограничением тока, подаем лог.1, далее считываем состояние этого же порта на входе.
Считывать можем как в цифровом виде, так и с помощью АЦП, причем во втором случае можем определять сопротивление нагрузки (так как известны напряжение питания и ток через порт).


тестирование цифровым входом тестирование вх.АЦП
64b4fb053cb747e0af2359b1a5a7cfe4.png cebb155bdb8c4de2927dba9f565e8750.png

Рис. 4. Вывод в терминал информации тестирования порта RC7.


Генераторы

В предыдущей статье посвященной CLC мы уже рассматривали разного рода генераторы/мультивибраторы, рассмотрим как CCDM и PPS позволит упростить и до того простые схемы основанные на ПНЯ (CLC).


c5765031f6f841b2ad743be59bb378ff.png

Рис 5. Мультивибратор на двух гейтах.

На рис. 4 изображен ранее рассмотренный генератор на D триггере, инверторе и RC цепочке (в данном случае схема чуть перерисована для отображения внешних по отношению к микроконтроллеру подключений). Частота генератора определяется параметрами R и C. Резистор R задает ток заряда/разряда конденсатора C. Теперь, при наличии встроенного контроллера тока драйвера порта, мы можем убрать резистор и чуть упростить схему.

Прим. Далее на рисунках выход порта с функцией CCDM будет обозначаться в виде резистора с подписью CCDM


45b7d3a8227b4fa1a347332b4e1c135c.png

Рис. 6. Мультивибратор с ограничением выходного тока порта CLC2

Следует отметить, что совсем не обязательно для CLC1 использовать D триггер, пойдет любой вариант реализации неинвертирующего гейта.


3e11aa559481485cbd36875b89354b6d.png

Рис. 7. Другой вариант мультивибратора на двух логических гейтах.

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


  • уменьшение используемого числа выводов МК (да, вы же помните что у нас есть часть ПНЯ в виде PPS), то есть для одного и того же корпуса можем иметь больше возможностей — впихнуть больше в меньшее (-;


  • возможность программного изменения частоты! Если мы меняем ток заряда/разряда конденсатора, то мы меняем скорость изменения напряжения на конденсаторе, а значит частоту переключения мультивибратора.


9a2df5798d76402a981cd7bf1115346f.png
f7e314f58cdd406683af16f500572abf.png

Рис. 8. Управление током позволяет программно менять частоту мультивибратора.

В первоначальной схеме от микроконтроллера понадобилось бы 3 вывода, модифицируемая схема с использованием PPS и CCDM требует только 2.

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


b03e45cce7ff49608778ee05bb2b3922.png

Рис. 9. Мультивибратор на одном гейте


9d53931fd825487f8d5190aabebf2ba8.png

Рис. 10. Форма сигнала на конденсаторе мультивибратора и контрольный выход логического элемента.


Генератор пилообразного напряжения

Для режима контроля тока драйвера порта мы можем задавать фиксацию втекающего и вытекающего тока. На схеме рис. 8 контролируются оба тока. Если включить контроль только вытекающего тока, то получим следующую картину (рис. 11).


451efcd7868d486caf7066a3006ea4db.png

Рис. 11. Генератор пилообразного напряжения.

То есть в данном случае конденсатор заряжается ограниченным током 1 мА, а разряжается через порт без ограничения тока (следует учесть, что максимально допустимый ток для порта 50 мА, поэтому может понадобиться последовательный резистор для ограничения тока).

Как вы видите из диаграмм (рис. 10 и 11) на конденсаторе получаем пилу, верхнее и нижнее значение напряжений которой лежит между уровнями лог 1 и 0 цифровых входов.
Если хотим увеличить амплитуду, то можно дополнительно использовать два внутренних компаратора (в ч.1 уже рассматривали эту схему генератора). Теперь повторим эту схему, но уже с использованием функции контроля тока драйвера порта выхода (CCDM), т.е. без внешнего резистора и с уменьшенным числом задействованных портов В/В.


13591341dfc84e69a192c9d639c76691.png

Рис. 12. Мультивибратор с компараторами.

За счет контроля тока получаем более линейный генератор пилообразного напряжения, чем в рассматриваемой ранее аналогичной схемы (см. [1]).
Так же как и для предыдущего варианта мультивибратора, частоту можем менять программно за счет изменения тока порта.


d867945c624b4569a227ec9b98024afd.png

Рис 13. Выход мультивибратора


Генератор управляемый напряжением

Если изменять опорное напряжение на компараторе, то получим генератор управляемый напряжением. Опору компаратора можно менять как встроенным ЦАП, так и подавать с внешних цепей микроконтроллера.


e1c8e7980f274bfdac0cd6e92ad701d6.png

Рис. 14. Изменение частоты генератора за счет изменения опорного напряжения компоратора.

Схему мультивибратора на двух компараторах и RS-триггере можно чуть оптимизировать. Нижний порог срабатывания схемы (вход R триггера) оставить с управлением от компаратора, а второй от порта (S вход триггера).


4ee8c40b6ef84038be3ca0c0a950e91e.png

Рис. 15. Вариант мультивибратора с одним компаратором.

Освободившийся компаратор, совместно с построенным генератором пилы можно использовать для построения ШИМ модулятора.


ШИМ модулятор

Итак, теперь если на один вход компаратора подать пилообразно меняющееся напряжение, а на другой «опорное» напряжение, то получим ШИМ модулятор. Скважность ШИМ будет определяться уровнем порогового напряжения, а частота определяется частотой пилы.


0a6fa7c5647a4220979219ab7dc13116.png

Рис. 16. ШИМ модулятор из генератора пилы и компаратора.


9bde4201133446a2900f4764e558bdd7.png

Рис. 17. Диаграмма на выходе ШИМ модулятора.


Усилитель D-класса

Частота пилы рассматриваемых генераторов определяется емкостью C и током порта. Можем сформировать пилу с частотой сотни килогерц.
Опорный сигнал может быть как внешним, так и формироваться, например, встроенным ЦАП. Если опорный сигнал поступает с источника звука, то нам осталось совсем немного до построения усилителя класса D.

У микроконтроллеров серии PIC16F188xx есть модуль формирования комплементарных сигалов (Complementary Waveform Generator, CWG), который из входного сигнала может сформировать сигналы управления мостовой схемой.


4d6b2cfa27f64b1f889cf02b4896b5f2.png

Рис. 18. Схема усилителя класса D на микроконтроллере с использованием CIP.


ce84402e57094f5dbdba1c17042c5f07.png

Рис. 19. Диаграмма сигналов усилителя.

Итак, из таких частей ПНЯ как порт с Контролем тока выхода CCDM, Конфигурируемые Логические Ячейки CLC, Компараторы, ЦАП, формирователь комплементарных сигналов CWG мы получили усилитель класса D.

Мы рассмотрели еще одну часть Периферии Независимой от Ядра — порты ввода/вывода микроконтроллеров Microchip. Большинство возможностей, включая переназначение функций выводов, присутствуют во многих семействах PIC16F1xxx, но новая «фича» — CCDM (управление током выходного драйвера порта), появилась совсем недавно в семействе PIC16F188xx (PIC16F18855 и др.).
Независимость от ядра заключается в том, что нам необходимо только инициализировать необходимые возможности (PPS, CCDM и др), остальное функционирование не зависит от тактовой частоты и в каком состоянии находится ядро МК (Run, Sleep, Idle или Doze). Но в процессе работы мы, тем не менее, имеем возможность изменить функционирование такой периферии.
Периферия независимая от ядра интересна сама по себе, но наибольшую пользу может принести возможность синтеза функциональных блоков, т.е. совместное использование нескольких периферийных модулей для решения конкретных задач. В этом случае тактовая частота, быстродействие и разрядность ядра уходят на второй план — аппаратная часть выполняет специализированные функции, а ядро занимается программной поддержкой изделия.


  1. Конфигурируемые Логические Ячейки в PIC контроллерах. https://geektimes.ru/post/278718/
  2. PIC16(L)F18855/75 Data Sheet. www.microchip.com
  3. TB3140. Programmable Ramp Generator Technical Brief. www.microchip.com

© Geektimes