Cách thông minh để phát hiện nút (ít tiêu thụ điện năng)


28

Trong một cuộc họp cho một dự án cụ thể, tôi được yêu cầu suy nghĩ về cách phát hiện một lần nhấn nút bằng MCU. Việc phát hiện nên tiêu thụ càng ít năng lượng càng tốt. Ngay từ cái nhìn đầu tiên, tôi đã nghĩ mạch điện điển hình với một lần kéo lên hoặc kéo xuống:

sơ đồ

mô phỏng mạch này - Sơ đồ được tạo bằng CircuitLab

Tôi không tính đến một số tính năng chống trả lại ở đây, vì điều đó nằm ngoài phạm vi của câu hỏi này. Trong cả hai trường hợp, khi nhấn nút, tổng giá trị hiện tại chảy phụ thuộc vào giá trị điện trở. Để giảm thiểu nó (hiện tại), tôi có thể tăng giá trị điện trở nhưng không quá nhiều vì nếu tôi đúng, nó cũng phụ thuộc vào giá trị rò rỉ chân đầu vào. Thêm vào đó, một điện trở lớn sẽ phục hồi chậm.

Câu hỏi của tôi là câu hỏi sau: những cách thông minh để phát hiện nút được nhấn không tiêu thụ năng lượng (thường là cho ứng dụng tiêu thụ nhiều năng lượng)? Có phương pháp nào chỉ tiêu tốn ít năng lượng khi nhấn nút không?


5
Việc kéo xuống 10k tiêu tốn gần như không có điện. 3,3V cho 330uA. Và trên hầu hết các MCU hiện đại, bạn có tùy chọn đặt bên trong, điều này sẽ có sức đề kháng cao hơn. Điều đó đang được nói, bạn có thể kích hoạt việc cung cấp nút từ chân MCU thông qua một BJT hoặc MOSFET. Chỉ kích hoạt nó trong quá trình đọc và đọc với bỏ phiếu.
Lundin

27
@Lundin Theo thuật ngữ "hiện đại", 330 A có thể là một dòng điện cao ...μ
awjlogan

6
thật vậy, nhiều bộ vi điều khiển có thể có được dòng ngủ thấp tới 2-10 A. Lãng phí 30 lần mà chỉ cần kéo xuống là một điều đáng buồn, đặc biệt là trong tình huống chạy bằng pin.
whatsisname

1
Làm thế nào lớn một điện trở bạn có thể sử dụng khi kéo xuống phụ thuộc vào trở kháng pin và ở điện áp họ chuyển đổi. Giả sử bạn có chân 3,3v ở trạng thái trở kháng cao chuyển ở mức 2,4v, tất cả những gì bạn thực sự cần là trở kháng thấp hơn một chút so với đầu vào. Tôi khuyên bạn nên gắn một chiết áp và đo giá trị cao của điện trở mà bạn có thể sử dụng cho pin để tiếp tục hoạt động một cách đáng tin cậy, và sau đó giảm 20% giá trị để giữ mức chênh lệch.
Mã say rượu Khỉ

Câu trả lời:


29

Một phương pháp dòng điện thấp mà tôi đã sử dụng một lần là kết nối một công tắc giữa hai chân I / O của vi điều khiển.

Một I / O được cấu hình là đầu ra (SWO). Cái thứ hai được cấu hình như một đầu vào (SWI) với khả năng kéo lên bên trong có thể lập trình được.

Trạng thái chuyển đổi được lấy mẫu không thường xuyên (cứ sau 10 ms) bởi một thói quen ngắt phần mềm. Trình tự đọc là: lái SWO thấp, đọc SWI, lái SWO cao.

Điều này có nghĩa là một công tắc được nhấn chỉ thu được dòng kéo xuống SWI qua chính nó và SWO cho ít hơn 1 chúng tôi trong quá trình quét, trong khi một công tắc không được nhấn không có dòng điện. Bốc thăm hiện tại này cho <1 chúng tôi cứ sau 10 ms dẫn đến mức tiêu thụ trung bình nhỏ.


Một câu hỏi đặt ra là tại sao bạn cần sử dụng kỹ thuật này. Trình tự SWO Thấp, Đọc SWI, SWO Cao, SWI Đọc có thể đủ để biết các chân có được kết nối với nhau không. Bạn cũng có thể chia sẻ SWO giữa nhiều thiết bị chuyển mạch.
Trevor_G

8
@Trevor Rời khỏi đầu vào nổi khi công tắc mở không phải là một ý tưởng đặc biệt tốt. Tùy thuộc vào công nghệ, nó có thể khiến bộ đệm đầu vào tiêu thụ năng lượng nếu đầu vào của nó ở trạng thái trung gian.
RoyC

