05 กรกฎาคม 2559

อาร์ดุยโน : PWM

บทความก่อนๆ ครูได้แนะนำการใช้งานพื้นฐานของ "อาร์ดุยโน" กันพอสมควรแล้ว เรียกได้ว่า พอจะไปประยุกต์ในงานต่างๆ กันได้บ้างแล้ว ยิ่งถ้ามีพื้นฐานอิเล็กทรอนิกส์แล้วด้วย ครูเชื่อว่าจะมองภาพออก เวลาจะประยุกต์ไปใช้งาน แต่สำหรับคนที่มีพื้นฐานอิเล็กทรอนิกส์แบบงูๆ ปลาๆ หรือไม่มีเลย ก็ค่อยๆ ติดตามครูไปก็แล้วกัน ในบทความของครู ครูจะเน้นพื้นฐานเป็นหลัก ไม่เน้นโปรเจ็กต์ใหญ่ๆ กระนั้นก็ตามถ้ามีโปรเจกต์อะไรมาทดลองทำ ครูจะซอยเป็นเนื้อหาย่อยๆ เพื่อให้มือใหม่สามารถติดตามและทดลองได้

ในตอนนี้ ครูจะแนะนำการส่งข้อมูลออกอีกแบบหนึ่ง จากเดิมที่เคยแนะนำเรื่องการส่งข้อมูลออกจากอาร์ดุยโนแบบดิจิทัลแล้ว คราวนี้จะพาทดลองส่งข้อมูลออกแบบแอนะล็อก หรือที่เรียกว่า PWM (Pulse Width Modulation)

พัลส์ (Pulse) กับความกว้างของพัลส์

มาเริ่มที่คำแรกก่อนเลย คำว่า พัลส์ ก็คือ สัญญาณไฟฟ้าที่มีลักษณะเป็นลูกคลื่น หรือมีสัญญาณไฟฟ้าเป็นลูกๆ โดยความหมายแล้วก็คล้ายๆ กับสัญญาณดิจิทัล ก็คือเคยพูดถึงมาแล้วนั่นเอง (คลิก ถ้าต้องการทบทวน)


แต่ละแท่งที่เราเห็นในรูปก็คือ สัญญาณพัลส์นั่นเอง แกนตั้งเป็นแกนของโวลท์เตจ (แต่ออกจะอุดมคติไปนิด เพราะในทางปฏิบัติจริงๆ พัลส์จะไม่เป็นแท่งตั้งฉากเป๊ะแบบนี้)  จะเห็นว่าพัลส์บางลูกก็อ้วน บางลูกก็ผอม นี่ก็ขึ้นอยู่กับแหล่งกำเนิดพัลส์ ซึ่งเราสามารถควบคุมมันได้



การกำเนิดสัญญาณพัลส์จะมีความถี่เป็นค่าที่ระบุชัดเจนว่ามีความถี่เท่าใด อย่างเช่นในอาร์ดุยโนเนี่ย ความถี่ที่ใช้ในการสร้างพัลส์คือ 490 Hz (โดยประมาณ) โดยใช้โวลท์เตจที่ระดับสูงสุดเป็น 5 โวลท์ (หรือ 3.3 โวลท์ในบางรุ่น) เพราะฉะนั้นพัลส์ 1 ลูก แต่ละแท่งของมันจะสูง 5 โวลท์ ต่ำสุดก็คือ 0 โวลท์ เนื่องจากถูกกำหนดให้ผลิตพัลส์ที่ความถี่ \(f\) =490 Hz  มันจึงมีคาบเวลา \(T\) =  \(\frac{1}{490}\) วินาทีหรือประมาณ 2 มิลลิวินาที  ดังนั้นความกว้างของพัลส์โดยปกติก็คือ  \(\frac{T}{2} = \frac{1}{980} \) วินาที หรือประมาณ 1 มิลลิวินาที

Duty Cycle หรือดิวตี้ไซเคิ้ล

มีบางคนแปลคำคำนี้ว่า "วัฏจักรหน้าที่" แต่ครูขอใช้ทับศัพท์ดีกว่า นะ

