Điều chế độ rộng xung (PWM) là một trong những kỹ thuật quan trọng nhất được sử dụng trong các dự án điện tử và tự động hóa Raspberry Pi. Nó cho phép các chân GPIO kỹ thuật số mô phỏng điều khiển giống như tương tự bằng cách điều chỉnh thời gian tín hiệu thay vì điện áp đầu ra.

Tổng quan về Raspberry Pi PWM
Điều chế độ rộng xung (PWM) là một phương pháp cho phép các chân Raspberry Pi GPIO điều khiển công suất đầu ra bằng cách BẬT và TẮT nhanh tín hiệu kỹ thuật số. Thay vì tạo ra điện áp tương tự thực sự, PWM thay đổi khoảng thời gian tín hiệu duy trì CAO trong mỗi chu kỳ. Tỷ lệ phần trăm ON-time này được gọi là chu kỳ nhiệm vụ.
Cách hoạt động của PWM trên Raspberry Pi

Tín hiệu PWM liên tục chuyển chân GPIO Raspberry Pi giữa trạng thái CAO và THẤP. Tín hiệu vẫn là kỹ thuật số, nhưng các thiết bị được kết nối phản ứng với hiệu ứng trung bình của quá trình chuyển mạch.
Hai thông số chính kiểm soát hoạt động PWM:
| Thông số PWM | Ý nghĩa |
|---|---|
| Tần suất | Tín hiệu lặp lại bao nhiêu lần mỗi giây |
| Chu kỳ nhiệm vụ | Tín hiệu BẬT trong bao lâu trong mỗi chu kỳ |
Trên chân Raspberry Pi GPIO, CAO là khoảng 3.3V. Chu kỳ làm việc 50% có nghĩa là tín hiệu duy trì CAO một nửa thời gian và THẤP một nửa thời gian. Điều này có thể làm cho đèn LED có vẻ sáng một nửa hoặc giảm công suất trung bình cung cấp cho động cơ.
Chu kỳ nhiệm vụ được tính bằng cách sử dụng:
Chu kỳ nhiệm vụ = Thời gian BẬT / Tổng thời gian × 100%
| Chu kỳ nhiệm vụ | Hành vi tín hiệu | Hiệu quả thực tế |
|---|---|---|
| 0% | Luôn TẮT | Không có đầu ra |
| 25% | BẬT trong một phần tư chu kỳ | Sản lượng thấp |
| 50% | BẬT trong một nửa chu kỳ | Sản lượng trung bình |
| 75% | BẬT trong ba phần tư chu kỳ | Sản lượng cao |
| 100% | Luôn BẬT | Sản lượng đầy đủ |
Tăng chu kỳ nhiệm vụ làm tăng sản lượng trung bình, trong khi giảm chu kỳ nhiệm vụ sẽ làm giảm sản lượng.
Tần số PWM là số chu kỳ PWM mỗi giây. Nó được đo bằng hertz (Hz).
Tần suất được tính bằng cách sử dụng:
f = 1 / T
| Thiết bị | Tần số PWM điển hình |
|---|---|
| Đèn LED | Hàng trăm Hz trở lên |
| Động cơ DC | Hàng trăm Hz đến vài kHz |
| Servo | Khoảng 50 Hz |
| Đầu ra âm thanh | Tần số cao hơn nhiều |
Tần số sai có thể gây ra đèn LED nhấp nháy, động cơ nhiễu, servo không ổn định hoặc chất lượng âm thanh kém.
PWM phần cứng so với PWM phần mềm trên Raspberry Pi

