Сделать мгновенный переключатель управления переключателем

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

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

Я думаю, что лучший ответ на этот вопрос зависит от спрашивающего и от того, предпочитаете ли вы аппаратное или программное решение.
Это также зависит от того, где находится этот выходной переключатель и какие напряжения (состояния!) у вас есть.
Всего два состояния, высокое и низкое, как в любой цифровой логике. Если вы хотите сделать несколько циклических состояний, я думаю, для этого потребуется микроконтроллер. У вас, вероятно, в любом случае есть один в вашей схеме для этого.
Мне нравится решение с двумя инверторами. Просто интересно, что потребуется, чтобы включить это для переключения 30 В при 1 А?
@Overlow: замените выходной транзистор силовым транзистором или реле.
@endolith Мне интересно, как схемой CD4069 можно управлять не кнопкой, а через один контакт микроконтроллера. Спасибо за помощь.
микроконтроллер может просто вывести переключатель напрямую

Ответы (9)

Вот еще вариант с двумя инверторами и устранением дребезга:

Два инвертора

Для логического выхода необходимы только два инвертора, RC и резистор обратной связи:

введите описание изображения здесь

NC7WZ14 стоит 0,06 доллара США с 2 инверторами, небольшим 6-контактным корпусом и триггерными входами Шмитта, хотя я думаю, что этой схеме даже не нужны входы Шмитта из-за RC. Также он может управлять 24 мА, поэтому вы можете подключить светодиод напрямую к нему, если вы используете светодиод по какой-либо причине.

Также показан здесь и здесь как тумблерный сенсорный переключатель .

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

Варианты описаны в схемах с плавной фиксацией Press ON - Press OFF :

И вариант ворот

При первом включении он запустится с включенным, выключенным или произвольным выходом? Просто осмотрев схему, я предполагаю, что она включится при включенном выходе.
@CraigMcQueen При первом включении на конденсаторе будет 0 В. Таким образом, первая цепь запустится в положении ON. Подключите конденсатор к источнику питания вместо земли, и он запустится в положении OFF.
@CraigMcQueen На самом деле это гарантировано? Я не уверен. Низкий выходной импеданс инвертора будет доминировать над резистором 220 кОм, поэтому он может запуститься в случайном состоянии.
@CraigMcQueen Последняя показанная схема начинается с конденсатора 0,01 мкФ 0 В, поэтому Vout будет 0.
@endolith Где на последнем изображении подключен VCC? Я вижу землю и Воут.
@Mike Логические элементы имеют соединения VCC и GND, которые не показаны.

Один из возможных способов:

Используйте RC для устранения дребезга переключателя

Сеть RC подключена к мгновенному переключателю для устранения дребезга

а затем подайте его в D-триггер, а выход подайте обратно на вход, чтобы реализовать T-триггер.

D-триггер, настроенный как триггер-переключатель

D-триггер должен запускаться только положительным фронтом и иметь инвертированный выход.

  • 8-контактный NC7SZ74 должен работать, он очень маленький и стоит 0,12 доллара.
  • 74HC74 — это двойной D-триггер с 14 контактами за 0,05 доллара США.

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

Действительно нужен буфер триггера Шмитта на входе от кнопки (или, если у триггера есть входы триггера Шмитта, которые тоже будут работать). В противном случае FF может на мгновение колебаться, когда тактовый вход медленно увеличивается, когда кнопка отпущена. (Это можно несколько смягчить тщательным подбором противодребезгового колпачка и резистора, но никогда не устранять)
Не могли бы вы также использовать RC-фильтр в пути обратной связи, чтобы предотвратить дребезг?

Или вы можете сделать это с помощью одного крошечного 6-контактного микроконтроллера и никаких других компонентов. Это может стоить немного больше, но это проще и занимает меньше места. Устранить дребезг переключателя в программном обеспечении просто, тогда это просто способ хранения логического значения, если выход должен быть высоким или низким. Самая маленькая версия этого микроконтроллера поставляется в корпусе для поверхностного монтажа размером 2 мм x 2 мм. В больших количествах это может быть 0,50 доллара.

переключить схему

+1 - Но я считаю, что эта часть приходит только в SMT.
Да, но даже самый дешевый микроконтроллер будет стоить дороже, чем простая цифровая логика. Это довольно сложная система для выполнения простой задачи, и вы открываете себя миру программных ошибок. Кроме того, увеличивает ли стоимость производства программирование каждого микроконтроллера?
Таким образом, вы бы использовали внутренний подтягивающий резистор на PB0, настроенный как цифровой вход, а затем заземлили бы его, чтобы активировать его, верно? Таким образом, вам не нужен резистор последовательно с переключателем.
@TokenMacGuy Ток не должен течь от PB0 к GND, поскольку PB0 будет входом, а не выходом. @endolith правильно, использование внутреннего подтягивания означает отсутствие необходимости во внешнем подтягивании. (Кроме того, подтягивание не последовательно с переключателем, с внутренним или внешним подтягиванием). @sheepsimulator, появившийся в SMT, является проблемой только для любителей. В этом случае дополнительный доллар или два не будут проблемой, и вы можете легко перейти на 8-контактный DIP ATtiny25.
@endolith Это зависит от приложения, я думаю. Всегда есть компромиссы. Во всем, кроме самого простого устройства, есть какая-то логика. Сказать, что вы открываете себя для мира программных ошибок, не так уж и сложно... без микроконтроллера вы открываете себя для аппаратных ошибок, поскольку вы строите своего рода цифровую / аналоговую схему для выполнения логики.
PIC10F200 сопоставим, он поставляется в корпусе SOT23-6, но намного дешевле, чем AVR.

Эта схема (также описанная здесь ) очень дешевая, но более сложная и занимает немного места со всеми компонентами. Если транзисторы в больших количествах стоят около 0,02 доллара, то это может быть всего 0,10 доллара?

3-транзисторный запирающий переключатель

0,02 доллара... возможно, если вы купите 27 000 штук, как здесь: search.digikey.com/scripts/DkSearch/…
0,03 доллара — это ужасно много, как 0,02 доллара в небольших количествах…
3904 за 1,4 цента: newark.com/on-semiconductor/mmbt3904lt1g/… В больших количествах конденсаторы стоят как 1 цент, а резисторы — как 1/10 цента.
Похоже, что транзистору Q2 нужен резистор на базе, чтобы ограничить ток, протекающий через базу.
Вместо добавления резистора транзисторы Q2 и R1 можно убрать. Подключите верхний конец R5 к коллектору Q3, и он должен работать почти так же. Постоянная времени будет немного отличаться из-за высокого значения R2. Так что либо отрегулируйте R2, либо отрегулируйте C1.
@gnuarm Это звучит как отдельный ответ ...

Сделайте T-триггер, замкнув входы jk-триггера, запускаемого положительным фронтом, и соединив выход кнопки с тактовым входом jk-триггера.

схематический

смоделируйте эту схему - схема, созданная с помощью CircuitLab

С конденсатором на тактовом входе эта схема подвержена двойному тактированию из-за шума. Некоторые устройства имеют входы триггера Шмитта на часах, если нет, их следует добавить в качестве буфера между колпачком и входом часов. Альтернативой является использование D FF с Qnot, управляющим входом D с RC, более длинным, чем подавление дребезга кнопки. Тогда не будет иметь значения, сколько раз синхронизируется вход, выход не изменится после первого, пока не истечет время ожидания RC. Однако... кнопки подпрыгивают как при отпускании, так и при нажатии. Итак... это сложно.

Я знаю, что это своего рода «косвенный» способ сделать это, но вы можете получить датчик эффекта Холла, такой как sparkfun: http://www.sparkfun.com/commerce/product_info.php?products_id=9312

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

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

Как бы вы его "разблокировали"? Поднесение магнита близко к датчику во второй раз не отключит его, не так ли?
Я полагаю, что вам придется изменить полярность магнита, чтобы «очистить его». Мне придется снова подключить его дома, чтобы проверить, чтобы быть уверенным, однако я смотрю, сколько времени потребуется для «сброса». если отключить питание. Я мог бы использовать его для своего проекта, который я собирался, убив мощность в течение указанного времени (при условии, что это не слишком долго)

Самый простой вариант – использовать кнопочный переключатель с переменным током.

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

Не уверен точно, какова конечная цель, но я решил поставить это там:

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

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

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

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

Надеюсь это поможет.

Драйвер блокирующего реле

Не могли бы вы просто сделать это в программном обеспечении?

Будет ли кнопка вводом на программируемом устройстве, или вам нужно сделать переключение в аппаратной области?

Сохраняя состояние кнопки в памяти, можно легко использовать мгновенный переключатель в качестве переключателя.

boolean buttonState = false; // store for toggle state, false = off true = on

if(yourButton == HIGH && buttonState == false) // if button is pressed and toggled off
{
     Serial.println("Button Toggled On"); // do something while button is on

     buttonState = true // set button state to on
}

if(yourButton == HIGH && buttonState == true) // if button is pressed and toggled on
{
     Serial.println("Button Toggled Off");  // do something else while button is off

     buttonState = false // set button state to off
}

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

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