Подавление дребезга контактов с помощью встроенных в микроконтроллер EFM8LB1 конфигурируемых логических элементов

Silicon Labs EFM8LB12

- Москва

В статье приведены аппаратные и программные средства антидребезговой схемы, основанной на RS-триггере, построенном на двух конфигурируемых логических элементах (Configurable Logic Unit – CLU), встроенных в относительно новый 51-совместимый микроконтроллер (MK) EFM8LB12. CLU работают автономно, абсолютно не требуя участия не только процессора МК, но даже тактового генератора при своем функционировании. Применение встроенных в МК конфигурируемых логических элементов позволяет существенно экономить на аппаратных средствах устройств на базе МК, что значительно снижает размер плат подобных устройств и, как следствие, их стоимость.

Вебинар «Необычное в обычном. Сравнительный анализ современных решений Recom» (27.01.2022)

Введение

Для ручного управления какими-либо функциями в МК, как правило, используются различного рода кнопки, при замыкании или размыкании контактов которых возникает хорошо известный эффект – их дребезг. Он проявляется в том, что вместо одного фронта импульса (или перепада) возникает с десяток (а то и больше) импульсов, приводящих к ложным срабатываниям каких-либо устройств МК, которые запрограммированы на запуск от одного фронта (или спада). Длительность дребезга контактов кнопок составляет от долей до нескольких миллисекунд. Для исключения подобных ложных срабатываний применяют как аппаратные, так и программные способы. Последние используют организацию программных временных задержек, например, с помощью таймеров, с длительностью, заведомо превышающей длительность дребезга. Недостаток таких задержек – дополнительное использование ресурсов МК (таймеров и дополнительной памяти МК, требующейся для подобных программ), а также большое время задержки (для некоторого запаса по времени). Что касается аппаратных средств, то они бывают двух типов. Первый основан на различных RC-цепочках совместно с микросхемами (например, ждущий мультивибратор), которые затягивают фронт импульса (или перепада) на время, также заведомо большее длительности дребезга. Недостаток этого способа – также большое время задержки, которое во многих критических случаях просто неприемлемо. Второй способ основан на использовании различного рода триггеров, например, RS-триггера (Рисунок 1). При замыкании, например, верхнего контакта переключателя SW триггер перебрасывается первым же касанием контактов, и дальнейший их дребезг на триггер уже не влияет. При размыкании верхнего контакта и движении переключателя к нижнему триггер также сохраняет свое состояние, несмотря на дребезг размыкающего контакта, а первое же касание переключателя нижнего контакта перебрасывает триггер в противоположное состояние, и дальнейший дребезг нижнего контакта на состояние триггера не влияет. Эта схема хорошо известна и достаточно часто используется, так как имеет повышенное быстродействие по сравнению с первым типом (см. выше), но в комментариях к ней, как правило, можно обнаружить, что она имеет один серьезный недостаток, а именно, – необходимость использовать кнопку с двумя переключаемыми контактами (а не одним). Однако, на взгляд автора, недостаток этой схемы кроется совсем не в этом, поскольку кнопки с переключаемыми контактами выпускаются миллионами штук и имеют «копеечную» стоимость.

Антидребезговая схема на RS-триггере.
Рисунок 1. Антидребезговая схема на RS-триггере.

Например, кнопка с двумя группами переключаемых контактов (то есть, с 6-ю контактами) PS-800L размером 8×8 мм (Рисунок 2а) стоит менее 15 руб. Такие кнопки выпускаются как с фиксацией, так и без фиксации. Последняя, например, используется в любом настольном компьютере (системном блоке) в кнопке RESET.

Кроме того, выпускается кнопка P2-0S (PSM2-1) (со встроенной кнопкой PS-800L) уже в корпусе с удобной ручкой для нажатия и даже со светодиодом, торец которого выведен на верхнюю часть корпуса (Рисунок 2б). Стоимость такой кнопки – не более 50 руб.

