Trang chủ Bài viết Chống nhiễu Chống nhiễu cho vi điều khiển và arduino

CHỐNG NHIỄU CHO VI ĐIỀU KHIỂN VÀ ARDUINO

Chống nhiễu cho nút nhấn

Khi thực hành với Arduino, để có thể làm việc hiệu quả và chính xác với các input của Arduino thì chúng ta cần phải chống nhiễu cho các input kiểu button.

Khi một button (nút bấm hoặc công tắc) đổi trạng thái từ on quá off hoặc ngược lại. Về tín hiệu ngay thời điển ấy là một loạt trạng thái on/off được thay đổi trước khi ổn định theo trạng thái của button. Để dễ hình dung thì xem ảnh bên dưới.

Do đó arduino có thể nhận trạng thái của button không chính xác. Để khắc phục hiện tượng này thì đây là một số ý tưởng từ các anh bạn Tây.

 Debounce là gì?

Switch Bounce là hiện tượng nhiễu tín hiệu, xảy ra khi ta nhấn/thả nút, khi đó, các bộ phận cơ làm bằng kim loại có khả năng đàn hồi của nút sẽ xuất hiện tiếp điểm để truyền tín hiệu đi qua tiếp điểm đó, nhưng vì tính đàn hồi nên các thành phần này sẽ không cố định ngay khi được bấm mà sẽ bị nảy tạo các tiếp điểm ngắt nối liên tục trước khi về trạng thái ổn định.

    Chính vì thế, trong ví dụ trên, chương trình sẽ lặp lại và đọc tín hiệu từ nút nhấn liên tục với tốc độ rất nhanh, nên sẽ vô tình đọc các tín hiệu thay đổi liên tục trong giai đoạn Switch bounce, sẽ ảnh hưởng rất nhiều trong các dự án của bạn.

Debounce chính là tên gọi của cách khắc phục tình trạng trên, bạn có thể áp dụng Debounce theo 4 cách: Hardware Debouncing, R-C Debouncing, Software Debouncing, Debouncing IC. Ngoài Software Debouncing ra thì các cách khác chỉ có thể áp dụng khi bạn muốn sử dụng nút bấm từ bên ngoài, mình sẽ thêm một số tài liệu cho các bạn tham khảo.

Đối với nút bấm có sẵn trên mạch, ta sẽ áp dụng theo cách Software Debouncing, tức là lập trình để khắc phục hiện tượng trên. Có rất nhiều cách để xử lý Switch Bounce bằng code, cách đơn giản nhất đối với những người mới học là gọi hàm HAL_Delay (hay sleep trong Arduino) khi nút vừa được bấm để dừng chương trình cho tới khi qua khỏi giai đoạn Switch Bounce. Tuy nhiên, cách này lại có một vấn đề là nó sẽ dừng hoàn toàn chương trình, không cho các lệnh khác được thực hiện, nên trong các dự án thực tế không nên xài cách này.

  Code Debounce

    Một phương pháp khác, không sử dụng tới hàm sleep, tức sẽ không bắt chương trình phải dừng mà sẽ dùng một biến đếm và cho biến đếm tăng dần nếu đọc được tín hiệu từ nút nhấn hoặc giảm dần nếu tín hiệu mất đi, khi biến đếm đạt đến một giá trị nhất định thì cũng đồng nghĩa với việc nút nhấn đã vào trạng thái ổn định, khi đó ta mới tính là nút đã được nhấn.

Chống nhiễu Arduino trong công nghiệp

Nhiễu có một số nguồn như sau:

  • Đầu tiên nhiễu từ trường và tĩnh điện phóng trong không khí
  • Nhiễu do các thiết bị motor cao tần, Relay sinh ra tia lửa điện …
  • Nhiễu do layout và linh kiện chất lượng kém tạo hồi tiếp về

Khả năng chống nhiễu tốt về phần nguồn cho PLC họ cách ly tất cả các GND và VCC khi mở rộng vào ra họ dùng DC-DC conveter.

Vài mẹo để cải thiện:

  •  Dòng điều khiển luôn nhỏ như PLC FX1N có thể đệm qua điện trở 4K7 và ULN2803, cách ly các khối chức năng bằng Opto nếu có thể
  •  Tất cả đầu vào ra cách ly, độ lớn dòng điều khiển gấp 3 lần thiết bị cần điều khiển
  •  Sử dụng nguồn nguồn cách ly, ví dụ như URB2405-10W
  •  Tất cả các đầu ra RS485 ISO cách ly, RS232 cách ly, ESD/TVS bảo vệ mạch
  •  Phần quan trọng thạch anh tạo dao động dùng loại có nguồn cấp 5VDC chống nhiễu cao
  •  Layout các tụ lọc gần IC càng tốt, tránh nhiễu IC gây ra cho mạch
  •  Sử dụng cuộn Ferrite bead có chức năng chặn cao tần và tụ thì có chức năng làm mượt tín hiệu. Tuy nhiên cần chú ý là không đặt ferrite bead tại đường tín hiệu có tần số cao hoặc là đường clock vì cuộn ferrite có thể gây mất tín hiệu trên đường truyền. Thông thường người ta đặt ferrite bead tại đường nguồn của thiết bị. Việc này cũng góp phần làm cho IC và các linh kiện trong mạch bớt nóng hơn.
  • Đi dây có ít lỗ xuyên Via nhất
  • Đi dây lớn hơn với đường nguồn và nhỏ hơn với đường tín hiệu, ví dụ đối với nguồn 5V thì đường nguồn 40mil và đường tín hiệu 10mil là ổn.
  • Hạn chế đường tín hiệu bẻ góc 90 độ, nếu có thì hãy làm mượt nó
  • Giữa tụ bypass nguồn của IC không nên đi xuyên via mà hãy đi via ở sau tụ
  • Không được đi dây dưới thạch anh dao động
  • Sau khi thiết kế, phủ mass GND toàn mạch là việc làm cần thiết