ด้วยเหตุที่พัลส์เป็นสัญญาณเป็นแท่งสูงๆ ต่ำๆ เรียงต่อกัน ดังนั้นกำลังที่จ่ายให้กับโหลดก็เลยไม่ต่อเนื่องตามไปด้วย เวลาที่พัลส์มาเต็มแท่งมันก็จ่ายกำลังได้เต็มที่แต่เวลาแท่งสัญญาณนี้มันมีค่าต่ำลงกำลังก็หดหายไปด้วย เวลาเราจะคิดกำลังจากสัญญาณนี้ในช่วงระยะเวลาหนึ่งจึงต้องหาค่าเฉลี่ยมาจากทั้งสองกรณี(แท่งสูงและแท่งต่ำ) ด้วยเหตุนี้จึงมีการกำหนดคำคำหนึ่งขึ้นมา เพื่อแสดงถึงความสัมพันธ์ระหว่างความกว้างของแท่งสัญญาณที่มีค่าโวลท์เตจสูงสุดคาบเวลา เรียกมันว่า  ดิวตี้ไซเคิ้ล นั่นเอง เราสามารถเขียนเป็นความสัมพันธ์ในรูปของตัวแปรคณิตศาสตร์ได้ดังนี้

\(D = \frac{PW}{T}*100 \%\)

หรือ \(D = PW*f*100 \%\)

D ก็คือ ดิวตี้ไซเคิ้ล นิยมบอกกันในรูปของเปอร์เซ็นต์ PW ก็คือความกว้างของพัลส์(ในรูปของเวลา) T ก็คือคาบเวลา \( f \) ก็คือ ความถี่

ค่าดิวตี้ไซเคิ้ลสามารถคำนวณกลับไปเป็นกำลังเฉลี่ยได้ โดยใช้ความสัมพันธ์ต่อไปนี้

\(P_{average} =P_{peak}*D \)
 

ไดอะแกรมแสดงค่าดิวตี้ไซเคิ้ลค่าต่างๆ



analogWrite(pin_number, value)

ทีนี้ก็มาถึงการสั่งอาร์ดุยโนให้ส่งค่า PWM ออกไปภายนอก ซึ่งตัวอย่างที่ครูจะนำมาทดลองให้ดูก็จะทำง่ายๆ โดยการใช้ LED เหมือนเดิมนะแหละครับ ซึ่งผลของการทำงานก็คือ ถ้าสั่งให้ค่าดิวตี้ไซเคิ้ลมีค่าน้อยๆ LED ก็จะสว่างน้อย ถ้าสั่งให้ดิวตี้ไซเคิ้ลมีค่ามากๆ LED ก็จะสว่างมากขึ้น ลองมาดูลักษณะของคำสั่งกันก่อนนะครับ

คำสั่งที่ใช้ก็คือ analogWrite(pin_number,value)
pin_number ก็คือ ขาที่เราจะส่งพัลส์ที่กำหนดค่าดิวตี้ไซเคิ้ลออกไป ซึ่งขาที่สามารถส่งค่าที่แบบนี้ออกไปได้ก็คือ 3,5,6,9,10,11
value ก็คือ ค่าดิวตี้ไซเคิ้ลแต่แทนที่จะเป็น 1 ถึง 100 ในอาร์ดุยโนเราจะกำหนดค่านี้จาก 1-256

ทดลอง

 ต่ออุปกรณ์ดังภาพ


ในที่นี้ครูใช้ขา 11 ส่งออกพัลส์ไปยัง LED โดยควบคุมจากสัญญาณแอนะล็อกซึ่งใช้ตัวต้านทานปรับค่าได้ ต่อเข้าที่ขา A5

สเก็ตช์


ตัวแปรที่ใช้ในที่นี้มี 3 ตัวแปร คือ

  •  ledPin คือขาที่จะต่อเข้ากับ LED (ในที่นี้่คือ 11)
  • inputPin คือขาที่จะรับสัญญาณแอนะล็อกเข้าทางอินพุท ในที่นี้คือ A5
  • inputValue คือตัวแปรที่ใช้รับค่าแอนะล็อกเข้ามา ซึ่งจะมีค่าระหว่าง 0-1023

จากโปรแกรมตัวแปร inputValue จะรับค่า 0-1023 จากฟังก์ชั่น analogRead() แต่เวลาที่จะนำไปใช้ในฟังก์ชั่น analogWrite() จะใช้เกิน 256 ไม่ได้ เราจึงต้องหารค่า inputValue ด้วย 4 ก่อน

เมื่อเราบิดโวลุ่มมาซีกหนึ่งจะสังเกตเห็นการเปลี่ยนแปลงของหลอด LED โดยมันจะมืดลงด้านหนึ่ง และเมื่อบิดมาอีกด้านหนึ่งความสว่างของ LED ก็จะสว่างขึ้นจนสว่างมากที่สุด

และนี่คือการใช้อาร์ดุยโนส่งค่าพัลส์มาสั่งงานแบบแอนะล็อก ลองคิดกันดูนะครับว่าเราจะไปประยุกต์เข้ากับโปรเจ็กต์ของเรายังไง

ขอบคุณที่ติดตาม แล้วพบกันใหม่นะครับ