題:
智能的按鈕檢測方法(耗電量更少)
vionyst
2017-12-12 14:40:57 UTC
view on stackexchange narkive permalink

在一個特定項目的會議期間,我被要求考慮使用MCU來檢測按鈕按下的方式。檢測應消耗盡可能少的功率。乍一看,我認為帶有上拉或下拉的典型電路:

schematic

模擬該電路 –使用 CircuitLab sup>

創建的示意圖

在這裡,我不考慮一些反跳功能,因為這超出了此問題的範圍。無論哪種情況,按下按鈕時,流過的總電流值取決於電阻器的值。為了最小化它(電流),我可以增加電阻值,但不能增加太多,因為如果我對,它還取決於輸入引腳的洩漏值。另外,較大的電阻器將恢復緩慢。

我的問題是以下問題:檢測不消耗功率的按鈕(通常用於高功率消耗的應用程序)的聰明方法是什麼?按下按鈕時,是否有什麼方法幾乎不會耗電?

下拉10k幾乎不消耗功率。3.3V產生330uA。在大多數現代MCU上,您可以選擇在內部設置一個電阻,這將具有更高的電阻。話雖如此,您可以通過BJT或MOSFET激活MCU引腳的按鈕電源。僅在讀取期間將其激活,然後通過輪詢讀取。
@Lundin在“現代”術語中,330 \ $ \ mu \ $ A可能是大電流...
實際上,許多微控制器可以提供低至2-10μA的睡眠電流。一次下拉時要浪費30倍是一件令人悲傷的事情,尤其是在電池供電的情況下。
下拉電阻中可以使用多大的電阻取決於引腳阻抗以及它們切換的電壓。假設您有一個處於高阻抗狀態的3.3v引腳,其開關頻率為2.4v,您真正需要的只是阻抗略低於輸入阻抗。我建議您安裝一個電位計,並測量可用於該引腳的電阻值,以使其可靠地工作,然後降低其值20%以保持裕量。
七 答案:
TonyM
2017-12-12 15:05:12 UTC
view on stackexchange narkive permalink

我曾經使用的一種低電流方法是在兩個微控制器I / O引腳之間連接一個開關。

一個I / O被配置為輸出(SWO)。第二個被配置為輸入(SWI),並啟用了可編程內部上拉。

很少(每10毫秒)通過軟件中斷例程對開關狀態進行採樣。讀取順序為:將SWO拉低,將SWI讀取,將SWO拉高。

這意味著在掃描過程中,按下的開關僅通過SWI自身和SWO吸收SWI下拉電流的時間少於1 us,而按下的開關則沒有吸收電流。每10毫秒為<1 us消耗一次電流,導致平均平均電流消耗很小。

令人懷疑的是,為什麼需要使用這種技術進行上拉。順序SWO低,讀SWI,SWO高,SWI讀可能足以判斷引腳是否連接在一起。您還可以在眾多交換機之間共享SWO。
-1
儘管有@RoyC可以解決。
@RoyC看到了我的答案。
@Trevor有效地將上拉電阻乘以sw1 sw2佔空比。仍然使我們回到OP的方案1。它可能在低噪聲環境中工作。
@RoyC並不是真的,因為充電只是非常短暫地激活。噪聲只是開關的線路長度很長的問題,我不建議在前面板上某處的遠程開關上使用電荷保持技術。
ESD是與此有關的另一個問題。按鈕傾向於與人類接觸,而人類傾向於釋放ESD電荷。您不想直接在MCU引腳上獲得它。
MCU是否必須保持清醒狀態以執行輪詢而不是依靠中斷來完全消除較短的開關佔空比中的任何節省,這不是事實嗎?
嗨,@Lundin,聽起來像您在爭論永遠不要將開關連接到MCU引腳的情況,這是一個單獨的討論。關於您是否不確定並需要答案的一些問題,這使您開始提出新的問題。
嗨,@AndreKR,,我們有一個電池供電的微控制器應用程序,它需要連接多個開關,因此我們可以輕鬆地使用此技術。我們並不僅僅是為了檢測開關而安裝了MCU。MCU在其10ms中斷之間的睡眠模式下消耗了900nA的電流,因此節省上拉是值得的。
@TonyM這很重要,因為最常見的對策是輸入引腳上的串聯電阻。依次提供一個分壓器和內部上拉電阻。我們必須選擇一個電阻值,以使電壓降可以忽略不計。
@Lundin,從未見過,到目前為止,最常見的是直接連接到邏輯的開關端子,而開關本身提供了靜態保護。不過,我們不要在評論討論中進行討論,請聊天或提出一個單獨的問題。
Harry Svensson
2017-12-12 15:05:19 UTC
view on stackexchange narkive permalink

