การวิเคราะห์วงจรไฟฟ้ากระแสตรงด้วยวิธีโหนดและเมชพร้อมตัวอย่างโค้ด Python#

บทความนี้กล่าวถึง วิธีการวิเคราะห์วงจรไฟฟ้ากระแสตรงที่มีพื้นฐานมาจากกฎของเคอร์ชอฟฟ์ (Kirchhoff’s Laws) การใช้ซอฟต์แวร์เช่น EasyEDA และการเขียนโค้ด Python เพื่อช่วยในการวิเคราะห์และคำนวณค่าตัวเลข

Keywords: DC Circuit Analysis, EasyEDA, Python


ทฤษฎีพื้นฐานในการวิเคราะห์วงจรไฟฟ้า#

วงจรไฟฟ้า (Electric Circuit) เป็นการเชื่อมต่อกันระหว่างองค์ประกอบทางไฟฟ้า (เรียกว่า Circuit Element หรือ Circuit Component) เช่น แหล่งจ่ายพลังงานไฟฟ้า (Electrical Source) และ โหลดไฟฟ้า (Electric Load) อย่างเช่น ตัวต้านทาน (Resistor) เป็นต้น การนำมาต่อเข้าด้วยกันแล้วทำให้ครบวงจร จะทำให้มีการเคลื่อนที่ของประจุไฟฟ้าหรือมีกระแสไฟฟ้าไหลในวงจร

ในการเรียนรู้เกี่ยวกับทฤษฎีวงจรไฟฟ้าพื้นฐาน ก็มักจะเริ่มต้นด้วยการวิเคราะห์วงจรที่ประกอบตัวต้านทาน อย่างน้อยหนึ่งตัว (เรียกวงจรประเภทนี้ว่า Resistive Circuit) และมีแหล่งจ่ายไฟฟ้ากระแสตรง (DC Source) เป็นแบบอิสระและคงที่ (Constant Independent Source) เช่น

  • แหล่งจ่ายแรงดันไฟฟ้าคงที่ (Constant Voltage Source): แรงดันตกคร่อมที่แหล่งจ่ายประเภทนี้ในทางอุดมคติ จะต้องคงที่และไม่ขึ้นอยู่กับกระแสที่ไหลผ่านแหล่งจ่าย
  • แหล่งจ่ายกระแสไฟฟ้าคงที่ (Constant Current Source): กระแสไฟฟ้าที่เกิดจากแหล่งจ่ายประเภทนี้ในทางอุดมคติ จะต้องคงที่และไม่ขึ้นอยู่แรงดันไฟฟ้าตกคร่อมที่เกิดขึ้นกับแหล่งจ่าย

ทฤษฎีทางวงจรไฟฟ้าที่ได้มีการนำมาใช้วิเคราะห์วงจรพื้นฐานได้แก่ กฎของโอห์ม (Ohm's Law) และกฎของเคอร์ชอฟฟ์ (Kirchhoff's Laws)

