Pulse Width Modulation (PWM)เป็นเทคนิคที่เปลี่ยนความกว้างของพัลส์ในขณะที่รักษาความถี่คลื่นให้คงที่ เทคนิค PWM ส่วนใหญ่ใช้เพื่อควบคุมความสว่างของ LED ความเร็วของมอเตอร์กระแสตรงการควบคุมเซอร์โวมอเตอร์หรือในกรณีอื่น ๆ ที่ต้องสร้างสัญญาณแอนะล็อกโดยใช้แหล่งสัญญาณดิจิตอล เราได้อธิบายรายละเอียด PWM ในบทความก่อนหน้านี้
ในการกวดวิชานี้เราจะไปพูดคุยเกี่ยวกับPWM (Pulse การปรับความกว้าง) ขาของคณะกรรมการพัฒนา สามารถใช้หมุด GPIO ทั้งหมดของบอร์ดพัฒนา ESP32 (ยกเว้น Power, GND, Tx, Rx และ EN) เพื่อรับสัญญาณ PWM ในฐานะที่เป็นตัวอย่าง ESP32 PWMเราจะสร้างวงจรง่ายๆที่เปลี่ยนแปลงความสว่างของไฟ LED ตามสัญญาณ
ส่วนประกอบที่จำเป็น
- ESP32
- LED
- ตัวต้านทาน 330 Ω
- หม้อ 10k
- เขียงหั่นขนม
การสร้าง PWM
ก่อนที่จะอธิบายการสร้าง PWM บน ESP32 เรามาพูดถึงคำศัพท์บางคำที่เกี่ยวข้องกับ PWM
TON (ตรงเวลา):ระยะเวลาที่สัญญาณสูง
TOFF (Off Time):ระยะเวลาที่สัญญาณต่ำ
ช่วงเวลา:เป็นผลรวมของเวลาตรงและเวลาปิดของสัญญาณ PWM
TotalPeriod = T ON + T ปิด
Duty Cycle:เปอร์เซ็นต์ของเวลาที่สัญญาณสูงในช่วงเวลาของสัญญาณ PWM
Duty Cycle = T ON / T รวม * 100
ตัวอย่างเช่นหากชีพจรที่มีระยะเวลารวม 10 มิลลิวินาทียังคงเปิดอยู่ (สูง) เป็นเวลา 5 มิลลิวินาที จากนั้นรอบการทำงานจะเป็น:
Duty Cycle = 5/10 * 100 = 50% Duty Cycle
วงจรประกอบด้วย LED ตัวเดียวตัวต้านทานและโพเทนชิออมิเตอร์ 10K ขาลบของ LED เชื่อมต่อกับ GND ของ ESP32 ผ่านตัวต้านทาน 330 Ω คุณสามารถใช้ค่าตัวต้านทานใดก็ได้ระหว่าง 230 Ωถึง 500 Ω เชื่อมต่อขาบวก LED เข้ากับ GPIO 16 และขาสัญญาณของ Pot กับขา ADC1 (VP) ของ ESP32
คำอธิบายรหัสสำหรับ ESP32 PWM
รหัสที่สมบูรณ์จะได้รับที่ส่วนท้ายของหน้า
รหัสนี้ไม่ต้องการไลบรารีใด ๆ ดังนั้นเริ่มต้นรหัสของคุณโดยกำหนดพิน LED จะติดอยู่กับ ในกรณีของฉันฉันใช้ GPIO 16 เพื่อเชื่อมต่อ LED
const int ledPin = 16; // 16 สอดคล้องกับ GPIO16
หลังจากนั้นตั้งค่าคุณสมบัติสัญญาณ PWM ในบรรทัดถัดไป ฉันตั้งค่าความถี่ PWM เป็น 9000 และความละเอียดเป็น 10 คุณสามารถเปลี่ยนเพื่อสร้างสัญญาณ PWM ที่แตกต่างกันได้ บอร์ด ESP32 รองรับความละเอียด PWM ตั้งแต่ 1 บิตถึง 16 บิต คุณต้องเลือกช่องสัญญาณ PWM ด้วย ESP32 มีช่องสัญญาณ PWM ทั้งหมด 16 (0 ถึง 15)
const int freq = 9000; const int ledChannel = 0; ความละเอียด const int = 10;
ตอนนี้ภายใน ติดตั้งเป็นโมฆะ () ฟังก์ชั่นกำหนดค่า LED PWM ที่มีคุณสมบัติที่คุณตั้งไว้ก่อนหน้านี้โดยใช้ ledcSetup () ฟังก์ชั่น ในบรรทัดถัดไปกำหนดพิน GPIO ที่เชื่อมต่อ LED ledcAttachPin () ฟังก์ชั่นที่ใช้ในการกำหนดขา GPIO และช่องทางที่มีการสร้างสัญญาณ ในกรณีของฉันฉันใช้ ledPin ที่เป็น GPIO 16 และ ledChannel ที่ตรงกับช่อง 0
การตั้งค่าเป็นโมฆะ () {Serial.begin (9600); ledcSetup (ledChannel ความถี่ความละเอียด); ledcAttachPin (ledPin, ledChannel); }
ใน วงโมฆะ อ่านพินอะนาล็อกที่หม้อมีการเชื่อมต่อและเก็บอ่านในตัวแปรที่เรียกว่า'dutyCycle' ความสว่างของ LED จะเพิ่มขึ้นหรือลดลงตามการหมุนของโพเทนชิออมิเตอร์ ledcWrite () จะคล้ายกับ analogWrite ()
โมฆะ loop () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); ล่าช้า (15); }
การทดสอบสัญญาณ ESP32 PWM
ในการทดสอบสัญญาณ ESP32 PWM ให้เชื่อมต่อ LED และโพเทนชิออมิเตอร์ตามแผนภาพวงจรและอัปโหลดรหัสไปยัง ESP32 ของคุณ ตรวจสอบให้แน่ใจว่าคุณได้เลือกบอร์ดและพอร์ต COM ที่ถูกต้องแล้ว ตอนนี้หมุนโพเทนชิออมิเตอร์เพื่อเพิ่มหรือลดความสว่างของ LED
การทำงานที่สมบูรณ์จะแสดงในวิดีโอด้านล่าง ตรวจสอบโครงการที่ใช้ ESP32 อื่น ๆ ตามลิงค์