| Chủ đề | Phần cứng PWM | Phần mềm PWM |
|---|---|---|
| Định nghĩa | Sử dụng phần cứng PWM chuyên dụng bên trong bộ xử lý Raspberry Pi | Sử dụng chuyển mạch GPIO được điều khiển bằng phần mềm để tạo xung PWM |
| Kiểm soát thời gian | Điều khiển bằng phần cứng | Được điều khiển bởi phần mềm và hệ điều hành Linux |
| Độ chính xác thời gian | Cao | Trung bình |
| Tín hiệu ổn định | Rất ổn định với ít chập chờn hơn | Có thể chập chờn, đặc biệt là khi CPU tải nặng |
| Sử dụng CPU | Sử dụng CPU thấp | Mức sử dụng CPU cao hơn |
| Tính linh hoạt của GPIO | Giới hạn ở các chân GPIO được chọn | Có thể hoạt động trên nhiều chân GPIO |
| Kiểm soát tần số | Chính xác và ổn định hơn | Phụ thuộc vào tải hệ thống |
| Hiệu suất dưới tải | Duy trì đầu ra ổn định tốt hơn trong hoạt động nền | Có thể trở nên không ổn định khi các tác vụ nền Linux làm gián đoạn thời gian xung |
| Ứng dụng tốt nhất | Servo, trình điều khiển động cơ, quạt, đầu ra âm thanh, hệ thống điều khiển chính xác | Làm mờ đèn LED, dự án dành cho người mới bắt đầu, điều khiển tốc độ thấp, đèn báo trạng thái |
| Lợi thế chính | Đầu ra PWM mượt mà và chính xác | Thiết lập dễ dàng và nhiều tùy chọn GPIO hơn |
| Hạn chế chính | Chỉ khả dụng trên một số ghim | Thời gian kém chính xác hơn |
| Khuyến nghị sử dụng | Sử dụng khi độ chính xác của thời gian quan trọng | Sử dụng cho các dự án đơn giản, nơi có thể chấp nhận lỗi thời gian nhỏ |
Chân và cấu hình GPIO của Raspberry Pi PWM

Đánh số GPIO và chân PWM phần cứng
Raspberry Pi sử dụng nhiều hệ thống đánh số GPIO. Hầu hết các thư viện Python hiện đại đều sử dụng đánh số BCM, trong khi đánh số vật lý đề cập đến các vị trí ghim thực tế trên tiêu đề.
| Loại đánh số | Ý nghĩa |
|---|---|
| Đánh số BCM | Đánh số GPIO của Broadcom được sử dụng nội bộ |
| Đánh số pin vật lý | Vị trí ghim tiêu đề thực tế |
| Đánh số WiringPi | Hệ thống đánh số cũ không dùng nữa |
Luôn xác minh số GPIO trước khi đấu dây phần cứng.
Chân PWM phần cứng phổ biến
| BCM GPIO | Ghim vật lý | Kênh PWM | Sử dụng phổ biến |
|---|---|---|---|
| GPIO12 | Chân 32 | PWM0 | Đèn LED, động cơ, servo |
| GPIO13 | Chân 33 | PWM1 | Đèn LED, động cơ, servo |
| GPIO18 | Chân 12 | PWM0 | Âm thanh, servo, điều khiển động cơ |
| GPIO19 | Chân 35 | PWM1 | Âm thanh, servo, điều khiển động cơ |
GPIO18 thường được sử dụng vì nó hỗ trợ PWM phần cứng và được hỗ trợ rộng rãi trong các thư viện và hướng dẫn PWM.
Thư viện và cấu hình PWM
Thư viện Raspberry Pi PWM phổ biến
| Thư viện | Mục đích chính | Ghi chú |
|---|---|---|
| RPi.GPIO | Điều khiển GPIO và PWM cơ bản | Thân thiện với người mới bắt đầu |
| gpiozero | Đơn giản hóa điều khiển thiết bị | Giao diện cấp cao |
| pigpio | Thời gian chính xác và PWM tiên tiến | Hỗ trợ thời gian DMA |
| LGPIO | Điều khiển GPIO hiện đại | Truy cập cấp thấp hơn |
Các thông số cấu hình PWM điển hình
| Tham số | Mô tả |
|---|---|
| Tần suất | Tốc độ chuyển mạch PWM |
| Chu kỳ nhiệm vụ | Tỷ lệ phần trăm thời gian BẬT |
| Ghim GPIO | Chân đầu ra PWM đã chọn |
| Chế độ PWM | PWM phần cứng hoặc phần mềm PWM |
Hạn chế PWM và an toàn đi dây
Phần cứng Raspberry Pi PWM có một số hạn chế trở nên quan trọng trong robot, điều khiển động cơ, hệ thống âm thanh và các ứng dụng công nghiệp.
| Giới hạn | Giải thích |
|---|---|
| Kênh PWM hạn chế | Chỉ có một số lượng nhỏ đầu ra PWM phần cứng |
| Chức năng được chia sẻ | Một số chân GPIO chia sẻ thiết bị ngoại vi |
| Xung đột âm thanh | PWM có thể xung đột với âm thanh tích hợp |
| Hạn chế ghim | Không phải tất cả các chân GPIO đều hỗ trợ phần cứng PWM |
| Chia sẻ tần số | Một số kênh PWM chia sẻ nguồn đồng hồ |
| Phụ thuộc DMA | Các phương pháp PWM nâng cao có thể sử dụng tài nguyên DMA |
Nhiều sự cố PWM là do lỗi đi dây chứ không phải do sự cố phần mềm.
| Lỗi hệ thống dây điện | Tại sao điều này lại quan trọng |
|---|---|
| Kết hợp BCM và đánh số vật lý | Điều khiển sai chân GPIO |
| Kết nối động cơ trực tiếp với GPIO | Có thể gây sát thương cho Raspberry Pi |
| Thiếu điểm chung | Gây ra tín hiệu không ổn định |
| Vượt quá giới hạn dòng điện GPIO | Có thể làm hỏng vĩnh viễn các chân GPIO |
| Thiếu diode flyback | Chuyến baytage tăng đột biến có thể làm hỏng các bộ phận |
| Kết nối điện áp sai | Chân GPIO chỉ hỗ trợ logic 3.3V |
| Dây nhảy lỏng lẻo | Gây ra tín hiệu PWM không ổn định |
Các thành phần bảo vệ được đề xuất
| Thành phần | Mục đích |
|---|---|
| MOSFET | Chuyển đổi tải dòng điện cao hơn một cách an toàn |
| Trình điều khiển H-Bridge | Điều khiển tốc độ và hướng động cơ |
| Điốt Flyback | Bảo vệ chống lại điện áp cảm ứngtage tăng đột biến |
| Nguồn điện bên ngoài | Cung cấp năng lượng cho động cơ một cách an toàn |
| Bộ ghép quang | Cung cấp cách ly điện |
Ứng dụng Raspberry Pi PWM
Hệ thống làm mờ đèn LED

