Arduino - Điều chế độ rộng xung

Điều chế độ rộng xung hoặc PWM là một kỹ thuật phổ biến được sử dụng để thay đổi độ rộng của các xung trong một hệ thống xung. PWM có nhiều ứng dụng như điều khiển các servo và bộ điều khiển tốc độ, hạn chế công suất hiệu quả của động cơ và đèn LED.

Nguyên tắc cơ bản của PWM

Điều chế độ rộng xung về cơ bản là một sóng vuông với thời gian cao thấp khác nhau. Một tín hiệu PWM cơ bản được hiển thị trong hình sau.

Có nhiều thuật ngữ khác nhau liên quan đến PWM -

  • On-Time - Khoảng thời gian của tín hiệu thời gian cao.

  • Off-Time - Khoảng thời gian của tín hiệu thời gian thấp.

  • Period - Nó được biểu diễn dưới dạng tổng thời gian và thời gian tắt của tín hiệu PWM.

  • Duty Cycle - Nó được biểu thị bằng phần trăm tín hiệu thời gian vẫn bật trong khoảng thời gian của tín hiệu PWM.

Giai đoạn = Stage

Như trong hình, T on biểu thị thời gian đúng giờ và T off biểu thị thời gian tắt của tín hiệu. Khoảng thời gian là tổng của cả thời gian bật và tắt và được tính như thể hiện trong phương trình sau:

$$ T_ {total} = T_ {on} + T_ {off} $$

Chu kỳ nhiệm vụ

Chu kỳ nhiệm vụ được tính là thời gian đúng của khoảng thời gian. Sử dụng khoảng thời gian được tính toán ở trên, chu kỳ nhiệm vụ được tính là -

$$ D = \ frac {T_ {on}} {T_ {on} + T_ {off}} = \ frac {T_ {on}} {T_ {total}} $$

Hàm analogWrite ()

Các analogWrite()hàm ghi một giá trị tương tự (sóng PWM) vào một chân. Nó có thể được sử dụng để thắp sáng đèn LED ở các độ sáng khác nhau hoặc điều khiển động cơ ở nhiều tốc độ khác nhau. Sau một lệnh gọi hàm analogWrite (), chân sẽ tạo ra một sóng vuông ổn định của chu kỳ nhiệm vụ được chỉ định cho đến lần gọi tiếp theo tới analogWrite () hoặc một lệnh gọi tới digitalRead () hoặc digitalWrite () trên cùng một chân. Tần số của tín hiệu PWM trên hầu hết các chân là khoảng 490 Hz. Trên Uno và các bảng tương tự, chân 5 và 6 có tần số xấp xỉ 980 Hz. Các chân 3 và 11 trên Leonardo cũng chạy ở tần số 980 Hz.

Trên hầu hết các bảng Arduino (những bảng có ATmega168 hoặc ATmega328), chức năng này hoạt động trên các chân 3, 5, 6, 9, 10 và 11. Trên Arduino Mega, nó hoạt động trên các chân 2 - 13 và 44 - 46. Arduino cũ hơn bo mạch chỉ hỗ trợ ATmega8 analogWrite() trên các chân 9, 10 và 11.

Arduino Due hỗ trợ analogWrite()trên chân 2 đến chân 13 và chân DAC0 và DAC1. Không giống như các chân PWM, DAC0 và DAC1 là bộ chuyển đổi Digital sang Analog và hoạt động như các đầu ra tương tự thực sự.

Bạn không cần gọi pinMode () để đặt pin làm đầu ra trước khi gọi analogWrite ().

Cú pháp hàm analogWrite ()

analogWrite ( pin , value ) ;

value - chu kỳ nhiệm vụ: từ 0 (luôn tắt) đến 255 (luôn bật).

Example

int ledPin = 9; // LED connected to digital pin 9
int analogPin = 3; // potentiometer connected to analog pin 3
int val = 0; // variable to store the read value

void setup() {
   pinMode(ledPin, OUTPUT); // sets the pin as output
}

void loop() {
   val = analogRead(analogPin); // read the input pin
   analogWrite(ledPin, (val / 4)); // analogRead values go from 0 to 1023, 
      // analogWrite values from 0 to 255
}