Có một công tắc cần phải được công bố khi mở?


8

Giả sử rằng một đầu vào trên một vi điều khiển có điện trở pullup đến 5V và một công tắc nối đất (thường mở) được kết nối với nó. Tôi biết rằng một công tắc nên được công bố (trong trường hợp của tôi, trong phần mềm) khi đóng, nhưng việc gỡ bỏ khi một công tắc được mở có cần thiết không?

Câu trả lời:


10

Có, việc gỡ rối theo cả hai hướng là cần thiết nếu bạn muốn một cạnh duy nhất được đảm bảo mỗi khi công tắc thay đổi trạng thái.

May mắn thay, bạn không cần bất kỳ phần cứng bổ sung nào để gỡ lỗi nếu công tắc được kết nối với vi điều khiển. Nếu micro có pullup bên trong, điều mà nhiều người làm, bạn không cần gì bên ngoài hơn là chuyển đổi giữa pin micro và mặt đất.

Tôi thấy 50 ms là thời gian gỡ lỗi tốt. Hầu hết các công tắc bật lên ít hơn thế, nhưng một số ít có thể dài gần như vậy. Nhưng, 50 ms vẫn sẽ cảm thấy tức thời với người dùng, vì vậy bạn cũng có thể đáng tin cậy hơn. Sự khác biệt duy nhất là số bạn đếm trong phần sụn, vì vậy không có chi phí thêm ở đó. Tôi thường có một ngắt định kỳ 1 ms vì những lý do khác, vì vậy nếu công tắc ở trạng thái tương tự 50 lần liên tiếp trong lần gián đoạn đó, thì bạn tuyên bố nó đã được chuyển sang trạng thái mới.

Chi tiết về logic gỡ lỗi để phản hồi bình luận:

Nói chung, bạn sẽ có một bit toàn cục cho biết trạng thái được công bố chính thức của công tắc. Đây là điều mà bất kỳ logic nào cần biết cách thiết lập công tắc được sử dụng. Trạng thái bổ sung duy nhất bạn cần là một bộ đếm, thường là một byte đơn, trong thói quen ngắt. Giả sử ngắt là cứ sau 1 ms và thời gian gỡ lỗi là 50 ms. Đối với mỗi ngắt:

Nếu trạng thái tự nhiên phù hợp với trạng thái đã công bố:
  Đặt lại bộ đếm thành 50
  Làm xong

Nếu trạng thái tức thời khác với trạng thái được công bố:
  Bộ đếm giảm
  Nếu bộ đếm đạt 0:
    Khai báo trạng thái mới được công bố
    Đặt lại bộ đếm thành 50
  Làm xong

Có một bài viết rất hay trên www.embedded.com một thời gian trước. Tác giả đã chộp lấy một loạt các công tắc và đặt chúng giữa một nguồn cung cấp năng lượng và đầu vào phạm vi lưu trữ kỹ thuật số, để xem xét các đặc điểm nảy. Kết luận cuối cùng là bạn không thể chọn thời gian gỡ lỗi "một kích thước phù hợp với tất cả": bạn phải mô tả từng công tắc cụ thể và xem cách nó bật lên.
John R. Strohm

@ John: bạn có thể cung cấp liên kết? Tôi không hiểu tại sao giả định thời gian thoát tối đa trong trường hợp xấu nhất không thể được sử dụng cho tất cả các công tắc, với điều kiện là nó đủ ngắn để đáp ứng người dùng. IME đề cập 50ms Olin đáp ứng cả hai tiêu chí.
Wouter van Ooijen

Cảm ơn Olin. Vậy làm thế nào để bạn theo dõi trạng thái của công tắc trong 50 ngắt vừa qua? Tôi sẽ tăng một biến nếu công tắc ở trạng thái giống như lần ngắt cuối cùng, xóa nó nếu trạng thái đã thay đổi và xem xét công tắc được công bố nếu nó đạt đến 50. Đó có phải là cách hiệu quả để làm điều đó không?
Nate

1
Đây có thể không phải là bài viết được đề cập ở trên, nhưng nó có rất nhiều thông tin thú vị trong đó: ganssle.com/debouncing.htmlm Bất cứ ai đối phó với việc thảo luận đều nên đọc nó.
Vô điều kiệnReinstateMonica

1
@Nate: Xem thêm để trả lời.
Olin Lathrop

2

Vâng tôi sẽ sử dụng một, cơ chế là như nhau. Khi bạn ngắt liên lạc, bạn sẽ có những thời điểm mà công tắc đang tiếp xúc điện tốt cũng như không tiếp xúc điện tốt. Giống như khi bạn đang thực hiện liên lạc.


1

Nói chung, có. Công tắc cơ có thể tạo ra tiếng ồn điện (nảy) trên cả đóng và mở.


1

Nói chung là có, nhưng nó luôn phụ thuộc vào những gì bạn đang làm với đầu vào kỹ thuật số. Tôi đã có một vài hệ thống hoàn toàn không cần phải xuất bản theo bất kỳ hướng nào.

Tuy nhiên, nếu bạn đang lái xe bị gián đoạn, rất có thể bạn nên ra mắ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.