버튼을 감지하는 현명한 방법 (전력 소비가 적음)


28

특정 프로젝트를위한 회의에서 MCU로 버튼 누름을 감지하는 방법에 대해 생각해 보았습니다. 감지는 가능한 한 적은 전력을 소비해야합니다. 언뜻보기에 풀업 또는 풀다운이있는 일반적인 회로를 생각했습니다.

개략도

이 회로 시뮬레이션CircuitLab을 사용하여 작성된 회로도

이 질문의 범위를 벗어나기 때문에 일부 반송 방지 기능에 대해서는 설명하지 않습니다. 두 경우 모두, 버튼을 누를 때 흐르는 총 전류 값은 저항 값에 따라 다릅니다. 그것을 최소화하기 위해 (전류), 저항 값을 증가시킬 수는 있지만, 옳지 않으면 입력 핀 누설 값에 의존하기 때문에 그다지 많지 않습니다. 또한 큰 저항은 천천히 회복됩니다.

내 질문은 다음 중 하나입니다. 전력을 소비하지 않는 버튼을 누를 수있는 현명한 방법은 무엇입니까 (일반적으로 고전력 소비 애플리케이션의 경우)? 버튼을 눌렀을 때 전력 소비가 거의없는 방법이 있습니까?


5
10k의 풀다운은 거의 전력을 소비하지 않습니다. 3.3V는 330uA를 제공합니다. 그리고 대부분의 최신 MCU에는 내부적으로 하나를 설정하는 옵션이 있으며, 이는 훨씬 높은 저항을 갖습니다. 즉, BJT 또는 MOSFET을 통해 MCU 핀에서 버튼 공급을 활성화 할 수 있습니다. 읽기 중에 만 활성화하고 폴링으로 읽습니다.
Lundin December

27
의 "현대"용어 @Lundin 330 A는 고전류 ... 일 수있다μ
awjlogan

6
실제로 많은 마이크로 컨트롤러가 2-10μA의 낮은 슬립 전류를 얻을 수 있습니다. 단일 풀다운에서 30 배를 낭비하는 것은 특히 배터리 구동 상황에서 매우 슬픈 일입니다.
whatsisname

1
풀다운에 사용할 수있는 저항의 크기는 핀 임피던스와 스위칭 전압에 따라 다릅니다. 2.4V로 전환되는 고 임피던스 상태의 3.3v 핀이 있다고 가정 해 봅시다. 실제로 필요한 것은 입력보다 약간 낮은 임피던스입니다. 전위차계를 부착하고 핀이 안정적으로 작동하기 위해 사용할 수있는 높은 저항 값을 측정 한 다음 값을 20 % 낮추어 마진을 유지하는 것이 좋습니다.
Drunken Code Monkey

답변:


29

한 번 사용한 저 전류 방식은 두 개의 마이크로 컨트롤러 I / O 핀 사이에 스위치를 연결하는 것이 었습니다.

하나의 I / O가 출력 (SWO)으로 구성되었습니다. 두 번째는 프로그래밍 가능한 내부 풀업이 활성화 된 입력 (SWI)으로 구성되었습니다.

소프트웨어 인터럽트 루틴에 의해 스위치 상태가 자주 (10ms마다) 샘플링되었습니다. 판독 순서는 다음과 같습니다. 드라이브 SWO 낮음, 읽기 SWI, 드라이브 SWO 높음.

즉, 프레스 된 스위치는 스캔하는 동안 SWI 풀다운 전류를 자체와 SWO를 통해 1 us 미만으로 끌어 당기는 반면, 프레스되지 않은 스위치는 전류를 소비하지 않습니다. 10ms마다 <1 us에 대한이 전류 소모는 평균 평균 전류 소비가 적었습니다.


이 기술을 사용하여 풀업이 필요한 이유는 의문입니다. 시퀀스 SWO 낮음, 읽기 SWI, SWO 높음, SWI 읽기는 핀이 서로 연결되어 있는지 확인하기에 충분할 수 있습니다. 수많은 스위치간에 SWO를 공유 할 수도 있습니다.
Trevor_G

8
@Trevor 스위치가 열려있을 때 입력을 플로팅 상태로 두는 것은 특히 좋은 생각이 아닙니다. 기술에 따라 입력이 중간 상태 인 경우 입력 버퍼가 전력을 소비 할 수 있습니다.
RoyC