а) б)
Рисунок 2. Кнопки: а – PS-800L, б – PSM2-1.

Кнопки PS-800L и PSM2-1 легкодоступны: они продаются как в компаниях, торгующих электронными компонентами, так и в магазинах радиодеталей.

Но если кнопки такие дешевые и легкодоступные, то в чём же тогда заключается недостаток схемы на Рисунке 1? А недостаток схемы заключается в необходимости использования дополнительных аппаратных средств (то есть сама микросхема, например, 561ЛА7 и резисторы R1 и R2), которые существенно увеличивают размер всего устройства. (Например, размер КР561ЛА7 более чем в 10 раз превышает размер корпуса EFM8LB12-QFN32 и еще больше размера корпуса EFM8LB12-QFN24).

Избавиться от аппаратных средств позволяет одно новшество, которое в последнее время стали применять в МК, а именно – встроенные конфигурируемые логические элементы (устройства) – Configurable Logic Unit, сокращенно, CLU. Информация о CLU, что в руководстве пользователя EFM8LB1 (EFM8LB1 Reference Manual [1]), что в статье о применении CLU [2] довольно скудна. Там, например, даже не перечислены все логические функции CLU, как их записывать в программе и т.п. Ниже в кратком виде этот пробел будет восполнен. Кроме того, будет объяснена идея, как с помощью CLU создать «схему» внутри МК, соответствующую схеме Рисунок 1.

Итак, в МК EFM8LB1 имеются четыре CLU: CLU0, CLU1, CLU2 и CLU3. Каждый CLU имеет 3 входа: A, B и C и один выход. Входы A и B – стандартные логические входы (как, например, два стандартных входа у 561ЛА7, Рисунок 1), а вход C – дополнительный вход переноса (carry) с выхода предыдущего CLU. Например, вход C CLU1 – это выход CLU0, вход C CLU0 – выход CLU3 и т.п., т.е. они как бы расположены по кругу. Функции каждого CLU – основные функции логических элементов: И (AND), ИЛИ (OR), исключающее ИЛИ (XOR) и НЕ (NOT). Записываются функции следующими значками: «&» – И, «|» – ИЛИ, «^» – исключающее ИЛИ, «~» – НЕ. Кроме того, используются значки скобок «(», «)» и символы «A», «B» и «C». Например, чтобы получить один логический элемент 2И-НЕ как, например, в 561ЛА7 (Рисунок 1), необходимо записать: «~(A & B)». При этом соответствующий CLU будет выполнять эту функцию, а перенос C учитываться не будет (поскольку C в выражение не входит). Входы каждого CLU можно подключить либо к внешним выводам (портам) МК (их, правда, ограниченное количество), либо, например, к выходу другого CLU. Кроме того, выходы каждого CLU можно вывести на внешние выводы МК (порты), причем, для каждого выхода CLU существует один единственный порт, изменить который нельзя. Например, для выхода CLU2 предусмотрен порт P2.2, а для выхода CLU3 предусмотрен порт P2.5 (для EFM8LB12-QFN32).

Теперь, после этих пояснений нетрудно понять идею, как создать внутри МК «схему», соответствующую схеме Рисунок 1. Для этого возьмем два любых CLU, например, CLU2 и CLU3. Входы А каждого CLU и их выходы выведем на внешние порты МК, вход B CLU2 подключим к выходу CLU3, а вход B CLU3 – к выходу CLU2. Если в программных средствах для каждого CLU записать выражение ~(A&B), то получим RS-триггер, как на Рисунке 1. Назначим входные порты МК (для входов A CLU) как цифровые входы (Digital ОpenDrain I/O) со слаботочными подтяжками к питанию (Weak Pullup), что будет соответствовать резисторам R1 и R2, подключенным к питанию, а выходные порты (для выходов CLU) – как цифровые выходы (Digital Push-Pull Output). Если теперь к обоим входным портам подключить кнопку, то получим антидребезговую «схему», полностью соответствующую Рисунку 1. При нажатии на кнопку на выходах CLU2 и CLU3 появятся взаимно инверсные перепады напряжения, как на выходах Q и /Q RS-триггера. Причем, эти перепады не будут зависеть от дребезга контактов кнопки.

Как видно из объяснения выше, ничего сложного в организации подобной «схемы» внутри МК нет.

Дальнейшее изложение будет построено следующим образом. Вначале будет приведена принципиальная схема тестовой платы на базе МК EFM8LB12, затем – её внешний вид. Далее, в программных средствах, использующих среду Simplisity Studio, будет показано, как необходимо настроить внутренние устройства МК для получения антидребезговой «схемы». После этого будут приведены результаты работы тестовой платы (осциллограммы входных и выходных сигналов).

Принципиальные схемы

Как видно из схемы Рисунок 3, она достаточно проста. К левой части корпуса МК EFM8LB12 (DD1) подключены: питание +3.3 В (выводы 2 и 3) и сигналы для программирования (загрузки программы) по интерфейсу C2 – RSTLB1 (вывод 4) и C2D (вывод 5) с помощью USB DEBUG ADAPTER’a. Для питания платы используется стабилизатор LP2950Z3.3 (DA1) с выходным напряжением 3.3 В, входное напряжение (+5 В) на который подается с двухконтактного разъема WF-02 (X2). Сигналы программирования (C2D, RSTLB1) и «земля» подаются на плату с разъема X1. К этому разъему подключается кабель (ответным разъемом X2, Рисунок 4а), второй конец которого подключается к выходному разъему SCM-10 (X1, Рисунок 4а) USB DEBUG ADAPTER’a. О программировании МК EFM8LB12 с помощью USB DEBUG ADAPTER’a подробно написано в книге автора [3]. RC-цепочка R1-R2-C1 используется как для программирования МК по интерфейсу C2, так и для запуска МК при включении питания (Power On Reset – POR). Светодиод LD1 зелёного свечения со своим токоограничительным резистором R3 сигнализирует о наличии питания на плате. К разъему X2 платы подключается кабель питания ответным разъемом HU-02 (X2, Рисунок 4б), который своим вторым концом соединен с разъемом РС4ТВ (Р) (X1, Рисунок 4б), подключаемым к стабилизированному БП с выходным напряжением +5 В.

Принципиальная схема тестовой платы.
Рисунок 3. Принципиальная схема тестовой платы.

К правой части корпуса МК DD1 подключены входные сигналы A CLU2 и CLU3 (CLU2_A_IN и CLU3_A_IN, соответственно), соединенные с первой группой контактов кнопки PSM2-1 (SW1), а вторая группа её контактов (SW2) соединена с питанием +5 В и встроенным в кнопку светодиодом LD2 красного свечения со своим токоограничительным резистором R4.

Схема подключения к плате кабелей: a - от USB DEBUG ADAPTER'a, б - от БП.
Рисунок 4. Схема подключения к плате кабелей: a – от USB DEBUG ADAPTER'a, б – от БП.

К нижней части DD1 подключены выходные сигналы CLU2 и CLU3 (CLU2_ASINC_OUT и CLU3_ASINC_OUT, соответственно). Сигналы CLU2_A_IN, CLU2_ASINC_OUT, CLU3_ASINC_OUT и «земля» выведены на 4-контактный цанговый штыревой разъем PSLM4 (X3), к которому ответным разъемом (SIP4) подключается 4-проводный кабель, провода которого подключаются к двухканальному цифровому осциллографу для наблюдения соответствующих сигналов.