SPDT(Single Pole Double Throw)按鈕將是您的高效按鈕。

enter image description here

來源: http://www.ni.com/white-paper/3960/en/

在您的情況下,將1P分配給MCU,將1T分配給VCC,將2T分配給GND。

+1 ..一直讓我感到困惑的是,超小型SPDT要么很難找到,要么花費太多……
@Trevor是的...有些東西可悲的是價格過高。而其他商品的價格則偏低(例如MCU)。你不能擁有全部。
這是一個好主意。遺憾的是,我沒有找到適合我需求的SPDT CMS按鈕。我會牢記這個電路
Bimpelrekkie
2017-12-12 15:12:04 UTC
view on stackexchange narkive permalink

按鈕將被按下多長時間?如果它不是撥動開關(保持其狀態)而是瞬時開關,那麼由於按鈕實際上關閉的時間很短,因此當按鈕被按下時流過的電流基本上無關緊要。

顯示的兩個電路中的任何一個都可以,沒關係。

您可以假定流入MCU輸入的洩漏和/或電流是negligible。如今,所有MCU都採用CMOS技術,輸入電流幾乎為零。因此,請停止考慮它,因為它不存在。

除了使用外部電阻器,您還可以使用內置在許多MCU輸入中的內部上拉電阻器。該電阻值可能相對較低(也許為50 kohm),所以當按下按鈕時會流過小電流。

您甚至可以安全地使用1兆歐的電阻進行上拉/下拉。僅在非常“骯髒”(就電氣而言)環境中,您可能需要較低的值。您還可以將100 nF電容器與開關並聯放置,以抑製附近其他電路的干擾。

提示:在PCB上預留一個這樣的電容器的位置,但不要安裝蓋子。然而。如果出現問題,請放置它,看看是否有幫助。

要檢測開關的狀態,請使用polling(如TonyM的回答)或使用interrupt。取決於應用程序(MCU的功耗)哪個更好。

實際上,該按鈕只是一個瞬時按鈕,但是按下它的時間可能足夠長(分鐘)
如果設備處於24/7開機狀態,那麼幾分鐘可能仍然不足。重要的是佔空比,每小時5分鐘是5 x 60/3600 = 8.3%。因此,即使在電流為100 uA的情況下,該開關在我的情況下平均也會消耗8.3 uA **。我的信息是:不要將注意力集中在按下開關時所使用的電流上,而不要將其與整個系統的電流消耗進行比較。僅當貢獻相同時,才有意義的是改善開關的電流消耗。MCU連續使用1uA時進行0.1 uA開關是沒有用的。
“當MCU連續使用1uA時,進行0.1 uA開關是沒有用的。”聽起來不對。我認為您的意思是1uA峰值。僅僅10%的轉換費用就足夠了;)
@Trevor不是峰值,我的意思是MCU的平均電流為1uA,但按下開關時為0.1uA。結合僅會(相對)短時間按下的0.1 A開關,該開關幾乎不會對總平均功耗產生任何作用,因為平均電流為:100%x 1 uA + 8.3%* 0.1 uA = 1.0083 uA(從以上評論中重複使用了8.3%)。
是的,它的讀取就像您在交換機上的平均0.1uA一樣。對於撥碼開關而言,這並不是沒有道理的。
@Bimpelrekkie除非非常仔細地反跳,否則中斷上的機械按鈕會引發麻煩。
Trevor_G
2017-12-12 19:45:45 UTC
view on stackexchange narkive permalink

我使用的一種方法是利用CMOS輸入的電容特性。

schematic

模擬該電路 –使用 CircuitLab sup>

創建的原理圖

在開關上方的電路中,當閉合時,允許下拉電阻器將GPIO的輸入電容充電/放電至接地電平。

此電路的竅門是利用GPIO的雙向特性,以在開關斷開時將輸入充電到邏輯高電平。

控製程序會定期將引腳斷開為高電平,或短暫使能上拉,足以維持電容充電。然後,輸入引腳就像一個動態內存位,對於大多數設備,將在相當長的可用時間內保持該電荷。

