ควบคุมความเร็วพัดลม DC ด้วย PWM บน ESP32 (LEDC เวอร์ชันใหม่ ledcAttach())
อยากปรับ “แรงลม” ได้ตามใจ? ใช้ ESP32 ยิงสัญญาณ PWM เข้าขา ENA ของไดรเวอร์มอเตอร์ แล้วหมุนพัดลมเบา–แรงได้แบบเนียน ๆ เหมาะกับมือใหม่มาก บทความนี้ใช้ LEDC API แบบใหม่ เพื่อเขียนโค้ดสั้นและอ่านง่าย
อุปกรณ์ที่ใช้ (ตามภาพ)
- ESP32 Dev Module
- ไดรเวอร์ L298N (ใช้คุมพัดลม/มอเตอร์ DC 12V)
- พัดลม/มอเตอร์ DC 12V (2 สาย)
- แหล่งจ่าย 12VDC สำหรับ L298N
- สายจัมเปอร์ + ไขควงเล็ก
หมายเหตุ: ถ้ามีพัดลม 2 สายธรรมดา ใช้ L298N ได้เลย (สะดวกสำหรับทดลอง) แต่ถ้าจะทำงานจริงระยะยาว แนะนำ MOSFET แบบ N‑channel + ไดโอดกันไฟย้อน จะร้อนน้อยกว่าครับ

ผังการต่ออย่างย่อ
12V+ / GND → เข้าขั้ว +12V / GND บน L298N
พัดลม 2 สาย → ต่อที่ OUT1 / OUT2 (ให้หมุนทิศเดียวก็พอ)
ESP32 GND → GND ของ L298N (กราวด์ร่วมกัน)
ESP32 GPIO (PWM) → ENA ของ L298N (รับ PWM)
ESP32 ขดควบคุมทิศทาง → IN1 = HIGH, IN2 = LOW (ให้หมุนทิศเดียวคงที่)
ตัวอย่างกำหนดพิน:
ENA ← GPIO 21
IN1 ← GPIO 18
IN2 ← GPIO 19
ศึกษาแผนผังขา ESP32 Pinout Devkit V1 เพื่อเลือกใช้งาน GPIO ได้อย่างถูกต้อง
เลือกค่า PWM ให้เนียนหู
- ความถี่ (freq): 20–25 kHz ขึ้นไป → พ้นย่านหูคน (~20 kHz) ไม่หงุงหงิง
- ความละเอียด (res): 8 บิตก็พอ (0–255) / ถ้าต้องละเอียดขึ้นใช้ 10 บิต (0–1023)
โค้ดตัวอย่าง (Arduino IDE, LEDC API แบบใหม่)
กรุณา เข้าสู่ระบบ เพื่อดาวน์โหลด
อยากเริ่มใช้งาน Arduino ไม่ยากอย่างที่คิด ลองดูวิธีดาวน์โหลดและติดตั้ง Arduino IDE ใน Arduino IDE Download & Install
ทำไมใช้ ledcAttach() ดี?
- โค้ดสั้นกว่าเดิม (ไม่ต้อง ledcSetup() + ledcAttachPin() แยกบรรทัด)
- ระบบจัดสรร channel ให้เอง ลดโอกาสชนกันเวลามีหลาย PWM
อธิบายโค้ด
pwmCh = ledcAttach(PIN_ENA, PWM_FREQ, PWM_BITS);
แนบ PWM เข้าขา ENA แล้วได้ “channel” กลับมาใช้กับ ledcWrite()
ledcWrite(pwmCh, duty);
กำหนด duty cycle (0–255 เมื่อ 8 บิต) ยิ่งมาก → ยิ่งแรง
ตั้ง IN1=HIGH, IN2=LOW เพื่อให้ L298N ป้อนไฟทิศเดียว (เหมาะกับพัดลม 2 สาย)
ทดสอบ & ปรับแต่ง
- ถ้าพัดลม “สะดุด” ช่วงค่า duty ต่ำ ๆ ให้ลองเริ่มที่ ~40–60 ก่อน
- ถ้ายังได้ยินเสียงหวีด → เพิ่ม PWM_FREQ เป็น 30–40 kHz (แต่อย่าลืมว่า ความถี่สูงมากอาจทำให้ช่วงปรับละเอียดลดลง)
- วัดอุณหภูมิฮีตซิงก์ L298N ถ้าร้อนมาก → ใช้พัดลมเล็กช่วยเป่า หรือพิจารณาเปลี่ยนเป็น MOSFET
ความปลอดภัยที่ต้องจำ
- กราวด์ร่วม ระหว่าง ESP32 กับ L298N สำคัญมาก
- ใส่ ฟิวส์/เบรกเกอร์ DC กับสาย 12V ถ้าเป็นงานใช้งานจริง
- เก็บสายให้แน่น ใช้หางปลา/สกรูให้แนบแน่น ลดประกายไฟ
FAQ (มือใหม่ถามบ่อย)
ใช้พัดลม 5V ได้ไหม?
ได้ แต่ L298N ต้องรับแรงดันนั้น และแหล่งจ่ายต้องตรงกับพัดลม
ทำไมพัดลมไม่หมุนที่ duty ต่ำ ๆ ?
แรงดันเฉลี่ยยังไม่พอ ให้ตั้งค่าเริ่มที่ ~25–30% ก่อนแล้วค่อยไล่
ตั้งความถี่เท่าไหร่ดี?
20–30 kHz กำลังสวย เงียบหูและลื่น
ใช้ analogWrite() ได้ไหม?
บน ESP32 แนะนำ LEDC (เช่น ledcAttach, ledcWrite) เสถียรกว่า
L298N ร้อนมาก ปกติไหม?
ปกติสำหรับไอซี H‑bridge รุ่นนี้ ถ้าใช้งานจริงนาน ๆ เปลี่ยนเป็น MOSFET จะเย็นและประหยัดกว่า
ต้องต่อไดโอดกันไฟย้อนเพิ่มไหม?
L298N มีภายในแล้ว แต่ถ้าใช้ MOSFET ต้องใส่ flyback diode เอง
พัดลม 3/4 สาย (มีสัญญาณ tach/PWM) ใช้ยังไง?
บทความนี้เน้น 2 สาย ถ้า 4 สาย ควรใช้สัญญาณ PWM ตามสเปกของพัดลม (ระดับ 5V, 25 kHz, open‑collector)
กินไฟจาก ESP32 ได้เลยไหม?
ห้าม! พัดลมต้องใช้ไฟเลี้ยงแยก (เช่น 12V) แล้ว GND ร่วม
จะคุมผ่านอินเทอร์เฟซเว็บ/มือถือได้ยังไง?
ต่อยอดด้วย ESPAsyncWebServer หรือแอป PoPo แล้วส่งค่าดิวตี้มาที่ ESP32 อยากควบคุม pwm ผ่านเว็บแนพนำอ่านบทความ — ESP32 Web Server ควบคุมความสว่างหลอดLED (PWM)
ถ้าจะกลับทิศหมุนทำยังไง?
สลับ IN1/IN2 (HIGH/LOW ↔ LOW/HIGH) แต่ พัดลมใบพัดส่วนใหญ่ไม่ออกแบบให้กลับทิศ ควรใช้ทิศเดียว






