ลดราคา!

EDPI03 ชุดเรียนรู้+ชุดทดลอง ตัวควบคุมพีไอดีแกนใบพัด Arduino PID Control Vertical Take-Off PID-V2 (2 ใบพัด)

Original price was: ฿1,490.00.Current price is: ฿990.00.

มีสินค้า

คำอธิบาย

นำเสนอ ชุดเรียนรู้+ชุดทดลอง ชุดเรียนรู้+ชุดทดลอง ตัวควบคุมพีไอดีแกนใบพัด Arduino PID Control Vertical Take-Off PID-V2 (2 ใบพัด)  เรียนรู้หลักการควบคุม PID และการปรับแต่ง ผ่านชุดทดลอง PID motor control  พื้นฐานสู่การควบคุมอัตโนมัติ

ตัวอย่างการใช้ Arduino

  1. การควบคุมแบบ P Control
  2. การควบคุมแบบ PI Control
  3. การควบคุมแบบ PID Control

Download

ในชุดประกอบด้วย

  • 1 เซต x เรียนรู้ชุดทดลอง ตัวควบคุม PID รุ่น 2 ใบพัด
  • *ในชุดไม่รวมบอร์ด  Arduino และ สาย USB

 

 

 

Schematics  PCB

 

คู่มือการทดลองชุดทดลอง PID เวอร์ชั่น2 รุ่น 2 ใบพัด

เพื่อให้แน่ใจว่าถูกต้อง และผลลัพธ์การควบคุมจะเป็นไปตามตัวอย่างที่นำเสนอ โปรดตรวจสอบการต่อสายไฟที่เชื่อมโยงระหว่างบอร์ดทดลองและบอร์ด Arduino ที่นำมาต่อด้วยความรอบคอบ

  1. จ่ายไฟบวก 5 โวลท์เข้าที่พอร์ต USB ของชุดทดลอง PID-V2 สามารถใช้ไฟจาก USB หรือที่ชาร์จโทรศัพท์หรือพาวเวอร์แบงค์ก็ได้
  2. เชื่อมต่อสายสัญญาณเข้ากับบอร์ด Arduino UNO ดังต่อไปนี้
    1. เชื่อมต่อขา ดิจิตอล  9 และ  10 ของ  Arduino UNO กับ IN1+ IN1- ของชุดทดลอง PID V2 เพื่อควบคุมมอเตอร์ตัวที่  1 หรือ ฝั่งซ้ายมือ 
    2. เชื่อมต่อขาดิจิตอล 11 และ 12 ของ  Arduino UNO กับ IN2+ IN2- ของชุดทดลอง PID-V2 เพื่อควบคุมมอเตอร์ตัวที่  2 หรือฝั่งขวามือ
    3. เชื่อมต่อขา analog ของ ตัวต้านทานปรับค่าได้ซึ่งในชุดทดลองเขียนว่า  FB ให้ต่อเข้ากับขา analog 4 (A4)ของ Arduino UNO
    4. เชื่อมต่อขา +Vin ของชุดทดลอง PID V2 เข้ากับ +5V ของ Arduino UNO
    5. เชื่อมต่อขา GND ของชุดทดลอง PID V2 เข้ากับ GND ของ Arduino UNO

มาเริ่มกันด้วยบล็อกไดอะแกรมการควบคุมชุดแกนใบพัดแบบมอเตอร์ 2 ตัวเป็นดังรูปที่ 1

รูปที่ 1 บล็อกไดอะแกรมการควบคุมชุดแกนใบพัด รุ่น 2 มอเตอร์

การทำงานจะเริ่มจาก ค่า setpoint หรือค่าที่เราต้องการ จะถูกกำหนดไว้ในโปรแกรม ในตัวอย่างโค้ดคือบรรทัดที่ 35 ในที่นี้ค่าคือ 500 ซึ่งที่ค่านี้ตัวควบคุม PID จะทำให้แกนใบพัดเคลื่อนที่มาอยู่ในตำแหน่งที่ขนานกับพื้น

 

