- วัสดุที่จำเป็น
- แผนภาพวงจรโหลดอิเล็กทรอนิกส์ Arduino DC
- การออกแบบ PCB และไฟล์ Gerber
- สั่งซื้อ PCB ของคุณจาก AllPCB
- รหัส Arduino สำหรับโหลด DC ที่ปรับได้
- การทดสอบโหลด DC แบบปรับได้ของเรา
หากคุณเคยทำงานกับแบตเตอรี่วงจร SMPS หรือวงจรพาวเวอร์ซัพพลายอื่น ๆ บ่อยครั้งที่คุณต้องทดสอบแหล่งจ่ายไฟของคุณโดยการโหลดเพื่อตรวจสอบว่ามันทำงานอย่างไรภายใต้เงื่อนไขการโหลดที่แตกต่างกัน อุปกรณ์ที่มักใช้ในการทดสอบประเภทนี้เรียกว่าConstant Current DC Loadซึ่งช่วยให้เราสามารถปรับกระแสไฟขาออกของแหล่งจ่ายไฟของคุณจากนั้นให้คงที่จนกว่าจะมีการปรับเปลี่ยนอีกครั้ง ในบทช่วยสอนนี้เราจะเรียนรู้วิธีสร้างโหลดอิเล็กทรอนิกส์แบบปรับได้ของเราเองโดยใช้ Arduinoซึ่งสามารถรับแรงดันไฟฟ้าอินพุตสูงสุด 24V และระบายกระแสได้สูงถึง 5A สำหรับโครงการนี้เราได้ใช้บอร์ด PCB ซึ่งผลิตโดย AllPCB ซึ่งเป็นผู้ให้บริการผลิตและประกอบ PCB ระดับมืออาชีพจากประเทศจีน
ในบทแนะนำแหล่งจ่ายกระแสที่ควบคุมด้วยแรงดันไฟฟ้าก่อนหน้านี้เราได้อธิบายวิธีการใช้เครื่องขยายเสียงที่ใช้งานกับ MOSFET และใช้ประโยชน์จากวงจรแหล่งจ่ายกระแสที่ควบคุมด้วยแรงดันไฟฟ้า แต่ในการกวดวิชานี้เราจะใช้วงจรที่และทำมาในปัจจุบันการควบคุมแบบดิจิทัลเห็นได้ชัดว่าแหล่งกระแสที่ควบคุมแบบดิจิทัลต้องใช้วงจรดิจิทัลและเพื่อตอบสนองวัตถุประสงค์จึงใช้ Arduino NANO Arduino NANO จะให้การควบคุมที่จำเป็นสำหรับโหลด DC
วงจรประกอบด้วยสามส่วน ส่วนแรกคือส่วน Arduino Nano ส่วนที่สองคือตัวแปลงดิจิตอลเป็นอนาล็อกและส่วนที่สามเป็นวงจรอนาล็อกบริสุทธิ์ที่ใช้แอมพลิฟายเออร์สำหรับการทำงานคู่ในแพ็คเกจเดียวซึ่งจะควบคุมส่วนโหลด โครงการนี้ได้รับแรงบันดาลใจจากโพสต์บน Arduino อย่างไรก็ตามวงจรมีการเปลี่ยนแปลงเพื่อให้มีความซับซ้อนน้อยลงพร้อมคุณสมบัติพื้นฐานสำหรับทุกคนในการสร้าง
โหลดอิเล็กทรอนิกส์ของเราได้รับการออกแบบให้มีส่วนอินพุตและเอาต์พุตดังต่อไปนี้
- สวิตช์อินพุตสองตัวสำหรับเพิ่มและลดภาระ
- LCD ที่จะแสดงโหลดที่ตั้งไว้โหลดจริงและแรงดันไฟฟ้า
- กระแสโหลดสูงสุดถูก จำกัด ไว้ที่ 5A
- แรงดันไฟฟ้าขาเข้าสูงสุดคือ 24V สำหรับโหลด
วัสดุที่จำเป็น
ส่วนประกอบที่จำเป็นในการสร้างโหลดอิเล็กทรอนิกส์ DCแสดงอยู่ด้านล่าง
- Arduino นาโน
- 16x2 ตัวอักษร LCD
- ซ็อกเก็ตสองกระบอก
- มอสเฟต irf540n
- Mcp4921
- Lm358
- ตัวต้านทานแบบปัด 5 วัตต์ 1 โอห์ม
- 1k
- 10k - 6 ชิ้น
- ฮีทซิงค์
- .1uF 50v
- 2k - 2 ชิ้น
แผนภาพวงจรโหลดอิเล็กทรอนิกส์ Arduino DC
ในแผนผังด้านล่างแอมพลิฟายเออร์ที่ใช้งานได้มีสองส่วน หนึ่งคือการควบคุม MOSFET และอีกอย่างหนึ่งคือการขยายกระแสที่รับรู้ได้ คุณยังสามารถตรวจสอบวิดีโอที่ด้านล่างของหน้านี้ซึ่งจะอธิบายการทำงานทั้งหมดของวงจร ส่วนแรกมี R12, R13 และ MOSFET R12 ใช้เพื่อลดผลกระทบการโหลดในส่วนป้อนกลับและ R13 ใช้เป็นตัวต้านทานประตู Mosfet
ตัวต้านทานเพิ่มเติมสองตัว R8 และ R9 ใช้เพื่อตรวจจับแรงดันไฟฟ้าของแหล่งจ่ายไฟที่จะถูกเน้นโดยโหลดจำลอง ตามกฎตัวแบ่งแรงดันไฟฟ้าตัวต้านทานทั้งสองนี้รองรับสูงสุด 24V มากกว่า 24V จะทำให้เกิดแรงดันไฟฟ้าที่ไม่เหมาะสำหรับพิน Arduino ดังนั้นระวังอย่าเชื่อมต่อแหล่งจ่ายไฟที่มีแรงดันเอาต์พุตมากกว่า 24V
Resistor R7 เป็นตัวต้านทานโหลดจริงที่นี่ เป็นตัวต้านทาน 5 วัตต์,.1 โอห์ม ตามกฎหมายพลังงานจะรองรับสูงสุด 7A (P = I 2 R) แต่สำหรับด้านความปลอดภัยควร จำกัด กระแสโหลดสูงสุดที่ 5A ดังนั้นในปัจจุบันโหลดสูงสุด 24V, 5A สามารถกำหนดได้โดยโหลดดัมมี่นี้
ส่วนของเครื่องขยายเสียงก็คือการกำหนดค่าเป็นเครื่องขยายเสียงกำไรจะให้กำไร 6 เท่า ในระหว่างการไหลของกระแสไฟฟ้าแรงดันไฟฟ้าจะปรากฏขึ้น ตัวอย่างเช่นเมื่อ 5A ของกระแสไหลผ่านตัวต้านทานแรงดันตกจะเท่ากับ. 5V ในตัวต้านทานแบ่ง. 1 โอห์ม (V = I x R) ตามกฎของโอห์ม แอมพลิฟายเออร์ที่ไม่กลับด้านจะขยายเป็น x6 ดังนั้น 3V จะเป็นเอาต์พุตจากส่วนที่สองของแอมพลิฟายเออร์ เอาต์พุตนี้จะถูกตรวจจับโดยพินอินพุตอะนาล็อก Arduino nano และกระแสไฟฟ้าจะถูกคำนวณ
ส่วนแรกของแอมพลิฟายเออร์ได้รับการกำหนดค่าเป็นวงจรตัวติดตามแรงดันไฟฟ้าซึ่งจะควบคุม MOSFET ตามแรงดันไฟฟ้าขาเข้าและรับแรงดันป้อนกลับที่ต้องการเนื่องจากกระแสโหลดที่ไหลผ่านตัวต้านทานแบบแบ่ง
MCP4921เป็นดิจิตอลเพื่อแปลงอนาล็อก DAC ใช้โปรโตคอลการสื่อสาร SPI เพื่อรับข้อมูลดิจิทัลจากหน่วยไมโครคอนโทรลเลอร์ใด ๆ และให้เอาต์พุตแรงดันไฟฟ้าแบบอนาล็อกขึ้นอยู่กับมัน แรงดันไฟฟ้านี้เป็นอินพุตของ op-amp ก่อนหน้านี้เราได้เรียนรู้วิธีใช้ MCP4921 DAC กับ PIC ไปก่อนหน้านี้
อีกด้านหนึ่งมี Arduino Nano ซึ่งจะให้ข้อมูลดิจิทัลแก่ DAC ผ่านโปรโตคอล SPI และควบคุมการโหลดและแสดงข้อมูลในการแสดงอักขระ 16x2 มีการใช้สิ่งเพิ่มเติมอีกสองอย่างนั่นคือปุ่มลดและเพิ่ม แทนที่จะเชื่อมต่อกับพินดิจิทัลจะเชื่อมต่อกับพินอนาล็อก ดังนั้นเราสามารถเปลี่ยนเป็นสวิตช์ประเภทอื่นเช่นตัวเลื่อนหรือตัวเข้ารหัสอนาล็อก นอกจากนี้โดยการแก้ไขโค้ดเราสามารถให้ข้อมูลอะนาล็อกดิบเพื่อควบคุมโหลดได้ นอกจากนี้ยังช่วยหลีกเลี่ยงปัญหาการดีบักของสวิตช์
ในที่สุดโดยการเพิ่มภาระ Arduino nano จะให้ข้อมูลโหลดไปยัง DAC ในรูปแบบดิจิทัล DAC จะให้ข้อมูลแอนะล็อกไปยังเครื่องขยายเสียงในการทำงานและเครื่องขยายเสียงที่ใช้งานจะควบคุม MOSFET ตามแรงดันไฟฟ้าขาเข้าของเครื่องขยายเสียงที่ใช้งานได้. สุดท้ายขึ้นอยู่กับการไหลของกระแสโหลดผ่านตัวต้านทานแบบปัดแรงดันตกจะปรากฏขึ้นซึ่งจะขยายเพิ่มเติมโดยช่องที่สองของ LM358 และรับโดย Arduino nano สิ่งนี้จะปรากฏบนจอแสดงอักขระ สิ่งเดียวกันนี้จะเกิดขึ้นเมื่อผู้ใช้กดปุ่มลด
การออกแบบ PCB และไฟล์ Gerber
เนื่องจากวงจรนี้มีเส้นทางกระแสสูงจึงเป็นทางเลือกที่ชาญฉลาดกว่าในการใช้กลยุทธ์การออกแบบ PCB ที่เหมาะสมสำหรับการลบกรณีความล้มเหลวที่ไม่ต้องการ ดังนั้น PCB จึงถูกออกแบบมาสำหรับโหลด DC นี้ ฉันใช้ Eagle PCB Design Software เพื่อออกแบบ PCB ของฉัน คุณสามารถเลือกซอฟต์แวร์ PCB Cad ใดก็ได้ PCB ที่ออกแบบขั้นสุดท้ายในซอฟต์แวร์ CAD แสดงในภาพด้านล่าง
ปัจจัยสำคัญอย่างหนึ่งที่ต้องสังเกตในระหว่างการออกแบบ PCB นี้คือการใช้ระนาบกำลังที่หนาเพื่อให้กระแสไหลทั่ววงจรอย่างเหมาะสม นอกจากนี้ยังมีการเย็บพื้น VIAS (จุดผ่านสุ่มในระนาบพื้น) ที่ใช้สำหรับการไหลของพื้นดินที่เหมาะสมทั้งในชั้นบนและล่าง
คุณยังสามารถดาวน์โหลดไฟล์ Gerber ของ PCB นี้ได้จากลิงค์ด้านล่างและใช้สำหรับการประดิษฐ์
- ดาวน์โหลดไฟล์ Gerber ไฟฟ้ากระแสตรงแบบปรับได้
สั่งซื้อ PCB ของคุณจาก AllPCB
เมื่อคุณพร้อมกับไฟล์ Gerber แล้วคุณสามารถใช้เพื่อสร้าง PCB ของคุณได้ การพูดถึงผู้สนับสนุนบทความนี้ ALLPCB ซึ่งเป็นที่รู้จักในเรื่อง PCBs คุณภาพสูงและการจัดส่งที่รวดเร็วเป็นพิเศษ นอกเหนือจากการผลิต PCB แล้ว AllPCB ยังให้บริการการประกอบ PCB และการจัดหาชิ้นส่วน
หากต้องการรับคำสั่งซื้อ PCB ของคุณโปรดไปที่ allpcb.com และสมัครใช้งาน จากนั้นในโฮมเพจป้อนขนาดของ PCB ของคุณและปริมาณที่ต้องการตามที่แสดงด้านล่าง จากนั้นคลิกที่ใบเสนอราคาทันที
ตอนนี้คุณสามารถเปลี่ยนพารามิเตอร์อื่น ๆ ของ PCB ของคุณเช่นจำนวนชั้นสีหน้ากากความหนา ฯลฯ ทางด้านขวามือคุณสามารถเลือกประเทศและตัวเลือกการจัดส่งที่ต้องการได้ ซึ่งจะแสดงระยะเวลารอคอยสินค้าและจำนวนเงินทั้งหมดที่ต้องชำระ ฉันเลือก DHL และจำนวนเงินทั้งหมดของฉันคือ $ 26 แต่ถ้าคุณเป็นลูกค้าครั้งแรกราคาจะลดลงในขั้นตอนการชำระเงิน จากนั้นคลิกที่เพิ่มลงในรถเข็นจากนั้นคลิกที่ชำระเงินทันที
ตอนนี้คุณสามารถคลิกที่อัปโหลดไฟล์ Gerber ของคุณโดยคลิกที่ "อัปโหลด Gerber" จากนั้นคลิกที่ซื้อ
ในหน้าถัดไปคุณสามารถป้อนที่อยู่สำหรับจัดส่งของคุณและตรวจสอบราคาสุดท้ายที่คุณต้องจ่ายสำหรับ PCB ของคุณ จากนั้นคุณสามารถตรวจสอบคำสั่งซื้อของคุณจากนั้นคลิกที่ส่งเพื่อชำระเงิน
เมื่อคำสั่งซื้อของคุณได้รับการยืนยันแล้วคุณสามารถนั่งและถ่ายทอดให้ PCB มาถึงหน้าประตูบ้านของคุณได้ ฉันได้รับคำสั่งซื้อของฉันหลังจากนั้นไม่กี่วันบรรจุภัณฑ์เรียบร้อยดังที่แสดงด้านล่าง
คุณภาพของ PCB นั้นดีอย่างที่คุณเห็นในภาพด้านล่าง ด้านบนและด้านล่างของบอร์ดแสดงด้านล่าง
เมื่อคุณได้รับบอร์ดของคุณแล้วคุณสามารถดำเนินการประกอบส่วนประกอบทั้งหมดได้ บอร์ดที่เสร็จแล้วของฉันมีลักษณะดังนี้ที่แสดงด้านล่าง
จากนั้นคุณสามารถอัปโหลดโค้ดและเปิดโมดูลเพื่อตรวจสอบว่ามันทำงานอย่างไร รหัสที่สมบูรณ์สำหรับโครงการนี้มีให้ที่ด้านล่างของหน้านี้ คำอธิบายของรหัสมีดังนี้
รหัส Arduino สำหรับโหลด DC ที่ปรับได้
รหัสค่อนข้างง่าย ในตอนแรกเรารวมไฟล์ส่วนหัว SPI และ LCD รวมทั้งตั้งค่าแรงดันลอจิกสูงสุดพินการเลือกชิปเป็นต้น
# รวม
ส่วนนี้ประกอบด้วยการประกาศเกี่ยวกับโฟลว์โปรแกรมที่จำเป็นของจำนวนเต็มและตัวแปร นอกจากนี้เรายังตั้งค่าพินอุปกรณ์ต่อพ่วงร่วมกับ Arduino Nano
const int slaveSelectPin = 10; // ชิปเลือกพิน หมายเลข int = 0; int เพิ่ม = A2; // เพิ่มพิน int ลดลง = A3; // ลดพิน int current_sense = A0; // พินความรู้สึกปัจจุบัน int voltage_sense = A1; // พินแรงดันไฟฟ้า int state1 = 0; int state2 = 0; ชุด int = 0; โวลต์ลอย = 0; load_current ลอย = 0.0; load_voltage ลอย = 0.0; กระแสลอย = 0.0; แรงดันลอย = 0.0; LiquidCrystal LCD (7, 6, 5, 4, 3, 2); // หมุด LCD
ใช้สำหรับการตั้งค่า LCD และ SPI นอกจากนี้ทิศทางของหมุดจะถูกกำหนดไว้ที่นี่
การตั้งค่าเป็นโมฆะ () { pinMode (slaveSelectPin, OUTPUT); pinMode (เพิ่ม, INPUT); pinMode (ลดลง, INPUT); pinMode (current_sense, INPUT); pinMode (voltage_sense, INPUT); // เริ่มต้น SPI: SPI.begin (); // ตั้งค่าจำนวนคอลัมน์และแถวของ LCD : lcd.begin (16, 2); // พิมพ์ข้อความไปที่ LCD lcd.print ("โหลดดิจิตอล"); lcd.setCursor (0, 1); lcd.print ("วงจรย่อย"); ล่าช้า (2000); }
ใช้สำหรับการแปลงค่า DAC
เป็นโมฆะ convert_DAC (ค่า int ที่ไม่ได้ลงชื่อ) { / * ขนาดขั้นตอน = 2 ^ n ดังนั้น 12 บิต 2 ^ 12 = 4096 สำหรับการอ้างอิง 5V ขั้นตอนจะเป็น 5/4095 = 0.0012210012210012V หรือ 1mV (โดยประมาณ) * / คอนเทนเนอร์ int ที่ไม่ได้ลงชื่อ MSB int ที่ไม่ได้ลงนาม; LSB int ที่ไม่ได้ลงนาม; / * ขั้นตอน: 1 จัดเก็บข้อมูล 12 บิตลงในคอนเทนเนอร์ สมมติว่าข้อมูลเป็น 4095 ในไบนารี 1111 1111 1111 * / container = value; / * ขั้นตอน: 2 การสร้าง Dummy 8 บิต ดังนั้นโดยการหาร 256 บิตบน 4 จะถูกจับใน LSB LSB = 0000 1111 * / LSB = container / 256; / * ขั้นตอน: 3 ส่งการกำหนดค่าโดยเจาะข้อมูล 4 บิต LSB = 0011 0000 หรือ 0000 1111 ผลลัพธ์คือ 0011 1111 * / LSB = (0x30) - LSB; / * ขั้นตอน: 4 คอนเทนเนอร์ยังคงมีค่า 21 บิต แยก 8 บิตล่าง 1111 1111 และ 1111 1111 1111 ผลลัพธ์คือ 1111 1111 ซึ่งเป็น MSB * / MSB = 0xFF & container; / * ขั้นตอน: 4 การส่งข้อมูล 16 บิตโดยแบ่งออกเป็นสองไบต์ * / digitalWrite (slaveSelectPin, LOW); ล่าช้า (100); SPI.transfer (LSB); SPI.transfer (MSB); ล่าช้า (100); // ใช้พิน SS สูงเพื่อยกเลิกการเลือกชิป: digitalWrite (slaveSelectPin, HIGH); }
ส่วนนี้ใช้สำหรับการดำเนินการที่เกี่ยวข้องกับการตรวจจับในปัจจุบัน
ลอย read_current (โมฆะ) { load_current = 0; สำหรับ (int a = 0; a <average; a ++) { load_current = load_current + analogRead (current_sense); } load_current = load_current / average; load_current = (load_current * MAX_VOLT) / 1024; load_current = (load_current / opamp_gain) / load_resistor; ส่งคืน load_current; }
ใช้สำหรับอ่านแรงดันไฟฟ้า
ลอย read_voltage (โมฆะ) { load_voltage = 0; สำหรับ (int a = 0; a <average; a ++) { load_voltage = load_voltage + analogRead (voltage_sense); } load_voltage = load_voltage / ค่าเฉลี่ย; load_voltage = ((load_voltage * MAX_VOLT) /1024.0) * 6; ส่งคืน load_voltage; }
นี่คือลูปที่แท้จริง ที่นี่มีการวัดขั้นตอนการสลับและข้อมูลจะถูกส่งไปยัง DAC หลังจากส่งข้อมูลแล้วจะมีการวัดการไหลของกระแสจริงและแรงดันไฟฟ้า ในที่สุดค่าทั้งสองจะถูกพิมพ์ลงบนจอ LCD
โมฆะ loop () { state1 = analogRead (เพิ่มขึ้น); ถ้า (state1> 500) { ล่าช้า (50); state1 = analogRead (เพิ่มขึ้น); ถ้า (state1> 500) { โวลต์ = โวลต์ + 0.02; } } state2 = analogRead (ลดลง); ถ้า (state2> 500) { ล่าช้า (50); state2 = analogRead (ลดลง); ถ้า (state2> 500) { if (โวลต์ == 0) { โวลต์ = 0; } else { โวลต์ = โวลต์ -0.02; } } } จำนวน = โวลต์ / 0.0012210012210012; Convert_DAC (หมายเลข); แรงดันไฟฟ้า = read_voltage (); ปัจจุบัน = read_current (); lcd.setCursor (0, 0); lcd.print ("ตั้งค่า"); lcd.print ("="); ตั้ง = (โวลต์ / 2) * 10000; lcd.print (ชุด); lcd.print ("mA"); lcd.setCursor (0, 1); lcd.print ("ฉัน"); lcd.print ("="); lcd.print (ปัจจุบัน); lcd.print ("A"); lcd.print ("V"); lcd.print ("="); lcd.print (แรงดันไฟฟ้า); lcd.print ("V"); // lcd.print (load_voltage); //lcd.print("mA "); // ล่าช้า (1000); //lcd.clear (); }
การทดสอบโหลด DC แบบปรับได้ของเรา
วงจรโหลดดิจิตอลถูกบัดกรีและเปิดเครื่องโดยใช้แหล่งจ่ายไฟ 12V ฉันใช้แบตเตอรี่ลิเธียม 7.4V ที่ด้านแหล่งจ่ายไฟและเชื่อมต่อแคลมป์มิเตอร์เพื่อตรวจสอบการทำงาน ดังที่คุณเห็นเมื่อกระแสไฟฟ้าที่ตั้งไว้คือ 300mA วงจรจะดึง 300mA จากแบตเตอรี่ซึ่งวัดด้วยแคลมป์มิเตอร์เป็น 310mA
การทำงานที่สมบูรณ์ของวงจรสามารถพบได้ในวิดีโอที่เชื่อมโยงด้านล่าง หวังว่าคุณจะเข้าใจโครงการและสนุกกับการสร้างสิ่งที่เป็นประโยชน์ หากคุณมีคำถามใด ๆ ทิ้งไว้ในส่วนความคิดเห็นหรือใช้ฟอรัม