- สัญญาณ PWM คืออะไร?
- วิธีการแปลงสัญญาณ PWM เป็นแรงดันอนาล็อก
- แผนภูมิวงจรรวม:
- การเขียนโปรแกรม MSP สำหรับสัญญาณ PWM:
- การควบคุมความสว่างของ LED ด้วย PWM:
บทช่วยสอนนี้เป็นส่วนหนึ่งของชุดการสอน MSP430G2 LaunchPadซึ่งเรากำลังเรียนรู้การใช้MSP430G2 LaunchPadจาก Texas Instruments จนถึงขณะนี้เราได้เรียนรู้พื้นฐานของคณะกรรมการและได้ครอบคลุมวิธีการอ่านแรงดันไฟฟ้าแบบอะนาล็อก, จอแอลซีดีที่มีอินเตอร์เฟซ MSP430G2 ฯลฯ ตอนนี้เราจะดำเนินการตามขั้นตอนต่อไปของการเรียนรู้เกี่ยวกับPWM ใน MSP430G2 เราจะทำได้โดยการควบคุมความสว่างของไฟ LED โดยมิเตอร์ที่แตกต่างกัน ดังนั้นโพเทนชิออมิเตอร์จะถูกต่อเข้ากับพินอะนาล็อกของ MSP430 เพื่ออ่านแรงดันไฟฟ้าแบบอะนาล็อกดังนั้นจึงขอแนะนำให้อ่านบทแนะนำ ADC ก่อนดำเนินการต่อ
สัญญาณ PWM คืออะไร?
Pulse Width Modulation (PWM) เป็นสัญญาณดิจิทัลที่นิยมใช้ในวงจรควบคุม สัญญาณนี้ตั้งไว้สูง (3.3v) และต่ำ (0v) ในเวลาและความเร็วที่กำหนดไว้ล่วงหน้า เวลาที่สัญญาณอยู่สูงเรียกว่า "ตรงเวลา" และเวลาที่สัญญาณอยู่ต่ำเรียกว่า "เวลาปิด" มีพารามิเตอร์สำคัญสองประการสำหรับ PWM ดังที่กล่าวไว้ด้านล่าง:
รอบการทำงานของ PWM:
เปอร์เซ็นต์ของเวลาที่สัญญาณ PWM ยังคงสูง (ตรงเวลา) เรียกว่าเป็นรอบการทำงาน หากสัญญาณเปิดอยู่เสมอสัญญาณจะอยู่ในรอบการทำงาน 100% และหากปิดอยู่เสมอจะเป็นรอบการทำงาน 0%
Duty Cycle = เปิดเวลา / (เปิดเวลา + ปิดเวลา)
ความถี่ของ PWM:
ความถี่ของสัญญาณ PWM จะกำหนดความเร็วของ PWM ในช่วงเวลาหนึ่ง หนึ่งช่วงเวลาเสร็จสมบูรณ์เปิดและปิดของสัญญาณ PWM ดังแสดงในรูปด้านบน ในบทช่วยสอนของเราความถี่คือ 500Hz เนื่องจากเป็นค่าเริ่มต้นที่กำหนดโดย Energia IDE
มีแอปพลิเคชั่นสำหรับสัญญาณ PWM แบบเรียลไทม์มากมาย แต่เพื่อให้คุณทราบว่าสัญญาณ PWM สามารถใช้เพื่อควบคุมเซอร์โวมอเตอร์และยังสามารถแปลงเป็นแรงดันอนาล็อกซึ่งสามารถควบคุมความสว่างของความสว่างของ LED ได้ มาเรียนรู้วิธีการที่ทำได้
ตัวอย่าง PWM บางส่วนกับไมโครคอนโทรลเลอร์อื่น ๆ มีดังนี้
- การสร้าง PWM โดยใช้ไมโครคอนโทรลเลอร์ PIC พร้อม MPLAB และ XC8
- การควบคุมเซอร์โวมอเตอร์ด้วย Raspberry Pi
- Arduino LED Dimmer โดยใช้ PWM
ตรวจสอบโครงการที่เกี่ยวข้องกับ PWM ทั้งหมดที่นี่
วิธีการแปลงสัญญาณ PWM เป็นแรงดันอนาล็อก
ในการส่งสัญญาณ PWM ไปยังแรงดันอนาล็อกเราสามารถใช้วงจรที่เรียกว่าตัวกรอง RC นี่เป็นวงจรที่เรียบง่ายและใช้กันมากที่สุดเพื่อจุดประสงค์นี้ วงจรมีเพียงตัวต้านทานและตัวเก็บประจุในอนุกรมดังแสดงในวงจรด้านล่าง
ดังนั้นสิ่งที่เกิดขึ้นโดยทั่วไปที่นี่คือเมื่อเมื่อสัญญาณ PWM สูงตัวเก็บประจุจะชาร์จขึ้นแม้ว่าตัวต้านทานและเมื่อสัญญาณ PWM ต่ำตัวเก็บประจุจะปล่อยประจุผ่านประจุที่เก็บไว้ ด้วยวิธีนี้เราจะมีแรงดันไฟฟ้าคงที่ที่เอาต์พุตซึ่งจะเป็นสัดส่วนกับรอบการทำงานของ PWM
ในกราฟที่แสดงข้างต้นสีเหลืองสีหนึ่งเป็นสัญญาณ PWM และสีหนึ่งสีฟ้าเป็นแรงดันไฟฟ้าแบบอะนาล็อกเอาท์พุท อย่างที่คุณเห็นคลื่นเอาท์พุตจะไม่ใช่คลื่น DC บริสุทธิ์ แต่ควรใช้งานได้ดีกับแอปพลิเคชันของเรา หากคุณต้องการคลื่น DC บริสุทธิ์สำหรับการใช้งานประเภทอื่นคุณควรออกแบบวงจรสวิตชิ่ง
แผนภูมิวงจรรวม:
แผนภาพวงจรค่อนข้างเรียบง่าย มันมีเพียงโพเทนชิออมิเตอร์และตัวต้านทานและตัวเก็บประจุเพื่อสร้างวงจร RC และตัว Led เอง โพเทนชิออมิเตอร์ใช้เพื่อให้แรงดันไฟฟ้าแบบอะนาล็อกซึ่งขึ้นอยู่กับวงจรหน้าที่สัญญาณ PWM เอาต์พุตของหม้อเชื่อมต่อกับPin P1.0 ซึ่งสามารถอ่านแรงดันไฟฟ้าแบบอะนาล็อกได้ จากนั้นเราต้องผลิตสัญญาณ PWM ซึ่งสามารถทำได้โดยใช้พิน P1.2 จากนั้นสัญญาณ PWM นี้จะถูกส่งไปยังวงจรกรอง RC เพื่อแปลงสัญญาณ PWM เป็นแรงดันอนาล็อกซึ่งจะถูกกำหนดให้กับ LED
เป็นสิ่งสำคัญมากที่ต้องเข้าใจว่าไม่ใช่ทุกพินบนบอร์ด MSP ที่สามารถอ่านแรงดันไฟฟ้าแบบอะนาล็อกหรือสามารถสร้างพิน PWM ได้ หมุดเฉพาะที่สามารถทำงานเฉพาะได้ดังแสดงในรูปด้านล่าง ใช้สิ่งนี้เป็นแนวทางในการเลือกพินสำหรับการเขียนโปรแกรมเสมอ
ประกอบวงจรทั้งหมดตามที่แสดงด้านบนคุณสามารถใช้เขียงหั่นขนมและสายจัมเปอร์ไม่กี่เส้นและทำการเชื่อมต่อได้อย่างง่ายดาย เมื่อเชื่อมต่อเสร็จแล้วบอร์ดของฉันจะมีลักษณะดังที่แสดงด้านล่าง
การเขียนโปรแกรม MSP สำหรับสัญญาณ PWM:
เมื่อฮาร์ดแวร์พร้อมแล้วเราสามารถเริ่มต้นด้วยการเขียนโปรแกรมของเรา สิ่งแรกในโปรแกรมคือการประกาศพินที่เราจะใช้ ที่นี่เราจะใช้พินหมายเลข 4 (P1.2) เป็นพินเอาต์พุตของเราเนื่องจากมีความสามารถในการสร้าง PWM ดังนั้นเราจึงสร้างตัวแปรและกำหนดชื่อพินเพื่อให้อ้างอิงได้ง่ายในภายหลังในโปรแกรม โปรแกรมที่สมบูรณ์จะได้รับในตอนท้าย
int PWMpin = 4; // เราใช้พินที่ 4 บนโมดูล MSP เป็นพิน PWM
ต่อไปเรามาเข้าสู่ การตั้งค่า ฟังก์ชั่นสิ่งที่ถูกเขียนรหัสที่นี่จะถูกดำเนินการเพียงครั้งเดียวที่นี่เราประกาศว่าเราจะใช้ 4 THขาเป็นขาเอาท์พุทตั้งแต่ PWM เป็นฟังก์ชั่นการส่งออก โปรดทราบว่าเราได้ใช้ตัวแปร PWMpin ที่นี่แทนตัวเลข 4 เพื่อให้โค้ดดูมีความหมายมากขึ้น
การตั้งค่าเป็นโมฆะ () { pinMode (PWMpin, OUTPUT); // PEMpin ถูกตั้งค่าเป็นOutptut }
ในที่สุดเราได้รับใน วง ฟังก์ชั่นสิ่งที่เราเขียนที่นี่จะถูกดำเนินการครั้งแล้วครั้งเล่า ในโปรแกรมนี้เราต้องอ่านแรงดันอนาล็อกและสร้างสัญญาณ PWMตามนั้นและสิ่งนี้จะต้องเกิดขึ้นซ้ำแล้วซ้ำเล่า ก่อนอื่นเรามาเริ่มต้นด้วยการอ่านแรงดันอนาล็อกจากขา A0 เนื่องจากเราได้เชื่อมต่อกับโพเทนชิออมิเตอร์
ที่นี่เรากำลังอ่านค่าโดยใช้ ฟังก์ชัน AanalogRead ฟังก์ชันนี้จะส่งคืนค่าจาก 0-1024 ตามค่าของแรงดันไฟฟ้าที่ใช้กับพิน จากนั้นเราจะเก็บค่านี้ไว้ในตัวแปรที่เรียกว่า "val" ดังที่แสดงด้านล่าง
int val = analogRead (A0); // อ่านค่า ADC จากพิน A0
เราต้องแปลงค่า 0 ถึง 1024 จาก ADC เป็นค่า 0 ถึง 255เพื่อมอบให้กับฟังก์ชัน PWM ทำไมเราควรแปลงสิ่งนี้? ฉันจะบอกในไม่ช้า แต่ตอนนี้จำไว้ว่าเราต้องแปลง ในการแปลงค่าชุดหนึ่งเป็นชุดค่าอื่น Energia มีฟังก์ชัน แผนที่ คล้ายกับ Arduino ดังนั้นเราจึงแปลงค่าของ 0-1204 เพื่อ 0-255 และบันทึกกลับในตัวแปร“Val ที่”
Val = แผนที่ (Val , 0, 1023, 0, 255); // ADC จะให้ค่า 0-1023 แปลงเป็น 0-255
ตอนนี้เรามีค่าตัวแปร 0-255 ตามตำแหน่งของโพเทนชิออมิเตอร์ สิ่งที่เราต้องทำคือใช้ค่านี้บนพิน PWMซึ่งสามารถทำได้โดยใช้บรรทัดต่อไปนี้
analogWrite (PWMpin, Val); // เขียนค่านั้นลงในพิน PWM
ขอกลับไปที่คำถามว่าทำไม 0-255 ถูกเขียนไปยังขาแบบ ค่านี้ 0-255 กำหนดรอบการทำงานของสัญญาณ PWM ตัวอย่างเช่นถ้าค่าของสัญญาณเป็น 0 หมายความว่ารอบการทำงานคือ 0% สำหรับ 127 คือ 50% และสำหรับ 255 เท่ากับ 100% เช่นเดียวกับที่แสดงและอธิบายไว้ที่ด้านบนของบทความนี้
การควบคุมความสว่างของ LED ด้วย PWM:
เมื่อคุณเข้าใจฮาร์ดแวร์และโค้ดแล้วก็ถึงเวลาสนุกกับการทำงานของวงจร อัปโหลดรหัสไปยังบอร์ด MSP430G2 แล้วหมุนปุ่มโพเทนชิออมิเตอร์ เมื่อคุณหมุนปุ่มแรงดันไฟฟ้าที่ขา 2 จะแตกต่างกันไปซึ่งไมโครคอนโทรลเลอร์จะอ่านได้และตามแรงดันไฟฟ้าสัญญาณ PWM จะถูกสร้างขึ้นที่ขา 4 ยิ่งแรงดันไฟฟ้ามากขึ้นเท่าใดก็จะเป็นรอบการทำงานและในทางกลับกัน
จากนั้นสัญญาณ PWM นี้จะถูกแปลงเป็นแรงดันไฟฟ้าอนาล็อกเพื่อให้ LED เรืองแสงความสว่างของไฟ LED เป็นสัดส่วนโดยตรงกับรอบหน้าที่สัญญาณนอกเหนือจาก LED บนเขียงหั่นขนมแล้วคุณยังสามารถสังเกตเห็น LED smd (สีแดง) ที่มีความสว่างแตกต่างกันไปคล้ายกับไฟ LED นี่คือ LED เชื่อมต่อกับพินเดียวกัน แต่ไม่มีเครือข่าย RC ดังนั้นจึงกะพริบเร็วมาก คุณสามารถเขย่ากระดานในห้องมืดเพื่อตรวจสอบลักษณะการกะพริบของกระดาน คุณสามารถดูการทำงานที่สมบูรณ์ได้ในวิดีโอด้านล่าง
นั่นคือทั้งหมดสำหรับคนตอนนี้เราได้เรียนรู้วิธีใช้สัญญาณ PWM บนบอร์ด MSP430G2แล้วในบทช่วยสอนครั้งต่อไปเราจะเรียนรู้ว่าการควบคุมเซอร์โวมอเตอร์โดยใช้สัญญาณ PWM เดียวกันนั้นง่ายเพียงใด หากคุณมีข้อสงสัยให้โพสต์ไว้ในส่วนความคิดเห็นด้านล่างหรือในฟอรัมเพื่อขอความช่วยเหลือด้านเทคนิค