สัญญาณป้อนกลับของระบบจะได้มาจากตัวต้านทานปรับค่าได้ ซึ่งมีแกนใบพัดติดอยู่ แรงดันเอาต์พุตของตัวต้านทานปรับค่าได้จะอยู่ในช่วง 0 ถึง 5 โวลต์ จากนั้นจะถูกแปลงเป็นสัญญาณดิจิตอลขนาด 10 บิต ด้วยโมดูลแปลงค่าอนาลอกเป็นดิจิตอลภายในตัวไมโครคอนโทรลเลอร์ ที่อยู่บนบอร์ด Arduino สัญญาณดิจิตอลที่แปลงได้นี้จะมีค่า 0 ถึง 1023

ค่า setpoint จะถูกนำมาลบด้วยค่าสัญญาณป้อนกลับ ได้เป็นสัญญาณ Error ก่อนที่จะป้อนเข้าสู่ตัวควบคุม PID เอาต์พุตของ PID จะเป็นสัญญาณ PWM ส่งไปยัง Driver motor เพื่อขับให้มอเตอร์หมุนใบพัดสร้างแรงยก หรือแรงผลักลง ให้แกนใบพัดเข้าสู่ตำแหน่งเป้าหมายที่ต้องการ

การควบคุม PID ในปัจจุบันสามารถทำได้ง่ายขึ้นมาก เพียงแค่การเรียกใช้ไลเบอรี่ที่มีโปรแกรมเมอร์ใจดีสร้างมาให้ใช้ เรามาเรียนรู้การประยุกต์ใช้ ไลเบอรี่ตัวนี้กันสักเล็กน้อย เริ่มจากการใช้งานจำเป็นต้องมีการ เรียกฟังชั่นมาใช้ด้วยวิธีในบรรทัดที่1 คือ คำสั่ง include ตามด้วยชื่อไลเบอรี่ ดังรูปด้านล่าง

 Source Code พร้อมทดลอง

ต่อมาเป็นการประกาศตัวแปรในการควบคุมไอซีขับมอเตอร์ ซึ่งต่อกับขาต่างๆ ดังนี้

การประกาศตัวแปร ที่ใช้ในโปรแกรม

การประกาศตัวแปร พร้อมกับกำหนดค่าที่ต้องการ ในที่นี้คือตัวแปรเกี่ยวกับค่า PID พารามิเตอร์ ที่ประกอบด้วย ค่า Kp Ki และ Kd

 

ส่วนการเปิดใช้งานฟังชั่น PID สร้างฟังชั่นPID ขึ้นมาที่ชื่อ myPID โดยมีการรับสัญญาณป้อนกลับที่ตัวแปรชื่อ Feedback และ สัญญาณเอาต์พุตที่คำนวณเสร็จแล้วจะถูกใส่ไว้ในตัวแปรที่ชื่อ Output และค่าที่ต้องการจะต้องใส่ค่าในตัวแปรชื่อ Setpoint สุดท้ายตามด้วย พารามิเตอร์ Kp Ki และ Kd ตามลำดับ

ในส่วนการ setup  เป็นการกำหนดขาที่ใช้ควบคุมชิปขับมอเตอร์ให้เป็นเอาต์พุต ทำการเซตค่า Setpoint เริ่มต้น เป็น 500

ในส่วนการอ่านค่าสัญญาณอนาลอกที่ขา A4 ค่าที่อ่านได้จะถูกเก็บไว้ในตัวแปรชื่อ Feedback

 

การตั้งค่าการทำงานของโมดูล PID กำหนดโหมดการทำงานเป็น Automatic ถัดมาเป็นการกำหนดค่าเวลาแซมปลิ้ง ในที่นี้กำหนดเป็นทุกๆ 1 msec (ถ้าไม่กำหนดจะมีค่าเริ่มต้นที่ 100 มิลลิเซค)

ในส่วนการกำหนดค่าสูงสุดต่ำสุดของเอาต์พุต ในที่นี้กำหนดให้เป็น +/-255 ที่กำหนดให้มีเครื่องหมายบวกลบเนื่องจากการควบคุมมอเตอร์ในชุดทดลองนี้ต้องมีการหมุนกลับทางด้วย