Верхняя часть корпуса МК оставлена свободной по двум причинам. Во-первых, для того чтобы было возможно подключение к МК внешнего прецизионного тактового генератора, для чего предусмотрен единственный порт P0.3 (вывод 30). Во-вторых, для возможности подключения к МК сигналов UART-TX (P0.4) и UART-RX (P0.5), предназначенных для альтернативного программирования МК по интерфейсу RS-232 с COM-порта компьютера. Эти два порта также являются единственными для сигналов UART-TX и UART-RX, и изменить их в матрице соединений МК нельзя. Альтернативное программирование МК с COM-порта компьютера может потребоваться, если скупость не позволяет приобрести достаточно дорогой USB DEBUG ADAPTER (сейчас его можно купить за 3000 – 5000 руб.). Для программирования же МК с COM-порта компьютера достаточно изготовить одноканальный преобразователь уровней интерфейса RS-232 в уровни TTL (и обратно), например, с помощью известного двухканального преобразователя уровней MAX232, или используемого автором одноканального ADM3101, о котором говорится в статье автора [4]. В этой статье приведены аппаратные средства, разработанные автором, и программные средства, бесплатно поставляемые компанией Silicon Laboratories для такого альтернативного программирования МК EFM8LB12. Вот в связи с этим для входов и выходов CLU и используются правая и нижняя часть корпуса МК EFM8LB12.

Контакты переходника QFN32 - PGA32.
Рисунок 5. Контакты переходника QFN32 – PGA32.

Тестовая плата смонтирована на «макетке» (см. далее), а для МК EFM8LB12 использован переходник QFN32 – PGA32 (Рисунок 5), разводка которого приведена в книге автора [3].

Тестовая плата

Тестовая плата (Рисунок 6) не отличается особой сложностью. Слева расположены разъемы питания и интерфейса C2 для программирования МК, слева сверху – стабилизатор +3.3 В, в середине – переходник QFN32–PGA32 с МК EFM8LB12F64-QFN32, справа – кнопка PSM2-1 с встроенным светодиодом, справа снизу – разъем для подключения входных и выходных сигналов CLU к осциллографу. Коммутация по схеме Рисунок 3 сделана автором вручную с обратной стороны платы проводом МГТФ-0,03 (сечением 0.03 мм2).

Тестовая плата.
Рисунок 6. Тестовая плата.

Программные средства

В качестве программных средств автор использовал среду программирования Simplisity Studio, бесплатно поставляемую компанией Silicon Laboratories, в которой приведен пример программирования простейшей функции CLU A&B для МК EFM8LB12F64-QFN32 (проект EFM8LB1_Configurable_Logic_AND). Этот проект был модифицирован под вышеописанную задачу. В основном всё программирование сводится к настройке устройств МК.

Настройки: a - устройств МК, б - CLU2, в - CLU3; функции CLU - г.
а) б)
Настройки: a - устройств МК, б - CLU2, в - CLU3; функции CLU - г. Настройки: a - устройств МК, б - CLU2, в - CLU3; функции CLU - г.
в) г)
Рисунок 7. Настройки: a – устройств МК, б – CLU2, в – CLU3; функции CLU – г.

Для этого необходимо открыть этот проект и выбрать опцию EFM8LB1_Configurable_Logic_AND.hvconf (в самом низу проекта). Далее выбрать опцию Default Mode Peripherals (внизу). При этом откроется окно, показанное на Рисунке 7а.

В этом окне вначале необходимо запретить все прерывания (Interrupts), разрешить источник сброса при включении питания (Reset Sources), автоматическое изменение страниц памяти (SFR Paging), устройства с конфигурируемой логикой (Configurable Logic), монитор питания (Supply Monitor), внутренний регулятор напряжения (Voltage Regulator) и запретить сторожевой таймер (Watchdog Timer) – все, что отмечено галочками на Рисунке 7а. При нажатии на кнопку Configurable Logic (в красном овале, Рисунок 7а) в окне справа будут отражены свойства всех четырех CLU. Вначале необходимо запретить CLU0 и CLU1. Далее выбрать CLU2 (Рисунок 7б) и настроить его в соответствии с опциями в красных овалах. После этого выбрать CLU3 (Рисунок 7в) и также настроить его в соответствии с опциями в красных овалах. При подведении курсора к опции Logical Expression в опции Output Function на экран выведется окно, в котором будут отражены все функции CLU и способ их написания (Рисунок 7г).

