PWM: một chân chỉ bật hoặc tắt, giả làm mức ở giữa
Hoặc xem mọi bài học.
- 465linh kiện trên bàn làm mạch
- 43bo mạch đang chạy
- 1.00xthời gian thực, trên mọi bo mạch
Một chân output số chỉ có đúng hai trạng thái. Nó không thể đứng ở 2.5 V để LED sáng một nửa. Điều chế độ rộng xung (PWM) tạo ra hiệu ứng tương tự theo cách khác: bật tắt chân đủ nhanh, và thay đổi thời gian bật trong mỗi chu kỳ, thì bất cứ thứ gì phía sau không phản ứng kịp với tốc độ bật tắt chỉ thấy giá trị trung bình, và giá trị đó hoạt động như một điện áp ở giữa thật sự.
Mạch ở trên là chương trình fade có sẵn của Arduino Uno, đang chạy thật. analogWrite() trên chân 9 đặt timer 1 vào chế độ PWM 8 bit phase-correct với bộ chia 64, tính ra là 16 MHz chia cho 64 nhân 510, khoảng 490 Hz. Con số đó không phải đoán; đó là tần số phần cứng timer thật sự tạo ra ở bộ chia và chế độ đó, và một khi đã đặt xong, timer tự giữ chu kỳ làm việc. Sketch chỉ thay đổi thanh ghi so sánh, ba mươi lần mỗi giây, đi qua một bảng 64 phần tử có dạng một chu kỳ của (1 - cosin) chia 2. Chính điều đó làm ánh sáng trông như đang thở chứ không tăng đều theo đường thẳng: mắt cảm nhận độ sáng gần theo hàm logarit, nên tăng tuyến tính sẽ trông như vọt nhanh ở phần sáng nhất.
Đó là PWM phần cứng: khi timer đã được cấu hình, CPU rảnh tay làm việc khác giữa các lần cập nhật, và dạng sóng trên chân không bao giờ bị giật dù sketch có bận một lúc. PWM phần mềm, phương án dự phòng trên chân không có timer phía sau, bắt CPU tự bật tắt chân theo lịch, việc này tốn thời gian CPU tỉ lệ với tần số và có thể bị lệch nhịp nếu có việc khác cần bộ xử lý đúng lúc đó.
Thứ bạn thấy trên LED cũng không phải việc bật tắt tức thời. Que đo LED của Mokxi lấy trung bình độ sáng của chính nó trong một khoảng ngắn, với hằng số thời gian gần 8 mili giây, cùng cỡ với thời gian mắt người phản ứng với một thay đổi. Ở 490 Hz, mỗi chu kỳ PWM khoảng 2 mili giây, nhanh hơn hẳn mức mà phép lấy trung bình đó theo kịp, nên LED báo đúng chu kỳ làm việc của nó với sai số vài phần trăm thay vì chớp tắt mỗi chu kỳ một lần. Đó không phải mẹo hiển thị để làm nhòe hình; đó chính là phép lấy trung bình mà võng mạc thật thực hiện, được tính theo cùng một cách.
Mở mạch và xem nhịp thở ổn định dần. Phép so sánh đáng thử tiếp theo là trên ESP32-C3, bo mạch có sẵn cùng hiệu ứng thở theo hai cách: fade bật tắt chân bằng phần mềm, còn pwmfade giao việc đó cho LEDC, bộ điều khiển PWM riêng của chip, trên bất kỳ chân nào chứ không chỉ sáu chân cố định. Cả hai đều có trên các trang mô phỏng bo mạch.
Lắp mạch này ngoài đời
Mở trình soạn thảo, đổi một giá trị và xem con số thay đổi theo. Không cần cài gì, không cần tài khoản.