เราจึงใช้เครื่องหมายเป็นตัวบอกทิศทางว่าจะให้หมุนทวนเข็มหรือหมุนตามเข็ม ส่วนการหมุนช้าหรือหมุนเร็วจะมีค่า 0 ถึง 255 โดย 0 หมายถึงหยุดหมุน และ 255 หมายถึง หมุนเต็มกำลังสูงสุด

 

ในการทำงานปกติ ในฟังชัน loop การควบคุมตำแหน่งของแกนใบพัดจะวนลูปเพื่อทำงานที่เป็นขั้นตอนซ้ำๆ กัน ดังนี้คือ อันดับแรกอ่านค่า Setpoint ต่อมา อ่าน Feedback ที่ขา A4

ต่อมาทำการคำนวณ PID และสุดท้ายส่งค่าเอาต์พุตไปยังไอซีขับมอเตอร์

เงื่อนไข ค่าเอาต์พุตที่ออกจาก PID จะอยู่ในช่วง 1 ถึง 255 (ค่าบวก) จะสั่งให้มอเตอร์ M1 หมุนตามเข็มเกิดแรงกดลง และมอเตอร์ M2 หมุนทวนเข็มเกิดแรงยก

เงื่อนไข ค่าเอาต์พุตจะเป็น 0 คือสั่งให้มอเตอร์หยุดหมุน

เงื่อนไข ค่าเอาต์พุตที่ออกจาก PID จะอยู่ในช่วง -1 ถึง -255 (ค่าลบ) จะสั่งให้มอเตอร์ M2 หมุนตามเข็มเกิดแรงกดลง และมอเตอร์ M1 หมุนทวนเข็มเกิดแรงยก

 

การควบคุมแบบ P control

การควบคุมลักษณะนี้ เราจะกำหนดให้เทอม Ki และ Kd มีค่าเท่ากับ 0 ค่าพารามิเตอร์จะมีเฉพาะค่า Kp อย่างเดียวเท่านั้น

ตัวอย่างการปรับค่าพารามิเตอร์ เป็นดังรูปด้านล่าง เสร็จแล้วอัปโหลดโค้ดไปยังบอร์ด Arduino ดูผลตอบสนอง

รูปที่ 10 ลักษณะสัญญาณป้อนกลับ (เส้นสีแดง) เมื่อควบคุมด้วย P control เพียงอย่างเดียว จะมีปัญหาออฟเซต

รูปที่ 11 หากเพิ่มค่า Kp มากขึ้น เพื่ออยากจะกำจัดออฟเซต ก็จะเกิดการแกว่งกลับไปมาระหว่าง setpoint

อธิบายการทำงานของ P control

การควบคุมแบบ P control เรียกอีกอย่างว่า การควบคุมแบบสัดส่วน กล่าวคือ สัญญาณเอาต์พุตจะมีค่ามากทีสุด เมื่อสัญญาณป้อนกลับ(feed back signal) อยู่ห่างจากค่าที่ต้องการ (setpoint) มากๆ

จากนั้นสัญญาณเอาต์พุตจะค่อยๆ ลดลง จนเข้าใกล้ศูนย์ เมื่อสัญญาณ feed back เข้าใกล้ setpoint แต่ ก็ยังไม่สามารถเข้ายังตำแหน่ง setpoint ได้สักที เนื่องจากสัญญาณเอาต์พุต มีค่าน้อยมาก เข้าใกล้ศูนย์

จึงไม่มีแรงพอที่จะดันให้กลไก(ในกรณีนี้คือแกนใบพัด) เข้าถึงตำแหน่ง setpoint ที่ต้องการได้ ทำได้แค่เข้าใกล้ แต่ยังไม่ใช่ตำแหน่งที่ต้องการจริงๆ เมื่อซูมเข้าไปใกล้ๆ ลักษณะจะเป็นดังรูปที่ 10

จุด A คือการใช้มือผลักแกนใบพัดให้ออกจากตำแหน่งกลาง (ค่าsetpoint = 500 เพราะค่า ADC จะอยู่ในช่วง 0-1023) จะเห็นว่าทันทีที่สัญญาณ feed back (เส้นสีแดง) ออกห่างจากค่า setpoint (เส้นสีน้ำเงิน) ให้สังเกตที่จุด B

