Basics PID Control Constant Current Based on Arduino UNO

ทดลองอีกหนึ่งโครงงานกับการควบคุมกระแสให้คงที่ ด้วยการใช้บอร์ด Arduino UNO โดยใช้โปรแกรมควบคุมแบบ PID Control และใช้สัญญาณ PWM ในการปรับค่ากระแสที่ต้องการควบคุมให้คงที่ และรับสัญญาณป้อนกลับ (Feedback signal) อะนาลอกเข้าที่ขา A0 เพื่ออ่านค่าที่เกิดขึ้นในการทำงาน (Process Value : PV) และเปรียบเทียบกับค่าที่กำหนดการทำงานของระบบ (Set Point : SP) ซึ่งจะได้เป็นค่าความผิดพลาด (Error) ให้โปรแกรมสามารถปรับค่าชดเชย (Compensation) ที่เหมาะสมได้อย่างถูกต้อง

จากในรูปที่ 1 มัลติมิเตอร์จะวัดค่าแรงดันของแหล่งจ่ายไฟเลี้ยง (Power supply) ที่ใช้ในการทดสอบเท่ากับ 6.58V ซึ่งจะจ่ายให้กับวงจรในโครงงาน (รูปวงจรของโครงงานจะแสดงตามรูปข้างล่างสุดของโครงงานนี้)

รูปที่ 2 เป็นการวัดค่ากระแสที่เกิดขึ้น ซึ่งในที่นี้เราจะกำหนดกระแสที่ต้องการควบคุมไว้ที่ (Set point) 0.5A และผลที่ได้จากแหล่งจ่ายไฟที่ค่าแรงดัน 6.58V มีค่าเท่ากับ 0.49A

ในรูปที่ 3 ออสซิลโลสโคปจะแสดงลักษณะของสัญญาณพัลซ์วิดมอดูเลตชั่นที่เกิด จากการปรับค่าที่เหมาะสมที่สุด (ให้ค่า Process Value ใกล้เคียงหรือเท่ากับ Set Point) เพื่อให้รักษาปริมาณกระแสที่ต้องการเท่ากับ 0.5A ซึ่งจะสังเกตเห็นว่ามีค่า Ton ค่อนข้างกว้างเกือบ 100%

รูปถัดมาที่ 4 จะเป็นการทดลองเพิ่มค่าแรงดันของแหล่งจ่ายไฟเลี้ยงเป็น 10V และทดลองการทำงานของวงจร ทั้งนี้เพื่อสังเกตการตอบสนองของระบบเมื่อแรงดันอินพุตไม่คงที่

รูปที่ 5 แสดงค่ากระแสที่วัดได้เมื่อที่แรงดันอินพุตเพิ่มขึ้นที่ 10V จะมีค่าเท่ากับ 0.52A ซึ่งผลที่ได้มีค่าสูงกว่าค่าที่เราต้อง (Setpoint) เล็กน้อยประมาณ 0.02A ถือว่ายังยอมรับได้

รูปที่ 6 จะสังเกตเห็นว่าลักษณะของสัญญาณที่เกิดขึ้น เมื่อแรงดันอินพุตเพิ่มขึ้นค่าดิวตี้ไซเคิลลดลง เมื่อเทียบกับค่าแรงดันของแหล่งจ่ายเท่ากับ 6.58V ทั้งนี้เพื่อปรับการตอบสนองต่อค่าแรงดันอินพุตที่เปลี่ยนแปลงและรักษาค่ากระแสที่เรากำหนดให้คงที่

รูปที่ 7 ลักษณะเดียวกันกับการทดลองที่ผ่านมา เมื่อทดลองปรับค่าแรงดันของแหล่งจ่ายเพิ่มขึ้นเป็น 15.02V และสังเกตลักษณะการตอบสนองของการทำงาน

รูปที่ 8 แสดงปริมาณกระแสที่เกิดขึ้น เมื่อปรับแรงดันของแหล่งจ่ายไฟเลี้ยงเป็น 15.02V จะมีค่าเท่ากับ 0.55A

