Nội Dung Bài Viết
Giới thiệu PWM
Pulse Width Modulation (PWM) là một kỹ thuật mà chiều rộng của xung được thay đổi trong khi vẫn giữ nguyên tần số sóng.
Một khoảng thời gian xung bao gồm chu trình ON (VCC) và chu kỳ OFF (GND). Phần mà tín hiệu được BẬT trong một khoảng thời gian được gọi là chu kỳ nhiệm vụ .
Ví dụ: Một xung với khoảng thời gian 10ms sẽ bật ON (cao) trong 2ms.Trước đó, chu kỳ nhiệm vụ sẽ là
D = 2ms / 10ms = 20%
Thông qua kỹ thuật PWM, chúng ta có thể điều khiển công suất được cung cấp cho tải bằng cách sử dụng tín hiệu ON-OFF. Các tín hiệu PWM có thể được sử dụng để điều khiển tốc độ của động cơ DC và thay đổi cường độ của đèn LED. Hơn nữa, nó cũng có thể được sử dụng để tạo ra tín hiệu sin. Các tín hiệu có Pulse Width với chu kỳ nhiệm vụ khác nhau được hiển thị bên dưới.
NodeMCU dựa trên ESP8266 có chức năng PWM thông qua lập trình phần mềm. Nó đạt được bằng phương pháp ngắt timer. Dải tần số PWM cho ESP8266 có thể điều chỉnh lên tới 1KHz.
Chân PWM trên Kit NodeMCU
Arduino Function cho PWM NodeMCU
analogWrite(pin, dutycycle): Kích hoạt PWM trên pin được chỉ định. Chu kỳ nhiệm vụ trong khoảng từ 0 đến PWMRANGE, tức là 1023 theo mặc định.
analogWrite(pin, 0): Tắt PWM trên pin được chỉ định.
analogWriteRange(new_range): Function này được sử dụng để thay đổi phạm vi PWM (chu kỳ nhiệm vụ).
analogWriteFreq(new_frequency): Tần số PWM là 1kHz theo mặc định. Gọi Function này để thay đổi tần số mặc định với tần số mới. PWM tần số nằm trong khoảng 1 – 1000Khz.
Ví dụ
Viết chương trình Arduino sử dụng chân PWM D6 trên Kit NodeMCU và thay đổi chu kỳ nhiệm vụ của nó bằng biến trở được kết nối với chân ADC. Kết nối Led với chân D6 để thay đổi độ sáng của Led thông qua thay đổi PWM.
Chương trình Arduino cho PWM
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | uint8_t LEDpin = D6; /* By default PWM frequency is 1000Hz and we are using same for this application hence no need to set */ void setup() { Serial.begin(9600); analogWrite(LEDpin, 512); /* set initial 50% duty cycle */ } void loop() { uint16_t dutycycle = analogRead(A0); /* read continuous POT and set PWM duty cycle according */ if(dutycycle > 1023) dutycycle = 1023;/* limit dutycycle to 1023 if POT read cross it */ Serial.print("Duty Cycle: "); Serial.println(dutycycle); analogWrite(LEDpin, dutycycle); delay(100); } |
Download File
Bài viết các bạn có thể tham khảo:
- NodeMCU GPIO ngắt với Arduino IDE
- NodeMCU I2C với Arduino IDE – Giao tiếp Arduino với NodeMCU thông qua I2C
- Đọc DHT11 gửi lên App Blynk thông qua Esp8266 giao tiếp Modbus với Arduino
Nguồn tham khảo: electronicwings.com