กฎของเคอร์ชอฟฟ์ แบ่งเป็นสองข้อคือ กฎกระแสไฟฟ้า (Kirchhoff’s Current Law: KCL) และกฎแรงดันไฟฟ้า (Kirchhoff's Voltage Law: KVL)

  • KCL: "กระแสไฟฟ้าที่ไหลเข้าจุดใดจุดหนึ่งในวงจรไฟฟ้า จะเท่ากับกระแสไฟฟ้าที่ไหลออกจากจุดนั้น"
  • KVL: "ผลรวมทางพีชคณิตของแรงดันไฟฟ้าภายในวงจรปิดใด ๆ หรือที่เรียกว่า "เมช" (Mesh) หรือ ลูป (Loop) มีค่าเท่ากับศูนย์"
    • ลูป (Loop) ในวงจรไฟฟ้า หมายถึง เส้นทางใด ๆ ในวงจรไฟฟ้าที่เริ่มจากจุดเริ่มต้นไปตามเส้นทางแล้วนำกลับมายังจุดเริ่มต้นได้
    • เมช (Mesh) ในวงจรไฟฟ้า หมายถึง ลูปที่ไม่มีลูปอื่นรวมอยู่ภายใน หรือไม่สามารถแบ่งออกเป็นลูปย่อยได้

วิธีการวิเคราะห์วงจร: Mesh Current Method#

วิธีการนี้มีชื่อว่า Mesh Current Method หรือ Mesh Analysis Method โดยอาศัยกฎแรงดันไฟฟ้าของเคอร์ชอฟฟ์ (KVL) เป็นพื้นฐานสำคัญในการวิเคราะห์

ขั้นตอนการวิเคราะห์วงจร

  1. ระบุเมชในวงจรทั้งหมด (บางกรณีก็ใช้ลูปแทนได้) แล้ววาดรูปกระแสของเมช และกำหนดทิศทางของกระแสดังกล่าว (Mesh Currents) เช่น ให้วนไปตามเข็มนาฬิกาเหมือนกันทั้งหมด และระบุชื่อกระแสของเมชเป็น สำหรับ
  2. หากว่ามีกระแสของเมช ไหลผ่านแหล่งจ่ายกระแสคงที่ ก็จะทราบค่าของกระแสนั้น (สังเกตทิศทางของกระแสจากแหล่งจ่าย)
  3. เขียนสมการสำหรับทุกเมชโดยใช้ KVL โดยมีตัวแปรที่ไม่ทราบค่า (Unknown Variables) เป็นกระแส ซึ่งจะต้องมีจำนวนของสมการเท่ากับจำนวนของตัวแปร
  4. แก้ระบบสมการเชิงเส้นที่ได้จากข้อที่ 3 เพื่อหาค่าของกระแส
  5. เมื่อทราบปริมาณและทิศทางของกระแสที่ไหลผ่านตัวต้านทานแล้ว ก็สามารถทราบแรงดันตกคร่อมของตัวต้านทานแต่ละตัวได้โดยใช้กฎของโอห์ม

ข้อสังเกต: วิธีนี้เรียกว่า Mesh Current Method ก็เพราะว่า เราจะต้องการจะหาปริมาณกระแสของเมชในวงจร

 


วิธีการวิเคราะห์วงจร: Node Voltage Method#

วิธีการนี้มีชื่อว่า Node Voltage Method หรือ Nodal Analysis Method โดยอาศัยกฎกระแสไฟฟ้าของเคอร์ชอฟฟ์ (KCL) เป็นพื้นฐานสำคัญในการวิเคราะห์ และวิธีนี้เหมาะสำหรับการคำนวณด้วยคอมพิวเตอร์ (โปรแกรมประเภท SPICE circuit simulator นิยมใช้วิธีที่เรียกว่า Modified Nodal Analysis: MNA)

ขั้นตอนการวิเคราะห์วงจร

  1. สร้างจุดอ้างอิงในวงจร โดยทั่วไปก็คือ กราวด์ (Ground: GND) ของวงจร ซึ่งมีแรงดันไฟฟ้าเป็น 0V
  2. ตั้งชื่อโหนด (Node) ในวงจร แล้วใช้สัญลักษณ์ สำหรับ เป็นแรงดันไฟฟ้าที่โหนดดังกล่าว
  3. ถ้าเป็นแหล่งจ่ายแรงดันคงที่ หากมีด้านหนึ่งต่อกับ และอีกด้านหนึ่งต่อกับ ก็จะได้เงื่อนไขที่ระบุว่า ผลต่างของแรงดันไฟฟ้าทั้งสองโหนดจะต้องเท่ากับแรงดันไฟฟ้าของแหล่งจ่าย (สังเกตทิศทางของขั้วบวกและลบด้วย)
  4. สร้างสมการโดยใช้ KCL สำหรับกระแสที่ไหลระหว่างสองโหนดใด ๆ ในวงจร
  5. แก้ระบบสมการเชิงเส้นที่ได้จากข้อ 4. เพื่อหาค่าของแรงดันไฟฟ้าที่โหนดต่าง ๆ ในวงจร
  6. สามารถหากระแสที่ไหลผ่านตัวต้านทานได้ โดยใช้กฎของโอห์ม

ตัวอย่างที่ 1: การวิเคราะห์วงจรด้วย Mesh Current Method#

จากรูปของผังวงจรตัวอย่างต่อไปนี้ จะเห็นได้ว่า มีแหล่งจ่ายแรงดันคงที่ และ และมีตัวต้านทาน

รูป: ผังวงจร

รูป: ผังวงจรที่มีการกำหนดเมชและกระแสในวงจร

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

  • กระแสที่ไหลผ่าน เกี่ยวข้องกับ และ ซึ่งจะได้เท่ากับ
  • กระแสที่ไหลผ่าน เกี่ยวข้องกับ และ ซึ่งจะได้เท่ากับ
  • กระแสที่ไหลผ่าน เกี่ยวข้องกับ และ ซึ่งจะได้เท่ากับ
  • กระแสที่ไหลผ่าน เกี่ยวข้องกับ เท่านั้น

การเขียนสมการโดยใช้ KVL สำหรับวงจรนี้เป็นดังนี้

จัดรูปใหม่ให้อยู่ในรูปของสมการเมทริกซ์

ถ้าลองแทนค่าตัวเลขสำหรับพารามิเตอร์ต่าง ๆ ในวงจร เป็นตัวอย่างเช่น

เมื่อนำไปใช้ในการหาผลเฉลยของระบบสมการเชิงเส้นด้วยวิธีการทางคณิตศาสตร์ จะสามารถคำนวณกระแสของเมชได้ดังนี้

ดังนั้นเราจะสรุปได้ว่า มีกระแสที่ไหลผ่านตัวต้านทานในวงจรดังนี้ โดยได้กำหนดทิศทางการไหลของกระแส ให้สอดคล้องกับรายการ SPICE netlist เพื่อจะได้นำไปเปรียบเทียบกับผลการวิเคราะห์วงจรด้วยซอฟต์แวร์ EasyEDA/LTspice

  • กระแส
  • กระแส
  • กระแส
  • กระแส
  • กระแส เท่ากับ
  • กระแส เท่ากับ

ตัวอย่างที่ 2: การวิเคราะห์วงจรด้วย Node Voltage Method#

จากรูปผังวงจรเหมือนในตัวอย่างที่ 1 เราสามารถเขียนสมการด้วยการวิเคราะห์แบบ KCL ได้ดังนี้

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

ถ้าแทนค่าตัวเลขสำหรับพารามิเตอร์ต่าง ๆ ในวงจร เหมือนในตัวอย่างที่ 1

จะได้ และสามารถหากระแสที่ไหลผ่านตัวต้านทานได้ดังนี้

และคำนวณกระแสที่ไหลผ่านแหล่งจ่ายได้ดังนี้


ตัวอย่างที่ 3: การวิเคราะห์วงจรด้วยซอฟต์แวร์ EasyEDA#

ถัดไปเรามาลองดูตัวอย่างการใช้ซอฟต์แวร์ EasyEDA เพื่อวาดผังวงจรและวิเคราะห์การทำงานของวงจรเหมือนในตัวอย่างที่ 1 และ 2

รูป: ผังวงจรที่มีการแสดงค่าตัวเลขสำหรับพารามิเตอร์ของวงจร

SPICE netlist แสดงให้เห็นรายการอุปกรณ์และการเชื่อมต่อขาอุปกรณ์ และหมายเลขของโหนด

รูป: แสดงรายการ SPICE netlist ของวงจร

รูป: ผลการวิเคราะห์การทำงานของวงจรในโหมด DC operating point (.op)

ค่าตัวเลขที่ได้จากการวิเคราะห์วงจร

  • V(1) = แรงดันไฟฟ้าที่จุดหมายเลข 1 ในวงจร ได้เท่ากับ +10.0V
  • V(2) = แรงดันไฟฟ้าที่จุดหมายเลข 2 ในวงจร ได้เท่ากับ +12.5V
  • V(3) = แรงดันไฟฟ้าที่จุดหมายเลข 3 ในวงจร ได้เท่ากับ +15.0V
  • I(R1) = กระแสที่ไหลผ่านตัวต้านทาน R1 ได้เท่ากับ -0.25A
  • I(R2) = กระแสที่ไหลผ่านตัวต้านทาน R2 ได้เท่ากับ +0.25A
  • I(R3) = กระแสที่ไหลผ่านตัวต้านทาน R3 ได้เท่ากับ -0.5A
  • I(R4) = กระแสที่ไหลผ่านตัวต้านทาน R4 ได้เท่ากับ -0.5A
  • I(VS1) = กระแสที่ไหลผ่านแหล่งจ่ายแรงดันไฟฟ้าคงที่ VS1 ได้เท่ากับ +0.75A
  • I(VS2) = กระแสที่ไหลผ่านแหล่งจ่ายแรงดันไฟฟ้าคงที่ VS2 ได้เท่ากับ -1.0A

ข้อสังเกต: SPICE Circuit Simulator จะคำนวณปริมาณกระแสไฟฟ้าที่ไหลผ่านตัวต้านทานหรือแหล่งจ่ายแรงดันไฟฟ้า โดยมีทิศทางจากปลายด้านที่หนึ่งไปยังปลายอีกด้านหนึ่งของอุปกรณ์ตามลำดับ ดังนั้นจึงควรเปรียบเทียบและอ้างอิงกับ SPICE netlist ของวงจร

  • ทิศทางของ I(R1) จากจุด 1 ไปยังจุด 2
  • ทิศทางของ I(R2) จากจุด 2 ไปยังจุด 0
  • ทิศทางของ I(R3) จากจุด 2 ไปยังจุด 3
  • ทิศทางของ I(R4) จากจุด 1 ไปยังจุด 3
  • ทิศทางของ I(VS1) และ I(VS2) จากขั้วบวกไปยังขั้วลบของแหล่งจ่ายแต่ละตัว

รูป: การวัดกระแสในวงจรด้วยมัลติมิเตอร์ (แอมมิเตอร์)

ข้อสังเกต: หากกระแสไหลเข้าแอมมิเตอร์ในทิศทางจากขั้วบวกไปยังขั้วลบ ค่าตัวเลขสำหรับปริมาณกระแสจะเป็นบวก แต่ถ้าไหลในทิศทางตรงกันข้าม จะได้ค่าตัวเลขเป็นลบ

 


ตัวอย่างที่ 4: โค้ด Python เพื่อช่วยในการวิเคราะห์วงจร#

เราสามารถเขียนโปรแกรมด้วยภาษา Python และใช้โมดูล SymPy เพื่อประมวลผลเชิงสัญลักษณ์ในทางคณิตศาสตร์ได้ โดยมีขั้นตอนดังนี้

  1. ประกาศตัวแปรที่เป็นสัญลักษณ์ (Symbols) สำหรับพารามิเตอร์ต่าง ๆ ของวงจร
  2. สร้างสมการซึ่งได้จากวิธี Nodal Analysis หรือ Mesh Analysis
  3. แทนค่าตัวเลขสำหรับพารามิเตอร์ของวงจร
  4. แก้ระบบสมการ

ตัวอย่างโค้ด Python (สำหรับนำไปใช้กับ JupyterLab) เพื่อหาค่ากระแสของเมชเพื่อเปรียบเทียบกับผลการวิเคราะห์ในตัวอย่างที่ 1

from sympy import *
from IPython.display import display, Math
# declare symbols for circuit parameters
R1,R2,R3,R4 = symbols("R_1 R_2 R_3 R_4")
VS1,VS2,I1,I2,I3 = symbols("V_S1 V_S2 I_1 I_2 I_3")
# write equations resulting from mesh analysis
eq1 = Eq(-VS1 + R1*(I1-I3) - R2*(-I1+I2), 0) 
eq2 = Eq( R2*(-I1+I2) + R3*(I2-I3) + VS2, 0)
eq3 = Eq( R4*(I3) - R1*(I1-I3) - R3*(I2-I3), 0)
# create a list of equations
eqs = [eq1, eq2, eq3] 
# create a list of unknown variables
Is = [I1,I2,I3]   
# display equations
for eq in eqs:
    display( factor(eq,Is) )
# rewrite the equation system as A*x = b
# use sympy.solvers.solveset.linear_eq_to_matrix()  
A,b = linear_eq_to_matrix( eqs, Is )
# show the matrix A and the vector b
display( Math('A = ' + latex(A)) )  
display( Math('b = ' + latex(b)) )
#
# substitute circuit parameters with specific values
params = {VS1:10,VS2:15,R1:10,R2:50,R3:5,R4:10}
eqn = [eq.subs(params) for eq in eqs]
#
# Method 1) use sympy.solvers.solvers.solve()
sol = solve( eqn, Is )
ltx = ''
for I_i,expr in sol.items():
    ltx += latex(I_i) + '=' + latex(expr) + ',' 
# show mesh currents (in Amperes)
display( Math(ltx[:-1] ) )
#
# Method 2)
# create the augmented matrix A|b
A,b = linear_eq_to_matrix( eqn, Is )
A_aug = A.row_join(b)
sol = solve_linear_system( A_aug, *Is )
ltx = ''
for I_i,expr in sol.items():
    ltx += latex(I_i) + '=' + latex(float(expr)) + ',' 
# show mesh currents (in Amperes)
display( Math(ltx[:-1]) )

รูป: ตัวอย่างการใช้ JupyterLab เพื่อสร้างรันโค้ด Python

รูป: ตัวอย่างเอาต์พุตที่แสดงระบบสมการและรูปของเมทริกซ์และเวกเตอร์ที่เกี่ยวข้อง

 


ตัวอย่างที่ 5: การวิเคราะห์วงจรด้วยวิธี Nodal Analysis#

วงจรถัดไปมีความซับซ้อนมากกว่าวงจรในตัวอย่างที่ 1 และ 2 และจะเห็นได้ว่า มีองค์ประกอบดังนี้

  • ตัวต้านทาน
  • แหล่งจ่ายแรงดันไฟฟ้าคงที่ และ
  • แหล่งจ่ายกระแสไฟฟ้าคงที่ และ

รูป: ผังวงจรสำหรับตัวอย่างที่ 3

การวิเคราะห์วงจรโดยใช้วิธี (Modified) Nodal Analysis มีดังนี้

และมีข้อสังเกตว่า

  • สมการ ได้จากการวิเคราะห์ด้วย KCL
  • สมการ ได้จากแรงดันตกคร่อมที่ขั้วบวกและลบของแหล่งจ่ายคงที่ และ ตามลำดับ
  • ระหว่างโหนด 2 กับ 0 เป็นแหล่งจ่ายแรงดันคงที่ และได้ผลต่างเท่ากับ
  • ระหว่างโหนด 5 กับ 4 เป็นแหล่งจ่ายแรงดันคงที่ และได้ผลต่างเท่ากับ

รูป: แสดง SPICE netlist ของวงจรเมื่อวาดผังวงจรโดยใช้ EasyEDA

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

จากผลการวิเคราะห์วงจรด้วย EasyEDA / LTSpice (ดูผลจาก Simulation Results) จะได้แรงดันของโหนดตามหมายเลข เป็นค่าตัวเลขดังนี้

  • V(1) = 3V
  • V(2) = 10V
  • V(3) = 18V
  • V(4) = 11V
  • V(5) = 16V
  • V(6) = 17V

และกระแสที่ไหลผ่านตัวต้านทาน ตามลำดับ จะได้ค่าตัวเลข (ค่าประมาณ) ดังนี้

  • I(R1) = +0.2A เมื่อกำหนดทิศทางจากโหนด 4 ไปยัง 2
  • I(R2) = -0.8A เมื่อกำหนดทิศทางจากโหนด 2 ไปยัง 3
  • I(R3) = -0.2A เมื่อกำหนดทิศทางจากโหนด 6 ไปยัง 5
  • I(R4) = -0.1A เมื่อกำหนดทิศทางจากโหนด 6 ไปยัง 3
  • I(R5) = +1.0A เมื่อกำหนดทิศทางจากโหนด 1 ไปยัง 0
  • I(R6) = -0.1A เมื่อกำหนดทิศทางจากโหนด 6 ไปยัง 3

รูป: ผลการวิเคราะห์ปริมาณทางไฟฟ้าในวงจรโดยใช้ EasyEDA / LTspice

 


ตัวอย่างที่ 6: โค้ด Python เพื่อช่วยในการวิเคราะห์วงจร#

เมื่อได้ระบบสมการเชิงเส้นจากตัวอย่างที่ 5 และมีจำนวนสมการเท่ากับจำนวนของแรงดันไฟฟ้าของโหนด ถัดไปตัวอย่างการเขียนโค้ด Python เพื่อแสดงสมการในรูปของเมทริกซ์และเวกเตอร์ และคำนวณค่าตัวเลขที่เป็นผลเฉลยของระบบสมการเชิงเส้น

from sympy import *
from IPython.display import display, Math
# declare symbols for circuit parameters
R1,R2,R3,R4,R5,R6 = symbols("R_1 R_2 R_3 R_4 R_5 R_6")
VS1,VS2,IS1,IS2   = symbols("V_S1 V_S2 I_S1 I_S2")
V1,V2,V3,V4,V5,V6 = symbols("V_1 V_2 V_3 V_4 V_5 V_6")
# write the equations derived from Modified Nodal Analysis
eqs = [ 
    Eq( (V2-V3)/R2, (V3-V6)/R4 + IS1 + (V3-V6)/R6 - IS2 ),
    Eq( (V2-V4)/R1, (V5-V6)/R3 ),
    Eq( (V5-V6)/R3, (V6-V3)/R4 + (V6-V3)/R6 ),
    Eq( V1/R5, IS1 ),
    Eq( V2, VS1 ),
    Eq( V5-V4, VS2 ) ]
# define a list of unknown variables
Vs = [V1,V2,V3,V4,V5,V6]
#
# rewrite the equation system as A*x = b
# use sympy.solvers.solveset.linear_eq_to_matrix()  
A,b = linear_eq_to_matrix( eqs, Vs )
# show the matrix A
display( Math('A = ' + latex(A)) ) 
# show the vector b (in transpose form)
display( Math('b = ' + latex(b)) )
#
# substitute circuit paramaters with specific values
params = {VS1:10,VS2:5,IS1:1,IS2:2}
params.update( {R1:5,R2:10,R3:5,R4:10,R5:3,R6:10} )
eqn = [eq.subs(params) for eq in eqs]
#
# solve the linear equation system to find the solution
sol = solve( eqn, Vs )
#
# display the node voltages sorted by names
Vs = dict()
for k in sol.keys():
    value = float(sol[k])
    Vs.update( {str(k): '{:.1f}'.format(value)} )
for v_i,value in sorted(Vs.items()):
    display( Math(v_i + '=' + value + ' V') )

รูป: เมทริกซ์และเวกเตอร์ที่ได้จากระบบสมการเชิงเส้น

 


กล่าวสรุป#

บทความนี้นำเสนอการวิธีการวิเคราะห์วงจรไฟฟ้ากระแสตรง และเปรียบเทียบกับผลการวิเคราะห์การทำงานของวงจร โดยใช้ซอฟต์แวร์ EasyEDA และมีตัวอย่างการเขียนโค้ด Python โดยใช้โมดูล SymPy เพื่อช่วยคำนวณและหาคำตอบของระบบสมการเชิงเส้น


This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Created: 2022-05-03 | Last Updated: 2022-05-04