1
@Trevor 풀업 저항에 sw1 sw2 듀티 사이클을 효과적으로 곱합니다. 여전히 우리를 OP 체계로 다시 끌어 들임 1. 저소음 환경에서 작동 할 수 있습니다.
RoyC

2
인터럽트에 의존하는 대신 폴링을 수행하기 위해 MCU가 깨어 있어야한다는 사실이 더 짧은 스위치 듀티 사이클로부터의 절약을 완전히 취소하지 않습니까?
AndreKR

5
안녕 @AndreKR, 우리는 배터리 구동 식 마이크로 컨트롤러 응용 프로그램을 가지고 있었고 여러 스위치를 연결해야했기 때문에이 기술을 사용하기가 쉽지 않았습니다. 스위치 감지를 위해 MCU를 넣지 않았습니다. MCU는 10ms 인터럽트 사이에서 휴면 모드에서 900nA와 같은 전력을 소비하여 풀업 비용을 절약 할 수있었습니다.
TonyM

23

SPDT는 ( S 화롯불 P OLE D ouble T 버튼을 당신의 매우 효율적인 버튼을 것 hrow)가.

여기에 이미지 설명을 입력하십시오

출처 : http://www.ni.com/white-paper/3960/en/

귀하의 경우 1P는 MCU, 1T-VCC, 2T-GND로 이동합니다.


+1 .. 초소형 SPDT를 찾기가 너무 어렵거나 비용이 너무 많이 든다는 사실이 항상 나를 괴롭 혔습니다.
Trevor_G

1
@Trevor 그래 ... 슬프게도 너무 비싸다. 다른 품목은 가격이 저렴한 반면 (예 : MCU). 다 가질 수는 없습니다.
Harry Svensson '12

이것은 좋은 생각입니다. 슬프게도 나는 내 요구에 맞는 SPDT CMS 버튼을 찾지 못했습니다. 나는이 회로를 명심할 것이다
vionyst

10

버튼을 얼마나 오래 누르나요? 토글 스위치 (상태를 유지하는)가 아니라 순간 스위치 인 경우 버튼을 누를 때 흐르는 전류는 버튼이 실제로 닫히는 짧은 시간으로 인해 크게 관련이 없습니다.

표시하는 두 회로 중 하나라도 문제가되지 않습니다.

MCU 입력으로의 입력 누설 및 / 또는 전류는 무시할 만하다고 가정 할 수 있습니다 . 모든 MCU는 요즘 CMOS 기술을 사용하며 사실상 제로 입력 전류를 가지고 있습니다. 따라서 고려를 중단하십시오.

외부 저항을 사용하는 대신 내부 풀업 저항을 사용하여 많은 MCU의 입력에 사용할 수 있습니다. 이 저항은 비교적 낮은 값 (아마도 50kohm)을 가질 수 있으므로 버튼을 누를 때 작은 전류가 흐릅니다.

풀업 / 풀다운을 위해 1Mohm 저항까지 안전하게 사용할 수 있습니다. 매우 "더러운"(전기적으로 말하는) 환경에서만 더 낮은 값이 필요할 수 있습니다. 또한 100nF 커패시터를 스위치와 병렬로 배치하여 근처에있는 다른 회로의 간섭을 억제 할 수 있습니다.

전문가 팁 : PCB에 이러한 커패시터를 보관할 공간을 확보해야하지만 캡을 장착하지는 마십시오. 아직. 문제가있는 경우 : 배치하고 도움이되는지 확인하십시오.

스위치 상태를 감지하려면 TonyM의 답변과 같이 폴링을 사용하거나 인터럽트를 사용하십시오 . MCU의 전력 소비에 더 적합한 애플리케이션에 따라 다릅니다.


실제로 버튼이 순간 하나가 될 것입니다 만 누르면됩니다 시간이 충분히 (분) 될 수있다
vionyst

