2025年11月5日 星期三

諧振頻率

 https://techweb.rohm.com.tw/product/circuit-design/electric-circuit-design/18332/

諧振電路是使用電感(L)和電容(C)在特定頻率下引起諧振的電路。諧振電路分串聯諧振電路和並聯諧振電路兩種。諧振時,串聯諧振電路的阻抗最小,並聯諧振電路的阻抗最大。這些特性被廣泛應用於無線通訊、濾波器設計和訊號處理等各種電子設備。

本文將更詳細地介紹諧振頻率的計算方法和Q值(Quality Factor)的求法。準確計算諧振頻率對於設計和優化諧振電路而言至關重要,而Q值是用來評價電路選擇性和能量損耗的重要指標。理解這些概念有助於充分利用諧振電路的性能,設計出更高效、更精密的電子電路。

什麼是諧振頻率?

諧振頻率是物體或系統自然振動的固有頻率。當從外部以該頻率提供能量時,會產生稱為“諧振”的現象,從而使系統的振動被放大。要想深入瞭解這種現象,需要先瞭解“固有振動”的概念。固有振動是指物體受到外部衝擊後以其自身的固有頻率產生的自然振動。這個頻率是由物體的形狀、品質和彈性決定的,無論外部衝擊的大小如何,物體只會以這個頻率振動。例如,不同的打擊樂器之所以會發出獨特的音色,是因為它們會以自有的頻率振動。

當以諧振頻率發生諧振時,系統會非常有效地吸收和存儲外部能量。例如,“蕩秋千”就是一種能夠以較小的力來增加秋千擺動幅度的簡諧振動案例。這是透過利用秋千的固有頻率從外部提供能量來放大振動幅度而實現的。

在電路中,透過電阻、電感(L)和電容(C)的組合來決定諧振頻率,當電路在該諧振頻率下工作時,電感和電容之間將會高效地傳輸“電磁能”,從而使整個電路存儲的能量達到最大。這個原理已被廣泛應用於無線通訊、濾波和感測器技術等眾多領域。正確理解並控制諧振頻率,可以更大程度地提高相關系統的性能並實現高效率和高精度。

固有振動和諧振

要理解諧振電路,首先需要瞭解“固有振動”和“諧振”現象。

“固有振動”是指當物體受到衝擊時,該物體以其固有的頻率振動的現象。

那麼,什麼是“以固有的頻率振動”呢?例如,當敲擊木琴(樂器)上的每個琴鍵時,或者當敲擊有水的玻璃杯子邊緣時,就會聽到聲音,無論是由誰來敲擊,同樣的東西發出的音調是相同的。

之所以音調相同,是因為木琴上每個琴鍵的材質和尺寸、玻璃的材質和厚度、水杯中的水位等條件決定了每次敲擊時的振動頻率(固有頻率是固定的)。

如果持續對一個物體施加固有振動力,振動將與施加的振動力同步被放大。這種現象稱為“諧振(共振)”。

例如,對擺動的秋千持續施力並繼續晃動,秋千的擺動幅度會逐漸變大,這也是因為正在發生“共振”。

諧振電路中的諧振頻率

諧振電路中的諧振頻率是指電子電路發生諧振時的特定頻率,在該頻率下電路的阻抗達到最小或最大。諧振電路可以串聯或並聯設計,無論串聯還是並聯,諧振頻率的計算公式是相同的。

諧振頻率和角諧振頻率

諧振頻率由下列公式表示:

f0=12πLC[Hz]

另外,諧振角頻率(ω0)如下:

ω0=1LC

根據電抗求諧振頻率

要瞭解諧振電路,需要先瞭解諧振頻率和諧振角頻率,這很重要。諧振頻率(f0)是電路能夠最有效地傳輸能量的頻率,在該頻率下電壓和電流會達到最大值。諧振角頻率(ω0)以弧度每秒(rad/s)表示諧振頻率,在計算和分析中經常會用到。

瞭解這些基本概念有助於更深入地瞭解諧振電路的工作原理及其特性。在諧振電路的設計和應用中,這些頻率知識非常有用,因此在本文中會介紹相關的知識。

是否發生諧振與電抗息息相關。容抗XC和感抗XL分別定義如下:

