Contents

Làm mờ đèn LED và hơn thế nữa:PWM trên Raspberry Pi

PWM là thứ mà tất cả chúng ta đều sử dụng hàng ngày, ngay cả khi chúng ta không biết về nó. Đó là một kỹ thuật đơn giản và cực kỳ hữu ích trong nhiều ứng dụng. Tốt nhất, đó là điều mà Raspberry Pi của bạn có thể làm mà không cần đổ mồ hôi. Làm sao? Chúng ta hãy xem xét.

##PWM là gì?

Thuật ngữ “Điều chế độ rộng xung” tuy có vẻ phức tạp nhưng lại đề cập đến hành động chuyển đổi nhanh chóng tín hiệu điện giữa trạng thái bật và tắt. Kỹ thuật này cung cấp một phương tiện đơn giản để tạo ra các tín hiệu tương tự khác nhau mà không yêu cầu phần cứng bổ sung như Raspberry Pi HAT hoặc các thành phần bên ngoài. Thật vậy, đối với các tác vụ như điều khiển đầu đốt bếp, quay động cơ hoặc điều chỉnh độ sáng của đèn LED, tín hiệu điều khiển từ xa mô phỏng một cách hiệu quả điện áp analog thực sự.

Chu kỳ nhiệm vụ

Quá trình này liên quan đến việc cung cấp một chuỗi xung vào tải, tức là vật thể đang được điều khiển. Mặc dù bản thân tác động này có vẻ thô sơ nhưng nó trở nên có ý nghĩa hơn đáng kể khi thời lượng của các xung này được điều chỉnh. Bằng cách thay đổi độ rộng của các xung, chúng ta có thể thay đổi khoảng thời gian mà chúng vẫn hoạt động hoặc “bật”. Tỷ lệ thời gian trong mỗi chu kỳ mà xung vẫn hoạt động được gọi là chu kỳ hoạt động.

Hãy xem xét tín hiệu điều chế độ rộng xung (PWM) ba volt có chu kỳ hoạt động là 50%. Trong trường hợp này, điện áp trung bình đặt trên điốt phát sáng (LED) sẽ tương ứng với tín hiệu một vôn rưỡi không bị gián đoạn. Bằng cách tăng chu kỳ hoạt động, độ sáng của đèn LED sẽ tăng lên, trong khi giảm nó sẽ dẫn đến độ sáng giảm tương ứng. Tương tự, tín hiệu âm thanh cũng có thể được tạo ra bằng cách sử dụngPWM, điều này có thể dẫn đến nhiễu đầu ra âm thanh từ Raspberry Pi nếu các ứng dụngPWM khác đang được sử dụng đồng thời.

/vi/images/pwm-anim.gif

##PWM trên Raspberry Pi

Sử dụng phần mềm Điều chế độ rộng xung (PWM) là một lựa chọn khả thi cho tất cả các chân GPIO trên Raspberry Pi. Tuy nhiên, quyền truy cập vào chức năng PLC phần cứng bị giới hạn ở các chân cụ thể, cụ thể là GPIO12, GPIO13, GPIO18 và GPIO19.

Việc sử dụng phần mềm máy tính để tạo tín hiệu có thể làm tăng mức tiêu thụ tài nguyên CPU. Trong khi bộ xử lý trung tâm (CPU) bận rộn với nhiệm vụ này, nó có thể bận tâm đến các nhiệm vụ khác có thể tác động tiêu cực đến thời gian điều chế độ rộng xung (PWM).

Do đó, tốt hơn hết bạn nên giao nhiệm vụ cho các mạch điện chuyên dụng. Trong trường hợp của Raspberry Pi, mạch này nằm bên trong Hệ thống trên Chip chứa CPU. Phần cứng PLC thường chính xác và tiện lợi hơn nhiều, do đó đây là lựa chọn ưu tiên trong hầu hết các trường hợp. Nếu bạn muốn biết những gì đang diễn ra bên trong chip Broadcom BCM2711 của Raspberry Pi 4 thì bạn có thể xem tài liệu BCM2711. Chương 8 đề cập đến nội dung của CPU!