장치가 연중 무휴 켜져 있으면 몇 분 동안 여전히 많은 양이되지 않을 수 있습니다. 중요한 것은 듀티 사이클이며, 시간당 5 분은 5 x 60/3600 = 8.3 %입니다. 따라서 100 uA 전류에서도 스위치는 평균 8.3 uA 소비 합니다. 내 메시지는 : 전체 시스템의 현재 소비와 비교하지 않고 스위치를 누를 때 스위치가 사용하는 전류에 너무 집중하지 마십시오. 기여가 동일한 경우에만 스위치의 전류 소비를 개선하는 것이 좋습니다. MCU가 1uA를 연속적으로 사용할 때 0.1uA 스위치를 만드는 것은 아무 소용이 없습니다.
Bimpelrekkie

"MCU가 1uA를 지속적으로 사용하는 경우 0.1uA 스위치를 만드는 것은 아무 소용이 없습니다." 그 소리가 난다. 나는 당신이 1uA 피크를 의미한다고 생각합니다. 스위치에 대해서만 10 %가 과도합니다.)
Trevor_G

@Trevor 피크가 아니라면 MCU의 평균 전류 는 1uA 이지만 스위치를 눌렀을 때 0.1uA입니다. (상대적으로) 단기간 동안 만 눌러지는 0.1A 스위치와 결합 된이 스위치는 평균 전류가 100 % x 1 uA + 8.3 % * 0.1 uA = 1.0083 uA이므로 총 평균 전력 소비량에 거의 영향을 미치지 않습니다. (8.3 %가 위의 의견에서 재사용).
Bimpelrekkie

2
예, 스위치에서 평균 0.1uA 평균을 읽은 것처럼 읽습니다. 딥 스위치처럼 부당한 것은 아닙니다.
Trevor_G

10

내가 사용한 한 가지 방법은 CMOS 입력의 용량 특성을 활용합니다.

개략도

이 회로 시뮬레이션CircuitLab을 사용하여 작성된 회로도

스위치 위의 회로에서 닫을 때 풀다운 저항은 GPIO의 입력 커패시턴스를 접지 수준까지 충전 / 방전 할 수 있습니다.

이 회로의 트릭은 GPIO의 양방향 특성을 사용하여 스위치가 열려있을 때 입력을 로직 하이 레벨로 충전하는 것입니다.

제어 루틴은 주기적으로 핀을 높은 레벨로 끄거나 간단히 충전을 유지하기에 충분히 긴 기간 동안 풀업을 가능하게합니다. 그런 다음 입력 핀은 동적 메모리 비트처럼 작동하며 대부분의 장치에서 상당한 시간 동안 충전을 유지합니다.

올바르게 구성된 경우 버튼을 누르면 핀의 충전이 재생률보다 빠르게 방전됩니다. 그런 다음 해당 조건을 새로 고치기 작업 전에 읽기로 새로 고침 알고리즘의 일부로 감지하거나 인터럽트를 구동하는 데 사용할 수 있습니다.

커패시터를 재충전하고 저항과 스위치가 닫혀 있으면 커패시터를 재충전하기 위해 전력이 리프레시 펄스 동안 잠시 사용된다. 그러나, 리프레시 펄스의 길이는 짧고 폴링 주파수는 리프레시 전류가 상대적으로 중요하지 않게한다.

분명히이 방법은 활발한 방법입니다. 마이크로가 잠자기 상태가되면, 깨어날 때 스위치 상태가 결정되지 않습니다. 깨우기 후 첫 번째 새로 고침주기는 핀 읽기를 무시해야합니다. 또한이 방법을 사용하여 마이크로를 깨워서는 안됩니다. 잠자리에 들기 전에 핀을 저출력으로 활성화하여 전류가 0 인 상태로 유지하는 것이 좋습니다.

셋업 딥 스위치와 같은 더 많은 정적 스위치를 읽으려면 연속 새로 고침주기 대신 전용 루틴을 사용할 수 있습니다. 읽은 후 부동 입력 문제를 방지하기 위해 GPIO 핀을 활성 저출력 상태 (제로 전류)에서 "파킹"해야합니다.

참고 :이 기술은 트레이스 길이가 길고 잡음이 많은 영역을 통과하는 경우 노이즈 감도가 약간 저하됩니다. 따라서 R1은 입력 핀에 가까워 야합니다. 그러나 핀에 가까운 정전 용량을 추가하지 않는 한 스위치를 전면 패널 어딘가에서 어딘가에 연결하는 것은 권장하지 않습니다.


1
이것은 실제로 EMI에 매우 취약한 것으로 보입니다. 그 회로 안에 어떤 형태의 무선 에너지가 들어가면 모든 베팅이 꺼져 있다고 생각합니다. 요즘 무선 물건은 그다지 일반적이지 않습니다 :)
Lundin

@Lundin 생각만큼 나쁘지 않습니다. 30pF와 메가는 다소 좋은 필터를 만듭니다.
Trevor_G

8

버튼이 압전 스위치 인 경우 필요한 유일한 전원은 버튼을 눌러 생성 된 전원입니다.

예를 들면 : R2 / C1은 압전을 눌러 생성 된 에너지를 수집합니다. D1은 C1 전압이 너무 높아지는 것을 방지합니다. 버튼을 놓으면 R1이 C1을 배출합니다. MCU GPIO는 풀 모드가 아닌 입력 상태 여야합니다. Voilà, 버튼은 전원 공급 장치에서 전류가 0으로 감지됩니다.

개략도

이 회로 시뮬레이션CircuitLab을 사용하여 작성된 회로도


3
흠, 작동중인 프로토 타입을 제작 / 디자인하고 지난 30 년 동안 사용했던 일반 스위치로 솔루션의 이점을 보여줄 수 있습니까?
Bimpelrekkie

확실한. 예제 회로도를 추가했습니다. 간단히 구축하십시오. 이점은 닫힌 상태 또는 열린 상태의 전원 공급 장치에서 전류 소모가 전혀 없다는 것입니다. 단점은 스위치를 활성화하는 데 필요한 노력을 제대로 제어하지 못하는 것 (활성 회로가 더 좋지만 회로의 가장 큰 이점을 제공함)을 포함하며 30 (300?) 년 된 표준 스위치 설계와 비교할 때 참신한 설계입니다.
Heath Raftery

그래도 계산기에는 많은 버튼이 있으며 코인 셀에서 5 년 이상 실행됩니다. 여전히 솔루션이 어떻게 이점을 얻을 수 있는지 알지 못합니다. 나는 이것이 존재하지 않는 문제에 대한 "솔루션"이라고 생각합니다. 그리고 더 비싸다.
Bimpelrekkie

1
아 동의합니다! 원래의 기준 인 "가능한 한 적은 전력 소비"를 충족하지만 밀리 줄 미만을 절약하는 것이 실제로 유용한 이유는 무엇입니까?
Heath Raftery

압전의 높은 출력 임피던스 때문에 MCU의 입력 임피던스가 불쾌하지 않습니까?
Scott Seidman

5

디바이스가 자체적으로 내부 누설 전류와 스위치 누설 전류를 초과하지 않도록 정적 회로를 만들 수 있기 때문에 SPDT 스위치를 사용하는 것이 가장 낮은 전력 접근 방식입니다. SPDT 스위치의 또 다른 장점은 작동 속도가 빠르거나 접점이 얼마나 크든 관계없이 하나의 접점이 튕김을 멈추고 다른 하나의 접점이 닫힌 상태로 읽히기 전에는 거의 완벽하게 디 바운스 될 수 있다는 것입니다.

이러한 스위치를 배선하는 데는 두 가지 좋은 방법이 있습니다.

개략도

이 회로 시뮬레이션CircuitLab을 사용하여 작성된 회로도

첫 번째 방식은 두 번째 방식보다 저항이 하나 더 적지 만 두 번째 방식은 두 극 사이의 겹침에 더 견딜 수 있습니다 (일반적인 전류보다 더 높은 전류를 소비하지만 전원 공급 장치에 데드 쇼트를 두지 않음). 스위치가 오랜 시간 동안 약간 저항력이있는 상태가되면 평상시보다 훨씬 더 많은 전류를 소모 할 수 있지만 정상적인 사용 중에는 저항 사이에 짧은 순간 동안을 제외하고는 어떠한 저항도 중요한 전류를 전달하지 않습니다. 스위치가 상태를 변경하고 출력이 응답하는 시간.


2

마이크로 컨트롤러의 내부 풀업을 사용하고 프레스가 감지되면 풀업을 비활성화합니다. 그런 다음 버튼 상태를 확인하기 위해 간혹 재 활성화 할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.