Matlab/Simulink - BLDC直流无刷电机仿真基础教程(七) - 波形解析专题P2
Matlab/Simulink - BLDC直流无刷电机仿真基础教程(七) - 波形解析专题P2
- 前言
- 一、缺相与相线错接解析
- 二、电源电压波动
- 三、电机感量及磁链变化
- 四、负载突变及堵转
- 五、换相时机不当及换相错误
- 参考链接
前言
本系列文章分享如何使用Matlab的Simulink功能来进行BLDC直流无刷电机的基础仿真;本篇文章将重点讲解模型中各种波形的机理,通过修改模型参数,结合理论与仿真结果,以说明BLDC电机的一些特性,部分专题视情况可能会再出专门文章进行分析。
在此感谢各位读者的支持,并欢迎交流。也希望本篇文章可以抛砖引玉,成为大家发表见解、提出问题的平台。
文章内容主要参考Matlab官网的BLDC仿真视频教程,主要是对官方视频教程的进一步详细说明,以及对BLDC电机控制原理、仿真过程部分问题点的简要讲解,希望大家通过此系列文章可以掌握Matlab电机仿真的基本技术,并在后续能够按照需要搭建更复杂的模型。
官方视频教程地址如下:
https://ww2.mathworks.cn/videos/series/how-to-design-motor-controllers-using-simscape-electrical.html
相关演示操作在Matlab2023b中进行。
一、缺相与相线错接解析
为使得BLDC电机能够正常运行,我们需要正确连接电机的UVW三条相线,不过在有时候可能会出现相线断开或是错误连接的情况。
其中如果运行过程相线断开,在只有一根相线断开的情况下,BLDC电机能够继续旋转,但是电机效率将会下降,需要能够及时发现,若有两根及以上的相线断开,由于不能形成回路,电机很快会停机;对于相线连接,总共有6种情况,除了唯一的正确接线情况外,有3种错误的情况会导致电机无法旋转,还有2种错误情况尽管电机能够旋转,但是波形也会出现异常,效率降低,我们需要能够判断出这样的异常情况。
我们在之前的文章中搭建了如下图所示的BLDC电机速度闭环控制模型,接下来我们将以此为基础来对缺相、相线连接错误的情况进行分析。
在原始的仿真模型基础上,点击运行,我们可以看到电机转子转速波形如下图所示。
PID控制器输出占空比情况如下图所示。
三相电压、电流波形图如下图所示。
接下来,为了模拟缺相,我们需要使特定相线开路,在库浏览器中搜索open circuit
模块,即开路模块。
按照如下图所示连接开路模块,模拟相线断开。
重新运行仿真模型,电机转子转速波形如下图所示,可以看到仍然在不断的提高,但是转速上升的速度相比之前大幅降低。
查看PID控制器输出的占空比,可以看到几乎一直以最大的占空比进行输出。
此时三相电压电流波形如下图所示。
放大波形后,可以看到由于黄色波形对应的相线是开路的,因此逆变器侧的该相电压此时完全取决于开关管导通信号,数值只有0、155.5、311V三种情况。相应地,这一相由于开路,不会有电流流过,电流波形始终保持0A。
为了观察电机侧的三相电压波形的情况,我们修改三相电压传感器模块的连接方式如下图所示。
运行完毕后,查看波形如下图所示,这里我们只保留了黄色一相的电压波形,另外两相的电压波形与前面图片中展示的一致。
接下来,我们会按照如下图所示的次序来对逆变器侧、电机侧的波形进行分析,讲解为什么现在的波形是这样的。
如下图所示,是逆变器侧波形。
如下图所示,是电机侧电压波形。
为便于分析,这里我们设定黄色、蓝色、红色分别为U、V、W三相。
对于状态1,此时正常情况下,U相上桥开,V相下桥开,W相处于悬空态;
逆变器侧,U相电压为母线电压,电机侧,U相电压,实际上是电机U相端口对地电压(电源模块负端),中性点电位初始是零电位,由于电机转子旋转导致W相电感上叠加了一个幅值逐渐升高的反电动势,使得电机中性点点位高于零电压,又由于电机旋转在U相上也叠加了一个反电动势,此时对于BLDC电机而言,U相的动生反电动势幅值是恒定的,由于W反电动势幅值逐渐减小,因此测得的U相电压呈现从一个较小的数值慢慢升高到一个稍大的数值的情况;V相此时下桥打开,因此V相电压一直是零电压;由于W相电感需要续流,而现在U相又是开路,结合电机侧的电压波形,可以看到此时W相电感两侧的电压差很小,因此续流时间很长,W相一直是接近零电压。
对于状态2,此时正常情况下,U相上桥开,V相处于悬空态,W相下桥开;
逆变器侧,U相电压为母线电压,电机侧,U相电压同样是U相端口对地电压,在续流时,中性点初始电压是母线电压的一半,由于电机转子旋转导致V相电感上叠加了一个幅值逐渐降低的反电动势,使得中性点电位提高,高于母线电压的一半,再叠加上电机旋转在U相产生的反电动势就是此时的U相电压,在续流完毕后,U相电压为零电压叠加电机旋转产生的反电动势(开路没有电流,但是电位仍然可以叠加);V相续流时由于电流方向是电机侧流向逆变器侧,上桥的体二极管会导通,两侧电压差比较大,因此续流比较快,V相电压短暂提高至接近母线电压后,续流完毕,后续是零电压叠加由于电机旋转而产生的动生反电动势的梯形波形;而W相处于下桥打开状态,保持零电压。
对于状态3,此时正常情况下,U相处于悬空态,V相上桥开,W相下桥开;
逆变器侧,U相电压理个人理解在理论上是浮空的,不过由于上下桥MOSFET开关管参数一致,因此电位是母线电压的一半,电机侧,U相电压由于V相上桥导通,W相下桥导通,中性点电位初始是母线电压的一半,在叠加了电机旋转产生的呈现下降趋势的动生电动势之后,U相电压波形会突变到一个较大的电压后,又逐渐降低,如图所示;V相处于上桥导通状态,因此电压为母线电压;而W相处于下桥打开状态,保持零电压。
对于状态4,此时正常情况下,U相下桥开,V相上桥开,W相处于悬空态;
逆变器侧,U相电压为零电压,电机侧,U相电压,中性点初始是母线电压,由于电机转子旋转导致W相电感上叠加了一个幅值逐渐降低的反电动势,使得电机中性点电位降低,低于母线电压,又由于电机旋转在U相上也叠加了一个反电动势,此时对于BLDC电机而言,U相的动生反电动势幅值是恒定的,由于W相反电动势幅值逐渐升高,因此测得的U相电压呈现从一个较高的数值逐渐降低的情况;V相此时上桥打开,因此V相电压一直是母线电压;由于W相电感需要续流,而现在U相又是开路,结合电机侧的电压波形,可以看到此时W相电感两侧的电压差很小,因此续流时间很长,W相一直是接近母线电压。
对于状态5,此时正常情况下,U相下桥开,V相处于悬空态,W相上桥开;
逆变器侧,U相电压为零电压,电机侧,U相电压,在续流时,中性点初始是母线电压的一半,由于电机转子旋转导致V相电感上叠加了一个幅值逐渐升高的反电动势,使得电机中性点电位降低,低于母线电压的一半,再叠加上电机旋转在U相产生的反电动势就是此时的U相电压,在续流完毕后,U相电压为母线电压叠加电机旋转产生的反电动势;V相续流时由于电流方向是逆变器侧流向电机侧,下桥的体二极管会导通,两侧电压差比较大,因此续流比较快,V相电压短暂降低至接近零电压后,续流完毕,后续是母线电压叠加由于电机旋转而产生的动生反电动势的梯形波形;而W相处于上桥打开状态,保持母线电压。
对于状态6,此时正常情况下,U相处于悬空态,V相下桥开,W相上桥开;
逆变器侧,U相电压理个人理解在理论上是浮空的,不过由于上下桥MOSFET开关管参数一致,因此电位是母线电压的一半,电机侧,U相电压由于V相下桥导通,W相上桥导通,中性点电位初始是母线电压的一半,在叠加了电机旋转产生的呈现上升趋势的动生电动势之后,U相电压波形会突变到一个接近母线电压一半的电压附近后,又逐渐升高,如图所示;V相处于下桥导通状态,因此电压为零电压;而W相处于上桥打开状态,保持母线电压。
接下来放大部分波形的局部图片,可以看到续流时由于体二极管导通压降的存在,处于续流状态的相位的电压会和零电压、母线电压有些微的差别。(上述讲解还存在有纰漏,欢迎指正。)
接下来,我们来分析相线接错对电机运行的影响。
如下图所示,是抽象化的电机转子及三相端子,我们以A、B、C的顺序来定义开关表的顺序,“1”表示上桥导通,“0”表示下桥导通,“-”表示悬空。
我们来定义开关情况与电机定子形成的磁场方向的关系,如下表所示。
序号 | 开关情况 | 磁场方向 |
---|---|---|
1 | 1 - 0 | 左下 |
2 | - 1 0 | 下方 |
3 | 0 1 - | 右下 |
4 | 0 - 1 | 右上 |
5 | - 0 1 | 上方 |
6 | 1 0 - | 左上 |
如下图所示,是每种开关状态对应的磁场方向(绿色箭头表示),以及转子位置对应的范围区间(蓝色线条组成的6个60度范围的区间),各个区间以红色数字表示,我们的霍尔传感器模块的相位检测就是类似的原理。
在三根相线正确连接的情况下,转子位置处于各个不同范围区间时,根据开关情况表来控制逆变器电路各个MOSFET开关管的导通与关断,即可产生相应的磁场来使得电机转子不停旋转。
对于相线连接错误的情况,我们首先跟根据上图来进行简要分析:
若U相线与V相线混接(即A、B相线交换),那么我们可以料想,当转子位置在区间1时,我们本该按照“1 - 0”的顺序,导通U相上桥及W相下桥来形成方向指向左下角的磁场时,由于UV相线交换,实际是按照“- 1 0”的顺序导通了V相上桥及W相下桥,那么就会产生指向正下方的磁场。
在这样的磁场吸引下,电机转子也能够从区间1转动到区间2,到区间2时,“- 1 0”的开关状态表实际变成了“1 - 0”,对照开关状态表我们知道现在是指向左下角的磁场方向;由于惯性存在会使得电机转子转动到区间3,此时对应的“0 1 -”开关状态表变成了“1 0 -”,对应的左上角的方向,又会带动转子回到区间2,最终来回振动,不能正常地连续旋转运行。
仿真方面,我们可以进行一些简单的模拟;如下图所示,交换逆变器模块中U、V两相的接线,之后可以按照自己想法对一些参数进行修改。
这里由于电机模块参数、PID参数等会对具体结果有一定影响,这里不再详细讲述参数设置,仅展示一些示意性仿真结果图片。
如下图所示是电机转子位置,可以看到电机转子来回的震荡,而没有能够平滑的连续旋转。
相对于正确的U、V、W接线方式,错误接线方式一般会使得电机转子无法连续旋转,但有些时候却同样能使电机转子旋转,不过此时电机控制性能会严重下降。
例如现在电机侧的U、V、W分别依次接到了逆变器的V、W、U,刚好错开,如果电机转子位于区间1,当输入“1 - 0”的开关状态时,对于电机来说则是“- 0 1”开关状态对应的上方的磁场,使得电机转子转动到了区间6,依此类推,使得电机发生了反转。
如下图所示,是在这种接线方式情况下电机转子的角度变化情况。
二、电源电压波动
在电机运行过程中,电源电压的稳定也对电机正常运行至关重要,接下来我们来模拟电源电压突降对电机运行的影响。
这里我们使用可控电压源,来实现仿真运行过程中电压电压的改变。
使用可控电压源模块取代之前的电源模块后,我们使用step
阶跃模块配合Simulink-PS Converter
来控制电源电压。设定电压初始值为311V,在0.1s的时候突变为160V,即模拟电源电压突降。
完成配置后,点击运行;如下图所示是电机转子转速的变化情况,可以看到在0.1s的时候,电机转速突然下降,后续又开始慢慢上升。
我们的PID控制器输出的占空比在0.1s时,由于电机转子转速突降,低于给定的速度参考量,因此此时的PID控制器输出占空比又开始提高,符合预期。
如下图所示是运行过程中电机三相电压、电流的波形情况,在0.1s前,电压最大值为311V,速度基本稳定时,电流也基本稳定;之后0.1s后,电源电压突降至160V,可以看到电压波形最大值也受到影响,变成了160V,此时PID控制器输出的占空比还未及时调整,因此输入给三相逆变器模块的等效电压降低,导致电流迅速跌落,之后占空比又逐渐提高,电流逐渐增加。
如下图所示是放大后的0.1s前的电压电流波形。
接下来是0.1s后的电压电流波形,与上图相比,可以看到电压最大值为160V,且占空比提高了不少。
为了对照验证,我们接下来模拟电源电压突增,修改终值为500V。
点击运行按钮后,观察电机转子转速波形,可以看到在0.1s后,电机转速突然上升,后续又降低下来。
查看此时PID控制器输出占空比波形,可以看到此时占空比在0.1s后出现了下降,与预期一致。
同样打开电压电流波形示波器,与前面电源电压突降的情况形成了对比,这里不再赘述。
一般来说,MCU软件中可以结合相关硬件设计来对母线电压进行检测,当检测到电压突增或突降时,直接根据电压变化来调整占空比的输出,此时可以比较迅速的使被控量达到稳定。
三、电机感量及磁链变化
BLDC电机作为控制对象,其自身的特性将决定我们应该如何配置相关控制参数,并且会对控制效果产生影响,接下来我们来研究BLDC电机参数变化对相关波形的影响。
如下图所示是原始情况对应的电压电流波形,这里我们首先对电机磁链的变化进行研究。
了解BLDC相关公式的同学将会知道,电机磁链大小对电机转矩有直接的影响,而转矩则主要受到电机磁链、三相电流的控制;接下来我们将会修改电机磁链大小,并观察三相电流的变化情况。
放大电压电流波形,可以看到此时三相电流的瞬时最大值达到20A左右。
修改电机磁链参数为0.08Wb,也就是提高为原来的两倍。
点击运行按钮,并观察电压电流波形的变化情况,从下图中我们可以看到在后续速度基本稳定的阶段,现在仅需要最大瞬时电流可能接近15A,就能够对抗负载转矩,印证了磁链和电流大小对转矩的影响。
打开角速度示波器,可以看到此时我们的电机转速在超调后,被控制器的控制下,转速又迅速降低,在0.2s的时候依然没有稳定在目标转速附近,表明我们现在的PID参数已经不太适合参数发生了变化的BLDC电机控制对象。
这里我们结合上一章了解到的PID调参方法,提高了参数I。
修改PID控制器参数后,重新运行仿真模型,可以看到此时电机转子转速最终能够稳定在目标转速附近。
此时电压电流波形如下图所示。
放大波形,可以看到后续转速稳定时,电流不到15A,表明若要输出相同转矩,电机磁链越大,更小的电流就足以产生足够的转矩。
此外,电机磁链大小还会影响反电动势数值,也就是相同转速情况下,电机磁链越大,反电动势幅值越大(相同转速,电机磁链越大,即通过定子线圈的磁通变化越大,因此产生的反电动势越大);接下来我们搭建一个简易的反电动势测量模型来验证这一点。(具体搭建过程略,大家请根据出现的模块自行搭建。)
这里的BLDC电机参数与之前搭建的模型一致,磁链首先设定为0.04,理想角速度源模块设定输入为100(单位为弧度),点击运行后,查看反电动势情况,可以看到当前的反电动势幅值应该是6V左右(3V - (-3)V)。
保持转速不变,修改BLDC电机的磁链参数为0.08。
再次运行,看到这一次的反电动势幅值大概是12V左右,是之前的两倍,与前述一致。
此外,电机转速也会影响反电动势幅值大小,大家可以自行验证。
接下来,我们来分析电机电感大小对电压电流波形的影响。
我们知道,电感是一种流经电流不能发生突变的元件,而电感大小会影响电流的变化速度,电感越大,相同幅值的电流变化所需时间越长,反之越短。如下图所示,是速度稳定阶段六步换相时的续流时间(续流相关分析请阅读前一篇文章),可以看到对于18.4A左右的电流变化,此时需要耗时95us左右。(目前的电机电感是0.001H。)
接下来,我们来观察逆变器正常开关MOSFET时的电流情况,可以看到在某一相上桥导通的相位状态下,对于大概4.7A的电流变化,耗时42.5us。
接下来,我们来修改BLDC电机的电感参数,将其由0.001H改为0.002H;我们这里可以首先预测,对应更大的点击电感,电流的变化速度将会减慢,也就是续流时间会延长,电流波形会更平滑。
修改完电机参数后,点击运行按钮,可以看到此时对应速度稳定阶段,对于大概19.4A左右的电流变化,耗时接近209us,差不多是此前的两倍,符合预期。
而对于处于上桥导通状态的相电压,48us时间,对应的电流变化为2.6A,差不多是之前的一半,符合预期。
四、负载突变及堵转
现在,我们来分析电机输出部分的变化对电机控制的影响。
电机输出轴驱动的负载可能会发生突变,如果负载特别大,甚至会使得电机转子无法旋转,也就是堵转,此时由于电机转子没有旋转,也就不会产生反电动势,相同的电压全部用于产生电流,而且电流只在特定的开关管流过,很容易烧毁电机,这种情况是需要特别注意的。
我们搜索Ideal Torque Sensor
模块,即理想转矩传感器模块,并拖动到右侧模型中。
按照下图方式进行连接,相关细节已经在前一篇文章讲解了。
这里,我们修改理想转矩源的输入为一个阶跃模块,并设定初始值为-1,在0.1s的时候突变为-2。
点击运行按钮,运行完成后查看电机转子转速波形,可以看到在0.1s时,电机转子转速突然降低,也就是这个时候根据电流、磁链产生的转矩小于了施加的负载转矩,因此使得电机转子上有一个反向的角加速度,使得转子转速降低,后续我们的PID控制器又根据转速误差调节了占空比输出以提高电流,使得输出转矩与负载转矩又基本平衡。
查看PID控制器输出的占空比波形,与我们前述的分析一致。
查看电压电流波形示波器,看到在0.1s后电流开始增加,如果放大波形,将会看到上方的电压波形的占空比也相应地增加了。
打开我们刚刚为理想转矩传感器模块连接的示波器,可以看到在0.1s的时候,电机输出转矩确实发生了变化,相比之前,为了对抗突然增加的负载转矩而大幅提高。
放大转矩波形,可以看到在后段的时候,转矩在1.8~2.2N*m的范围内波动,平均值接近2N*m,也就是我们人为给定的负载转矩。
接下来,我们继续增大负载转矩,将理想转矩源模块的给定终值改为-50。
点击运行后,查看转速波形,看到此时在0.1s后,电机转速正常迅速下降,表明我们此时即使把占空比加满,产生的电流对应的转矩也无法平衡这样大的负载转矩。
查看PID控制器输出占空比,可以看到0.1s后一直维持在1,也就是说我们的控制器已经最大限度的进行了输出控制。
查看电压电流波形,看到此时电流最大可能有接近90A。
查看转矩波形,看到0.1s后输出转矩最大有28N*m,依然小于设置的50N*m的负载转矩,因此电机转子转速一直降低。
现在我们来模拟一个转速比较小的情况,设定BLDC电机初始转速为4900deg/s,电机转速很快降低到了0以下,而后又被负载转矩带动至反向旋转。
查看此时PID控制器输出占空比,0.1s后同样迅速上升至1。
查看此时的电压电流波形示波器,看到0.1s时电压波形占空比已经完全拉满,我们对照前面正常转矩的电压电流波形,可以看到此时由于转速低,基本没有进行换相的处理,因此一直是特定的上桥、下桥的MOSFET开关管导通、流过电流。
此时将会产生严重的发热,而MOSFET开关管温度上升后,过电流能力也会下降,此时极容易使得逆变器电路发生损坏。
输出转矩波形如下图所示。
注意,大负载乃至堵转情况下,由于需要通过大电流,且开关次序切换周期长,会使得MOSFET开关管、电机温度上升,而这又进一步会使得电机定子电阻提高、转子磁链下降,使得电机转矩输出能力下降,若不能及时检测并进行处理,容易导致逆变器电路、电机本体损坏。
此外,即使在软件中通过电流检测技术来限制了电流的最大输出(例如最大只输出60A),也会由于长时间未换相,特定MOSFET开关管导通时间过长而发生损坏。
五、换相时机不当及换相错误
在正确的时间进行换相对于BLDC电机连续稳定地运行非常重要,如果换相相位错误,或是换相时机不当,一般会导致电流突变,可能会对硬件产生损坏等;接下来我们就对霍尔传感器模块进行修改,以模拟换相相关问题的情况。
如下图所示,我们修改了霍尔传感器模块检测的角度范围,现在都往前提前了10°,也就是现在换相都会超前一段时间。
点击运行后,我们可以看到目前的三相电压、电流还比较正常,不过仔细看可以发现由于换相提前,在相位悬空时,对应的反电动势的出现被推后了10°,如果我们使用的是无传感器的控制方法,这种情况可能会导致后续换相继续发生错误,最终发生过流等问题。
刚刚的波形可能还不够明显,现在我们统一改为再提前10°进行换相(也就是比原始的换相模块提前了20°)。
可以看到此时上升沿的反电动势又被推后了一些,下方的表示上桥未导通时的反电动势对应的小三角区域已经几乎不见了。
现在,我们改回各个换相的角度判断阈值,使用product
模块配合阶跃模块,来模拟换相错误或滞后。
这里我们设定阶跃模块的初始值为2,在0.1s的时候变为4,进行仿真。
从仿真结果的电压电流波形来看,可以看到在0.1s的时候发生了换相错误,此时三相电流相比正常换相时大了很多,对于实际的BLDC电机控制系统,此时可能会导致过流,对MOSFET开关管造成损坏,此外,突变的大电流也会使得点击转矩、转速出现波动,对电机的正常运行都会产生影响。
接下来,我们修改阶跃模块在0.1s的时候变为1,也就是说这个时候我们模拟长时间不换相的情况。
点击运行后,观察电压电流波形如下图所示,同样由于换相不当,相电流发生了突增。
恢复电压电流波形缩放,可以看到0.1s后,由于错误的换相控制,此时会频繁的产生电流尖峰,将会对电机的输出转矩、转速产生不利影响。
对于有霍尔传感器的控制方案,霍尔位置信号异常导致换相出错是比较常见的问题,根据个人了解,可以采用一些滤波处理来减轻这种问题,不过实在没有太多的相关经验,不再赘述。
在本篇文章中,我们讨论了一些外部异常对电机控制的影响,并进行了一些初步的分析,想要做好一个电机控制系统,我们需要进行全面的考虑,并熟悉各种可能出现的问题,了解相关的处理方法等。
个人水平有限,相关讲解会有疏漏,欢迎批评指正,也欢迎大家继续提出电机运行过程出现异常的相关问题以进行讨论。
后续对于一些更为深入的问题以及处理策略,可能会再出专题进行讲解分析。
参考链接
电机为什么缺相?怎么处理缺相? - 万泰说电机的文章 - 知乎
电机缺相运行与转速,电机缺相的影响及转速调节方法
无刷直流 (BLDC) 电机的连接
AN186 Brushless DC Motor Connections
硬件学习笔记第三节电感
BLDC驱动基础篇:堵转保护 - 嵌入式BLDC的文章 - 知乎
相关文章:
Matlab/Simulink - BLDC直流无刷电机仿真基础教程(七) - 波形解析专题P2
Matlab/Simulink - BLDC直流无刷电机仿真基础教程(七) - 波形解析专题P2 前言一、缺相与相线错接解析二、电源电压波动三、电机感量及磁链变化四、负载突变及堵转五、换相时机不当及换相错误参考链接 前言 本系列文章分享如何使用Matlab的Simulink功能来…...
如何从GitHub上调研优秀的开源项目,并魔改应用于工作中?
在 Go 语言学习中,我们经常会去学习一些优秀的开源项目。但是学完之后,发现很快就忘记了或者学习效果并不好。学习一个开源项目最好的方式就是围绕这个开源项目进行实战。例如,直接魔改这个开源项目并应用于工作中。本文来介绍下如何调用&…...
【Java学习笔记】构造器
构造器(constructor)(又名构造方法) 作用:可以在创建对象时就初始化属性,注意不是创建 基本结构 [修饰符] 方法名(形参列表){方法体; }代码示例 public class 构造器 {public static void m…...
Redis 数据类型详解(一):String 类型全解析
文章目录 前言一、什么是 Redis 的 String 类型?二、常用命令1.SET2.GET3.MSET4.MGET5.INCR6.INCRBY7.INCRBYFLOAT8.SETNX9.SETEX 三、注意事项总结 前言 提示:这里可以添加本文要记录的大概内容: 在学习 Redis 的过程中,最基础也…...
JAVA---多态
面向对象三大特征:封装、继承、多态 多态 定义:同类型的对象,表现出的不同形态。 它允许不同类的对象通过同一个接口进行调用,并且在运行时根据实际对象类型执行不同的方法。 多态主要通过继承、接口和方法重写来实现。 表现形式…...
K8S的使用(部署pod\service)+安装kubesphere图形化界面使用和操作
master节点中通过命令部署一个tomcat 查看tomcat被部署到哪个节点上 在节点3中进行查看 在节点3中进行停止容器,K8S会重新拉起一个服务 如果直接停用节点3(模拟服务器宕机),则K8S会重新在节点2中拉起一个服务 暴露tomcat访…...
【Linux系统】第二节—基础指令(2)
hello ~ 好久不见 自己想要的快乐要自己好好争取! 云边有个稻草人-个人主页 Linux—本篇文章所属专栏—欢迎订阅—持续更新中 目录 本节课核心指令知识点总结 本节基本指令详解 07.man 指令 08.cp 指令 09.mv 指令 10.cat 指令 11.more 指令 12.less 指令 …...
Java设计模式: 实战案例解析
Java设计模式: 实战案例解析 在软件开发中,设计模式是一种用来解决特定问题的可复用解决方案。它们是经过实践验证的最佳实践,能够帮助开发人员设计出高质量、易于维护的代码。本文将介绍一些常见的Java设计模式,并通过实战案例解析它们在实际…...
ASP.NET MVC 入门与提高指南九
51. 时空数据处理与 MVC 应用拓展 51.1 时空数据概念 时空数据是指与时间和空间相关的数据,如地理信息系统(GIS)数据、交通流量数据、气象数据等,这些数据随时间和空间变化而变化。 51.2 在 MVC 应用中处理时空数据 地理信息系…...
算法学习时段效能分布
算法学习时段效能分布 晨间时段(06:00-09:00)核心优势最佳任务 午后时段(14:00-17:00)核心优势最佳任务 夜间时段(20:00-23:00)核心优势最佳任务 实证数据支持 晨间时段(06:00-09:00)…...
Linux环境部署iview-admin项目
环境:阿里云服务 系统:CentOS7.X系统 1、下载源码安装包 wget https://nodejs.org/dist/v14.17.3/node-v14.17.3-linux-x64.tar.xz2、解压并放入指定目录 tar -xf node-v14.17.3-linux-x64.tar.xz && mv node-v14.17.3-linux-x64 /usr/local/no…...
在 Ubuntu 系统中,查看已安装程序的方法
在 Ubuntu 系统中,查看已安装程序的方法取决于软件的安装方式(如通过 apt、snap、flatpak 或手动安装)。以下是几种常见方法: 通过 apt 包管理器安装的软件 适用于通过 apt 或 dpkg 安装的 .deb 包。 列出所有已安装的软件包&…...
c++26新功能——Pack indexing
一、模板编程 在模板编程中,有一个问题比较突出,就是对变参模板中参数的控制,比较麻烦。因为是变参,所以想把参数单独拿出来处理,就需要借助一些特殊的技巧,而这种特殊的技巧,往往为大多数开发…...
VSCode通过SSH连接VMware虚拟机
以下是关于VSCode通过SSH连接VMware虚拟机的原理、必要条件及注意事项的说明: 一、连接原理 SSH协议通信:SSH(Secure Shell)是一种加密网络协议,VSCode通过Remote-SSH插件将本地开发环境与虚拟机终端绑定&a…...
7 微调 黑盒蒸馏 突破伦理限制
简介 SecGPT-Distill 是我自己做的一个实验模型, 开源地址: 主要功能是进行模型微调和知识蒸馏而来 这次是运用微调技术,来突破现有模型在处理安全相关问题时的各种限制和约束 代码开源: https://github.com/godzeo/SecGPT-distill-boundless 不回答原理 大部…...
基于51单片机的温湿度控制器proteus仿真
地址: https://pan.baidu.com/s/1cENHPmF0XobqKg_7baZX3Q 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C51 是一款常用的 8 位单片机,由 Atmel 公司(现已被 Microchip 收…...
牛客月赛115 C题-命运之弹 题解
原题链接 https://ac.nowcoder.com/acm/contest/107879/C 题目描述 解题思路 记录每个数字出现的次数。枚举使用「转瞬即逝」的位置,统计后边比当前数字更大的数的数量,进而统计、更新答案。 详细细节见代码,代码里有详细的注释解释。 代…...
视频转GIF
视频转GIF 以下是一个使用 Python 将视频转换为 GIF 的脚本,使用了 imageio 和 opencv-python 库: import cv2 import imageio import numpy as np """将视频转换为GIF图参数:video_path -- 输入视频的路径gif_path -- 输出GIF的路径fp…...
day15 python 复习日
作业: 尝试找到一个kaggle或者其他地方的结构化数据集,用之前的内容完成一个全新的项 目,这样你也是独立完成了一个专属于自己的项目。 要求: 1.有数据地址的提供数据地址,没有地址的上传网盘贴出地址即可。 2.尽可能与…...
性能优化实践:渲染性能优化
性能优化实践:渲染性能优化 在Flutter应用开发中,渲染性能直接影响用户体验。本文将从渲染流程分析入手,深入探讨Flutter渲染性能优化的关键技术和最佳实践。 一、Flutter渲染流程解析 1.1 渲染流水线 Flutter的渲染流水线主要包含以下几…...
【SimSession 】3:中继服务 linux和windows实现及MFC集成实现
实现目标 在 echo 测试程序启动时启动中继服务,并在 echo 程序退出时杀死中继进程。我们可以通过以下方式实现这一目标: linux设计 1 Process Management: 流程管理: Added fork() functionality to create a child process for the relay service添加了 fork()功能,…...
表驱动 FSM 在 STM32 上的高效实现与内存压缩优化——源码、性能与实践
目录 一、引言与背景 二、前提环境与依赖 三、表驱动 FSM 核心原理 四、内存压缩方案详解 4.1 稠密二维表(Dense Table) 4.2 稀疏表压缩(Sparse Table) 4.3 行压缩+Offset 4.4 位域打包(Bit‑Packing)...
windows鼠标按键自定义任意设置
因为用惯了Linux的鼠标中键的复制黏贴,发现windows下有完全可以实现类似自定义功能的软件,推荐一下: X Mouse Button Control。 免费版足够好用。 软件简介: X Mouse Button Control是一款专业的重新映射鼠标按钮的软件工具&…...
常用命令集合
安装Miniconda wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py310_22.11.1-1-Linux-x86_64.shpython 换清华源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple鱼香ros wget http://fishros.com/install -O fishr…...
【图书管理系统】环境介绍、设计数据库和表、配置文件、引入依赖
0. 环境介绍 (1)JDK版本:JDK_8(JDK_1.8) (2)Java语言版本:8 (3)SpringBoot版本:2.6.13 (4)Maven仓库:阿里云 …...
【Linux】日志与策略模式、线程池
在了解了线程的基本概念和线程互斥与同步之后,我们可以以此设计一个简单的线程池。【Linux】线程-CSDN博客 【Linux】线程同步与互斥-CSDN博客 线程池也是一种池化技术。提前申请一些线程,等待有任务时就直接让线程去执行,不用再收到任务之…...
【神经网络与深度学习】生成模型-单位高斯分布 Generating Models-unit Gaussian distribution
引言 在生成模型的研究与应用中,单位高斯分布(标准正态分布)作为数据采样的基础扮演着至关重要的角色。其数学特性、潜在空间的连续性、灵活性以及通用性,使得生成模型能够高效且稳定地学习和生成样本。本文将详细探讨从单位高斯…...
通讯协议开发实战:从零到一打造企业级通信解决方案
简介 从工业控制到物联网,掌握主流通信协议开发是构建现代智能系统的核心能力。本文将通过深入分析CAN FD和MQTT两种关键协议的原理、特性及应用场景,结合TypeScript和Node.js技术栈,设计一个完整的实时运动控制系统开发案例。从协议解析到数据转换,再到系统集成,全程提供…...
《MATLAB实战训练营:从入门到工业级应用》工程实用篇-自动驾驶初体验:车道线检测算法实战(MATLAB2016b版)
《MATLAB实战训练营:从入门到工业级应用》工程实用篇-🚗 自动驾驶初体验:车道线检测算法实战(MATLAB2016b版) 大家好!今天我要带大家一起探索自动驾驶中一个非常基础但又至关重要的技术——车道线检测。我…...
【网络】什么是串口链路(Serial Link)?
在路由器上,串口链路(Serial Link)就是指路由器之间通过串行接口(serial interface)和串行电缆(通常是V.35、RS-232或同步串行线路)直接点对点相连的那一段连线。它和我们平常在局域网里用的以太…...
为了结合后端而学习前端的学习日志——【黑洞光标特效】
前端设计专栏 今天给大家带来一个超酷的前端特效——黑洞光标!让你的鼠标变成一个会吞噬光粒子的迷你黑洞,点击时还会喷射出绿色能量粒子!🌠 🚀 效果预览 想象一下:你的鼠标变成一个旋转的黑洞࿰…...
set autotrace报错
报错: SQL> set autotrace traceonly SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled SP2-0611: Error enabling STATISTICS report原因分析: 根据上面的错误提示“SP2-0618: Cannot find the Session Identifie…...
算法每日一题 | 入门-顺序结构-大象喝水
大象喝水 题目描述 一只大象口渴了,要喝 20 升水才能解渴,但现在只有一个深 h 厘米,底面半径为 r 厘米的小圆桶 (h 和 r 都是整数)。问大象至少要喝多少桶水才会解渴。 这里我们近似地取圆周率 π 3.14 \pi3.14 π…...
n8n 构建一个 ReAct AI Agent 示例
n8n 构建一个 ReAct AI Agent 示例 0. 引言1. 详细步骤创建一个 "When Executed by Another Workflow"创建一个 "Edit Fields (Set)"再创建一个 "Edit Fields (Set)"创建一个 HTTP Request创建一个 If 节点在 true 分支创建一个 "Edit Fiel…...
Scartch038(四季变换)
知识回顾 1.了解和简单使用音乐和视频侦测模块 2.使用克隆体做出波纹特效 3.取色器妙用侦测背景颜色 前言 我国幅员辽阔,不同地方的四季会有不同的美丽景色,这节课我带你使用程序做一个体现北方四季变化的程序 之前的程序基本都是好玩的,这节课做一个能够赏心悦目的程序。…...
【Linux】SELinux 的基本操作与防火墙的管理
目录 一、SELinux的管理 1.1 Linux 系统的安全机制 1.2 SELinux 的概述 1.3 SELinux 的配置 1.3.1 查看 SELinux 的工作方式 1.3.2 设置 SELinux 的工作方式 1.3.2.1 基于配置文件修改(推荐方式) 1.3.2.2 基于命令方式修改 二、防火墙管理 2.1 防…...
【React Hooks原理 - useCallback、useMemo】
useMemo用于缓存计算结果,它只在依赖项发生变化时重新计算 原理: 依赖项检查:useMemo接收2个参数,一个“创建”函数和一个依赖项数组。依赖项数组中的值在每次渲染时都会被比较,以决定是否需要重新计算 缓存机制&am…...
一格一格“翻地毯”找单词——用深度优先搜索搞定单词搜索
一格一格“翻地毯”找单词——用深度优先搜索搞定单词搜索 一、引子:别看题简单,实则套路深 说起“单词搜索”这个题目,初学者第一眼可能会说:“哦不就是个查字母吗?”其实,真没这么简单。 LeetCode 上那…...
深入了解 OpenIddict:实现 OAuth 2.0 和 OpenID Connect 协议的 .NET 库
在现代 Web 开发中,身份验证和授权是安全性的重要组成部分。随着对安全性的要求不断增加,OAuth 2.0 和 OpenID Connect(OIDC)协议已经成为许多应用程序的标准身份验证方式。而 OpenIddict,作为一个用于实现 OAuth 2.0 …...
学习黑客 TCP/IP
一句话总结:把 TCP/IP 看成大型多人在线游戏的“世界引擎”:链路层是地基,互联网层是道路,运输层是交通系统,应用层是景点与商店;协议们则是各种交通工具与技能(TCP 稳重的长途客车,…...
【沐风老师】3DMAX按元素UV修改器插件教程
3DMAX按元素UV修改器UV By Element是一个脚本化的修改器插件。对于需要创建随机化纹理效果的用户而言,3DMAX的UV By Element修改器无疑是一款高效工具,它将以伪随机量偏移、旋转和/或缩放每个元素的UV坐标。 【版本要求】 3dMax 2016及以上 【安装方法】…...
Jetpack Compose 边距终极指南:Margin 和 Padding 的正确处理方式
Jetpack Compose 边距终极指南:Margin 和 Padding 的正确处理方式 在 Android 开发中,Jetpack Compose 彻底改变了 UI 构建方式,但许多开发者对如何处理边距(Margin/Padding)感到困惑。本文将深入解析 Compose 的边距…...
Go语言--语法基础4--基本数据类型--类型转换
Go 是一种强类型的语言,所以如果在赋值的时候两边类型不一致会报错。一个类型的值可以被转换成另一种类型的值。由于 Go 语言不存在隐式类型转换,因此所有的类型转换都必须显式的声明。 强制类型转换语法 使用 type (a) 这种形式来进行强制类型转换&am…...
【C++ Qt】输入类控件(上) LineEdit、QTextEdit
每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论: 本次分享聚焦 Qt 框架里常用的输入框组件,重点讲解 QLineEdit(单行输入框)和 QTextEdit(多行输入框&…...
【c++深入系列】:万字详解vector(附模拟实现的vector源码)
🔥 本文专栏:c 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 种子破土时从不问‘会不会有光’,它只管生长 ★★★ 本文前置知识: 模版 1.什么是vector 那么想必大家都学过顺…...
OpenHarmony平台驱动开发(二),CLOCK
OpenHarmony平台驱动开发(二) CLOCK 概述 功能简介 CLOCK,时钟是系统各个部件运行的基础,以CPU时钟举例,CPU 时钟是指 CPU 内部的时钟发生器,它以频率的形式工作,用来同步和控制 CPU 内部的各…...
Java大厂面试:Java技术栈中的核心知识点
Java技术栈中的核心知识点 第一轮提问:基础概念与原理 技术总监:郑薪苦,你对JVM内存模型了解多少?能简单说说吗?郑薪苦:嗯……我记得JVM有堆、栈、方法区这些区域,堆是存放对象的地方…...
硬件加速模式Chrome(Edge)闪屏
Chrome开启“硬件加速模式”后,打开浏览器会闪屏或看视频会闪屏,如果电脑只有集显,直接将这个硬件加速关了吧,没啥必要开着 解决方法 让浏览器使用独立显卡 在Windows左下角搜索 图形设置 ,将浏览器添加进去&#…...
【ArcGIS微课1000例】0145:如何按照自定义形状裁剪数据框?
文章目录 一、添加数据二、绘制形状三、裁剪格网和经纬网一、添加数据 打开软件,添加配套实验数据包中0145.rar中的影像数据,如下图所示: 二、绘制形状 1. 在数据视图中,使用绘图 工具条上的新建圆工具 可创建一个椭圆,使其包含要在该数据框中显示的数据范围。 修改椭圆…...
深入了解Linux系统—— 环境变量
命令行参数 我们知道,我们使用的指令它本质上也是一个程序,我们要执行这个指令,输入指令名然后回车即可执行;但是对于指令带选项,又是如何实现的呢? 问题:main函数有没有参数? 在我…...