Далее следует переключиться на опцию Default Port I/O, после чего откроется окно Рисунок 8, в котором будет показан корпус МК, и отражены все 4 сигнала CLU (Рисунок 8а), а справа (Рисунок 8б) – свойства входных портов. При нажатии на опцию Port I/O в красном овале сверху в нижнем окне появится установка портов. В красном овале будет отражено свойство Pull-ups enabled, разрешающее подключение к входам портов слаботочных подтяжек.

a - подключение входных и выходных сигналов к портам МК б - разрешение слаботочных подтяжек.
а) б)
Рисунок 8. a – подключение входных и выходных сигналов к портам МК, б – разрешение слаботочных подтяжек.

При подведении курсора к сигналу CLU2_A_IN и нажатии на левую кнопку мыши справа откроется окно свойств этого входного сигнала – цифровой вход (Digital OpenDrain I/O – в красном овале, Рисунок 9а). Эта опция установлена по умолчанию. Аналогичная опция установлена и для сигнала CLU3_A_IN.

а) Свойства портов для: a - входных сигналов, б - выходных сигналов.
б) Свойства портов для: a - входных сигналов, б - выходных сигналов.
Рисунок 9. Свойства портов для: a – входных сигналов, б – выходных сигналов.

А вот для выходных сигналов CLU: CLU2_ASINC_OUT и CLU3_ASINC_OUT необходимо выбрать опцию цифрового выхода (Digital Push-Pull Output – в красном овале, Рисунок 9б). Кроме того, на порте P2.2 необходимо установить опцию пропуска Skipped, иначе будет ошибка (этот порт используется для альтернативной функции МК, поэтому должен быть пропущен).

На этом настройка заканчивается.

Для сохранения настроек необходимо нажать в левом верхнем углу экрана кнопку с обозначением двойной дискеты. При этом автоматически создастся код программы инициализации устройства (InitDevice.c), в которой все настройки будут уже описаны на C51.

В основной же программе EFM8LB1_Configurable_Logic_AND.c будет только обращение к программе InitDevice.c (enter_DefaultMode_from_RESET();) и оператор бесконечного обращения к самому себе (while (1) {}).

Текст основной программы приведен ниже.
//---------------------------------
// Main Routine
//---------------------------------
void main (void)
{
enter_DefaultMode_from_RESET();

while (1) {}
}

В программе InitDevice.c подпрограмма enter_DefaultMode_from_RESET обозначена как внешняя (extern) по отношению к основной программе (main), которая её вызывает:
extern void enter_DefaultMode_from_RESET(void) {
...

После окончания генерации программы InitDevice.c необходимо оттранслировать всю программу (проект), выбрав в опции Project подопцию Build Project. При этом сгенерируется программа загрузочного формата EFM8LB1_Configurable_Logic_AND.hex, которую следует запрограммировать в МК.

Тексты программ EFM8LB1_Configurable_Logic_AND.c, InitDevice.c и оттранслированная программа загрузочного формата EFM8LB1_Configurable_Logic_AND.hex приведены в дополнительных материалах к статье.

Здесь следует добавить следующее. Во-первых, оператор while(1){}, который выполняет процессор МК в основной программе, показывает, что сконфигурированная схема на базе CLU2 и CLU3 работает автономно и абсолютно не требует участия процессора (и даже тактового генератора). Это означает, что вместо оператора while(1){} можно написать любую программу уже с участием процессора (например, ручной запуск какого-либо таймера, АЦП, ЦАП и т.п.), которая будет выполняться параллельно работе схемы на CLU. Во-вторых, как можно убедиться, автором не написано ни единой строчки кода на C51 для работы схемы на CLU; текст программы InitDevice.c сгенерирован автоматически, а текст основной программы (main) по умолчанию присутствует в любой программе.

Результаты работы устройства

Осциллограммы сигналов: желтая - CLU2_A_IN, бирюзовая - CLU2_ASYNC_OUT; а - при нажатии кнопки, б - при отпускании. Осциллограммы сигналов: желтая - CLU2_A_IN, бирюзовая - CLU2_ASYNC_OUT; а - при нажатии кнопки, б - при отпускании.
а) б)
Рисунок 10. Осциллограммы сигналов: желтая – CLU2_A_IN, бирюзовая – CLU2_ASYNC_OUT; а – при нажатии
кнопки, б – при отпускании.