1
@Trevor Hiệu quả nhân điện trở kéo lên theo chu kỳ nhiệm vụ sw1 sw2. Tuy nhiên, việc đưa chúng ta trở lại sơ đồ của OP 1. Nó có thể hoạt động trong môi trường ít tiếng ồn.
RoyC

2
Có phải thực tế là MCU phải tỉnh táo để thực hiện việc bỏ phiếu thay vì dựa vào một ngắt hoàn toàn loại bỏ bất kỳ tiết kiệm nào từ các chu kỳ nhiệm vụ chuyển đổi ngắn hơn?
AndreKR

5
Xin chào @AndreKR, chúng tôi đã có một ứng dụng vi điều khiển chạy bằng pin và nó cần một số công tắc được kết nối nên chúng tôi sử dụng kỹ thuật này vì nó khá dễ dàng. Chúng tôi đã không đưa vào MCU chỉ để phát hiện chuyển đổi. MCU đã vẽ một cái gì đó giống như 900nA ở chế độ ngủ giữa các lần ngắt 10ms của nó để tiết kiệm kéo lên là đáng giá.
TonyM

23

Nút SPDT ( S ingle P ole D ouble T hrow) sẽ là nút cực kỳ hiệu quả của bạn.

nhập mô tả hình ảnh ở đây

Nguồn: http://www.ni.com/white-apers/3960/vi/

Trong trường hợp của bạn, 1P sẽ chuyển đến MCU, 1T đến VCC, 2T đến GND.


+1 .. điều đó luôn làm tôi khó chịu rằng các SPDT cực tiểu rất khó tìm hoặc tốn kém quá nhiều ...
Trevor_G

1
@Trevor Yeah ... một số điều đáng buồn là quá đắt. Trong khi các mặt hàng khác được định giá thấp (MCU là một ví dụ). Bạn không thể có tất cả.
Harry Svensson

Đây là một ý tưởng tuyệt vời. Đáng buồn là tôi đã không quản lý để tìm một nút SPDT CMS phù hợp với nhu cầu của tôi. Mặc dù vậy, tôi sẽ ghi nhớ mạch này
vionyst

10

Nút này sẽ được nhấn trong bao lâu? Nếu nó không phải là một công tắc bật tắt (giữ trạng thái của nó) mà là một công tắc tạm thời thì dòng chảy khi nhấn nút phần lớn không liên quan do thời gian ngắn mà nút thực sự bị đóng.

Một trong hai mạch bạn hiển thị là OK, không thành vấn đề.

Bạn có thể giả sử rằng rò rỉ đầu vào và / hoặc dòng điện vào đầu vào MCU là không đáng kể . Tất cả các MCU đều sử dụng công nghệ CMOS hiện nay và thực tế có dòng đầu vào bằng không. Vì vậy, ngừng xem xét nó, nó không có ở đó.

Thay vì sử dụng một điện trở bên ngoài, bạn cũng có thể sử dụng điện trở kéo lên bên trong tích hợp vào nhiều đầu vào của MCU. Điện trở này có thể có giá trị tương đối thấp (có lẽ 50 kohm) vì vậy một dòng điện nhỏ sẽ chảy khi nhấn nút.

Bạn có thể sử dụng một cách an toàn thậm chí 1 điện trở Mohm để kéo lên / kéo xuống. Chỉ trong những môi trường rất "bẩn" (nói bằng điện), bạn mới có thể cần một giá trị thấp hơn. Bạn cũng có thể đặt một tụ điện 100 nF song song với công tắc để chặn nhiễu từ các mạch khác gần đó.

Mẹo chuyên nghiệp: Dành một vị trí cho tụ điện như vậy trên PCB, nhưng không lắp nắp. chưa. Trong trường hợp có vấn đề: đặt nó và xem nếu điều đó giúp.

Để phát hiện trạng thái của công tắc, hãy sử dụng bỏ phiếu (như trong câu trả lời của TonyM) hoặc sử dụng ngắt . Nó phụ thuộc vào ứng dụng nào tốt hơn cho việc tiêu thụ năng lượng (của MCU).


Trên thực tế, nút này sẽ là một nút tạm thời nhưng thời gian nhấn nút có thể đủ dài (phút)
vionyst

Nếu thiết bị hoạt động 24/7 thì một vài phút vẫn có thể không nhiều. Điều quan trọng là chu kỳ nhiệm vụ, 5 phút mỗi giờ là 5 x 60/3600 = 8,3%. Vì vậy, ngay cả ở mức 100 uA, công tắc sẽ tiêu thụ trung bình 8,3 uA trong kịch bản của tôi. Thông điệp của tôi là: không tập trung quá nhiều vào công tắc hiện tại sử dụng khi nhấn mà không so sánh nó với mức tiêu thụ hiện tại của hệ thống hoàn chỉnh. Chỉ khi các đóng góp là như nhau, thì nó mới có ý nghĩa để cải thiện mức tiêu thụ hiện tại của công tắc. Không sử dụng chuyển đổi 0,1 uA khi MCU sử dụng liên tục 1uA.
Bimpelrekkie

"Không sử dụng chuyển đổi 0,1 uA khi MCU sử dụng 1uA liên tục." Nghe có vẻ tắt. Tôi nghĩ bạn có nghĩa là đỉnh 1uA. 10% chỉ cho chuyển đổi sẽ là quá mức;)
Trevor_G

@Trevor Không phải cực đại, tôi có nghĩa là dòng trung bình 1uA cho MCU nhưng là 0,1uA khi nhấn công tắc. Kết hợp với công tắc 0,1 A sẽ chỉ được nhấn trong khoảng thời gian ngắn (tương đối), công tắc đóng góp gần như không có gì vào tổng mức tiêu thụ năng lượng trung bình vì dòng điện trung bình sẽ là: 100% x 1 uA + 8,3% * 0,1 uA = 1,0083 uA (8,3% được sử dụng lại từ nhận xét ở trên).
Bimpelrekkie

2
Yup nó chỉ đọc giống như bạn có nghĩa là trung bình 0,1uA trên công tắc. Điều này sẽ không hợp lý cho việc chuyển đổi nhúng.
Trevor_G

10

Một phương pháp tôi đã sử dụng tận dụng tính chất điện dung của các đầu vào CMOS.

sơ đồ

mô phỏng mạch này - Sơ đồ được tạo bằng CircuitLab

Trong mạch phía trên công tắc, khi đóng, cho phép điện trở kéo xuống sạc / xả điện dung đầu vào của GPIO xuống mặt đất.

Thủ thuật với mạch này là sử dụng tính chất hai chiều của GPIO để giữ đầu vào được sạc ở mức logic cao khi công tắc mở.

Thói quen kiểm soát định kỳ biến pin ra ở mức cao hoặc ngắn gọn cho phép kéo lên, đủ lâu để duy trì sạc pin. Pin đầu vào sau đó hoạt động như một bit bộ nhớ động và, với hầu hết các thiết bị, sẽ giữ điện tích đó trong một khoảng thời gian đáng kể và có thể sử dụng được.

Khi được cấu hình đúng cách, nếu nhấn nút, sạc trên chân sẽ xả nhanh hơn tốc độ làm mới. Điều kiện đó sau đó có thể được phát hiện như một phần của thuật toán làm mới dưới dạng đọc trước khi thao tác làm mới hoặc được sử dụng để điều khiển ngắt.

Nguồn được sử dụng trong thời gian ngắn trong xung làm mới, cả hai để sạc lại các tụ điện và thông qua điện trở và công tắc nếu nó được đóng lại. Tuy nhiên, độ dài của xung làm mới là ngắn và tần số bỏ phiếu dẫn đến dòng làm mới tương đối không đáng kể.

Rõ ràng phương pháp này là một hoạt động. Nếu micro được đưa vào chế độ ngủ, trạng thái của công tắc sẽ không xác định khi thức dậy. Chu kỳ làm mới đầu tiên sau khi thức dậy phải bỏ qua việc đọc mã pin. Ngoài ra, phương pháp này không nên được sử dụng để đánh thức vi mô. Trước khi đi ngủ, cũng nên khôn ngoan cho phép pin là đầu ra thấp để đỗ ở trạng thái hiện tại bằng không.

Để đọc thêm các công tắc tĩnh, như thiết bị chuyển mạch nhúng thiết lập, một thói quen chuyên dụng có thể được sử dụng thay vì chu trình làm mới liên tục. Sau khi đọc, các chân GPIO nên được "đỗ" ở trạng thái đầu ra thấp hoạt động (dòng không) để tránh sự cố đầu vào nổi.

LƯU Ý: Kỹ thuật này chịu một chút từ độ nhạy nhiễu nếu độ dài dấu vết dài và đi qua khu vực ồn ào. Vì vậy, R1 phải gần với pin đầu vào. Tuy nhiên, tôi sẽ không đề xuất nó cho việc kết nối một công tắc ở khoảng cách xa trên bảng điều khiển phía trước ở đâu đó trừ khi bạn thêm điện dung gần với pin.