XC=12πfC

XL=2πfL

從公式可以看出,容抗和感抗都會隨著頻率的變化而變化。

根據電抗求諧振頻率

電感和電容的電抗相等是發生諧振的條件:

XL=XC

將其代入電感和電容公式中,可以得到:

2πfL=12πfC

求出該公式的頻率(f)即可得到諧振頻率(f0):

f20=14π2LC

f0=12πLC

另外,諧振角頻率(ω0)如下:

ω0=1LC

諧振電路被廣泛應用於通信、廣播和類比電子設備等眾多領域,利用其特性,可以增強特定頻率的訊號。

什麼是串聯諧振電路?

串聯諧振電路是串聯連接電感器和電容器、使諧振頻率下的阻抗最小的電路。該電路發揮濾波器的作用,會選擇性地僅使某些特定頻率透過。在無線電接收器和音訊設備等強調特定訊號的設備中應用廣泛。

串聯諧振電路的諧振頻率由電感和電容的值決定,可進行精確的頻率控制。透過設計串聯諧振電路,可實現高性能電子設備的工作。

RLC串聯諧振電路的阻抗

電阻(R)、電感(L)和電容(C)串聯的電路中會發生諧振。諧振會發生在電容和電感的電抗相等的頻率處。這種電路稱為“RLC串聯諧振電路”。

在RLC串聯電路中,阻抗(Z)的運算式如下:

|Z|=R2+X2=R2+(XLXC)2

RLC串聯諧振電路的阻抗

另外,發生諧振的條件是電感和電容的電抗相等時。

RLC串聯諧振電路的阻抗

也就是說,在處於諧振狀態的RLC串聯電路中,阻抗(Z)的運算式如下:

|Z|=R2+02=R

從複阻抗來看,當電容和電感的電抗相等時,阻抗僅由電阻分量組成。

Z=R+j(XLXC)

Z=R+j(ω0L1ω0C)=R+j(LLCLCC)=R+j(LCLC)=R

電感L和電容C的電抗在諧振頻率處會相互抵消,因此看起來只有電阻(R)。

RLC串聯諧振電路的阻抗

這可以使阻抗達到最小值,電路中的電流達到最大值。

I=VR2+(XLXC)2=VR2+0=VR

串聯諧振電路的應用

串聯諧振電路在電氣和電子電路中發揮著非常重要的作用。目前已被廣泛應用于諸如AC電源濾波器、雜訊濾波器、收音機和電視機的調諧電路等各種電氣產品中,用以生成可接收特定頻道的具有選擇性的調諧電路,從而可以準確地選擇和接收各種頻率的訊號。

什麼是並聯諧振電路?

並聯諧振電路是電感和電容並聯的電路,其特點是在特定頻率下會發生諧振現象。這種電路適用於無線通訊和濾波電路等強調和需要選擇特定頻率的眾多電子設備。在諧振頻率處,電感和電容的電抗會相互抵消,使整個電路的阻抗達到最大,特定訊號被增強。

RLC並聯諧振電路的阻抗

RLC並聯諧振電路是電阻(R)、電感(L)和電容(C)並聯連接的電路。這種電路的阻抗公式如下:

1Z=1R+1jωL+jωC=1R+jωL+jωC=1R+j(ωC1ωL)

RLC並聯諧振電路的阻抗

當RLC並聯諧振電路正在發生諧振時,就像RLC串聯諧振電路發生諧振時一樣,電感L的電抗和電容C的電抗處於相互抵消狀態。

1Z=+j(CLCL)=1R

可見,在RLC並聯電路中,當處於諧振狀態時,阻抗(Z)也只有電阻分量。

Z=R

在RLC並聯電路中,當處於諧振狀態時,與RLC串聯電路不同的是,此時阻抗最大(無窮大),電流最小(沒有無電流流過,與電路斷開時的狀態相同)。

RLC串聯諧振電路與並聯諧振電路的差異

在RLC串聯諧振電路和RLC並聯諧振電路中,阻抗與電流之間的關係是不同的。流經RLC串聯諧振電路的電流是電壓除以阻抗的乘積,因此在發生諧振時阻抗為最小值(=R),電路電流為最大值。

