引入

对于只含有电阻、独立源、受控源、运算放大器的电路,可以通过结点电压法,求出各个结点的电压,进而求出支路电流、等效电路等信息。

对于动态电路,不同电路结构处理的方法有所不同。

当电路的动态元件只有一个时,电路其余部分在动态元件端口处可用戴维宁定理等效为电压源与电阻的串联。以由电容组成的一阶电路为例:

电容电压$uc(t)$为变量的微分方程为:

$$C\frac{\mathrm{d} uc}{\mathrm{d} t} + \frac{uc}{R} = Us$$

当电路的动态元件有两个及以上时,情况变得更为复杂。为了方便起见,此处只讨论电源动态元件有两个,且是串联或并联关系,在这种情况下可以沿用一阶电路的分析方法,先将动态元件以外的电路进行等效,再求解微分方程(组)。

二阶串联时,电路图变为:

电容电压$uc(t)$为变量的微分方程为:

$$LC\frac{\mathrm{d^2} uc}{\mathrm{d} t^2} + RC\frac{\mathrm{d} uc}{\mathrm{d} t} + \frac{uc}{R} = Us$$

二阶并联时,电路图变为:

电容电压$uc$和电感电流$il$为变量的微分方程组为:

$$R(C\frac{\mathrm{d} uc}{\mathrm{d} t} + il ) + uc= Us$$

$$L\frac{\mathrm{d} il}{\mathrm{d} t} = uc$$

求得微分方程(组)的解,电路的其他信息就不难求出。

编程实现示例

以通过Matlab App Designer实现为例,程序界面如图

思路是先确定节点数,然后输入电路结构,做戴维宁等效电路。

再输入动态元件参数,把动态元件放入等效电路中,最后求解微分方程(组),绘图。

总体编程难度适中,但是有一些小细节:

  • 用结点电压法求得各个结点的电压后,如果端口 $Isc=0 \quad or \quad inf$ 需要做特判。

如果 $Isc=0$ ,需要使用外加电源法求等效电阻,这时要找到结点电压法建立的矩阵。作者的处理方法是:端口 $Isc$ 计算需要该矩阵(加一个 $U=0$ 的电压源),外加电源法也需要该矩阵(加一个 $U$ 自定义的电压源),故在刚建立完该矩阵时就开一个变量进行记录。

如果 $Isc=inf$ ,说明 $Req=0$

  • 端口如果是0号结点需要特判(结点电压法已经去掉0号结点)
  • 设置可调的$x$坐标轴,方便调整、观察图像
  • Matlab 求解微分方程(组):dsovle;代入数值:subs
  • 程序组件多,建议打注释,变量名要规范,不然调试会遇到麻烦。

下面是一阶RC电路的部分示例

function DrawCButtonPushed(app, event)
            us = app.U; req = app.R; C = app.CSpinner.Value;
            u0 = app.U0VSpinner.Value; tao = req * C;
            t = 0 : 0.05 * tao : 10 * tao;
            f = dsolve('req*C*Dy+y=us', 'y(0)=u0');
            f = subs(f, {'req', 'C', 'us', 'u0'}, {req, C, us, u0});
            str = sprintf('Uc的暂态方程是:%s\n时间参数tao = %.1i', f, tao);
            app.TextArea.Value = str;
            app.Fu = f; app.T = tao;
            f = subs(f, {'t'}, t);
            hold(app.UIAxes, 'off')
            plot(app.UIAxes, t, f);
            app.UIAxes.Title.String = 'Uc暂态曲线';
            app.UIAxes.XLabel.String = '时间/s';
            app.UIAxes.YLabel.String = '电压/V';
        end
03-05 16:13