先简要说明一下文章会说哪些内容。1、buck的拓扑结构,工作原理2、输入输出电容取值的推导过程,电感感量的计算过程3、boost各处电压,电流波形4、buck,boost公式汇总5、实际电路应用情况 Buck的拓扑结构Buck是直流转直流的降压电路,下面是拓扑结构,作为硬件工程师,这个最好是能够记下来,了然于胸。为啥要记下来,自然是因为这个电路太基础了,并且谁都会用到,更重要的一点,面试可能会考。 上图是个异步buck,同步buck就是将里面的二极管换成MOS管。 我用异步buck来分析的原因,就是觉得它要复杂一点,多了一个二极管导通压降,如果异步的明白了,那么同步的自然也明白了。并且,根据这个拓扑推导的公式也是适用同步Buck的,只需要让公式里面的二极管压降为0即可。 首先,还是来看下工作原理。工作原理其实非常简单,上图中MOS管就是一个开关,只要这个速度够快(开关频率够高),控制好导通与关断时间(电感充放电时间),配合输出滤波电容,就可以得到基本稳定的Vo了,也就是输出电压。 下面来看下两个过程,开关导通和开关断开。先看开关导通 开关导通时,二极管不导通,我们看电感,电感左边是Vi,右边是Vo,因为是降压,所以左边大于右边,那么电感两端电压是Vi-Vo,为恒定值。如果把电感电流向右定义为正,那么电感电流是线性增大的,因为L*di/dt=Vi-Vo,那么di/dt=(Vi-Vo)/L=常数。 开关断开时,电感要续流,会产生反向电动势,让二极管导通,二极管导通电压是Vd。因为二极管阳极接地,所以阴极电压是-Vd,也就是电感左边的电压就是-Vd,右边的电压是Vo不变,因此电感两端电压是-Vd-Vo。此时电感电流是线性减小的,因为L*di/dt=-Vd-Vo,di/dt=-(Vo+Vd)/L=常数,并且是负值,所以是线性减小的。 推导公式 我们推导公式,是为了选型,选择输入滤波电容,输出滤波电容,电感。那么先把已知条件列出来首先是输入电压Vi,输出电压Vo,输出电流Vo/R,咱总得知道自己想要什么吧,所以这些在设计之初都是已知的。其次是开关频率f,这个在芯片选型之后就是确定的了。再然后就是设计的目标,输入纹波大小△Vi,输出纹波大小△Vo。我们根据这些已知的量,就可以求得电感感量,输入滤波电容大小,输出滤波电容大小。 因为计算的基本原理其实就是电容和电感的充放电。所以,我们首先要求的就是开关导通的时间和断开的时间,或者说是占空比。 这个也非常简单,我们可以这么想。在开关导通的时候,电感两端电压是Vi-Vo。在开关断开的时候,输出端电压为Vo,二极管导通,那么电感右侧就是Vo,电感左侧接的是-Vd,所以此时电感两端电压是Vo+Vd。整个电路稳定之后,因为负载电流恒定,那么一个周期时间之内,在开关导通时电感电流增加的量,要等于开关截止时,电感电流减小的量,即电感充了多少电就要放多少电,不然负载的电流或者电压就要发生变化。即一个周期内,电感电流增大量等于减小量。然后又因为U=Ldi/dt,di/dt=U/L,L不变,所以电感电流变化速度与电压成正比。简单说就是,电感电流上升或下降的斜率与电压成正比。 斜率与电压成正比,电感电流上升的高度与下降高度又相同,那上升时间不就和电压成反比了吗? 所以,自然就有了:Ton/Toff=(Vo+Vd)/(Vi-Vo)我们变换一下,就得到了江湖所传的“伏秒法则” 纯分享贴,有需要可以直接下载附件获取完整文档! (如果内容有帮助可以关注、点赞、评论支持一下哦~)
2025-03-31 11:34
最近项目用到三菱PLC的网络通讯,终于理解了PLC的以太网通讯时,有个网络端口生存确认,原来是一个非常重要的参数。 生成确认决定了网络参数中模块的初始设置中的对象目标生存期的设置是否生效。具体来说,生存确认设置为“确认”时,对象目标生存期的设置才会生效。这个设置对于网络通信的稳定性和可靠性非常重要,因为它涉及到网络中断后重新连接的行为。如果生存确认设置为“不确认”,那么在通讯过程中如果网络中断,再连通网络后,PLC会认为这个通道一直有客户端的连接,这时只能重启PLC,Socket客户端才能再连接到这个通道上。因此,正确设置生存确认对于确保PLC网络通信的连续性和稳定性至关重要。 三菱QJ71E71以太网模块中的生成确认设置,像下图选择‘使用Ping’来检查对方客户端的连接是否存在,如果Ping不通则销毁连接,这样客户端才能够重新连接上: 三菱R系列CPU内置以太网通讯的生成确认设置,选择‘KeepAlive’即可: 下面是一个实际的应用,采用IGT-DSER智能网关实现三菱跟西门子PLC之间多对多通讯,配置如下图: 任务1: 读取三菱PLC的M992M1311(起始地址须要16的倍数,992整除以16等于62),写入西门子PLC的M100.0M139.7,共40字节; 任务2: 读取西门子PLC的M140.0M179.7,写入三菱PLC的M2000M2319(起始地址须要16的倍数,2000整除以16等于125),共40字节; 任务3: 读取三菱PLC的D1000D1200,写入西门子PLC的DB10.DBW0DB10.DBW399,共400字节/200字; 任务4: 读取西门子PLC的DB20.DBW0DB20.DBW399,写入三菱PLC的D2000D2200,共400字节/200字; 任务5: 读取三菱PLC的X1C(位地址转为10进制,中间加点号),写入西门子PLC的Q0.2,共1个位(BOOL信号); 任务6: 读取西门子PLC的I0.4,写入三菱Y2E(位地址转为10进制,中间加点号),共1个位(BOOL信号); 相关应用案例资料:*附件:生存确认与PLC之间通讯.rar
2025-03-31 11:26
现代炼钢电弧炉的基本功能是将尽可能多的电功率输入到熔池内,以获得高的生产率和低的物料、能量消耗以及好的环保指标。炼钢电弧炉按其吨钢平均变压器额定容量, 或单位炉膛面积平均变压器额定容量分为普通功率(RP)、高功率(HP)和超高功率(UHP)三种。超高功率电弧炉概念自70年代提出,目标在于极大地提高电弧炉炼钢的生产率和降低成本,开创了电弧炉炼钢技术发展新纪元。但由于生产时对电网影响与干扰是多方面的,实践中也发现了涉及到电能质量的所有方面。由于超高功率电弧炉的变压器功率水平高,变压器容量高达数十兆伏安,在炼钢过程中对电网造成严重的冲击和干扰,这些“公害”必须加以控制和治理。 1对电网的干扰 1.1功率因数低 电弧炉从电网获得电能,其中一部分转化为有用的热能,而另一部分则为无功能量。为了使电弧能稳定燃烧,电弧炉的功率因数不能取得太高。因电弧炉负载是高感性的,电弧炉的接入使供电电网的功率因数恶化。超高功率电弧炉运行在熔化期时,功率因数甚至低到0.1,这样引起母线电压严重降低。电压降低又相应降低电弧炉的有功功率,使熔化期延长,生产率下降。 1.2电压闪烁和波动 超高功率电弧炉是供电电网的很大的负载,而且在运行中经常产生突然的、强烈的电压冲击,导致电网电压的快速波动,频率为0.1~30Hz。频率在1~10Hz之间的电压波动会引起照明白炽灯和电视画面的闪烁,使人们感到烦躁,这类干扰称之为“闪烁”或“闪变”。强烈的闪烁会造成电机转动不稳定,电子装置误动作甚至损坏,也会使电网供电的用户(包括电弧炉本身)的实际功率减少,闪烁是对电网的一种公害。 对于实际的、有限容量的电网,电弧炉负载引起的电网电压波动百分数为 ΔU%=ΔQ/Sk×100% (1) 式中ΔQ——无功功率的冲击量,Mvar; Sk——本电弧炉供电母线最小短路容量,MVA。 考虑到电弧炉的正常运行状态与短路状态之间的无功功率变动大致与炉子变压器的额定容量相当,即ΔQmax≈SF,故可以用下式来估算电网上最大波动百分数 ΔUmax%=SF/Sk×100% (2) 国标《电能质量˙电压允许波动和闪变》(GB12326—2000)规定了电力系统公共连接点的电压波动和闪变电压允许值。超高功率电弧炉在其运行过程中产生的波动和闪变往往都超过这个规定值,必须加以抑制。 1.3三相电压与电流不对称 引起电网供电质量变差的另一个重要问题是电弧炉三相负载不对称引起的电网三相电压及三相电流的不对称。其后果是相关电网的所有用户(包括电弧炉)的经济性和生产率降低。分析表明,在公共连接处电网短路容量Sk比电弧炉变压器额定容量SF高50倍以上时,电弧炉三相负载不对称所造成的电网电压的不对称性未超过国标《电能质量˙三相电压允许不平衡度》(GB/T15543—1995)中规定的允许值。 当前电弧炉大型化、更超高功率化,结果供电电网的容量往往只有电弧炉变压器容量的20~40倍或更低,故必须采用补偿。 1.4高次谐波 交流电弧炉在炼钢过程中其电流会产生非正弦畸变和各次谐波,对电网造成干扰。其主要原因有: (1)电弧的电阻值不恒定,并且在交流电弧的半个周期中电弧电阻也在变动,这造成电弧电流的非正弦畸变。 (2)交流电的正负半周换相,石墨电极和钢交替作阴极和阳极,因不同材料的发射电子能力不一样,故使电流的正负两个半周的波形不对称,造成偶次谐波。 (3)三相电弧不均衡,导致三次谐波。 (4)供电系统连接的各种谐波源导致各种谐波的形成,如静补装置中的整流器等。 电弧炉的谐波电流成份主要为2~7次,其中2、3次最大,其平均值可达基波分量的5%~10%,谐波电流流入电网,使电压波形发生畸变,引起电气设备发热、振动以及保护误动作等。国标《电能质量˙公用电网谐波》(GB/T14549—93)对综合电压畸变率、谐波电流注入量均作了具体规定,为抑制电弧炉产生的谐波提供了依据和标准。 2抑制电弧炉对电网和自身影响的途径 抑制超高功率电弧炉干扰的途径总的来讲有二:一是提高供电电源的电压等级,以提高与电网公共连接点的短路容量,使其对电网和自身的影响在允许范围内;二是采用SVC装置,使其多项指标限制在允许范围内。两种途径相比,途径一是治标的方法,因为电炉对电网和自身影响的各种量值并未消除,而是送到更高电压级的电网去扩散,随着电炉不断建设发展,这些量值在电网中增加积累,泛滥成灾,将会形成电网所不能接受的程度,而增加了对广大用户的影响,因此,使用范围越来越小。途径二是治本的办法,它使电炉对电网和自身影响的各种量值大部分就地消除了,故其使用范围越来越大,前途广阔。 2.1SVC装置 近些年来发展起来的SVC装置是一种快速调节无功功率的装置,已成功地用于电力、冶金、采矿和电气化铁道等冲击性负荷的补偿上,它可使所需无功功率作随机调整,从而保持在电弧炉等冲击性负荷连接点的系统水平的恒定 Qi=QD+QL-QC (3) 式(3)中Qi、QD、QL、QC分别为系统公共连接点的无功功率、负荷所需的无功功率、可调(可控)电抗器吸收的无功功率、电容器补偿装置发出的无功功率,单位均为kvar。 当负荷产生冲击无功ΔQD时,将引起 ΔQi=ΔQD+ΔQL-ΔQC (4) 式中ΔQC=0,欲保持Qi不变,即ΔQi=0,则ΔQD=-ΔQL,即SVC装置中感性无功功率随冲击负荷无功功率作随机调整,此时电压水平能保持恒定不变。 SVC由可控支路和固定(或可变)电容器支路并联而成,主要有四种型式。 (1)可控硅阀控制空芯电抗器型(称TCR型)它用可控硅阀控制线性电抗器实现快速连续的无功功率调节,它具有反应时间快(5~20ms)、运行可靠、无级补偿、分相调节、能平衡有功、适用范围广、价格便宜等优点。TCR装置还能实现分相控制,有较好的抑制不对称负荷的能力,因而在电弧炉系统中采用最广泛,但这种装置采用了先进的电子和光导纤维技术,对维护人员要专门培训提高维护水平。 (2)可控硅阀控制高阻抗变压器型(TCT型)优点与TCR型差不多,但高阻抗变压器制造复杂,谐波分量也略大一些。由于有油,要求一级放火,只宜布置在一层平面或户外,容量在30Mvar以上时价格较贵,而不能得到广泛采用。 (3)可控硅开关控制电容器型(TSC型)分相调节,直接补偿,装置本身不产生谐波,损耗小,但是它是有级调节,综合价格比较高。 (4)自饱和电抗器型(SSR型)维护较简单,运行可靠,过载能力强,响应速度快,降低闪变效果好,但其噪声大,原材料消耗大,补偿不对称电炉负荷自身产生较大谐波电流,无平衡有功负荷能力。 2.2无源滤波装置 该装置由电容器、电抗器,有时还包括电阻器等无源元件组成,以对某次谐波或以上次谐波形成低阻抗通路,以达到抑制高次谐波的作用。由于SVC的调节范围要由感性区扩大到容性区,所以滤波器与动态控制的电抗器一起并联,这样既满足无功补偿、改善功率因数,又能消除高次谐波的影响。 国际上用于大型炼钢电弧炉的滤波器种类有:各阶次单调谐滤波器、双调谐滤波器、二阶宽频带与三阶宽频带高通滤波器等。 (1)单调谐滤波器一阶单调谐滤波器的优点是滤波效果好,结构简单,缺点是电能损耗比较大,但随着品质因数的提高而减少,同时又随谐波次数的减少而增加,而电炉正好是低次谐波,主要是2~7次,因此,基波损耗较大。二阶单调谐滤波器当品质因数在50以下时,基波损耗可减少20%~50%,属节能型,滤波效果等效。三阶单调谐滤波器是损耗最小的滤波器,但组成复杂些,投资也高些,用于电弧炉系统中,2次滤波器选用三阶滤波器为好,其他次选用二阶单调谐滤波器。 (2)高通(宽频带)滤波器一般用于某次及以上次的谐波抑制。当在电弧炉系统中采用时,对5次以上起滤波作用时,通过参数调整,可形成该滤波器回路对5次及以上次谐波形成低阻抗通路。 用于大型电炉的滤波器组合最基本的有两类:一是用3~5组单调谐滤波器组成,二是由2~4组单调谐滤波器和一组二阶宽频带滤波器组成。第一类组合对高次谐波滤波效果要差一些,但电能损耗低些;第二类组合对高次数滤波效果好,分工也明确,设计也简单容易些。两者组合各有优缺点,总的发展趋势是在滤波效果好的前提下减少组数,以节省占地和投资,又要尽可能优化组合以节省电能损耗。 3有源滤波器 虽然无源滤波器具有投资少、效率高、结构简单及维护方便等优点,在现阶段广泛用于配电网中,但由于滤波特性受系统参数影响大,只能消除特定的几次谐波,而对某些次谐波会产生放大作用,甚至谐振现象等因素,随着电力电子技术的发展,人们将滤波研究方向逐步转向有源滤波器(APF)。 APF即利用可控的功率半导体器件向电网注入与谐波源电流幅值相等、相位相反的电流,使电源的总谐波电流为零,达到实时补偿谐波电流的目的。它与无源滤波器相比,有以下特点: a.不仅能补偿各次谐波,还可抑制闪变,补偿无功,有一机多能的特点,在性价比上较为合理; b.滤波特性不受系统阻抗等的影响,可消除与系统阻抗发生谐振的危险; c.具有自适应功能,可自动跟踪补偿变化着的谐波,即具有高度可控性和快速响应性等特点。
2025-03-31 11:23
今天就来看看Boost电路。 我们知道,不论是buck,还是boost电路,总会有一些公式,用得最多的就是电感的感量计算,电流纹波,输入电压纹波大小,输出电压纹波大小等等。这些公式,在我们设计的时候会去算一算,很多的DCDC的芯片手册里面也会有这些公式。 就我自己而言,我是很讨厌背公式的,相信大家也一样。 所以最好的方式莫过于充分理解电路的工作原理,甚至于可以自己推导出这些公式。 我们如果理解了这些公式,那么就理解了Boost电路各个地方的电流,电压是怎么样的,遇到一些问题,就可以不用去看公式就能知道为什么会这样。比如电感感量增大,会怎么样?电容容量增大会怎么样?工作频率的大小又有哪些影响呢?所以,推导公式是为了摆脱公式。另外,计算之后,我们会发现: 计算结果跟实测结果经常差的比较多?根本就不准?为什么呢?这些问题,本文都会说一说。 Boost的拓扑结构我们先来看拓扑结构,一切信息都在这个里面。 首先说下最基本的一个工作原理。 上图中MOS管就是一个开关,只要这个速度够快(开关频率够高),控制好导通与关断时间(充放电时间),配合输出滤波电容,就可以得到基本稳定的Vo了,也就是输出电压。我们来简单看一下过程。在开关导通的时候,电感L接地,二极管截止,Vi对电感L进行充电,电感两端电压是Vi。 在开关变为不导通的时候,因为之前电感L已经被充电了,有电流流过,电流向右,电感两端电流不能突变,所以会感应出电压,让右侧的二极管导通。 输出电压Vo恒定,二极管导通压降为Vd,所以电感右端电压为Vo+Vd,电感左端电压是电源输入Vi。这是升压boost电路, 所以Vo+Vd>Vi,电感此时放电,给负载供电,以及给输出滤波电容充电。 并且,此时电感的两端电压是右边电压Vo+Vd减去左边电压Vi,即:Vo+Vd-Vi 来个前菜加深理解Boost电路是升压电路,是直流转直流,不考虑纹波电压的话,Vi和Vo都是恒定的,Vo大于Vi。 在开关导通的时候电感L一端是恒定电压Vi,另外一端接地。这说明在开关导通的时候,电感L两端的电压是恒定不变的,就是Vi。根据电感最最最最基本的公式:U=L*di/dt。(虽然我不喜欢背公式,但是这个公式我觉得是电感最重要的了,我之前还专门讲过,它可以推导出电感储能公式等等。同样,电容的最重要的公式:i=C*du/dt。)好,电感两端电压U=Vi不变,电感量L也是常数,所以呢,di/dt=U/L=常数,这不就是说电流随时间线性变化吗? 如果我们规定电流流向负载的方向是正,根据电感此时电压,是左边大于右边,所以电感的电流是线性增大的。 当开关断开的时候电感两端的电压U=Vo-Vi-Vd,也是恒定的,电流同样随时间线性变化。只不过电压的方向是反的,右边大于左边,所以电感的电流是线性减小的。开关导通,电感电流线性增大。开关断开,电感电流线性减小。 我第一次看到电感电流波形是这样的时候,我就觉得好巧啊,怎么就一定是线性上升呢?不是曲线上升? 纯分享贴,有需要可以直接下载附件获取全文! (如果内容有帮助可以关注、点赞、评论支持一下哦~)
2025-03-31 11:05
AN7112,AN7116,AN7117,AN7147,AN7149N等
2025-03-31 11:01
1、项目简介 在本次项目中,我们将采用LockAI视觉摄像头与OpenCV-C++技术相结合的方式来实现特定场地内的视觉巡线任务。 控制方面,我们选用了小凌派-RK2206开发板,该开发板运行OpenHarmony请谅解操作系统,并通过串口通讯与LockAI进行高效的数据交互。基于摄像头传输回来的目标坐标数据,我们将运用PID算法精确地对智能车的行驶进行调控。这样,不仅能够确保智能车沿着预定线路稳定行驶,还能通过实时数据分析优化行车路径,提升整体运行效率和稳定性。整个方案集成了先进的图像识别技术和精准的控制算法,为实现自动化巡线提供了可靠的技术保障。 2、基本知识 2.1、PID算法简介 PID算法,即比例-积分-微分(Proportional-Integral-Derivative)控制器,是一种在工业控制中广泛应用的反馈控制机制。它通过计算设定值(目标值)与实际值之间的误差,并基于此误差进行调节,以达到稳定系统输出的目的。其原理如下: 比例(P)控制 :比例控制是根据当前误差值(即设定值与实际值之差)直接按比例调整输出。它的作用是快速响应误差,减少误差幅度。比例系数Kp越大,调节的速度越快,但是过大的Kp会导致系统振荡。 积分(I)控制 :积分控制是对过去所有误差的累积进行调节,其目的是消除静差(即系统稳定后仍然存在的误差)。积分项通过累加过去的误差来影响控制量,使得即使误差很小,只要持续存在,也会逐渐增加控制量,直到误差被完全消除。积分系数Ki需要谨慎选择,因为太高的积分作用可能导致系统不稳定。 微分(D)控制 :微分控制考虑的是误差的变化率,用于预测误差的未来趋势,从而提前采取措施减小误差。微分项能够帮助抑制超调现象,提高系统的响应速度和平稳性。然而,由于它对噪声较为敏感,因此实际应用中往往需要慎重设置微分系数Kd。 在实际的控制过程中我们采用离散型PID控制。在离散时间系统中,假设采样周期为T T ,则离散型PID控制器的输出u(k) u ( k )可以表示为:u(k)=Kpe(k)+Ki∑i=0kTe(i)+Kde(k)−e(k−1)Tu(k)=Kpe(k)+K**i∑i=0kTe(i)+KdT**e(k)−e(k−1) 其中, KpKp、KiKi 和 KdK**d 分别为比例、积分和微分系数。 e(k) e ( k ) 代表第kk次采样时的误差,即设定值与实际值之差。 TT 是采样时间间隔。 为了更有效地实现积分项的计算,通常采用增量式PID算法,其表达式为: Δu(k)=u(k)−u(k−1)=Kp[e(k)−e(k−1)]+KiTe(k)+Kde(k)−2e(k−1)+e(k−2)TΔu(k)=u(k)−u(k−1)=*K**p*[*e*(*k*)−*e*(*k*−1)]+*K**i**T**e*(*k*)+*K**d**T**e*(*k*)−2*e*(*k*−1)+*e*(*k*−2) 这样做的好处在于,只需保存最近几次的误差值以及上一次的控制量,就可以计算出当前的控制增量Δu(k)Δ *u* ( *k* ),从而减少了存储需求,并且易于编程实现。 2.2、LockAI简介 凌智视觉模块(Lockzhiner Vision Module) 是福州市凌睿智捷电子有限公司联合百度飞桨倾力打造的一款高集成度人工智能视觉模块,专为边缘端人工智能和机器视觉应用而设计。读者如有兴趣,可以参考Gitee仓库(LockAI Gitee仓) 3、实验内容 3.1、视觉代码实现 本项目是基于摄像头的视觉检测系统,主要功能包括实时捕获视频流、提取感兴趣区域(ROI)、通过 HSV 阈值分割检测黑色区域,并计算目标质心位置以确定水平偏移量。系统通过串口将质心 X 坐标发送给外部设备(如小车控制器),同时在图像上绘制 ROI 边框和质心位置,并将处理结果发送至编辑模块进行显示,便于调试和验证。代码采用模块化设计,支持动态调整摄像头分辨率,具备良好的灵活性和扩展性,适用于智能车视觉巡线、目标跟踪等场景。为进一步提升性能,建议增强异常处理机制、优化算法效率,并将关键参数提取到配置文件中以便于调整和适配不同环境。整体而言,该系统实现了实时性、可视化与模块化的结合,为嵌入式视觉应用提供了可靠的技术支持。 #include <lockzhiner_vision_module/edit/edit.h> #include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/opencv.hpp> #include <lockzhiner_vision_module/periphery/usart/usart.h> int main(int argc, char *argv[]) { // 设置串口波特率为115200 lockzhiner_vision_module::periphery::USART1 usart; if (!usart.Open(115200)) { std::cout << \"Failed to open usart.\" << std::endl; return 1; } // 设置默认摄像头分辨率 int width = 640; int height = 480; // 如果命令行参数提供了宽度和高度,则使用它们 if (argc == 3) { width = std::stoi(argv[1]); height = std::stoi(argv[2]); } // 初始化编辑模块并尝试连接设备 lockzhiner_vision_module::edit::Edit edit; if (!edit.StartAndAcceptConnection()) { std::cerr << \"Error: Failed to start and accept connection.\" << std::endl; return EXIT_FAILURE; } std::cout << \"Device connected successfully.\" << std::endl; cv::VideoCapture cap; cap.set(cv::CAP_PROP_FRAME_WIDTH, width); cap.set(cv::CAP_PROP_FRAME_HEIGHT, height); cap.open(0); // 获取实际的帧尺寸 double frameWidth = cap.get(cv::CAP_PROP_FRAME_WIDTH); double frameHeight = cap.get(cv::CAP_PROP_FRAME_HEIGHT); std::cout << \"Frame size: \" << frameWidth << \"x\" << frameHeight << std::endl; // 定义ROI区域 cv::Rect roi_rect(100, 400, 440, 80); while (true) { cv::Mat temp_mat; cap >> temp_mat; // 获取新的一帧 if (temp_mat.empty()) { std::cerr << \"Warning: Couldn\'t read a frame from the camera.\" << std::endl; continue; } // 提取ROI区域,并转换到HSV色彩空间 cv::Mat roi_image = temp_mat(roi_rect); cv::cvtColor(roi_image, roi_image, cv::COLOR_BGR2HSV); // 注意原代码中是RGB2HSV,应改为BGR2HSV // 创建黑白掩膜 cv::Scalar lower_black(0, 0, 0); cv::Scalar upper_black(180, 100, 60); cv::Mat mask; cv::inRange(roi_image, lower_black, upper_black, mask); // 应用掩膜 cv::Mat res; cv::bitwise_and(roi_image, roi_image, res, mask); // 计算图像矩并找到质心 cv::Moments m = cv::moments(mask, false); double cx = m.m10 / (m.m00 + 1e-6); // 防止除以零 double cy = m.m01 / (m.m00 + 1e-6); // 在原始图像上绘制ROI边框和质心位置 cv::rectangle(temp_mat, roi_rect, cv::Scalar(255, 0, 0), 2); // 绘制ROI边框 cv::circle(temp_mat, cv::Point(static_cast<int>(cx + roi_rect.x), static_cast<int>(cy + roi_rect.y)), 5, cv::Scalar(0, 255, 0), -1); // 绿色圆点表示质心位置 // 输出质心的X坐标 std::cout << \"Centroid X: \" << cx + roi_rect.x << std::endl; std::string prefix = \"x:\"; std::ostringstream stream; stream << prefix << (cx + roi_rect.x) << \"\\\\\\\\r\\\\\\\\n\"; std::string result = stream.str(); if (!usart.Write(result)) { std::cout << \"Failed to send data.\" << std::endl; } // 将当前帧发送到编辑模块打印 if (!edit.Print(temp_mat)) { std::cerr << \"Error: Failed to print to edit module.\" << std::endl; break; } } return EXIT_SUCCESS; } 3.2、PID代码实现 本项目主要通过串口与 LockAI 摄像头进行通信,并在串口任务中解析出目标的关键数据,例如目标的质心坐标、目标检测区域的大小等信息。这些数据被用作 PID 控制器的反馈输入,进而计算出 PID 的输出值。小凌派开发板基于该输出值实现了麦克纳姆轮的运动解算。只需输入期望的 X 轴、Y 轴以及旋转 W 轴的速度,即可通过解算函数计算出四个轮子对应的速度。各轴的速度会自动叠加,确保运动的平滑性与精确性。将 PID 的输出结果输入到麦克纳姆轮的解算函数中,即可实现对小车车身姿态和运动的精准控制。 float PID_Calc(PidTypeDef *pid, float ref, float set) { if (pid == NULL) { return 0.0f; } pid->error[2] = pid->error[1]; pid->error[1] = pid->error[0]; pid->set = set; pid->fdb = ref; pid->error[0] = set - ref; if (pid->mode == PID_POSITION) { pid->Pout = pid->Kp * pid->error[0]; pid->Iout += pid->Ki * pid->error[0]; pid->Dbuf[2] = pid->Dbuf[1]; pid->Dbuf[1] = pid->Dbuf[0]; pid->Dbuf[0] = (pid->error[0] - pid->error[1]); pid->Dout = pid->Kd * pid->Dbuf[0]; LimitMax(pid->Iout, pid->max_iout); pid->out = pid->Pout + pid->Iout + pid->Dout; LimitMax(pid->out, pid->max_out); } else if (pid->mode == PID_DELTA) { pid->Pout = pid->Kp * (pid->error[0] - pid->error[1]); pid->Iout = pid->Ki * pid->error[0]; pid->Dbuf[2] = pid->Dbuf[1]; pid->Dbuf[1] = pid->Dbuf[0]; pid->Dbuf[0] = (pid->error[0] - 2.0f * pid->error[1] + pid->error[2]); pid->Dout = pid->Kd * pid->Dbuf[0]; pid->out += pid->Pout + pid->Iout + pid->Dout; LimitMax(pid->out, pid->max_out); } return pid->out; } void UserControl() { WheelControl wheelControls[WHEELS_COUNT]; float vx = 0; // X方向线速度,单位:m/s float vy = 0; // Y方向线速度,单位:m/s float w = 0;// 角速度,单位:rad/s CtrolInit(); for (;;) { // PID_Calc(&PWMPid[0], x, 320); // PID_Calc(&PWMPid[0], x, 320); if (FirstRec == 1) { // 检测用 // PID_Calc(&PWMPid[2], x, 240); // PID_Calc(&PWMPid[1], s, 10000); // calculateWheelPWMSpeeds(-PWMPid[1].out, vy, PWMPid[2].out, wheelControls); // 循迹用 PID_Calc(&PWMPid[2], x, 240); calculateWheelPWMSpeeds(-5, vy, PWMPid[2].out, wheelControls); // 设置方向GPIO LzGpioSetVal(GPIO0_PA5, wheelControls[0].direction); // 右前 LzGpioSetVal(GPIO0_PA3, wheelControls[3].direction); // 右后 LzGpioSetVal(GPIO0_PA1, wheelControls[2].direction); // 左后 LzGpioSetVal(GPIO0_PA0, wheelControls[1].direction); // 左前 // 启动PWM IoTPwmStart(RU_B4, wheelControls[0].pwm, 1000); // 右前 IoTPwmStart(RD_B6, wheelControls[3].pwm, 1000); // 右后 IoTPwmStart(LD_C7, wheelControls[2].pwm, 1000); // 左后 IoTPwmStart(LU_C3, wheelControls[1].pwm, 1000); // 左前 } LOS_Msleep(1); } } 4、实验结果 见底部视频 原文地址https://mp.weixin.qq.com/s/cdJ-XvBbckDZ5POlbtIxaA
2025-03-31 10:58
在建筑照明中使用可调LED灯具既能够创造良好的照明环境,又能够避免过度照明,还能达到节约能源的目的。Litestar 4D软件支持可调LED灯具的通量调节,要实现此功能首先需要灯具的OXL格式文件,该格式文件可通过把灯具的光度文件导入photoview(Litestar 4D模块之一)创建。 a)在photoview中添加测量数据组后,程序会拟合通量、功率与电流的关系曲线 这里使用一个道路照明案例介绍: b)道路参考的标准和照明等级 c)在litecalc中进行灯具的电流调节 使用两种不同电流值的计算结果如图: d)电流为0.25A时,车道A的LAV值低于标准值 e)电流为0.5A时的计算结果
2025-03-31 10:51
随着科技的进步与移动互联网的普及,传统的实体车钥匙正在逐步被智能化的开锁方式取代。针对两轮电动车市场,我们推出了全新的智能蓝牙钥匙开锁解决方案,该解决方案基于最新的BLE5.4蓝牙技术,集成了高性能的低功耗蓝牙模组。通过这一模组,用户可以轻松实现自动开锁与关锁的功能,无需携带物理钥匙,即可远程操控车辆。这不仅提升了用户的使用体验,还大大增强了车辆的安全性。功能特点: 高效便捷:通过BLE5.4蓝牙模组,用户可以在靠近车辆时自动解锁,离开时自动上锁,无需手动操作,真正实现了“无钥匙”出行。 安全可靠:采用高级加密算法,确保数据传输的安全性,防止非法破解和远程攻击,保障车辆安全。 广泛兼容:适用于大多数两轮电动车品牌和型号,提供高度的兼容性,方便车企和用户无缝集成。 低功耗设计:模组设计遵循低功耗原则,在保证性能的同时,延长电动车电池的使用寿命。
2025-03-31 10:49
在日常生活以及常见的工业场景当中,湿度是很重要的一个因素。从居住的房间舒适度,到一些对湿度要求极高的实验室、仓库等场所,可能都需要进行精准的湿度把控。在这个过程中,湿度数据记录仪发挥着重要的作用。那么,湿度数据记录仪究竟是什么? 简单来说,湿度数据记录仪是一种能够自动记录环境湿度数据的仪器。它就像一个不知疲倦的小卫士,默默地在各个角落持续监测着湿度的变化,并将这些数据准确无误地记录下来。 湿度数据记录仪有着广泛的应用场景。在食品行业,合适的湿度对于食品的储存和保鲜至关重要。如果湿度过高,食品容易受潮发霉,滋生细菌,影响食品的质量和安全;而湿度过低,又可能导致食品变干、口感变差。湿度数据记录仪可以实时监测食品仓库的湿度情况,帮助工作人员及时调整仓储环境,确保食品始终处于最佳的储存条件下。 在电子制造领域,湿度同样不容忽视。过高的湿度可能会使电子元件受潮,导致短路、腐蚀等问题,影响电子产品的性能和寿命。通过使用湿度数据记录仪,厂家可以精确掌握生产车间和储存环境的湿度状况,采取相应的措施来保证电子产品的质量。 湿度数据记录仪的工作原理并不复杂。它通常由湿度传感器、数据采集模块、存储模块和显示模块等部分组成。湿度传感器负责感知周围环境的湿度,并将其转化为电信号;数据采集模块对这些电信号进行处理和转换,将其变成数字信号;存储模块则将这些数字信号记录下来,以便后续查看和分析;显示模块可以将当前的湿度数据直观地显示出来,方便用户实时了解环境湿度情况。 随着湿度数据记录仪的使用越来越频繁,市场上的湿度数据记录仪品牌也是非常多的,但是性能和质量却是参差不齐。
2025-03-31 10:35
我一直想搞清楚MOS管的开关损耗计算,在只知道驱动MOS管芯片的输出的驱动电压,MOS管的规格书手册,驱动频率的条件下,能够计算出MOS管的功耗大小。这样我们在原理图设计阶段的时候,就能够判断散热是否有问题,帮助我们进行MOS管选型,特别是封装大小。这样相当于是风险评估前置,不用非要等到板子做出来实测。 那MOS管的损耗由哪几部分构成呢?一般来说由下面5部分构成。 不过相对来说,导通损耗和开关损耗占大头,本篇也只说这两个。 1、导通损耗 导通损耗指的是MOS 管完全导通的损耗,这个相对来说最简单,导通后Vgs不变的情况下,导通电阻恒定,知道了通过的电流,开关的占空比D,那么损耗就可以用下面的公式计算: 不过,上面这个公式有一定的局限性,因为有的时候,MOSFET由关断到开通的Ids,与从开通到关断的Ids,两者并不相同,特别对于感性负载来说。 因为到MOSFET导通之后,负载两端就有电压,感性负载的话,相当与电感L两端加了电压,因此在随后导通的这一段时间内,电感会被充电,电流不断上升,因此在后面MOS管关断的时候,电流发生了变化。如下图所示,开通是电流为Ids_on,关断是电流就上升到了Ids_off。 那这种情况下,导通损耗怎么计算呢?我们可以用积分推导的方式求解出来,具体过程如下图:开关损耗应该是最难的,要想搞清楚,需要了解 MOS管的开关过程,下面我们分别说下MOS管的开通与关断过程。 需要特别说明的是,负载类型不同,MOS管的开通和关断波形是不一样的,结合实际应用的情况,我们分为电感负载和电阻负载吧。 2、电感负载时MOSFET的开关损耗 2.1、电感负载下MOS管的开通过程 先来看电感负载下MOS管的开通过程,如下图t1~t4所示:开关损耗应该是最难的,要想搞清楚,需要了解 MOS管的开关过程,下面我们分别说下MOS管的开通与关断过程。 t1阶段:此阶段指的是,从驱动器开始输出驱动电压Vg_drive开始,到MOS的G和S极之间电压被充到Vgs(th)。这个过程中,MOS管始终不导通,没有电流流过,因此Ids始终为0,Vds维持不变。 t2阶段:此阶段指的是MOS的G和S之间的电压从Vgs(th)上升到米勒平台电压的过程,这个过程中,器件工作在线性工作区(Vgs与Id成正比),MOS的电流从0上升到Ids_on,MOS两端的电压保持不变。 t3阶段:这个阶段栅极维持米勒平台电压Vgp不变,同时因为是感性负载,Ids电流基本不变,但栅极一直在被充电,因为Vds在下降。此时栅极驱动器提供的所有栅极电流都被转移,对Cgd进行充电,从而导致D,S之间电压快速变小,即Vds电压下降,直到MOS达到完全导通状态。 t4阶段:MOS完全导通后,栅极驱动器电压因为高于米勒平台Vp电压,因此G和S之间电压会继续抬升,直到Vgs = Vg_drive,这个过程中栅极驱动器给Cgd充电,MOS管保持开通状态。 上面是大致的开通过程,损耗主要发生在两个时间段,t2和t3,为什么呢?也容易看出来t1:流过MOS的电流为0,因此损耗为0(不算栅极损耗的话)t2:电压为Vds,电流从0上升到Ids_on,产生损耗t3:电压从Vds下降到基本为0(严格来说电压=Ids_on*Rds(on)),电流为Ids_on,产生损耗t4:电压保持基本为0(严格来说电压= Ids_on *Rds(on)),电流为Ids_on,相对于t3时间段的损耗,非常小,可忽略。 容易想到,要想计算损耗,我们就需要计算t2和t3的值,计算t2和t3时间也是MOS损耗理论计算的难点。 下面就来说明下如何详细计算下t2,t3,顺带把t1也计算下。 我们知道,MOS的规格书里面有很多参数,Ciss,Crss,Coss,Qg,Qgs,Qgd等。 摆在我们面前的第一个问题,我们到底用什么参数来计算呢?是电容(Ciss,Crss,Coss)还是用电荷量Qg,Qgd,Qgs,Qgs(th)? 纯分享贴,有需要可以直接下载附件获取全文+配套资料! (如果内容有帮助可以关注、点赞、评论支持一下哦~)
2025-03-31 10:34