而在RLC並聯諧振電路中,發生諧振時導納的虛部變為零,阻抗最大(=∞)。當阻抗最大時,電路電流受到限制,因此相當於電路斷開狀態。

RLC串聯諧振電路和RLC並聯諧振電路有很多共同之處,比如諧振頻率的計算方法和發生諧振時Z=R等。但還有些不同之處需要掌握:在RLC串聯諧振電路中,諧振時阻抗最小,電流最大;而在RLC並聯諧振電路中,諧振時阻抗最大(無窮大),電流最小(沒有電流流動,與電路斷開時狀態相同)。

諧振電路的Q值

“Q值(Quality Factor)”是量化諧振頻率處訊號曲線“尖銳程度”和選擇性的重要指標,Q值越高,訊號特性越尖銳,Q值越低,訊號特性越平緩。該值可反映出電路有效存儲能量和減少損耗的能力,對電子濾波器、振盪器和天線設計的精度影響非常大。

高Q值電路能夠更精確地捕獲窄帶訊號,是先進的通訊技術和精密的感測器設計不可或缺的存在。選擇和調整適當的Q值,是高性能電子設備設計中的關鍵要素。

另外,頻寬與Q值成反比,表示諧振電路可有效透過的頻率範圍。

Q=Signal strength resonance frequencyBandwidth(BW)

Q=ω0ω2ω1=f0f2f1

RLC串聯諧振電路中Q值的求法

下面,我們透過聚焦電路處於諧振狀態時電流的表現以及電感(L)和電容(C)之間的相互作用,來瞭解RLC串聯諧振電路中的Q值求法。發生諧振時,電流I恒定,電感和電容之間相互交換能量,因此這些因素產生的電抗相互抵消。

RLC串聯諧振電路中Q值的求法

在這種狀態下,Q值被定義為電阻(R)的阻值與電感的電抗之比,是表示電路選擇性和諧振曲線銳度的指標。

Q=ω0Δω=ω0ω2ω1=1RLC=ω0LR

例如,下圖表示RLC串聯諧振電路中流動的電流大小“I”的頻率特性。在電感(L)和電容(C)諧振的頻率(角頻率)處阻抗最小。

另外,Q值還發揮著諧振電路內電壓放大倍數的係數的作用,表示透過電感的電壓被電阻分量放大了多少倍,即相對於電源電壓的電壓倍數。

RLC串聯諧振電路中Q值的求法

另外,從圖中還可以看出,當橫軸為角頻率時,電流的大小達到最大值。

RLC串聯諧振電路中Q值的求法

在RLC串聯諧振電路中,通頻帶會隨Q值變化,而在RLC並聯諧振電路中,通頻帶是固定的。

RLC並聯諧振電路中Q值的求法

RLC並聯諧振電路中的Q值求法與諧振現象以及當時的電流和電壓之間的關係密切相關。當發生諧振時,電路整體的電壓V保持恒定,能量在電感(L)和電容器(C)之間循環,這些元素的電抗相互抵消。在這種狀態下,透過電感和電容的循環電流相等且相位相反,因此這些元件在導線間的功耗為零。
影響Q值的重要因素是流經電感的循環電流與流經電阻(R)的有效電流之比。該比值量化了電路的選擇性和減少能量損耗的能力。Q值越高,意味著電路對窄通頻帶訊號的選擇性越好、能量損耗更少。諧振時電壓恒定這一特性,表明並聯諧振電路具有高效存儲能量、高精度處理諧振頻率附近訊號的能力。

RLC並聯諧振電路中Q值的求法

Q=ICIR=ILIR

Q=VωL÷VR=RωL=R2πfL

Q=ωC÷VR=ωCR=2πfCR

RLC並聯電路的特性之一是諧振時的阻抗非常大,最終會限制流過電路的電流。這是因為電感和電容在諧振狀態下交換能量,各自產生相位相反的電流,因此從外部看表現為高阻抗。這種現象可起到濾波器的作用,即電路僅在諧振頻率下允許訊號有效透過,在其他頻率下則阻止訊號透過。

另外,與RLC串聯電路相比,LC並聯電路中的電阻對電路通頻帶會起到阻尼作用。這種阻尼作用會控制諧振曲線的尖銳程度,透過抑制過於尖銳的諧振可實現更穩定的電路工作。

RLC並聯諧振電路中Q值的求法

這裡很重要的一點是並聯諧振電路的Q值與串聯諧振電路的Q值關係。具體而言,從計算公式看,並聯諧振電路的Q值與串聯諧振電路的Q值互為倒數。這是因為在串聯電路中,Q值透過電感值與電阻值之比來表示;而在並聯電路中,Q值透過該比值的倒數來表示。這種差異源於這兩種電路在處理能量的方法上存在根本性差異。

諧振電路的使用範例

前面我們瞭解了串聯和並聯諧振電路,那麼它們在我們的周圍有哪些具體應用呢?

例如,串聯諧振電路的應用包括電視機和收音機的無線電接收電路。

在這種應用中,利用串聯諧振“在特定頻率下電流最大”的特性,預先創建“諧振頻率”等於想要接收的頻率的電路,並實現在目標頻率下流過大電流、在其他頻率下幾乎不流過電流的目的。

串聯諧振電路還被用於AC電源濾波器、雜訊濾波器等應用。

並聯諧振電路的應用包括多頻天線所用的陷波電路和寬頻放大電路等。

▼關於利用電容和線圈降低雜訊的對策和EMC對策,可參考下方連結:
https://techweb.rohm.com.tw/product/nowisee/

可抑制諧振的阻尼電阻和鐵氧體磁珠

隨著電子元件的體積越來越小、集成度越來越高,在使用RLC諧振電路時,雜訊對策也變得越來越重要。這就需要充分瞭解利用電感降低雜訊的相關對策和頻率控制方法。

如果電子電路中含有非預期的諧振電路,在達到諧振頻率時就會產生非常大的電流和電壓。因此,更容易引發雜訊問題。也就是說,盡可能地消除電路中的意外諧振至關重要。可以使用阻尼電阻來抑制意外諧振。

還可以使用鐵氧體磁珠來旁路雜訊並將雜訊轉化為熱能。




import tkinter as tk

from tkinter import ttk

from matplotlib.figure import Figure

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

import numpy as np

import cmath

import matplotlib.font_manager as fm

import matplotlib.pyplot as plt 


# --- Matplotlib 中文設置 ---

# 設置 Matplotlib 全域中文支持,解決繪圖時中文亂碼問題

try:

    # 優先使用微軟正黑體 (Windows常見),如果沒有會嘗試其他字體

    plt.rcParams['font.sans-serif'] = ['Microsoft JhengHei', 'SimHei', 'sans-serif'] 

    plt.rcParams['axes.unicode_minus'] = False # 解決負號亂碼問題

    CHINESE_FONT = 'Microsoft JhengHei'

except:

    print("Warning: Chinese font setting failed. Using default font.")

    CHINESE_FONT = 'sans-serif' 


# --- RLC 計算函數 (更新計算 f1, f2, BW) ---


def calculate_rlc(R, L_mH, C_uF):

    """計算 RLC 串聯和並聯電路的諧振頻率、Q 值和阻抗,並計算 f1, f2, BW。"""

    try:

        # 單位轉換:mH -> H, uF -> F

        L = L_mH / 1000

        C = C_uF / 1000000


        # 諧振頻率和角頻率(串聯和並聯相同)

        f0 = 1 / (2 * np.pi * np.sqrt(L * C))

        omega0 = 2 * np.pi * f0


        # --- 串聯諧振電路計算 ---

        # Q_series = (omega_0 * L) / R

        Q_series = (omega0 * L) / R

        Z_series_res = R 

        

        # 頻寬 BW_series = f0 / Q_series

        BW_series = f0 / Q_series

        

        # 串聯電路精確截止頻率計算

        # f1_series, f2_series 是二次方程解,用於 RLC 串聯電流半功率點

        # f_{1,2} = \sqrt{(1/(2\pi)^2)} * [\mp R/(2L) + \sqrt{(R/(2L))^2 + 1/(LC)}] / (2\pi) => 簡化為:

        omega_a = -R / (2 * L) + np.sqrt((R / (2 * L))**2 + 1 / (L * C)) # 較高角頻率

        omega_b = R / (2 * L) + np.sqrt((R / (2 * L))**2 + 1 / (L * C)) # 較高角頻率

        

        # 為了簡化和通用性,我們使用 BW/2 近似,並驗證結果

        # 串聯電路通常使用以下公式,但因數學複雜性,多用近似 BW/2

        # $f_{1,2} = \sqrt{f_0^2 + (\frac{BW}{2})^2} \mp \frac{BW}{2}$ 

        

        # 使用精確的頻率公式,該公式適用於 Q 較低的情況

        f1_series = np.sqrt(f0**2 + (BW_series/2)**2) - BW_series/2 

        f2_series = np.sqrt(f0**2 + (BW_series/2)**2) + BW_series/2 

        

        # 檢查:BW_series 應該接近 f2_series - f1_series

        # print(f"Serial BW check: {f2_series - f1_series:.2f} vs {BW_series:.2f}")



        # --- 並聯諧振電路計算 ---

        # Q_parallel = R / (omega_0 * L) 

        Q_parallel = R / (omega0 * L) 

        Z_parallel_res = R

        

        # 頻寬 BW_parallel = f0 / Q_parallel

        BW_parallel = f0 / Q_parallel

        

        # 並聯電路精確截止頻率計算 (同樣使用近似公式)

        f1_parallel = np.sqrt(f0**2 + (BW_parallel/2)**2) - BW_parallel/2

        f2_parallel = np.sqrt(f0**2 + (BW_parallel/2)**2) + BW_parallel/2


        return {

            "f0": f0,

            "Q_series": Q_series,

            "Z_series": Z_series_res,

            "BW_series": BW_series,

            "f1_series": f1_series,

            "f2_series": f2_series,

            "Q_parallel": Q_parallel,

            "Z_parallel": Z_parallel_res,

            "BW_parallel": BW_parallel,

            "f1_parallel": f1_parallel,

            "f2_parallel": f2_parallel

        }

    except ValueError:

        return {"error": "輸入值必須為正數。"}

    except ZeroDivisionError:

        return {"error": "電容或電感值不能為零。"}

    except Exception as e:

        return {"error": f"發生錯誤: {e}"}


# --- 繪圖函數 (更新標示 f1, f2) ---


