Change the Controller from uPC494C to Arduino UNO for Switching Power Supply

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


รูปที่ 1 และรูป 2 แสดงแหล่งจ่ายสวิตชิ่งเพาเวอร์ซัพพลายที่นำมาใช้ในการทดลอง และสเปกของสวิตชิ่งเพาเวอร์ซัพพลายโดยจะเป็นกล่องขนาด 100 วัตต์ ที่แรงดันเอาต์พุต 10V และจ่ายกระแสที่ 10A




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


รูปที่ 7 และรูปที่ 8 เป็นการทดลองที่ 1 โดยการให้วงจรสวิตชิ่งจ่ายกระแสโหลดที่ 5.89A จากนั้นสังเกตสัญญาณขับที่จ่ายออกมาจากไอซี uPC494C เพื่อตอบสนองการทำงานและรักษาระดับแรงดันเอาต์พุตให้คงที่



รูปที่ 9 ถึงรูปที่ 11 การทดลองที่ 2 จะเป็นลักษณะเดียวกับการทดลองที่ 1 แต่จะให้วงจรจ่ายกระแสโหลดเพิ่มขึ้นที่ 11.14A และสังเกตสัญญาณขับจากไอซี uPC494C สำหรับตอบสนองการทำงาน และรักษาแรงดันเอาต์พุตให้คงที่ ซึ่งการทดลองทั้ง 2 ครั้งจะศึกษาลักษณะการทำงานของการควบคุมด้วยไอซีแบบอะนาลอกเดิม
/* *Code for Arduino UNO *Application for Change the Controller from uPC494C to Arduino UNO for Switching Power Supply. Vi : 300VDC Vo : 12VDC Io : 6A (Continuous Power) Fsw : 31kHz Protection : Output Short circuit and Current Limit *Dev by : www.electronicsDNA.com *Date : 4/11/2022 (V.0) */ int Output_PWM = 0; // int Voutput = 0; // int Iinductor = 0; // int Setpoint = 500; // 500 = 12V @ Voltage output double error; void setup() { pinMode (3, OUTPUT); // PWM Signal Lo Side pinMode (11, OUTPUT); // PWM Signal Hi Side pinMode (13, OUTPUT); // LED Signal OK RUN System Serial.begin(9600); TCCR2A=0b10110001; // Generate inverted PWM signals in output TCCR2B=0b00000001; // Set Fsw = 31kHz delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); } void loop() { MainLoop: Voutput = analogRead(A0); // Read ADC A0 for Voutput Iinductor = analogRead(A1); // Read ADC A1 for Iinductor Serial.print(" IL = "); Serial.println(Iinductor); // Loop Output Short circuit and Current Limt if(Iinductor>20) { // 20 Is Set Current (6A) Output_PWM = 0; OCR2A = 255-Output_PWM; OCR2B = Output_PWM; delay(300); goto MainLoop; } // error = (Setpoint-Voutput); // Serial.print("\t Err = "); // Serial.println(error); if(Setpoint>Voutput){ Output_PWM = Output_PWM+2; goto OUT_PUT; } if(Setpoint<Voutput){ Output_PWM = Output_PWM-2; goto OUT_PUT; } OUT_PUT: if (Output_PWM<1){Output_PWM=0;} // Limit Min PWM Signal if (Output_PWM>128){Output_PWM=128;} // Limit Max PWM Signal OCR2A = 255-Output_PWM; // PIN D11 Hi Side OCR2B = Output_PWM; // PIN D3 Hi Side // delay(1); // Delay for Adj Stability Loop Control }
สำหรับตัวอย่างโปรแกรมที่แสดงข้างบนเป็นการใช้ในทดลองใช้งานกับโครงงานที่ทดลอง โดยผู้อ่านสามารถพัฒนาเพิ่มเติมทั้งในเรื่องของการแสดงผลค่าพารามิเตอร์ต่างๆ หรือการปรับค่าแรงดันและกระแสที่เอาต์พุตได้ตามต้องการ หรือการปรับรูปแบบการควบคุมการทำงานของตัววงจร เป็นต้น



ในรูปที่ 12 ถึงรูปที่ 14 แสดงขั้นตอนการถอดไอซี uPC494C ออกจากบอร์ดสวิตชิ่งเพาเวอร์ซัพพลายเดิม เพื่อเปลี่ยนตัวควบคุมใหม่ด้วยบอร์ด Arduino UNO แทน

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


ในรูปที่ 16 และรูปที่ 17 เป็นลักษณะของการเชื่อมต่อระหว่างบอร์ด Arduino UNO และสวิตชิ่งเพาเวอร์ซัพพลาย เพื่อทำสอบการทำงานเบื้องต้น โดยจะทดสอบในส่วนของโปรแกรมที่ใช้ในการควบคุม และตรวจสอบสัญญาณที่ส่งมาจากบอร์ด Arduino UNO มายังวงจรขับสัญญาณ (Driver signal) ให้ได้ขนาดที่ถูกต้องและเหมาะสม


รูปที่ 18 รูปที่ 19 เป็นการต่ออุปกรณ์ต่างๆ เพิ่มเติมสำหรับการทดลอง เช่น การส่งสัญญาณป้อนกลับแรงดันเอาต์พุต (Vo Feedback signal) และการตรวจจับกระแสเอาต์พุต สำหรับสัญญาณรูปที่ 19 จะเป็นในช่วงบอร์ด Arduino UNO ส่งออกมาโดยยังไม่ได้จ่ายไฟเลี้ยงที่แรงดันสูงให้กับตัววงจร (310VDC) ซึ่งความถี่ของสัญญาณสวิตชิ่งจะเพิ่มขึ้นมาที่ 31kHz เมื่อเทียบกับการใช้ตัวควบคุมด้วยไอซี uPC494C




ในรูปที่ 21 ถึงรูปที่ 23 แสดงการเตรียมการทดลองต่างๆ เช่น ค่าแรงดันอินพุตสำหรับทดลองที่ประมาณ 320V กำหนดค่าแรงดันเอาต์พุตที่ประมาณ 12V และลักษณะของสัญญาณพัลซ์วิดมอดูเลตชั่นที่เกิดขึ้นในขณะวงจรอยู่ในโหมดสแตนบาย รวมทั้งตัวต้านทานโหลดในการทดสอบการทำงานขนาด 2.2 โอห์ม 60 วัตต์



สำหรับในรูปที่ 24 ถึงรูปที่ 26 การทดลองที่ 3 เป็นการทดลองให้วงจรสวิตชิ่งเพาเวอร์ซัพพลายที่ควบคุมด้วยบอร์ด Arduino UNO จ่ายกระแสให้โหลดที่ 5.55A จากนั้นวัดค่าแรงดันเอาต์พุตเพื่อสังเกตความเปลี่ยนแปลงที่เกิดขึ้น และสัญญาณพัลซ์วิดมอดูเลตชั่นที่ตอบสนองต่อกระแสโหลด



รูปที่ 27 ถึงรูปที่ 29 เป็นการทดลองที่ 4 โดยการให้เอาต์พุตซ๊อตเซอร์กิต ทั้งนี้เพื่อเป็นการทดสอบการควบคุมกระแสเกินของตัวโปรแกรมที่พัฒนาขึ้นและการทำงานของตัวเพาเวอร์สวิตชิ่งเพื่อรับปริมาณกระแสสูงชั่วขณะได้ ซึ่งจากการทดลองสามารถซ๊อตเซอร์กิตไว้ 2 วินาที ตัววงจรสวิตชิ่งเพาเวอร์ซัพพลายสามารถทำงานได้เป็นปกติ



รูปที่ 30 ถึงรูปที่ 32 จะเป็นการทดลองที่ 5 เช่นเดียวกับการทดลองที่ 3 แต่จะให้ตัววงจรจ่ายกระแสโหลดเพิ่มขึ้นที่ 10.04A จากนั้นวัดค่าแรงดันเอาต์พุตเพื่อสังเกตความเปลี่ยนแปลงที่เกิดขึ้น (ซึ่งจากผลที่ได้ค่าแรงดันลดลง 0.94V เมื่อเทียบกับการทดลองที่ 3) และสัญญาณพัลซ์วิดมอดูเลตชั่นที่ตอบสนองต่อกระแสโหลดอีกครั้ง




สำหรับโครงงานนี้เป็นอีก 1 ไอเดียกับการทดลองเปลี่ยนตัวควบคุมของแหล่งจ่ายไฟเลี้ยงแบบสวิตชิ่งเพาเวอร์ซัพพลายซึ่งเป็นแบบอะนาลอก (Analog Control) ให้เป็นแบบดิจิตอล (Digital Control) ด้วยบอร์ด Arduino UNO โดยจะแก้ไขตัววงจรเดิมให้น้อยที่สุด ทั้งนี้เพื่อเป็นการเรียนรู้ของแอดมินแบบอีกหนึ่งและคิดว่าเนื้อหาน่าจะเป็นแนวทางเบื้องต้นสำหรับผู้อ่านครับ.
Reference
- https://www.infineon.com/dgdl/Infineon-ApplicationNote_demoboard_IDP2303_120W-AN-v01_00-EN.pdf?fileId=5546d4625b3ca4ec015b5c3e8acf35c0
- https://ww1.microchip.com/downloads/en/appnotes/01114a.pdf
- https://www.power-supplies.com.au/files/mean-well-user-technical-manual.pdf
- reverz45b.png (1220×860) (danyk.cz)
- https://docs.arduino.cc/hardware/uno-rev3
- https://www.vishay.com/docs/73668/73668.pdf