PWM được sử dụng rộng rãi trong các dự án LED Raspberry Pi vì nó có thể kiểm soát độ sáng mà không yêu cầu chân đầu ra tương tự thực sự. Bằng cách thay đổi chu kỳ làm việc, đèn LED có thể mờ hơn hoặc sáng hơn. Điều này rất hữu ích để điều khiển độ sáng LED, trộn màu RGB, chiếu sáng trang trí, hệ thống độ sáng thích ứng và chỉ báo trạng thái. Nên sử dụng tần số PWM đủ cao để tránh nhấp nháy có thể nhìn thấy được.
Kiểm soát tốc độ động cơ

PWM thường được sử dụng để điều khiển tốc độ động cơ DC trong bánh xe robot, máy bơm, quạt, hệ thống băng tải và thiết bị truyền động tự động hóa. Thay vì thay đổi điện áp cung cấp trực tiếp, PWM điều chỉnh công suất trung bình cung cấp cho động cơ. Chu kỳ làm việc cao hơn thường làm tăng tốc độ động cơ, trong khi chu kỳ làm việc thấp hơn làm giảm tốc độ động cơ. Cần có trình điều khiển động cơ bên ngoài vì chân GPIO của Raspberry Pi không thể điều khiển động cơ trực tiếp một cách an toàn.
Kiểm soát vị trí Servo

Động cơ servo sử dụng xung điều khiển lặp lại trong đó độ rộng xung xác định vị trí trong cánh tay robot, hệ thống camera xoay nghiêng, xe RC và hệ thống tự động hóa. Lỗi thời gian nhỏ có thể gây rung, ù hoặc chuyển động không ổn định, vì vậy thời gian PWM ổn định là rất quan trọng để điều khiển servo đáng tin cậy.
Tạo tín hiệu âm thanh

Raspberry Pi PWM có thể tạo ra âm thanh đơn giản, báo thức, còi và tín hiệu âm thanh cơ bản bằng cách chuyển đổi chân GPIO ở tần số âm thanh. PWM hữu ích cho đầu ra âm thanh nhúng đơn giản, nhưng nó không thể thay thế hoàn toàn DAC chuyên dụng cho các ứng dụng âm thanh chất lượng cao.
Ứng dụng công nghiệp và IoT

PWM hữu ích trong các hệ thống IoT và công nghiệp Raspberry Pi vì nó có thể điều khiển đầu ra phần cứng có thể điều chỉnh. Các ứng dụng phổ biến bao gồm nông nghiệp thông minh, giám sát môi trường, hệ thống HVAC, tự động hóa công nghiệp và hệ thống điều khiển IoT. PWM thường xuyên điều khiển quạt, máy bơm, van, hệ thống chiếu sáng và thiết bị truyền động.
Raspberry Pi vs Arduino cho PWM