Làm mờ đèn LED

Để đèn LED hoạt động bình thường cùng với Raspberry Pi, chúng ta sẽ phải thực hiện một số thao tác trên bảng mạch. Quá trình này đòi hỏi phải kết nối cả đèn LED và điện trở điều chỉnh dòng điện trong cấu hình nối tiếp. Điều quan trọng là phải bao gồm điện trở này vì nó có tác dụng ngăn đèn LED chịu dòng điện quá mức, từ đó bảo vệ đèn khỏi sự cố đáng tiếc đặc trưng bởi mùi độc hại phát ra từ sự phân hủy do khói.

Tính giá trị điện trở

Vị trí mà điện trở được kết nối với đèn LED không ảnh hưởng gì đến hiệu suất của nó; đúng hơn, chính giá trị điện trở sẽ xác định dòng điện chạy qua thiết bị. Vì Raspberry Pi 4 có thể cung cấp khoảng 16 milliamperes (mA) cho mỗi pin, người ta có thể sử dụng Định luật Ohm để tính giá trị điện trở cần thiết để hoạt động bình thường.

Nguyên tắc nói trên chỉ ra rằng trở kháng cần phải tương đương với hiệu điện thế giữa dây dẫn đối với dòng điện chạy qua nó. Điện áp được cung cấp bởi chân GPIO của Raspberry Pi được biết là 3,3 volt, trong khi dòng điện quy định được thiết lập là 16 milliamperes, hoặc 0,016 ampe. Khi chia các giá trị này, kết quả là 206. Tuy nhiên, việc định vị các điện trở có thông số kỹ thuật chính xác như vậy có thể là một thách thức; do đó, một giải pháp thay thế 220 ohm sẽ được sử dụng thay thế.

Vui lòng kết nối cực dương (cực dương) của dải đèn LED với GPIO 18, tương ứng với chân vật lý 12 trên Raspberry Pi. Ngoài ra, gắn cực âm (cực âm) của dải đèn LED vào bất kỳ chân nối đất nào của thiết bị. Hãy nhớ bao gồm một điện trở trong mạch, đặt nó ở bất kỳ đâu dọc theo đường dẫn nếu cần. Khi những bước chuẩn bị này đã hoàn tất, bạn đã sẵn sàng để tiến hành dự án của mình.

/vi/images/raspberry-pi-led-circuit.jpg

Triển khai PPP trên Raspberry Pi

Để có được phần cứng điều khiển hoạt động trên Raspberry Pi, chúng tôi sẽ sử dụng thư viện rpi-hardware-pwm từ Cameron Davidson-Pilon , được điều chỉnh từ mã của Jeremy Impson. Điều này đã được sử dụng trong Pioreactor (lò phản ứng sinh học dựa trên Pi)€”nhưng nó đủ đơn giản cho mục đích của chúng tôi.

Chúng ta sẽ bắt đầu bằng cách truy cập tệp cấu hình nằm trong thư mục “/boot”. Để tiếp tục nhiệm vụ của chúng tôi, cần phải thêm một dòng văn bản, cụ thể là “dtoverlay=pwm-2chan”. Nếu chúng tôi yêu cầu sử dụng các chân GPIO ngoài các chân được gán cho 18 và 19, chúng tôi có thể bao gồm các tham số bổ sung nếu cần. Tuy nhiên, trong trường hợp này, chúng tôi sẽ duy trì sự đơn giản.

Khởi động lại Pi của bạn và chạy:

 lsmod | grep pwm 

Lệnh hiện tại mang lại một bản kiểm kê toàn diện về tất cả các mô-đun đã được gắn vào thành phần cốt lõi thiết yếu của hệ điều hành, được chỉ định là hạt nhân. Để xác định chính xác các thành phần liên quan đến điều chế độ rộng xung, chúng tôi sử dụng hàm grep, viết tắt của “máy in biểu thức chính quy được áp dụng toàn cầu”.