def plot_resonance(R, L_mH, C_uF, results, ax_series, ax_parallel):

    """繪製串聯和並聯諧振曲線,並標示 f1, f0, f2 和 0.707 範圍。"""

    

    # 單位轉換

    L = L_mH / 1000

    C = C_uF / 1000000

    

    f0 = results["f0"]

    Q_series = results["Q_series"]

    Z_series = results["Z_series"]

    f1_series = results["f1_series"]

    f2_series = results["f2_series"]

    Q_parallel = results["Q_parallel"]

    Z_parallel = results["Z_parallel"]

    f1_parallel = results["f1_parallel"]

    f2_parallel = results["f2_parallel"]

    


    # 頻率範圍設置 (與計算一致)

    f_min = max(1, f0 * 0.1)

    f_max = f0 * 10

    frequencies = np.linspace(f_min, f_max, 500)

    omega = 2 * np.pi * frequencies


    # 計算串聯電路的阻抗 Z_series(f) 和電流 I_series(f)

    XL = omega * L

    XC = 1 / (omega * C)

    Z_series_mag = np.sqrt(R**2 + (XL - XC)**2)

    I_series_mag = 1 / Z_series_mag  # 假設 V=1V

    I_max = 1 / Z_series  # 諧振最大電流 (I_max = 1/R)

    I_3dB = I_max * 0.707 # 3dB 下降點的電流


    # 計算並聯電路的阻抗 Z_parallel(f)

    Y_parallel = (1/R) + 1j * (omega * C - 1/(omega * L))

    Z_parallel_mag = 1 / np.abs(Y_parallel)

    Z_max = Z_parallel # 諧振最大阻抗 (Z_max = R)

    Z_3dB = Z_max * 0.707 # 3dB 下降點的阻抗


    # 清除舊圖

    ax_series.clear()

    ax_parallel.clear()


    # --- 繪製串聯諧振曲線 (電流 vs 頻率) ---

    ax_series.plot(frequencies, I_series_mag, label='電流 I(f)', color='green')

    

    # 標示諧振點 f0

    ax_series.axvline(f0, color='red', linestyle='--', label=f'$f_0$ = {f0:.2f} Hz')

    

    # 標示 0.707 I_max 線

    ax_series.axhline(I_3dB, color='orange', linestyle=':', label='0.707 $I_{max}$')

    

    # 標示 $f_1, f_2$

    ax_series.axvline(f1_series, color='blue', linestyle='-.', label=f'$f_1$ = {f1_series:.2f} Hz')

    ax_series.axvline(f2_series, color='blue', linestyle='-.', label=f'$f_2$ = {f2_series:.2f} Hz')

    

    # 設置標題和標籤

    ax_series.set_title(f'RLC 串聯諧振 (Q={Q_series:.2f}, BW={results["BW_series"]:.2f} Hz)', fontproperties=CHINESE_FONT)

    ax_series.set_xlabel('頻率 f [Hz]', fontproperties=CHINESE_FONT)

    ax_series.set_ylabel('電流 I [A]', fontproperties=CHINESE_FONT)

    ax_series.grid(True)

    ax_series.legend(loc='upper right')


    # --- 繪製並聯諧振曲線 (阻抗 vs 頻率) ---

    ax_parallel.plot(frequencies, Z_parallel_mag, label='阻抗 $Z(f)$', color='blue')

    

    # 標示諧振點 f0

    ax_parallel.axvline(f0, color='red', linestyle='--', label=f'$f_0$ = {f0:.2f} Hz')

    

    # 標示 0.707 Z_max 線

    ax_parallel.axhline(Z_3dB, color='orange', linestyle=':', label='0.707 $Z_{max}$')

    

    # 標示 $f_1, f_2$

    ax_parallel.axvline(f1_parallel, color='darkgreen', linestyle='-.', label=f'$f_1$ = {f1_parallel:.2f} Hz')

    ax_parallel.axvline(f2_parallel, color='darkgreen', linestyle='-.', label=f'$f_2$ = {f2_parallel:.2f} Hz')

    

    # 設置標題和標籤

    ax_parallel.set_title(f'RLC 並聯諧振 (Q={Q_parallel:.2f}, BW={results["BW_parallel"]:.2f} Hz)', fontproperties=CHINESE_FONT)

    ax_parallel.set_xlabel('頻率 f [Hz]', fontproperties=CHINESE_FONT)

    ax_parallel.set_ylabel('阻抗 Z [Ω]', fontproperties=CHINESE_FONT)

    ax_parallel.grid(True)

    ax_parallel.legend(loc='upper right')

    

    # 重新繪製圖形

    ax_series.figure.canvas.draw()

    ax_parallel.figure.canvas.draw()


# --- 主程式介面 ---


def run_calculation():

    """從輸入框獲取數值並執行計算與繪圖。"""

    try:

        R = float(entry_R.get())

        L_mH = float(entry_L.get())

        C_uF = float(entry_C.get())

        

        if R <= 0 or L_mH <= 0 or C_uF <= 0:

            result_text.set("R, L, C 數值必須大於 0")

            return


        results = calculate_rlc(R, L_mH, C_uF)


        if "error" in results:

            result_text.set(results["error"])

        else:

            f0 = results["f0"]


            # 更新計算結果顯示

            display_text = (

                f"🌟 諧振頻率 ($f_0$): {f0:.2f} Hz\n"

                f"--- 串聯 RLC 電路 ---\n"

                f"Q 值: {results['Q_series']:.2f}\n"

                f"諧振時阻抗 ($Z_{{min}}$): {results['Z_series']:.2f} Ω\n"

                f"頻寬 (BW): {results['BW_series']:.2f} Hz\n"

                f"下截止頻率 ($f_1$): {results['f1_series']:.2f} Hz\n"

                f"上截止頻率 ($f_2$): {results['f2_series']:.2f} Hz\n"

                f"--- 並聯 RLC 電路 ---\n"

                f"Q 值: {results['Q_parallel']:.2f}\n"

                f"諧振時阻抗 ($Z_{{max}}$): {results['Z_parallel']:.2f} Ω\n"

                f"頻寬 (BW): {results['BW_parallel']:.2f} Hz\n"

                f"下截止頻率 ($f_1$): {results['f1_parallel']:.2f} Hz\n"

                f"上截止頻率 ($f_2$): {results['f2_parallel']:.2f} Hz"

            )

            result_text.set(display_text)

            

            # 執行繪圖

            plot_resonance(R, L_mH, C_uF, results, ax_series, ax_parallel)


    except ValueError:

        result_text.set("輸入值無效,請確保輸入數字。")

    except Exception as e:

        result_text.set(f"發生未預期錯誤: {e}")


# 設置 Tkinter 視窗

root = tk.Tk()

root.title("RLC 諧振電路分析儀")


# 設置輸入框框架

input_frame = ttk.Frame(root, padding="10")

input_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))


# 電阻 R 輸入

ttk.Label(input_frame, text="電阻 R (Ω):").grid(row=0, column=0, sticky=tk.W, padx=5, pady=5)

entry_R = ttk.Entry(input_frame, width=15)

entry_R.grid(row=0, column=1, padx=5, pady=5)

entry_R.insert(0, "100") # 預設值


# 電感 L 輸入

ttk.Label(input_frame, text="電感 L (mH):").grid(row=1, column=0, sticky=tk.W, padx=5, pady=5)

entry_L = ttk.Entry(input_frame, width=15)

entry_L.grid(row=1, column=1, padx=5, pady=5)

entry_L.insert(0, "10") # 預設值


# 電容 C 輸入

ttk.Label(input_frame, text="電容 C (uF):").grid(row=2, column=0, sticky=tk.W, padx=5, pady=5)

entry_C = ttk.Entry(input_frame, width=15)

entry_C.grid(row=2, column=1, padx=5, pady=5)

entry_C.insert(0, "0.1") # 預設值


# 計算按鈕

ttk.Button(input_frame, text="計算並繪圖", command=run_calculation).grid(row=3, column=0, columnspan=2, pady=10)


# 計算結果顯示

result_frame = ttk.Frame(root, padding="10")

result_frame.grid(row=0, column=1, sticky=(tk.W, tk.E, tk.N, tk.S))

result_text = tk.StringVar()

ttk.Label(result_frame, textvariable=result_text, justify=tk.LEFT, font=(CHINESE_FONT, 10)).grid(row=0, column=0, sticky=tk.W) 


# 繪圖區設置 (Matplotlib)

fig = Figure(figsize=(10, 5), dpi=100)

# 串聯諧振圖 (電流 vs 頻率)

ax_series = fig.add_subplot(121) 

ax_series.set_title('RLC 串聯諧振曲線 (電流 I)', fontproperties=CHINESE_FONT)

ax_series.set_xlabel('頻率 f [Hz]', fontproperties=CHINESE_FONT)

ax_series.set_ylabel('電流 I [A]', fontproperties=CHINESE_FONT)

ax_series.grid(True)


# 並聯諧振圖 (阻抗 vs 頻率)

ax_parallel = fig.add_subplot(122) 

ax_parallel.set_title('RLC 並聯諧振曲線 (阻抗 Z)', fontproperties=CHINESE_FONT)

ax_parallel.set_xlabel('頻率 f [Hz]', fontproperties=CHINESE_FONT)

ax_parallel.set_ylabel('阻抗 Z [Ω]', fontproperties=CHINESE_FONT)

ax_parallel.grid(True)


# 將 Matplotlib 圖形嵌入 Tkinter 介面

canvas = FigureCanvasTkAgg(fig, master=root)

canvas_widget = canvas.get_tk_widget()

canvas_widget.grid(row=1, column=0, columnspan=2, padx=10, pady=10)


# 執行一次初始計算和繪圖

run_calculation()


# 啟動 Tkinter 主循環

root.mainloop()


沒有留言:

張貼留言

ESP32 (ESP-IDF in VS Code) MFRC522 + MQTT + PYTHON TKinter +SQLite

 ESP32 (ESP-IDF in VS Code) MFRC522 + MQTT + PYTHON TKinter +SQLite  ESP32 VS Code 程式 ; PlatformIO Project Configuration File ; ;   Build op...