1
Điều này có vẻ rất dễ bị tổn thương đối với EMI. Nếu bất kỳ dạng năng lượng vô tuyến nào đi vào bên trong mạch đó và tôi nghĩ tất cả các cược đã tắt. Điều tốt là công cụ không dây không phổ biến hiện nay :)
Lundin

@Lundin nó không tệ như bạn nghĩ đâu. 30pF và một meg tạo ra một bộ lọc khá tốt.
Trevor_G

8

Nếu nút của bạn là công tắc Piezo, thì công suất duy nhất cần có là nguồn được tạo ra bằng cách nhấn nút.

Ví dụ: R2 / C1 thu thập năng lượng được tạo ra bằng cách nhấn piezo. D1 ngăn điện áp C1 trở nên quá cao. R1 thoát C1 khi nút được nhả. GPIO MCU phải ở đầu vào, không có chế độ kéo. Voilà, nút phát hiện với rút hiện tại bằng không từ nguồn cung cấp.

sơ đồ

mô phỏng mạch này - Sơ đồ được tạo bằng CircuitLab


3
Hmm, bạn có thể tạo / thiết kế một nguyên mẫu hoạt động được không và cho thấy lợi ích từ các giải pháp với một công tắc bình thường mà chúng tôi đã sử dụng trong 30 năm qua?
Bimpelrekkie

Chắc chắn rồi. Tôi đã thêm một ví dụ sơ đồ. Đơn giản chỉ cần xây dựng nó. Lợi ích là không có dòng rút nào từ nguồn cung ở trạng thái đóng hoặc mở. Nhược điểm bao gồm kiểm soát kém nỗ lực cần thiết để kích hoạt công tắc (một mạch hoạt động sẽ tốt hơn, nhưng điều đó mang lại lợi ích rất nhỏ của mạch) và đó là một thiết kế mới so với thiết kế công tắc thông thường 30 (300?).
Heath Raftery

Tuy nhiên, máy tính của tôi có rất nhiều nút và chạy ít nhất 5 năm trên một tế bào tiền xu. Vẫn không thấy giải pháp của bạn sẽ mang lại lợi ích gì cho điều đó. Tôi vẫn nghĩ rằng đó là một "giải pháp" cho một vấn đề không tồn tại. Và tốn kém hơn là tốt.
Bimpelrekkie

1
Ồ tôi đồng ý! Nó đáp ứng các tiêu chí ban đầu "tiêu thụ càng ít năng lượng càng tốt", nhưng tại sao việc tiết kiệm ít hơn một millomanle thực sự hữu ích lại khó tưởng tượng.
Heath Raftery

Không phải trở kháng đầu vào của MCU có làm những điều khó chịu vì trở kháng đầu ra cao của piezo không?
Scott Seidman

5

Nếu thiết bị cần có khả năng duy trì ở một trong hai trạng thái vô thời hạn, sử dụng công tắc SPDT sẽ là cách tiếp cận công suất thấp nhất, vì mạch tĩnh có thể được tạo ra để không có dòng điện vượt quá rò rỉ bên trong của chính nó và của công tắc. Một lợi thế bổ sung của các bộ chuyển mạch SPDT là chúng có thể được gỡ lỗi gần như hoàn hảo, bất kể chúng được vận hành nhanh như thế nào hoặc các liên lạc có thể bị hỏng như thế nào, chỉ với điều kiện một liên lạc dừng nảy trước khi một liên lạc khác đọc là đóng.

Có hai cách tiếp cận tốt để nối các công tắc như vậy:

sơ đồ

mô phỏng mạch này - Sơ đồ được tạo bằng CircuitLab

Cách tiếp cận thứ nhất đòi hỏi một điện trở ít hơn so với cách thứ hai, nhưng cách thứ hai sẽ có khả năng chịu được sự chồng chéo giữa hai cực (nó sẽ rút ra cao hơn dòng điện thông thường, nhưng sẽ không bị thiếu nguồn cung cấp). Lưu ý rằng nếu công tắc có thể vào trạng thái có điện trở vừa phải trong một khoảng thời gian dài, nó có thể đốt cháy dòng điện đáng kể hơn bình thường, nhưng trong quá trình sử dụng bình thường, không có điện trở nào mang theo dòng điện đáng kể ngoại trừ trong khoảng thời gian ngắn giữa thời gian chuyển đổi trạng thái và đầu ra đáp ứng.


2

Sử dụng chức năng kéo bên trong của vi điều khiển và khi phát hiện thấy báo chí sẽ vô hiệu hóa chức năng kéo lên. Sau đó, thỉnh thoảng reenable nó để kiểm tra trạng thái nút.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.