Nếu sự hiện diện của “pwm\_bcm2835” trong các mô-đun được lập danh mục cho thấy quá trình cài đặt thành công thì chúng tôi sắp hoàn tất quá trình thiết lập sơ bộ. Bước cuối cùng liên quan đến việc cài đặt thư viện thực tế thông qua lệnh từ thiết bị đầu cuối:

 sudo pip3 install rpi-hardware-pwm 

Bây giờ chúng ta đã sẵn sàng để bắt đầu.

/vi/images/a-coder-woman.jpg

Mã hóa mạch LED điều khiển từ xa

Thật vậy, đã đến lúc đi sâu vào thế giới lập trình bằng cách sử dụng ngôn ngữ Python trong môi trường Thonny. Để bắt đầu, người ta phải khởi tạo nền tảng Thonny và sau đó sao chép đoạn mã được cung cấp trong giao diện của nó. Sau khi nhập mã thành công, nhấn nút “Run” để thực thi chương trình.

 from rpi_hardware_pwm import HardwarePWM
import time
pwm = HardwarePWM(pwm_channel=0, hz=60) # here's where we initialize the PWM
pwm.start(0) # start the PWM at zero – which means the LED is off
for i in range(101):
    pwm.change_duty_cycle(i)
    time.sleep(.1) # by introducing a small delay, we can make the effect visible.
pwm.stop()

Thật vậy, trong những trường hợp bình thường, người ta phải quan sát thấy đèn LED sẽ phát sáng dần dần cho đến khi biến đếm đạt giá trị 100. Tại thời điểm đó, đèn LED sẽ ngừng sáng. Cần phải kiểm tra chi tiết hiện tượng này.

Chúng tôi đang nhập phần thích hợp của thư việnPWM phần cứng, cùng với mô-đun thời gian liên quan của nó và xác định một biến mới. pwm\_channel có thể được gán 0 hoặc 1, trong đó 0 tương ứng với chân GPIO 18 trên Raspberry Pi, trong khi 1 được ánh xạ tới chân GPIO 19.

Người ta có thể tùy ý gán giá trị hertz (hz) cho tần số mong muốn, mặc dù phải xem xét các hạn chế thực tế như tốc độ xử lý của Raspberry Pi. Giá trị hz là 60 sẽ không thể hiện hiện tượng nhấp nháy điều chế độ rộng xung (PWM) có thể cảm nhận được. Bạn nên bắt đầu với giá trị hz cực thấp, chẳng hạn như 10, và tăng dần cho đến khi nhìn thấy được các xung rõ ràng. Cách tiếp cận này cho phép quan sát trực tiếp hiện tượng thay vì chỉ dựa vào việc chấp nhận các tuyên bố.

Nhiệm vụ hiện tại của chúng tôi liên quan đến việc tăng dần chu kỳ nhiệm vụ của tín hiệu điều chế độ rộng xung (PWM), từ 0 đến một trăm phần trăm, bằng cách sử dụng vòng lặp for của Python. Tham số “time.sleep” có thể được điều chỉnh theo sở thích cá nhân hoặc các yêu cầu cụ thể, vì tín hiệu điều khiển xung được xử lý bằng phần cứng và hoạt động độc lập với bất kỳ độ trễ phần mềm nào.

Còn nhiều điều cần tìm hiểu hơn nữa vớiPWM

Thật vậy, thật đáng khen ngợi khi bạn đã thực hiện thành công chương trìnhPWM trên Raspberry Pi của mình. Tuy nhiên, điều quan trọng cần lưu ý là các ứng dụng tiềm năng cho điều chế độ rộng xung sẽ được mở rộng rất nhiều khi sử dụng phần cứng ngoại vi thích hợp chẳng hạn như một chiếc HAT chuyên dụng dành cho điều chế độ rộng xung. Vì vậy, sẽ khôn ngoan nếu không giới hạn bản thân trong việc chiếu sáng đơn giản một đèn LED duy nhất mà nên khám phá các khả năng điều khiển động cơ, mã hóa thông tin và tạo tín hiệu âm thanh thông qua nhiều phương tiện điều chế khác nhau. Các cơ hội sẵn có thực sự rất phong phú và đang chờ bạn khám phá.