Розумні способи виявлення кнопки (менше енергоспоживання)


28

Під час зустрічі щодо конкретного проекту мене попросили подумати над способом виявлення натискання кнопки за допомогою MCU. Виявлення повинно споживати якомога менше енергії. З першого погляду я подумав, що типовий ланцюг із підтягуванням чи пониженням:

схематичний

імітувати цю схему - Схематично створено за допомогою CircuitLab

Я не враховую деяких функцій проти відмов, оскільки це виходить за межі цього питання. У будь-якому випадку при натисканні кнопки загальне значення струму, яке тече, залежить від значення резистора. Щоб мінімізувати його (струм), я міг би збільшити значення резистора, але не так сильно, оскільки, якщо я правий, це також залежить від значення витоку вхідного штифта. Плюс великий резистор відновиться повільно.

Моє запитання таке: які розумні способи виявити натиснуту кнопку, яка не споживає енергію (як правило, для додатків, що споживають велику потужність)? Чи існують якісь методи, які ледь не затратні при натисканні кнопки?


5
Знищення в 10 кк не споживає енергії майже. 3.3V дає 330uA. А в більшості сучасних MCU ви маєте можливість встановити внутрішнє, що матиме ще більший опір. Зважаючи на це, ви можете активувати подачу кнопки зі штифта MCU через BJT або MOSFET. Активуйте його лише під час читання та читайте при опитуванні.
Лундін

27
@Lundin У сучасних умовах 330 А може бути сильним струмом ...мк
awjlogan

6
Дійсно, багато мікроконтролерів можуть отримати струм сну аж до 2-10 мкА. Втратити 30 разів, що в одному спаді - щось сумно, особливо в умовах акумулятора.
whatsisname

1
Наскільки великий резистор ви можете використовувати при пониженні, залежить від імпедансу штифта і від того, на яку напругу вони перемикаються. Скажімо, у вас є 3,3 В штифт у стані високого опору, який перемикається на 2,4 В, все, що вам дійсно потрібно, трохи нижчий опір, ніж вхідний. Я рекомендую вам приєднати потенціометр і виміряти, наскільки велике значення резистора ви можете використовувати для штифта, щоб надійно працювати, а потім знизитись на 20% нижче, щоб зберегти запас.
П’яна коду мавпи

Відповіді:


29

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

Один I / O був налаштований як вихід (SWO). Другий був налаштований як вхід (SWI) із включеним програмованим внутрішнім підтягуванням.

Стан комутації відбирали вибірки нечасто (кожні 10 мс) програмним забезпеченням переривання програм. Послідовність зчитування була такою: диск SWO низький, SWI читання, диск SWO високий.

Це означало, що натиснутий вимикач тільки підводив струм пониження SWI через себе та SWO менше ніж за 1 нас під час сканування, тоді як нестиснений вимикач не викликав струму. Цей нинішній розрив протягом <1 us кожні 10 мс призводив до невеликого середнього середнього споживання струму.


Сумнівно, навіщо потрібно підтягування за допомогою цієї техніки. Послідовність SWO Low, Read SWI, SWO High, SWI Read може бути достатньою, щоб сказати, чи штифти з'єднані разом. Ви також можете поділитися SWO між численними комутаторами.
Trevor_G

8
@Trevor Залишати вхід плаваючим, коли перемикач відкритий - не надто гарна ідея. Залежно від технології, він може спричинити споживання енергії буфера входу, якщо його вхід знаходиться в проміжному стані.
RoyC

1
@Trevor Ефективне множення підтягуючого резистора на робочий цикл sw1 sw2. Все-таки тягар повертає нас до схеми ОП 1. Це може працювати в умовах низького рівня шуму.
RoyC

2
Чи не факт, що MCU повинен залишатися неспаним, щоб зробити опитування замість того, щоб покластися на переривання, повністю скасувати будь-яку економію від коротших циклів роботи комутатора?
AndreKR

5
Привіт @AndreKR, у нас була мікроконтролер, що працює на батареях, і для цього було потрібно кілька комутаторів, тому ми використовували цю техніку, оскільки це було досить легко. Ми не поставили MCU лише для виявлення комутаторів. MCU намалював щось на кшталт 900nA у сплячому режимі між перервами 10 мс, щоб заощадити кошти було вартим.
TonyM

23

Кнопка SPDT ( S Ugle P ole D ouble T hrow) була б вашою надзвичайно ефективною кнопкою.

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

Джерело: http://www.ni.com/white-paper/3960/uk/

У вашому випадку 1P перейде до MCU, 1T до VCC, 2T до GND.


+1 .. мене завжди дописували, що субмініатюрні SPDT або дуже важко знайти, або коштувати занадто багато ...
Trevor_G

1
@Trevor Так ... деякі речі, на жаль, дуже завищені. Хоча інші елементи занижені (MCU для прикладу). Ви не можете все це мати.
Гаррі Свенссон

Це чудова ідея. На жаль, мені не вдалося знайти кнопку SPDT CMS, яка б відповідала моїм потребам. Я маю на увазі цю схему, проте
vionyst

10

Як довго буде натискати кнопку? Якщо це не тумблер (який підтримує його стан), а миттєвий перемикач, то струм, що протікає при натисканні кнопки, значною мірою не має значення через короткий час, коли кнопка насправді закрита.

Будь-яке з двох схем, які ви показуєте, добре, це не має значення.

Ви можете припустити, що витік входу та / або струм на вхід MCU незначний . Всі MCU в даний час в технології CMOS і мають практично нульовий вхідний струм. Тож перестаньте розглядати це, його там немає.

Замість використання зовнішнього резистора ви також можете використовувати вбудований внутрішній підтягуючий резистор у багато входів MCU. Цей резистор може мати відносно низьке значення (можливо, 50 кілометрів), тому невеликий струм буде текти при натисканні кнопки.

Ви можете сміливо використовувати навіть 1 мом резистор для підтягування / пониження. Тільки в дуже "брудних" (електрично кажучи) середовищах вам може знадобитися нижче значення. Ви також можете розмістити 100 нФ конденсатор паралельно комутатору для придушення перешкод від інших мікросхем поблизу.

Порада: Зарезервуйте місце для такого конденсатора на друкованій платі, але не встановлюйте ковпачок. поки що. У разі проблем: розмістіть його та подивіться, чи це допомагає.

Для виявлення стану вимикача скористайтеся опитування (як у відповіді TonyM) або скористайтеся перериванням . Це залежить від програми, який краще для споживання електроенергії (MCU).


Насправді кнопка буде миттєвою, але час її натискання може бути досить довгим (хвилин)
vionyst

Якщо пристрій увімкнено цілодобово, то пара хвилин все-таки може не багато. Важливим є робочий цикл, 5 хвилин щогодини - 5 x 60/3600 = 8,3%. Тож навіть при струмі 100 мкА перемикач у моєму сценарії споживав би в середньому 8,3 мА . Моє повідомлення: не зосереджуйтесь занадто сильно на струмі, який перемикач використовує при натисканні, не порівнюючи його з повним споживанням поточної системи. Тільки тоді, коли внески однакові, тоді є сенс покращити споживання струму комутатора. Немає сенсу робити перемикач 0,1 uA, коли MCU безперервно використовує 1uA.
Bimpelrekkie

"Немає сенсу робити перемикач 0,1 uA, коли MCU постійно використовує 1uA." це звучить. Я думаю, ви маєте на увазі пік 1uA. 10% лише для вимикача було б надмірно;)
Trevor_G

@Trevor Не пік, я маю на увазі середній струм 1uA для MCU, але 0,1uA при натисканні перемикача. У поєднанні з перемикачем 0,1 А, який буде натискатися лише протягом (відносно) коротких періодів, вимикач майже нічого не вносить до загального середнього енергоспоживання, оскільки середній струм буде: 100% х 1 уА + 8,3% * 0,1 мкА = 1,0083 мкА (8,3% повторно використали коментар вище).
Bimpelrekkie

2
Так, ви просто читали, як ви мали на увазі середнє значення 0,1 перемикача на комутаторі. Що не було б нерозумно, як, наприклад, перемикач.
Trevor_G

10

Один із застосованих нами методів використовує ємнісний характер входів CMOS.

схематичний

імітувати цю схему - Схематично створено за допомогою CircuitLab

У ланцюзі над вимикачем, коли він закритий, дозволяє висувний резистор заряджати / розряджати вхідні ємності GPIO до рівня землі.

Хитрість цієї схеми полягає у використанні двонаправленого характеру GPIO, щоб підтримувати вхід заряджений до логічно високого рівня, коли комутатор відкритий.

Контроль розповсюдження періодично повертає штифт як високий рівень або на короткий час дозволяє підтягувати, досить довго, щоб підтримувати заряд кришки. Потім вхідний контакт працює як біт динамічної пам’яті і, як і більшість пристроїв, утримуватиме цей заряд протягом значної та корисної кількості часу.

Якщо правильно налаштовано, якщо натиснути кнопку, заряд на штифті розрядиться швидше, ніж швидкість оновлення. Потім ця умова може бути виявлена ​​як частина алгоритму оновлення як зчитування перед операцією оновлення або використана для наведення переривання.

Живлення коротко використовується під час імпульсу оновлення, як для підзарядки конденсаторів, так і через резистор та комутатор, якщо він закритий. Однак довжина імпульсу оновлення невелика, а частота опитування призводить до того, що струм оновлення є відносно незначним.

Очевидно, що цей метод є активним. Якщо мікрофон буде увімкнути, стан вимикача буде невизначеним при пробудженні. Перший цикл оновлення після пробудження повинен ігнорувати прочитане на штифті. Також цей метод не слід застосовувати для пробудження мікро. Перед сном також розумно включити штифт як низький вихід, щоб припаркувати його до нульового поточного стану.

Для зчитування більше статичних перемикачів, як-от налаштування занурень-перемикачів, може використовуватися спеціальна програма, а не безперервний цикл оновлення. Після зчитування штифти GPIO повинні бути «припарковані» в активному низькому вихідному стані (нульовий струм), щоб уникнути проблеми з плаваючими входами.

ПРИМІТКА. Ця методика трохи страждає від чутливості до шуму, якщо довжина слідів довга і проходить через шумну область. Як така R1 повинна бути близькою до вхідного штифта. Однак я б не рекомендував його підключати комутатор на деякій відстані на передній панелі десь, якщо ви не додасте додаткову ємність, близьку до штифта.


1
Це дійсно виглядає дуже вразливим для ІМС. Якщо будь-яка форма радіоенергії потрапляє всередину цього кола, я думаю, всі ставки відключені. Добре, що речі бездротового зв'язку не так часто зустрічаються сьогодні :)
Лундін

@Lundin це не так вже й погано, як можна подумати. 30pF і мег роблять досить хороший фільтр.
Trevor_G

8

Якщо ваша кнопка - це п'єзо-перемикач, то єдиною необхідною потужністю є потужність, що генерується натисканням кнопки.

Наприклад: R2 / C1 збирають енергію, отриману при натисканні на п'єзо. D1 запобігає надто високій напрузі С1. R1 скидає C1, коли кнопку відпущено. GPU MCU повинен бути вхідним, не витягувати режим. Voilà, кнопка виявляє з нульовим струмом виведення з живлення.

схематичний

імітувати цю схему - Схематично створено за допомогою CircuitLab


3
Хм, чи можете ви зробити / спроектувати робочий прототип цього і показати користь від рішень за допомогою звичайного перемикача, яким ми користуємося останні 30 років?
Bimpelrekkie

Звичайно. Я додав приклад схематично. Просто побудуйте це. Перевага полягає в тому, що подача струму від нульового струму в закритому або відкритому стані. До недоліків можна віднести поганий контроль над зусиллями, необхідними для активації вимикача (активний ланцюг був би кращим, але це перешкоджає вельми граничній перевазі схеми), і це було новим дизайном порівняно із звичайною конструкцією комутатора 30 (300?) Років.
Хіт Рафті

Тим не менш, мій калькулятор має багато кнопок і працює принаймні 5 років на монетній комірці. Все ще не бачу, як ваше рішення принесе користь для цього. Я все ще думаю, що це "рішення" неіснуючої проблеми. І ще дорожче.
Bimpelrekkie

1
О, я згоден! Він відповідає оригінальним критеріям "споживайте якомога менше енергії", але чому економити менше мільйюла насправді корисно важко уявити.
Хіт Рафті

Чи не вхідний імпеданс MCU робить неприємні речі через високий вихідний опір п'єзо?
Скотт Сейдман

5

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

Є два хороших підходи до підключення таких комутаторів:

схематичний

імітувати цю схему - Схематично створено за допомогою CircuitLab

Перший підхід вимагає одного менш резистора, ніж другий, але другий буде більш толерантним до перекриття між двома полюсами (він буде витягувати більше, ніж звичайний струм, але не поставить мертву коротку впоперек живлення). Зауважте, що якщо комутатор може перейти в стан, що має середній опір протягом тривалого періоду часу, це може спалити значно більший струм, ніж зазвичай, але під час звичайного використання жоден резистор не буде проводити жодного значного струму, за винятком короткого моменту між час перемикання змінюється станом, і вихід відповідає.


2

Скористайтеся внутрішнім підтягуванням мікроконтролера, а при виявленні натискання відключіть підтягування. Потім періодично повторно використовуйте його, щоб перевірити стан кнопки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.