รูปที่ 9 ลักษณะของสัญญาณจะมีค่าดิวตี้ไซเคิลลดลง เมื่อเทียบกับค่าแรงดันของการทดลองที่ผ่านมา และในการทดลองจ่ายแรงดันไฟเลี้ยงเพิ่มไปที่ 20.01V ในรูปถัดไปข้างล่างนี้จะให้ผลการทดลองที่คล้ายกัน


รูปที่ 11 ปริมาณกระแสที่เกิดขึ้นเมื่อไฟเลี้ยงมีค่าประมาณ 20.01V มีค่าเท่ากับ 0.58A มีค่าความผิดพลาดที่ 0.08A

รูปที่ 12 เป็นลักษณะของสัญญาณพัลซ์วิดมอดูเลตชั่นจะมีค่าดิวตี้ไซเกิลลดลง และค่าความผิดพลาดเล็กน้อยที่ 0.08A

ในรูปที่ 13 จะเป็นการต่อวงจรที่ใช้ในการทดสอบทั้งหมดและต่อเข้าด้วยกัน ซึ่งช่วงระหว่างการทดลองนั้น ตัวต้านทาน 10 โอห์ม (โหลด) จะค่อนข้างร้อนจึงต้องใช้พัดลมมาเป่าเพื่อระบายความร้อนให้ลดลง
/******************************************************** * PID Basic Example * Reading analog input 0 to control analog PWM output 3 * Application for Current Contance Control ********************************************************/ #include <PWM.h> #include <PID_v1.h> int32_t frequency = 35000; //frequency (in Hz) double Setpoint, Input, Output; double Kp=3, Ki=0.2, Kd=0; PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT); void setup() { Serial.begin(9600); InitTimersSafe(); bool success = SetPinFrequencySafe(3,frequency); Setpoint = 115; // 120 is SET Current load = 0.5A myPID.SetMode(AUTOMATIC); //turn the PID on } void loop() { Input = analogRead(A0); // Serial.println(Input); // Debuger Input feedback myPID.Compute(); // analogWrite(PIN_OUTPUT, Output); pwmWrite(3,Output); // Serial.println(Output); // Debuger PWM Signal Driver MOSFET }
*** Arduino Library PWM —-> Arduino PWM Frequency Library
*** Arduino Library PID Control —-> Arduino-PID-Library

จากรูปข้างบนที่ 14 เป็นลักษณะของการต่อวงจรต่างๆ ที่ใช้ในการทดลองโดยอุปกรณ์ที่จะหน้าที่เป็นสวิตชิ่ง คือเพาเวอร์มอสเฟต STP105N3LL โดยจะสัญญาณควบคุมมาแบบพัลซ์วิดมอดูเลตจากขา 3 และใช้ตัวต้านทาน 1 โอห์ม 1 วัตต์ทำหน้าที่ตรวจจับกระแสที่เกิดขึ้น โดยแรงดันที่ตกคร่อมตัวต้านทานนี้จะผ่านวงจรกรองความถี่ต่ำผ่าน (Low Pass Filter) อีกครั้งก่อนป้อนเข้าที่ขา A0 ซึ่งขานี้จะเป็นขารับสัญญาณป้อนกลับ
จากการทดลองที่ผ่านมานั้นกล่าวโดยสรุปคือ การควบคุมกระแสให้คงที่ด้วยการเขียนโปรแกรม PID Control ให้กับบอร์ด Arduino UNO นั้น โปรแกรมจะพยายามควบคุมค่ากระแสให้คงที่ตามที่เราต้องการ (Set Point) ถึงแม้ว่าแรงดันของแหล่งจ่ายไฟเลี้ยงจะเกิดการเปลี่ยนแปลงก็ตาม (6.58V-20.01V) โดยค่าที่ได้นั้นอาจจะมีค่าความผิดพลาดบ้างเล็กน้อย ซึ่งทั้งนี้ขึ้นอยู่กับเราว่าเหมาะสมที่จะสามารถนำไปประยุกต์ใช้งานได้มากเพียงใด
ข้อมูลเพิ่มเติมและโปรแกรมที่ใช้ในการทดลองดาวน์โหลดได้ที่