สัญญาณเอาต์พุตที่จะไปขับมอเตอร์จะเพิ่มขึ้นทันทีเป็น 100 % (เส้นสีเขียว) (ค่า 100% มีค่าเท่ากับ 255 และ 0% มีค่าเท่ากับ 0 ซึ่งจะส่งไปยังไอซีขับมอเตอร์ )

เมื่อเวลาผ่านไป สังเกตที่จุด C จะเห็นเส้นขนานที่เกิดจากเส้นสีน้ำเงินและเส้นสีแดง เนื่องจากแรงดันเอาต์พุตที่ไปขับมอเตอร์มีค่าน้อยเกินกว่าจะผลักให้แกนใบพัดเข้าสู่ค่า setpoint สังเกตที่จุด D

จะเห็นเส้นสีเขียว ที่ไม่ใช่ศูนย์ คือมีแรงดันจ่ายให้มอเตอร์ มอเตอร์จะหมุนได้เล็กน้อยแต่ไม่แรงพอให้แกนเคลื่อนเข้าสู่ set point สุดท้ายจึงทำให้แกนใบพัดค้างอยู่ที่ตำแหน่งดังกล่าวตลอดไปจนกว่าจะมีแรงภายนอกมากระทำ

หรือ เปลี่ยนแปลงค่า setpoint อีกครั้ง ภาวะที่เกิดช่องว่างระหว่างค่า setpoint และสัญญาณ feed back เรียกว่าการเกิดค่าออฟเซต ซึ่งเป็นพฤติกรรมที่เป็นธรรมชาตติของการควบคุมแบบ P control อยู่แล้ว

แต่ถ้าเราหากต้องการกำจัดออฟเซตที่ว่านี้ ด้วยการใช้วิธีการควบคุมแบบ P control สิ่งที่เราต้องทำก็คือ การเพิ่มค่า Kp ให้มากขึ้นกว่าเดิม ไปเรื่อยๆ จนค่าออฟเซตนี้แคบลงเรื่อยๆ

แต่เมื่อเพิ่มถึงค่าหนึ่ง จะระบบจะไม่ขยับเข้าใกล้ setpoint แล้ว แต่จะเกิดการแกว่งไปมารอบๆ ค่า setpoint แทน เป็นดังรูปที่ 11 ค่าแรงดันที่จ่ายไปยังมอเตอร์มีค่าสูงสุดทันทีทำให้เกิดแรงในทิศทางตรงกันข้าม

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

ทำให้ตัวควบคุม P สั่งให้มอเตอร์หมุนกลับในทิศทางตรงกันข้ามด้วยความแรงสูงสุดอีกครั้ง เป็นแบบนี้เรื่อยไป เป็นผลให้เมื่อสังเกตที่แกนใบพัด จะเห็นว่ามันเคลื่อนที่ขึ้นและลง กลับไปกลับมา

การเคลื่อนที่แบบนี้เป็นสิ่งที่เราไม่ต้องการ วิธีแก้ไขก็คือ ต้องลดค่า Kp จนแกนใบพัดหยุดแกว่งไปมา อย่างไรก็ตามเราก็ยังคือเผชิญกับปัญหาออฟเซตเช่นเดิม

การควบคุมแบบ PI control

เมื่อแก้ปัญหาออฟเซตที่เกิดขึ้นกับ P control เราจึงต้องใช้ การควบคุมแบบอินทิกรัล เพิ่มเข้ามา เป็น PI control จุดประสงค์ก็เพื่อกำจัดค่าออฟเซต ที่เกิดขึ้นเมื่อระบบเข้าสู่ภาวะคงตัว (steady state)

เมื่อเวลาผ่านไปตัวอินทิกรัลจะนำค่า error ที่เกิดมาสะสมจนมากขึ้นเรื่อยๆ และส่งเอาต์พุตไปขับมอเตอร์ให้ค่อยๆ หมุนแรงขึ้น และผลักแกนใบพัดเคลื่อนเข้าสู่ setpoint อย่างนิ่มนวล ดังรูปที่ 12

รูปที่12 กราฟการควบคุมด้วย PI control

อธิบายการทำงานของ PI control