正確配置後,如果按下按鈕,則引腳上的電荷放電將比刷新速率快。然後,可以將該條件檢測為刷新算法的一部分,作為刷新操作之前的讀取,或用於驅動中斷。

在刷新脈衝期間短暫使用電源,既可以為電容器充電,也可以通過電阻器進行充電,並在電阻閉合時進行開關。但是,刷新脈衝的長度較短,並且輪詢頻率導致刷新電流相對較小。

顯然,這種方法是一種活躍的方法。如果微型計算機進入睡眠狀態,則喚醒後開關的狀態將不確定。喚醒後的第一個刷新周期必須忽略引腳讀操作。同樣,此方法也不應用於喚醒微控制器。上床睡覺之前,也應使該引腳作為低輸出,以使其處於零電流狀態。

要讀取更多的靜態開關(如設置DIP開關),可以使用專用例程而不是連續的刷新周期。讀取後,應將GPIO引腳“停放”在低電平有效輸出狀態(零電流),以避免出現浮動輸入問題。

注意:如果走線長度較長並經過嘈雜的區域,則此技術的確會對噪聲敏感度造成影響。因此,R1應該靠近輸入引腳。但是,除非您在引腳附近增加額外的電容,否則我不建議您在前面板上的某個距離處掛接開關。

這看起來確實很容易受到EMI的影響。如果任何形式的無線電能量進入該電路,我認為所有賭注都沒有了。無線的好東西在當今並不常見:)
@Lundin並不像您想像的那樣糟糕。30pF和1兆磁阻是一個很好的濾波器。
Heath Raftery
2017-12-12 16:37:36 UTC
view on stackexchange narkive permalink

如果您的按鈕是壓電開關,那麼唯一需要的功率就是按下按鈕所產生的功率。

例如:R2 / C1收集按下壓電產生的能量。D1防止C1電壓過高。釋放按鈕時,R1排空C1。MCU GPIO必須處於輸入,無上拉模式。Voilà,按鈕檢測,電源消耗零電流。

schematic

模擬該電路 –使用 CircuitLab sup>

創建的示意圖
嗯,您能製造/設計一個可行的原型,並用我們過去30年來一直使用的普通開關來展示解決方案的好處嗎?
當然。我添加了示例示意圖。簡單地建立那個。好處是,在閉合或斷開狀態下,電源消耗的電流為零。缺點包括無法很好地控制激活開關所需的工作量(有源電路會更好,但這會削弱電路的很小的優勢),並且與30年前的常規開關設計相比,它是一種新穎的設計。
儘管如此,我的計算器還是有很多按鈕,並且在鈕扣電池上至少可以運行5年。仍然沒有看到您的解決方案將如何帶來任何好處。我仍然認為這是一個不存在的問題的“解決方案”。而且更昂貴。
哦,我同意!它符合“消耗盡可能少的功率”的原始標準,但是很難想像為什麼節省不到一毫焦耳實際上是有用的。
由於壓電的高輸出阻抗,MCU的輸入阻抗不是很討厭嗎?
-1
supercat
2017-12-13 02:07:32 UTC
view on stackexchange narkive permalink

如果設備需要無限期地保持在任何一種狀態,則使用SPDT開關將是最低功耗的方法,因為可以製作靜態電路以吸收其自身和開關內部洩漏電流以外的任何電流。 。 SPDT開關的另一個優點是,無論它們以多快的速度操作或觸點有多彎曲,它們都幾乎可以被完全消除抖動,前提是只有一個觸點在另一個先讀為閉合之前停止跳動。

有兩種連接此類開關的好方法:

schematic

模擬該電路 –使用 CircuitLab sup>

創建的示意圖

第一種方法需要比第二種方法少一個電阻,但是第二種方法可以容忍兩極之間的重疊(它會吸收比平時更高的電流,但不會使電源完全短路)。請注意,如果開關可以進入長時間處於中等電阻狀態,則可能會消耗比平時大得多的電流,但是在正常使用期間,除了兩個電阻之間的短暫瞬間外,所有電阻均不會承載任何大電流。開關更改狀態並輸出響應的時間。

τεκ
2017-12-13 20:55:25 UTC
view on stackexchange narkive permalink

使用微控制器的內部上拉電路,並在檢測到按下時禁用上拉電路。然後偶爾重新啟用它以檢查按鈕狀態。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...