| Thể loại | Mâm xôi Pi | Arduino |
|---|---|---|
| Hệ điều hành | Chạy hệ điều hành Linux | Chạy chương trình cơ sở đơn giản |
| Sức mạnh xử lý | Sức mạnh xử lý cao hơn cho các ứng dụng nâng cao | Sức mạnh xử lý thấp hơn nhưng được tối ưu hóa cho các tác vụ điều khiển |
| Thời gian PWM | Ít dự đoán hơn do hệ điều hành đa nhiệm | Hành vi PWM theo thời gian thực dễ dự đoán hơn |
| Độ trễ | Độ trễ vừa phải | Độ trễ thấp hơn với phản hồi phần cứng nhanh hơn |
| Điều khiển phần cứng | Truy cập phần cứng gián tiếp thông qua hệ điều hành và thư viện | Truy cập phần cứng trực tiếp |
| Độ ổn định PWM | Tốt cho PWM đa năng | Tốt hơn cho các vòng điều khiển và điều khiển động cơ ổn định |
| Mạng lưới | Hỗ trợ mạng và IoT tuyệt vời | Kết nối mạng hạn chế mà không có thêm mô-đun |
| Đa nhiệm | Có thể chạy máy chủ, tập lệnh, cơ sở dữ liệu và nhiều ứng dụng | Khả năng đa nhiệm hạn chế |
| Lập trình | Lập trình cấp cao dễ dàng với Python | Lập trình cấp thấp đơn giản với Arduino IDE |
| Điện tử mới bắt đầu | Tốt cho người mới bắt đầu tập trung vào phần mềm | Tuyệt vời cho người mới bắt đầu sử dụng thiết bị điện tử |
| Tự động hóa thông minh | Tuyệt vời cho các hệ thống tự động hóa thông minh được kết nối | Tốt cho tự động hóa độc lập |
| Điều khiển động cơ thời gian thực | Hiệu suất vừa phải | Hiệu suất tuyệt vời |
| Thời gian chính xác | Độ chính xác thời gian vừa phải | Độ chính xác thời gian tuyệt vời |
| Các trường hợp sử dụng tốt nhất | Hệ thống IoT, tự động hóa thông minh, giám sát từ xa, các dự án dựa trên Linux | Động cơ, servo, robot, điều khiển nhúng, PWM thời gian thực |
| Lợi thế chính | Kết hợp PWM với phần mềm tiên tiến và mạng | Cung cấp điều khiển PWM thời gian thực chính xác và ổn định |
Khắc phục sự cố Raspberry Pi PWM
| Vấn đề | Nguyên nhân có thể | Đề xuất sửa lỗi |
|---|---|---|
| Tín hiệu không hoạt động | Đánh số GPIO sai | Kiểm tra xem mã có sử dụng BCM, hệ thống đánh số vật lý hay hệ thống đánh số khác hay không. |
| Tín hiệu không hoạt động | Hệ thống dây điện không chính xác | Kiểm tra lại kết nối GPIO, vị trí điện trở và mặt đất dùng chung. |
| Tín hiệu không hoạt động | Ghim không được hỗ trợ | Xác nhận xem chân đã chọn có hỗ trợ PWM phần cứng hay phần mềm hay không. |
| Tín hiệu không hoạt động | Vấn đề về thư viện hoặc quyền | Xác minh các lệnh cài đặt, quyền và thiết lập thư viện GPIO. |
| Servo jitter | Nguồn điện yếu | Sử dụng nguồn điện riêng cho servo. |
| Servo jitter | Thiếu điểm chung | Kết nối mặt đất Raspberry Pi với mặt đất cấp nguồn servo. |
| Servo jitter | Phần mềm PWM không ổn định | Sử dụng PWM phần cứng hoặc thư viện ổn định hơn như pigpio. |
| Servo jitter | Tiếng ồn điện | Rút ngắn dây và cải thiện bộ lọc nguồn hoặc bố trí hệ thống dây điện. |
| Đèn LED nhấp nháy | Tần suất quá thấp | Tăng tần số PWM cho đến khi không còn nhìn thấy hiện tượng nhấp nháy nữa. |
| Đèn LED nhấp nháy | Hệ thống dây điện kém | Kiểm tra giá trị điện trở, kết nối lỏng lẻo và chất lượng dây. |
| Tiếng ồn hoặc sự mất ổn định của động cơ | Nguồn điện yếu | Sử dụng nguồn điện động cơ bên ngoài thay vì cấp nguồn cho động cơ từ GPIO. |
| Tiếng ồn hoặc sự mất ổn định của động cơ | Thiếu các thành phần bảo vệ | Sử dụng trình điều khiển động cơ thích hợp và thêm các bộ phận bảo vệ như diode flyback khi cần. |
| Tiếng ồn hoặc sự mất ổn định của động cơ | Tần suất không chính xác | Điều chỉnh tần số PWM cho phù hợp với động cơ và mạch trình điều khiển. |
| Lỗi Pippio | Daemon không chạy | Khởi động hoặc khởi động lại pigpio daemon. |
| Lỗi Pippio | Xung đột GPIO | Kiểm tra xem một chương trình khác đã sử dụng cùng một chân GPIO chưa. |
Câu hỏi thường gặp [FAQ]
Tại sao PWM lại quan trọng trên Raspberry Pi mặc dù chân GPIO chỉ là kỹ thuật số?
PWM cho phép các chân GPIO của Raspberry Pi mô phỏng điều khiển giống như tương tự bằng cách chuyển đổi nhanh tín hiệu giữa trạng thái CAO và THẤP. Thay vì thay đổi điện áp trực tiếp, PWM thay đổi chu kỳ làm việc để kiểm soát việc cung cấp điện trung bình. Điều này giúp bạn có thể làm mờ đèn LED, điều chỉnh tốc độ động cơ, điều khiển vị trí servo và quản lý quạt bằng các chân GPIO kỹ thuật số tiêu chuẩn.
Khi nào nên sử dụng PWM phần cứng thay vì PWM phần mềm trên Raspberry Pi?
PWM phần cứng tốt hơn cho các ứng dụng yêu cầu thời gian ổn định và tạo xung chính xác, chẳng hạn như servo, trình điều khiển động cơ, đầu ra âm thanh và robot. Vì phần cứng chuyên dụng kiểm soát tín hiệu nên nó tạo ra ít chập chờn hơn và sử dụng ít tài nguyên CPU hơn. Phần mềm PWM thường đủ cho các tác vụ đơn giản hơn như làm mờ đèn LED hoặc chỉ báo trạng thái, nơi các lỗi thời gian nhỏ ít được chú ý hơn.
Tại sao tần số PWM không chính xác có thể gây ra sự cố trong các dự án Raspberry Pi?
Các thiết bị khác nhau phản hồi tốt nhất với các tần số PWM khác nhau. Nếu tần số quá thấp, đèn LED có thể nhấp nháy rõ ràng, động cơ có thể tạo ra tiếng ồn hoặc chuyển động thô và servo có thể trở nên không ổn định. Tần số rất cao cũng có thể làm giảm độ phân giải PWM hoặc tăng nhu cầu xử lý. Chọn tần số chính xác giúp cải thiện hiệu suất, độ mượt mà và độ tin cậy.
Tại sao động cơ và servo không bao giờ được kết nối trực tiếp với chân GPIO của Raspberry Pi?
Chân GPIO Raspberry Pi chỉ hỗ trợ tín hiệu logic 3.3V dòng điện thấp và không thể cấp nguồn trực tiếp cho động cơ hoặc servo một cách an toàn. Các thiết bị dòng điện cao có thể làm hỏng chân GPIO, tạo ra voltage tăng đột biến hoặc gây ra hoạt động không ổn định. Trình điều khiển bên ngoài, MOSFET, mạch cầu H, điốt flyback và nguồn điện riêng biệt giúp bảo vệ Raspberry Pi và cải thiện độ tin cậy của PWM.
Tại sao Arduino thường tốt hơn để điều khiển PWM chính xác hơn Raspberry Pi?
Bo mạch Arduino được thiết kế để điều khiển phần cứng theo thời gian thực và chạy chương trình cơ sở đơn giản mà không cần hệ điều hành đa nhiệm. Điều này cho phép thời gian PWM dễ đoán hơn, độ trễ thấp hơn và ổn định tốt hơn cho động cơ, servo và vòng điều khiển. Raspberry Pi mạnh hơn trong mạng, ứng dụng Linux, hệ thống IoT và tự động hóa thông minh, nhưng hoạt động nền Linux có thể ảnh hưởng đến độ chính xác của thời gian PWM.