จากรูปที่12 จุด A เราใช้มือไปผลักให้แกนใบพัด(เส้นสีแดง)เคลื่อนจากตำแหน่ง setpoint (เส้นสีน้ำเงิน) ด้วยการควบคุมที่มีเทอม P และเทอม I ร่วมกันทำงาน จะเห็นว่าตำแหน่งของแกนใบพัดเคลื่อนเข้าสู่ setpoint ได้อย่างสมบูรณ์

ที่ตำแหน่ง B จะเห็นว่าระหว่างทางจากจุด A ไปยังจุดB มีการแกว่งขึ้นลงเล็กน้อย และสังเกตที่จุด C จะเห็นว่า เมื่อแม้ว่าจะเข้าสู่ setpoint แล้ว ก็ยังมีเอาต์พุต(เส้นสีเขียว)ส่งออกไปยังไอซีขับมอเตอร์เพื่อรักษาให้แกนอยู่ในตำแหน่ง

การเพิ่มค่า Ki นี้จากประสบการณ์แล้ว จะค่อยๆ เพิ่มและดูผลตอบสนองของระบบ การทำลักษณะนี้เรียกว่าการจูน ด้วยเทคนิคลองผิดลองถูก (Trial and error) จนกว่าจะได้การตอบสนองของระบบที่ผู้ควบคุมพึงพอใจ

ซึ่งตรงจุดนี้จะขึ้นอยู่กับความต้องการของระบบว่า 1.ต้องการเวลาที่เข้าสู่ setpoint มากน้อยเพียง 2.ยอมให้มีโอเวอร์ชู๊ตหรือไม่ 3.ค่าความผิดพลาดยอมรับได้เท่าไร เมื่อระบบเข้าสู่สภาวะคงตัวแล้ว ทั้งหมดนี้จะเป็นตัวตัดสินว่าจะหยุดจูนได้เมื่อใด

การควบคุม PID control

จากการควบคุม PI control ที่ผ่านมาจะเห็นว่า ระหว่างทางตั้งแต่ระบบถูกรบกวนด้วยการใช้มือผลักแกนใบพัดให้เคลื่อนออกจากตำแหน่งที่เป็นอยู่เดิม จะยังมีการแกว่งขึ้นลงรอบเส้น setpoint อยู่

ไปจนถึงกลับมาอยู่ที่ตำแหน่งเดิมนั้น หากความต้องการของระบบ ไม่ยอมให้มีโอเวอร์ชู๊ต เราจำเป็นต้องเพิ่มเทอม D เข้ามา ตัวอย่างผลการทดลองเมื่อเพิ่มเทอม D เข้ามาเป็นดังรูปที่ 13

รูปที่13 ผลตอบสนองการควบคุมแกนใบพัดด้วย PID control

เทอม D ที่เพิ่มเข้านี้ จะทำหน้าที่ต้านทานการเปลี่ยนแปลงแบบฉับพลัน ซึ่ง D ย่อมาจาก Differeial สังเกตที่ตำแหน่ง A คือจุดที่ใช้มือผลักแกนใบพัด หลังจากนั้นตัวควบคุม PID จะควบคุมให้แกนใบพัดค่อยๆ เคลื่อนเข้าสู่ Setpoint ได้ โดยไม่มีโอเวอร์ชู๊ต ที่บริเวณจุด B เมื่อเทียบกับรูปที่12

อย่างไรก็ตาม ผู้ทดลองสามารถเปลี่ยนแปลงค่า Kp, Ki, Kd ได้ตามความเหมาะสม และเรียนรู้พฤติกรรมของระบบควบคุมที่เกิดขึ้น เมื่อค่า PID พารามิเตอร์ ทั้งสามตัวเปลี่ยนแปลงไป และอย่างลืมว่าค่า PID

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

 

 

ARDUINO UNOR3 Compatible DIP CH340+USB Cable

ข้อมูลเพิ่มเติม

น้ำหนัก 500 กรัม
ขนาด 30 × 30 × 30 เซนติเมตร

รีวิว

ยังไม่มีบทวิจารณ์

เฉพาะลูกค้าที่เข้าสู่ระบบ และเคยซื้อสินค้าชิ้นนี้แล้วเท่านั้น ที่เขียนบทวิจารณ์ได้