Осциллограммы сигналов, снятые двухканальным цифровым осциллографом (Рисунки 10 и 11), показали, что переключение сконфигурированного с помощью CLU2 и CLU3 RS-триггера происходит по первому же перепаду сигнала с дребезжащего контакта кнопки, а при переключении кнопки обратно (при ее отпускании) дребезг практически отсутствует, однако триггер переключается в исходное состояние с небольшой задержкой. Как оказалось, «поймать» дребезг не так-то просто. Для этого пришлось использовать однократный запуск осциллографа от фронта выходного сигнала CLU2 (Рисунок 10а) и спада выходного сигнала CLU3 (Рисунок 11а). Вертикальное разрешение осциллографа для каждого канала составляет 1 В/дел. (надписи «CH1 = 1.00V» и «CH2 = 1.00V»), горизонтальное разрешение на Рисунках 10а и 11а составляет 200 мкс/дел. (надпись «Time 200.0 us») и 1 мс/дел. на Рисунках 10б и 11б («Time 1.000ms»).

Как видно из осциллограмм, длительность дребезга контактов примененной кнопки составляет около 800 мкс, т.е. не превышает 1 мс.

Осциллограммы сигналов: желтая - CLU2_A_IN, бирюзовая - CLU3_ASYNC_OUT; а - при нажатии кнопки, б - при отпускании. Осциллограммы сигналов: желтая - CLU2_A_IN, бирюзовая - CLU3_ASYNC_OUT; а - при нажатии кнопки, б - при отпускании.
а) б)
Рисунок 11. Осциллограммы сигналов: желтая – CLU2_A_IN, бирюзовая – CLU3_ASYNC_OUT; а – при нажатии
кнопки, б – при отпускании.

Заключение

Применение встроенных в МК конфигурируемых логических элементов позволяет существенно экономить на аппаратных средствах устройств на базе МК, что существенно снижает размер плат подобных устройств и, как следствие, их стоимость. Автономная работа CLU не требует ни программ с участием процессора МК (то есть дополнительной программной памяти и ресурсов процессора), ни даже тактового генератора; кроме того, применение CLU не снижает быстродействия процессора МК.

Литература

  1. EFM8 Laser Bee Family. EFM8LB1 Reference Manual – efm8lb1-rm.pdf. Silabs.com
  2. AN921: Configurable Logic Unit – AN921_CLU.pdf. Silabs.com
  3. Кузьминов А.Ю. Связь между компьютером и микроконтроллером. Современные аппаратные и программные средства. – М. : Издательство «Перо», 2018
  4. Кузьминов А. Программирование микроконтроллеров EFM8 с помощью встроенного загрузчика программ. – Радио, 2018, № 12

Материалы по теме

  1. Datasheet Silicon Labs EFM8LB12
  2. Datasheet Texas Instruments LP2950

Загрузки

  1. Дополнительные материалы к статье

Изготовление 1-4 слойных печатных плат за $2

ADIN2111 — простой в использовании двухпортовый Ethernet 10BASE-T1L коммутатор от Analog Devices
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя