有源功率因数校正电路matlab/simulink仿真

        功率因数是指有功功率与视在功率之间的关系。电路上由于无功功率的存在,将造成线路压降损失和能量损耗的问题,功率因数功率越大,系统的能量利用率也越高。功率因数校正电路的工作原理是控制输入交流电流波形和电压波形的相位保持一致,这是非常重要的,功率因数得以高于0.95甚至接近1,否则系统存在较多无功功率交换,带来的有功能耗可能超出规范,影响系统正常工作,甚至干扰电子设备或系统。有源功率因数校正电路(有源)通过控制开关触发信号调整输入电流波形相位跟踪电压波形来提高输入端功率因数,而无源功率因数校正电路(无源电路)则通过添加电感和电容的方法,改善功率因数较好,但成本较高,且可靠性将会受影响。
        原则上,有源功率因数校正可采用任何类型的DC/DC变换拓扑作为主电路。DC/DC转换器包括Buck(降压)电路、boos(升压)转换器、buck-boost(升降压)转换器等。从电路拓扑结构出发,升压和降压电路是最基本的两种结构,其余的电路均由这两种基本电路延伸而来。

        本文对Boost电路作为变换拓扑的APFC有源功率因数校正电路做了仿真。输入交流电源幅值220V,采用PI控制,输出电压目标400V。仿真电路如下。根据仿真结果可知,输出电压稳定在400V左右,波动较小。输入端电压与电流相位保持一致,很好地实现了功率因数为1的目标。

三相光伏逆变并网控制系统matlab/simulink仿真

        社会经济飞速发展,绿色新能源开发越来越受人们关注,传统的石化能源由于会对环境造成破坏和日益枯竭等原因,已不再是首选能源。作为广泛存在的一种清洁可再生能源,太阳能通过光伏并网发电的形式已被广泛应用、开发。
        不同于独立光伏系统,光伏(PV)并网系统接入电力系统,逆变器输出电流供给电网负载使用。并网后,逆变器输出电流和电压需要保持同频率和同相位,并符合电网的要求。在光照充足的情况下,逆变器输出电流通过光伏并网逆变器并网。当光线不足时,逆变器不再工作,负载转由电网供电。为了保证光伏系统稳定高效,其输出电压幅值、频率、电流谐波、功率因数等在并网要求范围内,需要采用特定的光伏并网控制器。逆变器输出电流需要达到电网的标准,总谐波畸变失真需要非常小,对应THD一般要求小于5%。同时,逆变器的输出电流必须和电网电压保持同相位,保证输出功率因数接近1,输出无功功率约为0。
        光伏(PV)并网控制的核心是控制策略,采用先进的控制策略,可以有效提高光伏并网系统的效率,提高输出到电力系统的电能质量,提高系统的性能。通过对光伏(PV)并网逆变器主电路拓扑结构分析,用基于SPWM调制方法的三相光伏(PV)并网逆变器,采用前馈解耦控制策略,使并网逆变器输出保持高功率因数和低电流谐波畸变。搭建如下图所示的三相光伏并网前馈解耦控制系统。

        控制目标为输出无功电流iq为0,id为70A,即功率因数1,离散步长仿真,输出并网电压电流如图所示,可见电压电流相位一致。对并网逆变器输出功率(上图为有功,下图为无功)进行分析,可见稳态时无功保持为0。

        下面用FFT分解对输出电流畸变进行分析。可见谐波畸变率为2.9%,符合小于5%的要求。

 

 

直流电动机电流转速双闭环V-M不可逆调速

        
        直流电机有良好的启动和制动性能。在过去的几十年里,直流电机调速方法已经发生了重大的变化。首先,整流部分升级,晶闸管整流器取代了传统的直流发电机和汞弧整流器。与此同时,控制电路实现了小型化和高可靠性,大大提高了直流调速系统的性能指标,扩大了其应用场合。直流调速技术不断成熟和完善,在不可逆脉冲宽度调速的情况下,高精度的电气领域仍然难以替代。采用速度和电流双闭环控制方法的直流调速系统具有动态性能好、易于控制、精度高等优点,目前已广泛应用于电力驱动系统。根据可控硅的特性,调整控制角的大小可调整电压。调速系统的主电路采用三相全控桥式整流电路将交流电变为直流电,供给直流电机。为了使速度、电流反馈环分别起作用,可在系统中设置两个控制器,实现速度和电流的双闭环控制。电流内环、速度外环是常用的形式,对提高系统动、稳态性能有很大帮助。近年来,交流调速系统发展也非常快,但直流调速系统在生产生活中也起着重要的作用。不可忽视的一点是,从理论和实践角度看直流驱动系统更成熟;从闭环控制的角度来看,它也是交流传动控制的基础。
        直流电动机电流转速双闭环V-M不可逆调速系统也称晶闸管-直流电动机调速系统(简称V-M系统,静止的Ward-Leonard系统)。博主根据工程设计的方法设计了调速系统的速度和电流调节器,电流回路反应跟随性能,速度环主要是抗干扰性能,电机满足静态和动态性能指标。主电路结构如下图所示。

        直流电机转速控制值为1500r/min,额定负载转矩为171N*m,正常启动时的转速曲线如下。1.5s后电机转速稳定在目标值1500,响应快,超调小。

        下面测试调速性能。在2s时将目标转速由1500r/min改为1800r/min,仿真结果如下。2s时转速由稳定值上升到1800,调速性能良好。

        下面测试抗干扰性能。在2s时将负载大小由转速由171N*m变为240N*m,仿真结果如下。2s时转速负载突然加重,转速略有下降,但经过控制器调整,很快回升到1500r/min,抗干扰性能良好。

 

Desmos画图代做创意绘图

        Desmos.com是很多国外数学教师课堂上最常用的授课工具。它可以用来创造线条,分析数据,解决问题,并且界面简单易用。Desmos官网这样描述他们的产品,“在Desmos,我们想象一个普遍用数学描述的世界,没有学生认为数学会太麻烦或者太枯燥。我们相信关键在于学习。当学习成为探索和发现之旅时,任何人都能理解并享受数学。为了实现这一愿景,我们已经开始构建下一代图形计算器,使用我们使用上强大而灵活的数学引擎,计算器可以立即绘制出任何方程,从直线和抛物线到导数和傅里叶级数。数据表打开了一个曲线拟合和建模的新世界。滑动器使它成为一种演示函数图形转换的工具。作为基于浏览器的html5技术,图形计算器在任何电脑或平板电脑上都能直接使用,无需下载安装。它是直观的,最重要的是:它是完全免费的。
        开始学习Desmos的最好方法是启动计算器,然后开始熟悉它。首先最好在主页上查看添加滑块、数据表和回归的教程,这些都是Desmos最突出的特点。一旦在Desmos中绘制了一条线,便可以点击这条线来找到图形上的对应曲线。如果你有两条曲线,可以点击他们的相交处显示交点坐标。调整窗口就像在谷歌地图中缩放一样简单。随着Desmos的逐渐普及,几乎有一半的学生使用Desmos来绘制图形,这样他们就能更发现其中的乐趣,Desmos可以用来绘制更复杂的图形,进行艺术创作等。在课堂上,从未教过的超越线性函数的图形等学生都可很轻易地画出来,在此过程中他们学习更多的东西。只要创建一个帐户,就可以登录并保存绘制的图表。

        博主用Desmos拟合绘制了一条鱼和一只贝壳,并将Desmos数学函数表示的图形用mathematica重新绘制了下。部分代码如下:

Show[Plot[0.1968 x^2 – 1.8490 x + 5.8125, {x, 0.79235, 6.85792}],
Plot[-1.5929 x^2 + 23.2471 x – 82.1193, {x, 6.85792, 8.27869}],
Plot[1.7158 x^2 – 30.0602 x + 132.3908, {x, 8.27869, 8.98907}],
ContourPlot[x == 0.0338 y^2 – 0.2105 y + 9.1608, {x, 8, 10}, {y, 0.784983,
6.5529}],
Plot[-2.2198 x^2 + 40.0392 x – 173.8610, {x, 8.30601, 9.23497}],
Plot[3.1296 x^2 – 49.2372 x + 198.6589, {x, 7.40437, 8.30601}],
Plot[-0.3556 x^2 + 3.1418 x + 1.9337, {x, 3.03279, 7.40437}],
Plot[-0.3414 x^2 + 2.4064 x + 4.0429, {x, 0.846995, 3.03279}],
ContourPlot[x == 3.0251 y^2 – 33.0956 y + 90.9617, {x, -1, 1}, {y, 5.22184,
5.83618}],
ContourPlot[x == 1.1195 y^2 – 11.0694 y + 27.9051, {x, -1, 1}, {y, 4.47099,
5.22184}],
……
]

        

Show[ContourPlot[
x == 0.5027 y^2 – 1.8862 y + 4.4212, {x, 2, 4}, {y, 0.88, 2.64}],
ContourPlot[
x == 0.2113 y^2 – 2.5431 y + 8.1867, {x, 0, 4}, {y, 2.64, 8.24}],
Plot[-0.4373 x^2 + 2.8451 x + 4.8431, {x, 1.57, 4.04}],
Plot[-0.3270 x^2 + 3.2928 x + 1.2328, {x, 4.04, 6.43}],
Plot[-0.1825 x^2 + 2.3329 x + 1.4254, {x, 6.43, 8.01}],
ContourPlot[
x == -0.4077 y^2 + 6.1725 y – 15.0685, {x, 8, 9}, {y, 7.44, 8.4}],
ContourPlot[
x == -0.4469 y^2 + 5.4211 y – 7.3080, {x, 8, 9.5}, {y, 5.84, 7.44}],
Plot[0.1353 x^2 – 0.9363 x + 3.1378, {x, 6.23, 9.1}],
ContourPlot[
x == -0.3289 y^2 + 0.9277 y + 6.0137, {x, 6, 9.5}, {y, 0.88, 2.56}],
Plot[0.0508 x + 0.7200, {x, 3.15, 4.72}],
Plot[0.4384 x^2 – 4.9977 x + 14.7877, {x, 4.72, 6.57}],
Plot[0.0594 x^2 – 1.0317 x + 5.1634, {x, 2.94, 4.93}],
Plot[0.7878 x^2 – 7.9964 x + 21.7945, {x, 4.93, 6.23}],
….
]

matlab/simulink距离保护阻抗继电器仿真

         阻抗测量元件是距离保护的核心部分。阻抗继电器测量的是线路阻抗,因此有必要通过电压、电流测量值对阻抗进行实时分析。距离保护的启动元件通常是一个过电流继电器或阻抗继电器。实际中常使用采用结合了负序电流或零序电流的复合过流元件作为起动元件来提高继电器的灵敏度。针对不同的故障类型,阻抗继电器的连接方式也是不同的,当然其对应的继电器测量阻抗值也不尽相同。这种连接方式可以应用于圆形特性方向阻抗继电器。该情况下三相短路和两相短路的保护范围是相同的。当系统发生单相接地故障时,阻抗继电器检测到只有故障相电压降低,电流增加,且三个线电压都同时升高。因此,应将故障阶段的电压和电流采集到继电器中,并且A相阻抗继电器将与继电器的电压相连接。这样,阻抗继电器就可以正确地测量从短路点到保护配置点的阻抗。为了能响应单相接地短路的任何阶段,接地距离保护也必须使用三个阻抗继电器。对于单相系统,继电器数量可以配置为1。 
       笔者提供了一个距离保护Simulink模拟示例,其界面如下所示。可设置线路保护距离、故障距离、系统类型(三相或单相)和仿真时间。在仿真按钮开始时,第0.04s时出现预设的故障,系统立即检测到故障并将其隔离。在对电压阻抗分析进行仿真后,绘制电压电流波形和阻抗圆,其中阻抗圆曲线包含2种颜色。红色部分为圆里部分,表示故障发生后系统检测到阻抗变小,需要切除故障。绿色部分是故障发生前或故障切除后(即正常情况下),系统检测的阻抗大小。整个过程的阻抗变化如下图所示。在切除故障后,阻抗恢复正常。

