кнопоки на аналоговом входе

Вопросы по подключению кнопок и клавиатур
DWD
Лейтенант
Сообщения: 353
Зарегистрирован: 18.10.2015{, 13:51}
Репутация: 5
Откуда: Кривой Рог

кнопоки на аналоговом входе

#21

Сообщение DWD » 15.07.2017{, 16:36}

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

Вариант №1
Изображение

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

Вариант №2
Изображение

Этот вариант является развитием первого варианта, но он, благодаря применению источника тока, позволяет упростить расчёт номиналов резисторов и увеличить стабильность заданных уровней.
Источник тока выполнен на транзисторах VT1 и VT2 и резисторах Ro, R5. Ток задаётся резистором Ro по формуле I=0.55/Ro. Благодаря стабильному току шкала получается линейной, по этому все резисторы теперь могут быть одного номинала, что сильно упрощает расчёт и уменьшает ассортимент применяемых номиналов резисторов.
Например, при токе 0,5мА, одинаковых резисторах на 2КОм и 5 кнопок получается 5 комбинаций напряжения с шагом 1В (подписаны под кнопками).
Скажем, при нажатой кнопке, подписанной как "3V", ток 0,5мА протекает через резисторы R1, R2 и R3 с общим сопротивлением 2+2+2=6КОм. В результате на выходе при этом будет напряжение 0,5мА*6КОм=3В.
Так как ток стабильный, то это выходное напряжение поддерживается на выбранном уровне даже при нестабильном напряжении питания (например, при питании от батарей).
При отжатых всех кнопках на выходе выставляется напряжение 5В.
Недостаток такой же, как и у первого варианта - нельзя комбинировать нажатие нескольких кнопок одновременно. Но он компенсируется стабилизатором тока, позволяющим выбрать мелкий шаг и поставить больше кнопок.
Например, при разрядности АЦП 1023 получается шаг, примерно 5мВ. Возьмём запас 10мВ для уверенного перекрытия шагов и при максимальном выходном напряжении, например, 4,5В получим число комбинаций 4500мВ/10мВ=450 штук. И кнопок - 449 ... При токе 1мА общее сопротивление всех резисторов должно быть 4,5В/1мА=4,5КОм, а сопротивление каждого резистора 4500Ом/449=10,022Ом.
Берём стандартное значение 10Ом и уточняем...
Шаг = 10Ом*1мА=10мВ. При количестве резисторов 449 штук общее напряжение будет 1мА*10Ом*449=4490мВ=4,49В.
При отпущенных кнопках на выходе будет 5В - значение, показывающее, что кнопки не нажаты.

Вариант №3
Изображение

Этот вариант позволяет использовать комбинации нажатия кнопок, получая при этом не повторяющиеся значения напряжений. Правда потребуется комбинация резисторов с двоичным шагом. Расчёт и параметры схемы точно такие же, как и во 2-м варианте. Просто при меньшем числе кнопок можно получить больше комбинаций. Например, 5 кнопок дают 32 не повторяющиеся комбинации.
Недостаток этого варианта в разных резисторах. Но не обязательно поддерживать строгую двоичную зависимость, а резисторы можно комбинировать. Например, для приведеной схемы можно взять следующие резисторы: 1КОм, 2КОм, 3,9КОм, 8,2КОм, 16КОм. Резистор на 16КОм можно взять из двух последовательных на 8,2КОм. Резистор на 4КОм можно построить либо из двух параллельных на 8,2КОм или двух последовательных на 2КОм. И т.д...

Вариант №4
Изображение
Более сложный вариант, но, как и 3-й, поддерживает комбинацию нажатий кнопок. Построен как ЦАП, по этому используется резисторная матрица R-2R и требуется всего два номинала резисторов для любого количества кнопок. В примере - 5 кнопок, обеспечивающих 32 комбинации.
Микросхема - логические инверторы (74HC04, 74HC14 и др.)

Наверно, можно ещё придумать какие-то варианты...
Последний раз редактировалось DWD 15.07.2017{, 21:55}, всего редактировалось 1 раз.
Изображение

Аватара пользователя
Dryundel
Полковник
Сообщения: 2061
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 630
Откуда: Ярославль
Имя: Андрей
Контактная информация:

кнопоки на аналоговом входе

#22

Сообщение Dryundel » 16.07.2017{, 09:57}

DWD, подскажите, зачем в 4 варианте используются инверторы. А нельзя сразу замыкать входы матрицы на +5V ?  Или есть в этом какой то сокровенный смысл?
Последний раз редактировалось Dryundel 16.07.2017{, 09:59}, всего редактировалось 1 раз.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

Аватара пользователя
vacz
Лейтенант
Сообщения: 480
Зарегистрирован: 17.10.2016{, 05:56}
Репутация: 51
Имя: Владимир

кнопоки на аналоговом входе

#23

Сообщение vacz » 16.07.2017{, 11:38}

Логические инверторы играют роль ключей-стабилизаторов напряжения.  На выходе инвертора U=Uвх-0.1вольт.
Последний раз редактировалось vacz 16.07.2017{, 13:54}, всего редактировалось 1 раз.
Будь проще к людям. Хочешь быть мудрей - не делай больно мудростью своей. "Омар Хайям"

Аватара пользователя
Dryundel
Полковник
Сообщения: 2061
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 630
Откуда: Ярославль
Имя: Андрей
Контактная информация:

кнопоки на аналоговом входе

#24

Сообщение Dryundel » 16.07.2017{, 14:51}

vacz писал(а):Логические инверторы играют роль ключей-стабилизаторов напряжения. На выходе инвертора U=Uвх-0.1вольт.
И чо? И зачем оно в данной схеме? 
Еще, как я понимаю, они инвертируют 0 на входе на 1 на выходе.
Может я чего то не понимаю, но по моему это лишнее.

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

Самая реальная схема для нормального разделения комбинаций - вариант 3. Она же и обсуждалась с самого начала, если не считать наворота со стабилизацией напряжения.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

DWD
Лейтенант
Сообщения: 353
Зарегистрирован: 18.10.2015{, 13:51}
Репутация: 5
Откуда: Кривой Рог

кнопоки на аналоговом входе

#25

Сообщение DWD » 17.07.2017{, 14:00}

Dryundel писал(а):DWD, подскажите, зачем в 4 варианте используются инверторы.
Дело в том, что для матрицы ЦАП требуется два уровня напряжения - ноль на не задействованном входе и напряжение питания на задействованном. Например, на левых выводах резисторов R6-R9 должен быть ноль, а на левом выводе R10 - должно быть +5В. Ну и другие комбинации.

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

Причём уровни напряжения на левых выводах резисторов R6-R10 должны быть с малым выходным сопротивлением. Именно в этом случая получится линейная зависимость выходного напряжения от комбинации нажатых кнопок. Инверторы это условие обеспечивают.

Можно не ставить инверторы или более сложные двухполюсные кнопки, а просто подключить нижние выводы всех кнопок к +5В (убрав R1-R5), и ими подавать напряжение на левые выводы резисторов R6-R10. Но при этом зависимость выходного напряжения от комбинации нажатых кнопок сразу станет очень нелинейной. В одних комбинациях нажатых кнопок выходное напряжение будет иметь большой шаг, а в других - мелкий. На столько мелкий, что трудно будет выставить чёткий порог срабатывания. При этом потребуется расчёт выходного напряжения для каждой отдельной комбинации.

Несколько улучшить линейность можно, подтянув все кнопки резисторами либо к плюсу, либо к минусу. Например, на схеме варианта 4 убрать инверторы, подключив кнопки прямо к левым выводам резисторов R6-R10 и уменьшить сопротивление резисторов R1-R5 до 1КОм. Ещё лучше было бы уменьшить эти резисторы до 100Ом, но это бесполезно увеличит потребляемый ток.

Можно так же увеличить сопротивления резисторов матрицы R6-R15: вместо 1КОм поставить 10КОм, а вместо 2КОм - 20КОм. Тогда и сопротивление подтягивающих резисторов можно увеличить. Но сильно увеличивать номиналы тоже не очень хорошо, так как могут появиться помехи.

Инверторы же серии КМОП (указаны на схеме) потребляют ток (да и то мизерный) только в моменты переключения. А в любой установившейся комбинации ими будет потребляться лишь ток утечки (мкА).

В общем, при большом количестве комбинаций нажатых кнопок вариант4 будет самым лучшим - линейный, легко просчитываемый шаг выходного напряжения, резисторы всего двух номиналов для матрицы R-2R (R6-R15) и мизерный потребляемый ток.
Номиналы резисторов R1-R5 не критичны и могуть не только большими, но и разными. Из-за высокого входного сопротивления инверторов их можно поставить на 1МОм.

Добавлено (17.07.2017, 14:00)
---------------------------------------------
Dryundel писал(а):А вообще, посчитал я эту матрицу (вариант 4) и прогнал в симуляторе. Не работает она как надо даже с 4 кнопками. При многих сочетаниях показания на столько близки, что не представляется возможным их разделение.
Нарушена линейность.
Это возможно только в следующих случаях - неправильно взяли номиналы резисторов матрицы (должно быть соотношение R-2R) или неправильное управление (высокоомные ключи или однополюсные кнопки).

Матрица R-2R- не ноу-хау и используется давно. Раньше на дискретных элементах, сейчас - в микросхемах. Так что если не работает, то ищите ошибку.
Покажите, по какой схеме Вы подключали всё.
Изображение

vlad
Лейтенант
Сообщения: 391
Зарегистрирован: 11.09.2015{, 11:50}
Репутация: 0
Откуда: Казань

кнопоки на аналоговом входе

#26

Сообщение vlad » 30.08.2017{, 21:56}

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

Добавлено (30.08.2017, 21:56)
---------------------------------------------
да и еще у меня подтягивающий резюк стоит около нано а вот остальные стоят недалеко от герконов. соединяется все это витой парой. расстояние около метра. не может это влиять?

Аватара пользователя
Sancho
Полковник
Сообщения: 3999
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 571
Откуда: Ярославль.
Имя: Александр
Контактная информация:

кнопоки на аналоговом входе

#27

Сообщение Sancho » 31.08.2017{, 08:36}

vlad писал(а):собрал вот такой проектик  и вижу....
 А мы нет...
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

vlad
Лейтенант
Сообщения: 391
Зарегистрирован: 11.09.2015{, 11:50}
Репутация: 0
Откуда: Казань

кнопоки на аналоговом входе

#28

Сообщение vlad » 31.08.2017{, 09:39}

Не сделали или не видите?

Аватара пользователя
Sancho
Полковник
Сообщения: 3999
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 571
Откуда: Ярославль.
Имя: Александр
Контактная информация:

кнопоки на аналоговом входе

#29

Сообщение Sancho » 31.08.2017{, 09:53}

vlad писал(а):Не сделали или не видите?
Вами было написанно буквально следующее:
vlad писал(а):собрал вот такой проектик  и вижу в достаточную сильную не стабильность  значений на аналоговом входе, что в свою очередь приводит к неправильному определению состояний контактов.
Где проектик?
По какой схеме?
Последний раз редактировалось Sancho 31.08.2017{, 10:02}, всего редактировалось 1 раз.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

vlad
Лейтенант
Сообщения: 391
Зарегистрирован: 11.09.2015{, 11:50}
Репутация: 0
Откуда: Казань

кнопоки на аналоговом входе

#30

Сообщение vlad » 31.08.2017{, 15:07}

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

Добавлено (31.08.2017, 15:05)
---------------------------------------------
такс файлы перестали загружаться

Добавлено (31.08.2017, 15:07)
---------------------------------------------
ссылка на проект https://yadi.sk/d/gdBr4nvf3MVB7K

vlad
Лейтенант
Сообщения: 391
Зарегистрирован: 11.09.2015{, 11:50}
Репутация: 0
Откуда: Казань

кнопоки на аналоговом входе

#31

Сообщение vlad » 31.08.2017{, 15:09}

схема
Вложения
9377862.jpg

Аватара пользователя
Sancho
Полковник
Сообщения: 3999
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 571
Откуда: Ярославль.
Имя: Александр
Контактная информация:

кнопоки на аналоговом входе

#32

Сообщение Sancho » 31.08.2017{, 16:37}

Я так понимаю, компенсирующий на общий?
Питание однозначно брать от этой же ардуинки с Vcc.
Как уже здесь народ, грамотный, писал, используемый метод - "не фонтан", учитывая возлагаемые на него задачи, т.е. ответственные. И я с ними согласен.
vlad, Скажите, пожалуйста, причину, по которой Вы не пытаетесь установить внешний расширитель цифровых входов?
 Отправлю почтой в подарок PCF8574 на плате от дисплея 1602.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

vlad
Лейтенант
Сообщения: 391
Зарегистрирован: 11.09.2015{, 11:50}
Репутация: 0
Откуда: Казань

кнопоки на аналоговом входе

#33

Сообщение vlad » 31.08.2017{, 17:35}

Да поттягиввющий на земле. Сразу не поставил расширитель и сделал плату понядеевшись на этот блок. Видимо придётся переделывать плату под возможность подключения расширетеля. Вопрос если его поставить отдельно и соединить с нано витой парой расстояние порядка метра будут проблемы?

Добавлено (31.08.2017, 17:35)
---------------------------------------------
У меня есть расширитель входов выходов который поддерживаетсят флпрогом, не помню как наименование

Аватара пользователя
Hijin
Лейтенант
Сообщения: 325
Зарегистрирован: 22.08.2017{, 11:08}
Репутация: 13
Откуда: Винница
Имя: Юрий

кнопоки на аналоговом входе

#34

Сообщение Hijin » 08.10.2017{, 20:31}

Доброго вреиени суток всем форумчанам

На днях скача с форума пользоватеьский бок 4In1_(FBD).ubi созданый или закачаный в файлообменник (какой точно не помню) 08,03,2017 етот же файл сегодня пытася скачать с файлообменника форума через прокси сервер но так и не смог прокси сервер выдают ошибку)
Вставил файл в свою библиотеку тот что предложил автор и запусти ( с парамктрами автора) блок работал весьма не коректтно (Сразу загораись все светодиоды 4, после нажатии кн 1 гаси 1,2 а 3,4 горели ну и тд.и тп) подставил свои парамертры резисторов все вроде бы заработало (При включении эмуяции загораються все светодиоды. Прм нажатии любой кнопки все светодиоды гаснут кроме свеодиода соответствующей кнопке)
Пробему сам реши с поьщью "Таблицы состояний" и ввода своих параметров резисторов (первоначально все выходы не активные при нажатии кнопки включается соответствующий ей выход). Но зачем эти танцы с бубнами??? еси есть готовый блок хотя на мой взгляд сырой (при выборе параметров блока кроме как поменять реаьное значение резистора на кнопке ничего изменить нельзя (эти параметры не активны)) Если зайти со стороны задницы, а скорее всего передницы открыть редактирование блока то все пожалуста твори что хочеш. Но наверное не все поьзователи столь настырные и не будут лезть куда попало
Вопрос состоит в том действительно так дожен работать блок пользователя сначала вкючатся все выходы а при нажатии кнопки оставаться вкюченым только выход для соответствующей кнопки
Ответом "Да" или "нет" буду очень доволен тогда попытаюсь разобраться и внести свои корективы в блок (меня смущает что почти все эементы бока Анаоговые а анаоговые элементы как известно загружают процесор )
Сам пользовательские блоки есче не создавал поэтому хочю поэксперементировать на чюжом

DWD
Лейтенант
Сообщения: 353
Зарегистрирован: 18.10.2015{, 13:51}
Репутация: 5
Откуда: Кривой Рог

кнопоки на аналоговом входе

#35

Сообщение DWD » 09.04.2018{, 16:34}

Выше я делал небольшой обзор вариантов подключения нескольких кнопок к одному аналоговому порту МК.
Там все кнопки отдельные.
А на днях я натолкнулся на вариант подключения к одному аналоговому входу почти целой матрицы. Только не помню где...
Матричная клавиатура на одном входе АЦП.jpg
Есть некоторая нелинейность, но работает. Плохо только, что матрица кнопок 4х4 получается урезаной. Можно подключить и полную матрицу 4х4, но появляется нелинейность.
На графике ниже, показывающем зависимость выходного напряжения от номера нажатой кнопки видно, что если подключать матрицу, выбросив портящие её резисторы R4, R5 и R6, то нелинейность становится ещё хуже. Но всё равно вариант рабочий.
Буфер обмена01.jpg
Помня, что запитка подобных делителей не источником напряжения, а источником тока хорошо линеаризует характеристику, пересчитал резисторы и получил отличный результат.
График ниже показывает, что линейность отличная:
Буфер обмена02.jpg
Изменения:
Резисторы R1,R2,R3 на 4 КОм.
Резисторы R4,R5,R6 заменены перемычками.
Резисторы R7,R8,R9,R10 на 1 КОм.
Схема запитывается любым источником тока, подключенным к точке VCC. С этой же точки снимается напряжение и подаётся на аналоговый вход МК.

При указанных значениях резисторов и токе 0.3мА выходное напряжение меняется от 0,3В до 4,8В с шагом 0,3В.
Высокая линейность и большой шаг позволяют сделать вывод, что по такому же принципу к одному входу АЦП можно подключить матрицу на большее число кнопок.

Отправлено спустя 12 минут 31 секунду:
Вот пример использования стандартной матричной клавиатуры 4х4 в пульте управления лабораторного БП:
Лабораторный линейный ИБП.jpg
Справа есть табличка, в которой показана зависимость выходного напряжения схемы от номера нажатой кнопки.
Весь диапазон напряжений от 0,3В до 4,8В.
Если на выходе напряжение равно напряжению питания 5В, значит ни одна из кнопок не нажата.

Так как минимальное значение выходного напряжения равно 0,3В, то использована ещё и кнопка энкодера, при нажатии которой выходное напряжение становится равно нулю.

Отправлено спустя 14 минут 38 секунд:
Мне сказали, что увеличение сопротивления контакта в кнопках приводит к ложным командам. А сопротивление окислившихся контактов кнопки может достигать сотен ом.

При указанных номиналах и токе 0,3мА получаем шаг 0,3В. Кнопка может иметь либо нулевое сопротивление (в идеале), либо повышенное.
По этому примем допустимое увеличение напряжения при увеличении сопротивления кнопки, например, половину шкалы - 0...+0,15В. На это же значение настраивается и логика отработки нажатий в программе.
То есть, кнопка считается нажатой, если соответствующее ей напряжение лежит в диапазоне 0,3...0,45В.
От 0,45В до следующей кнопки, с напряжением на 0,3В больше, оставляем защитный промежуток. Следующая кнопка бужет отрабатываться только при напряжении 0,6...0,75В и т.д.

При токе 0,3мА получается, что сопротивление кнопки не должно превышать 0,15В/0,3мА=0,5КОм.
То есть, схема будет работоспособна при повышенном до 500Ом сопротивлении кнопки. С учётом защитного промежутка ещё больше.

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

Например, при увеличении сопротивления резисторов в 10 раз (4КОм > 40КОм, 1КОм > 10КОм) и уменьшении тока в 10 раз (0,3мА > 0,03мА) получаем такой же диапазон выходных напряжений 0,3В...4,8В при прежнем шаге 0,3В, но с допустимым увеличением сопротивления копок до 5КОм. То есть, тоже в 10 раз.

При этом правда повышается чувствительность схемы к утечкам и нужно будет принимать меры - например, покрывать плату сдеталями лаком...
В общем, компромисс можно найти.

Кстати, при таком приличном допуске, похоже, нет необходимости даже в применении прецизионных резисторов в схеме. Допуска 5% вполне хватит. Это уменьшит допустимый порог сопротивления кнопки с 500Ом до 450Ом в худшем случае...
Изображение

Аватара пользователя
Hijin
Лейтенант
Сообщения: 325
Зарегистрирован: 22.08.2017{, 11:08}
Репутация: 13
Откуда: Винница
Имя: Юрий

кнопоки на аналоговом входе

#36

Сообщение Hijin » 24.06.2019{, 19:59}

Hijin писал(а):
08.10.2017{, 20:31}
На днях скача с форума пользоватеьский бок 4In1_(FBD).ubi
Да это было давно но блок весьма полезный так как в отличии от многих подобных блоков позволяет включать одновременно несколько кнопок (включателей) при этом что подано на вход то и выводится на выходе
Вы спросите а зачем это надо?
Ответ простой у меня на даче есть полив две бочки и колодец на каждом обьекте есть датчик верхнего и нижнего уровня итого 6 цифровых пинов а с таким блоком всего два
Но суть вопроса не в этом
Я решил сделать на основе блока 4In1_(FBD).ubi свой блок на 5 выходов
5_кнопок_на_аналог_входе_(FBD).ubi
(751.97 КБ) 56 скачиваний
Сначала сделал его просто в программе. Все заработало отлично правда пришлось изменить параметры резисторов
5 кнопок на аналоговом входе.flp
(430.95 КБ) 67 скачиваний
Далее создал свой пользовательский блок идентичный 4In1_(FBD).ubi
И вот тут фиг вам блок абсолютно не рабочий может кто подскажет в чем проблема
5_кнопок_на_аналог_входе_(FBD).ubi
(751.97 КБ) 56 скачиваний
В дальнейшем хочу попробовать увеличить количество выходов до 6 или даже 8

Отправлено спустя 2 часа 25 минут 36 секунд:
5 кнопок на анало вход.bmp
5 кнопок на анало вход.bmp (861.05 КБ) 874 просмотра
Вложения
4In1_(FBD).ubi
(664.47 КБ) 63 скачивания

Ответить

Вернуться в «Кнопки и клавиатуры»