电力系统任意次谐波电流检测提取Simulink仿真

         随着整流逆变器的广泛使用和电力电子技术的飞速发展,电力系统出现了越来越多的谐波污染,谐波会给系统带来设备过热、损耗增加等许多不利影响。目前在谐波检测的理论基础上,大部分采用有源电力滤波器(APF)对电网的谐波进行补偿,如何实时且准确地检测谐波电流也相应成为一个重要的研究课题。但电网中谐波一般较为复杂,单独使用有源电力滤波器也有特定缺点,比如成本高、运行效率低等,考虑和无源滤波器(PF)组成混合滤波系统可以充分发挥APF与PF的优点,取长补短,所以这类滤波器的应用也较为广泛。对于这种有源电力滤波器,如何准确快速检测出需要消除的指定次谐波是极为重要的。除了电力滤波器,在电力系统的故障诊断与继电保护也需要用到谐波电流的检测。目前研究较为集中的检测方法主要有:带通/带阻滤波器方法,基于瞬时无功功率理论方法的dq0同步坐标的方法等等,已经广泛应用的有基于瞬时无功功率理论的如ip-iq法和p-q法。

        论文《三相四线制系统任意次谐波电流的检测新方法》在传统ip-iq法的基础上,提出了一种谐波电流检测的新方法,该方法可分别检测正序、负序、零序谐波电流分量,既适用于三相不对称系统也适用于三相四线制系统。其检测 k 次谐波电流 的算法原理框图如下图所示,具体算法原理可详见上述论文:

       依据上述论文的算法,搭建Simulink仿真系统,整体系统如下图所示。主要结构如下,1标识为系统,2标识为三相负载,3标识为谐波电流注入,4标识为谐波分量检测。谐波注入包括3、5、7次,幅值分别为10、6、4A。含谐波电流的系统电流如下图。

        依照论文所述方法搭建Simulink模型,核心检测模块如下。标识1表示需要检测的谐波次数,此处设置为5次。运行仿真模型,0.2s后输出仿真结果。标识2表示5次谐波A相波形,标识3表示5次谐波B相波形,标识4表示5次谐波C相波形,结果如下。可见该方法检测准确无误。

 

matlab S函数(S-function)编写代写示例

S函数(S-function)是一种可扩展Simulink模型功能的强大工具。S函数是用Matlab,C,C++,或者Fortran等语言编写Simulink模型的机制。S函数都是动态链接的子程序,而且Matlab执行引擎可以自动加载和执行。 S函数遵循通用形式,可以适应连续、离散和混合系统的仿真。只要遵循简单的编写规则,我们就可以实现一个新算法的功能并将它添加到仿真软件模型。我们在命令窗口输入命令“edit sfuntmpl”,即可打开M语言的s函数模板。

M-File S-function 通用模板的形式如下:
[SYS,X0,STR,TS,SIMSTATECOMPLIANCE] = SFUNC(T,X,U,FLAG,P1,…,Pn)

SFUNC函数在特定时间T的返回量取决于FLAG, 状态向量X和输入量U的值。具体说明如下:

FLAG        返回量        说明
—–           ——           ——————————————–
0     [SIZES,X0,STR,TS]       Initialization, return system sizes in SYS,
initial state in X0, state ordering strings in STR, and sample times in TS.
1    DX     Return continuous state derivatives in SYS.
2    DS     Update discrete states SYS = X(n+1)
3     Y      Return outputs in SYS.
4    TNEXT      Return next time hit for variable step sample time in SYS.
5    Reserved for future (root finding).
9    []    Termination, perform any cleanup SYS=[].

状态向量X和X0包含连续和离散状态。P1,…,Pn作为可选参数,可以提供给S函数并且能在任何Flag值的情况下使用。当SFUNC的输入量FLAG为0, 将返回以下信息。SYS(1) = Number of continuous states.
SYS(2) = Number of discrete states.
SYS(3) = Number of outputs.
SYS(4) = Number of inputs.
SYS(5) = Reserved for root finding. Must be zero.
SYS(6) = Direct feedthrough flag (1=yes, 0=no).
SYS(7) = Number of sample times. This is the number of rows in TS.

X0 = Initial state conditions or [] if no states.

STR = State ordering strings which is generally specified as [].

TS = An m-by-2 matrix containing the sample time (period, offset) information. Where m = number of sampletimes. The ordering of the sample times must be:

TS = [   0 0, : Continuous sample time.
               0 1, : Continuous, but fixed in minor step sample time.                              PERIOD OFFSET, : Discrete sample time where PERIOD > 0 & OFFSET < PERIOD.
             -2 0]; : Variable step discrete sample time where FLAG=4 is used to get time of next hit.

以下将编写一个s函数,当输入信号连续0.12s维持低于0.5时输出1,否则输出0。用simulink搭建简单测试模型,输入为三角波信号,S函数封装为Simulink模块后命名为Sigdect.m。仿真测试,输入和输出结果如下,可见S函数很好地实现了该功能。

 

 

Matlab界面设计制作GUI编程之字符统计

        MATLAB/GUI是来创建程序图形界面的工具。GUI通常包含很多控件,比如菜单、工具栏、按钮,滑块等, GUI界面允许我们把程序输出变为可视化。下面用一个文本转换、统计的例子为例,在图形窗口中创建静态文本框,用来输入待统计的字符串,然后将英文字母大小写进行区分、转换,并利用文本框显示转换结果。

        首先用GUIDE工具绘制待编程的界面,即明确界面布局和功能。本例子绘制界面如下。

        然后右击各按钮pushbutton右键,选择callback进行回调函数编写。核心部分代码示例如下:
L=length(s);
a=0;
b=0;
c=0;
for i=1:L
if(abs(s(i))>96&&abs(s(i))<123)
a=a+1;
elseif(abs(s(i))>64&&abs(s(i))<91)
b=b+1;
else
c=c+1;
end
end

        完成后,对成品界面进行测试,先运行m文件,界面显示出来后,随即输入一段字符串,进行大小写转换和统计,结果如下:

matlab编程四阶龙格库塔(Runge-kutta)求解微分方程

        在数值分析中,龙格-库塔方法(包括隐式和显式)和我们更早前学过的欧拉法一样,都属于一系列的迭代求解方法,求解时间离散后的常微分方程近似解。该方法由大约在1900年的德国数学家C. Runge和M. W. Kutta提出并完善。最广为人知的龙格-库塔算法家族的成员是“RK4”,即经典龙格-库塔法或简化的龙格-库塔法。
        假设如下一个初值微分方程问题:

        这里y是一个时间t的未知函数(标量或矢量),也是我们想近似求解的量。这里y‘表示y的变化速率,是t和y本身的函数。初始时间t0相对应的y值是y0。函数f和t0,y0的值是已知的。现在选择一个步长h > 0,定义

        n = 0、1、2、3、……, k1、k2、k3、k4的定义如下:

Matlab的四阶龙格-库塔法对应ode45函数,计算精度远高于Euler算法。ode45采用了四阶龙格库塔方法得到候选解,是一种自适应步长的常微分方程数值解法。ode45的调用格式为:[T,Y] = ode45(odefun,tspan,y0,options)。其中T为计算结果对应的时间,T为计算y的求解值,odefun为微分方程的句柄函数,tspan为求解时间的范围,y0为变量y的初始值,options包含求解的设置,如精度、误差等

我们来看如下一个例子。

        确定M函数:

function dy = rigid(t,y)
dy = zeros(3,1); % a column vector
dy(1) = y(2) * y(3);
dy(2) = -y(1) * y(3);
dy(3) = -0.51 * y(1) * y(2);

编写主程序计算,再进行绘图:

options = odeset(‘RelTol’,1e-4,’AbsTol’,[1e-4 1e-4 1e-5]);
[T,Y] = ode45(@rigid,[0 12],[0 1 1],options);

plot(T,Y(:,1),’-‘,T,Y(:,2),’-.’,T,Y(:,3),’.’)

Mathematica编程计算求解化学反应

        Wolfram Mathematica(通常称为Mathematica软件)是一个数学软件,有时也称为符号计算系统或程序,应用于各种科学、工程、数学和计算领域,由来自伊利诺斯州的Stephen Wolfram教授开发研究。Wolfram语言是Mathematica数学软件中使用的编程语言。Mathematica 是一个通用的计算环境,包含了许多算法,可视化和文档形式的用户交互界面等等。自1988年的1.0版本以来,Mathematica稳步扩展了越来越多的通用计算能力。除了能解决数学几乎每一个领域,它还能跨平台支持各种范围的任务,比如计算交互式演示、数据集成、图形编辑和用户界面。 Mathematica 的数学工具软件包,几乎可以用于各种工程计算。

        这篇文章向您展示Mathematica在化学方面的用途。除了可以配平化学反应方程式,还能用于化学反应速率、转化率等计算。化学反应炉里同时进行着下列反应。利用Mathematica 计算每种物质的浓度随着时间推移的变化(所有4种物质的浓度变化显示在同一个图),并用图形化显示。生成R和S的反应为一阶形式,生成T的反应也是一阶的。 图形化结果要体现以下因素的影响:
        1)温度和
        2)活化能

利用mathematica编程计算,加入manipulate函数操作,结果如下: