C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

C语言中的匿名变量:魔法般的编程之旅

前言

大家好,欢迎来到C语言的神奇世界!今天,我们将带你探索一个鲜为人知、却强大无比的黑科技——匿名变量。它是C语言中的一颗璀璨明珠,让我们一起揭开它的神秘面纱。

匿名变量初探

首先,我们要认识匿名变量的魔法形式:&(type){value}。这里的type是变量的类型,value是变量的初始值。用一行代码,我们就可以创造出一个不需要名字的变量!

int *p = &(int){42};

是不是觉得有点像魔法咒语?这行代码创建了一个整数指针p,指向值为42的匿名整数。酷吧?

穿越时空的初始化

匿名变量带我们穿越到过去和未来,让我们以一种前所未有的方式初始化变量。

void travelThroughTime(int *ptr) { // ...}int main() { travelThroughTime(&(int){42}); return 0;}

在时光隧道中,我们向函数传递一个值为42的匿名整数,而不用在过去或未来为它创建一个名字。是不是感觉自己变成了编程中的时空旅行者?

小结

匿名变量,这个神奇的黑科技,让C语言的编程变得更为有趣和强大。在这个魔法的世界里,我们可以用更简洁、更直观的方式编写代码,感受到编程的奇妙之处。

匿名变量使用场景代码(参数定义),下载链接(或点击阅读原文)轻量级参数管理框架:https://Gitee.com/cot_package/cot_paRAM

查看原文:https://www.dianyuan.com/eestar/article-8126.html

Git:软件开发的黄金标配

前言

在上一篇文章中,我们讨论了为何使用版本管理工具是一个比手动拷贝更好的选择。今天,我们将了解其中的佼佼者——Git,它为软件开发提供了无与伦比的版本管理体验。

为何选择Git?

分布式特性

Git是一种分布式版本控制系统,每个开发者都有一个完整的本地仓库。这使得即使在没有网络连接的情况下,开发者也能够独立工作,不受限制。

强大的分支管理

Git的分支管理是其最大的亮点之一。开发者可以轻松创建、合并、删除分支,使得并行开发变得十分简单。

版本回滚和恢复

Git允许你轻松地回滚到之前的任何一个提交,甚至可以创建一个新的分支来实验性地进行修改,而不影响主分支。

高效的合并机制

Git的合并机制非常智能,能够自动解决大部分合并冲突,减轻了开发者的工作负担。

轻量级和高速

Git的设计注重性能,使得大型项目也能够在相对较短的时间内进行版本控制操作。

基本概念

在介绍Git之前,让我们回顾一下版本管理的基本概念。Git是一种分布式版本控制系统,它通过记录文件的变更历史,帮助团队协同工作,追踪项目的演变。以下是Git的基本概念:

仓库(Repository):存放项目所有文件及变更历史的地方。

提交(Commit):保存项目在某一时刻的状态,每次提交都有一个唯一的标识。

分支(Branch):是项目的一个独立线路,可以用于独立开发某个功能,然后合并回主线。

远程仓库(Remote):位于网络服务器上的Git仓库,用于团队协作。

推送(Push)和拉取(Pull):将本地的提交推送到远程仓库,或者将远程仓库的变更拉取到本地。

工作区域

在 Git 中的文件有三种状态:

已提交:表示数据已经安全的保存在本地数据库中;

已修改:表示修改了文件,但还没保存到数据库中;

已暂存:表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

因此也引入了Git项目的三个工作区域的概念:

工作区:就是项目文件所在的目录,目前可以看到的文件信息

暂存区:stage 或 index。一般存放在 .git/index 文件中,所以我们把暂存区有时也叫作索引

版本库:工作区下隐藏目录 .git,这里记录着仓库的版本信息和历史记录

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

基本使用

大致的使用流程:

克隆仓库:使用git clone命令可以将远程仓库复制到本地,形成一个完整的本地仓库。

创建分支:使用git branch命令可以创建一个新的分支,开发者可以在不影响主干的情况下进行工作。

提交变更:使用git add和git commit命令可以将修改保存到本地仓库。

推送与拉取:使用git push命令可以将本地的修改推送到远程仓库,而使用git pull命令可以将远程仓库的变化拉取到本地。

合并分支:使用git merge命令可以将一个分支的变化合并到另一个分支,保持代码的一致性。

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

看提交效果,可以清楚地知道每次提交都改动了什么东西

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

实际应用

  • 团队协作:Git使得多人协作变得更加流畅,每个成员都能够独立工作并将工作整合到项目中。
  • 版本发布:通过创建标签(tag),可以轻松管理项目的版本发布,确保发布的版本是经过测试和稳定的。
  • 持续集成(CI):Git与持续集成工具结合使用,可以自动触发构建和测试,加速开发周期。
  • 开源社区:Git是许多开源项目的首选版本管理工具,如GitHubGitLab和Gitee等平台提供了强大的协作和贡献机制。

总结

在现代软件开发中,Git已经成为了不可或缺的利器。它不仅提供了高效的版本管理,还为团队协作和项目维护提供了强大的支持。如果你还没有尝试过使用Git,现在是时候踏上这个版本管理的征程,让你的软件开发变得更加流畅、高效!告别手动拷贝,迎接Git的便捷和强大!

查看原文:https://www.dianyuan.com/eestar/article-8131.html

Git如何实现高效而有序的分支管理

前言

在前一篇文章中,我们了解了 Git 作为软件开发黄金标配的原因。今天,我们将深入了解一下 Git 的分支管理,尤其是一种备受推崇的管理方式——Git Flow。

什么是Git Flow?

Git Flow 是一种基于 Git 的分支管理模型,旨在帮助开发者更加优雅地处理复杂的项目开发过程。这一模型由 Vincent Driessen 提出,它定义了一组独立的分支,每个分支都有特定的用途,以确保团队协作的高效性。

优势在于:

  • 清晰的分支结构:Git Flow 提供了清晰的分支结构,使开发者能够明确地知道当前项目的状态和下一步的操作。
  • 有序的版本管理:通过定义版本、功能和热修复分支,Git Flow 确保了版本的有序发布和问题的及时修复。
  • 团队协作:每个开发者都能在独立的分支上工作,通过 Pull Request 或 Merge Request 方便地进行代码审查,提高团队协作效率。

分支介绍

主分支(master):核心分支,不可删除

命名固定master,主分支是项目的稳定版本,只包含随时可以发布的代码。所有的开发都应该在其他分支进行,不直接在主分支上操作。

开发分支(develop):核心分支,不可删除

命名固定develop,所有日常开发工作都在开发分支上进行。这是一个集成了各种功能和修复的分支,当准备好发布新版本时,将合并到主分支。因此该分支的功能相对于master分支是比较全的,但是缺乏一定稳定性。

功能分支(feature):临时分支,可删除。

用于开发新功能的分支。从开发分支创建,完成后合并回开发分支。对于该分支,命名规范是:feature/< name >,比如 feature/add_check

发布分支(release):临时分支,可删除。

当开发阶段完成,从开发分支创建发布分支,进行预发布的准备工作,如版本号升级和文档更新。完成后合并到主分支,并可能合并回开发分支。对于该分支,命名规范是:release/< name >,通常结合语义化版本命名规范(语义化版本格式为: 主版本号.次版本号.修订号),比如 release/v1.0.0

热修复分支(hotfix):临时分支,可删除。

用于紧急修复主分支上的问题。从主分支创建,完成后合并回主分支,并可能合并回开发分支。对于该分支,命名规范是:hotfix/< name >,通常也是结合语义化版本命名规范,主要是更改修订号,比如在 v1.0.0 版本(主分支上的该版本标签)的基础上创建分支,命名 hotfix/v1.0.1

工作流程图

借用网上一张经典的分支工作流程图:

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

软件推荐

如果刚使用git的朋友,对git分支创建命令行和分支管理等使用方式还不娴熟的情况下,可以利用软件体验一把,该软件名是”SourceTree

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

总结

上述的分支管理是一个比较经典的,但是每个公司的项目管理方式不同和敏捷开发等原因,因此该分支管理模型不一定适用,但是主分支和开发分支是常用的。

主分支命名是master,开发分支命名develop。不过在2020年,github宣称将master默认分支名改为main,大概主要是因为master and slave术语不够政治正确,跟种族歧视有关系。

团队协作时功能分支也是会经常使用,在开发新功能过程中为了避免影响开发分支,通常在开发分支创建功能分支进行开发,开发完成即可合并到开发分支上。

分支命名虽然比较随意,但是建议还是按照 feature/< name > 规范命名,比较清晰。

查看原文:https://www.dianyuan.com/eestar/article-8129.html

汇编文件的复位中断处理函数的基础知识

这里以KEIL开发环境stm32F103RET6为例。

上电时单片机首先进入复位中断Reset_Handler,即汇编文件的复位中断处理函数。

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

并且有一个中断向量表默认存在于flash地址开始处。

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

为什么说是默认呢?这是因为如果没有特殊要求的话很少会去改中断向量表。实际上这个中断向量表是可以更改的。但是在更改向量表之前必须在地址开始处建立一个向量表,因为在复位后,程序默认(硬件决定的)从flash开始的第一个字读取栈指针,第二字就是复位中断的入口,并根据该指针最终进入复位处理函数中执行相应的函数。如果没有这个中断向量表程序是无法启动的。

那么既然前面说可以重新设定中断向量表的位置,那必然有一个寄存器记录着这张表的位置,这就是VTOR寄存器。从《Cortex-M3权威指南》可以看该寄存器的介绍:

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

并且向量表的偏移量有如下要求:

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

64*4是因为一个表项为4字节

更具体的关于更改向量表的信息查看《Cortex-M3权威指南》。

在复位处理函数中有进入SystemInit函数执行,在函数里有一个设置中断向量表的位置的语句。

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

VECT_TAB_OFFSET默认情况下就是0。

因为这是官方库函数,并且上电之后必定进入复位中断函数处理,因此必定会执行重新定位向量表的操作。因此只要修改宏定义就可以重新定位向量表。

先准备两个程序,一个为bootloader,用于更新程序,一个为APP,即固件程序。

首先确定BootLoader为上电最先执行的函数,需要通过下载器下载,而APP则可以通过有线(spi、i2c、usart、usb)、无线(Bluetooth、WiFi)等各种方式下载,只要能够正确传输数据即可。

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

因为两个程序中只能有一个程序正在运行,所以可以共用RAM。所以这个时候对一些变量就有必要进行初始化,以防APP程序使用的RAM空间存在之前的数据。

上电之后,因为硬件问题(可能是VTOR寄存器断电不保存数据吧),导致单片机自动从中断向量表1中寻找复位中断处理函数,此时必然最终会进入BootLoader程序中执行。因为向量表第一个字(32字节)存放的地址就是BootLoader程序编译出来的中断处理函数地址。所以在这个程序一般就是初始化传输方式,然后在一定时间里判断是否需要更新固件,需要则将更新固件并跳转到第二个复位中断函数中执行,而如果超时则自动跳转到第二个复位中断函数中执行。

一般更新固件的文件类型为bin文件,文件可以直接拷贝到flash中并且执行。那么bin文件应该是怎样的呢?下面的就是通过KEIL生成的bin文件所含有的信息。(有关如何生成bin文件查看前面章节)

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

和普通程序的生成没多大区别,都是编译器编译得到的目标的程序。但是我们要如何让编译将程序放在该放的地址呢,即在得到这个bin文件之后,当从向量表的第二字获取的地址刚好指向了Reset_Handler函数呢?即这里面存放的地址应该是绝对地址。

通过设置KEIL即可:

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

上面设置为0x8001000,这样在编译过程中就会将整个程序的开始放在0x8001000,并且其他函数地址也会根据该地址自动确定地址,而变量和栈等数据则存放在0x20000000开始处(和BootLoader一样,所以它们其实是共用RAM),这样程序才能正确执行。但是BootLoader怎么找到APP的第一个函数的地址并进入执行呢?就是从接收到的bin文件里找。之前说过程序的开始处就是一张向量表(编译器自动处理的),也就是这个程序的向量表开始就在0x8001000,而bin文件可以直接看成一个flash空间,程序应该放在0x8001000,在bin文件就是在文件的开始处,这样就能找到栈顶指针和复位中断处理函数了。有点绕,看示意图(数字无意义):

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

但是BootLoader虽然找到了APP程序的复位向量地址,并且整个APP程序拷贝到0x08001000开始处了,BootLoader程序可以通过跳转语句调到复位中断处理函数执行,并且能从向量表出得到栈顶位置,并且其他函数地址也由编译器确定了,执行应该是没问题的。但是一旦中断来了,根据stm32的中断机制,肯定会从中断向量表中找地址,而找中断向量表是通过VTOR来定位的,而在跳转后虽然进入了复位中断处理函数,并进入了SystemInit()中执行,也执行了重新设置VTOR寄存器的操作,但是你的VECT_TAB_OFFSET还是 0……这样一旦中断发生,通过VTOR定位又跑到BootLoader的向量表去执行处理程序了。

所以在进入APP函数后,需要重新定位我们新的向量表,只需要修改VECT_TAB_OFFSET即可,而这个偏移量有限制……而且这个偏移量其实也就是给BootLoader程序预留的空间,所以在这里VECT_TAB_OFFSET设置为0x1000,符合限制条件,并且这个偏移量应该大于BootLoader程序的总大小,这样就OK了。

跳转到复位中断处理函数之前,必须重新设置栈顶位置,虽然是共用RAM,但毕竟BootLoader程序编译下的RAM分配和APP程序编译下的RAM分配可能是不同的,需要重新确定栈顶位置。

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

总结:

1、BootLoader两个功能,一个是一定时间内判断是否需要更新APP,如果需要则接收并将其烧写到指定地址的flash空间中,并从该地址中获取栈顶指针和Reset_Handler指针,并跳转到该函数执行;另一个就是超时直接在该地址直接获取之前的栈顶指针和Reset_Handler指针并跳转执行。

2、APP程序需要让编译器将程序存放在指定地址空间里,并重新定位中断向量表的位置。

3、每次上电复位之后程序都会直接从BootLoader的Reset_Handler函数执行,而不是从APP中执行。

4、这个地址有两个限制:BootLoader程序大小和向量表地址限制,必须两者都符合要求。

查看原文:https://www.dianyuan.com/eestar/article-8137.html

论文 | 模块化多电平功率放大器的损耗分析与散热设计

本文来源于电源学报,2020,18(3): 95-105

作者简介

韩蓉(1995-),女,中国电源学会会员,博士研究生,研究方向:大功率电力电子装置控制、多 电平变换器等,E-mail:hanrong@hnu.edu.cn。

徐千鸣(1989-),男,中国电源学会会员,通信作者,博士,副教授,研究方向:模块化多电平变换器与电能质量控制,E-mail:hnuxqm@foxmail.com。

陈燕东(1979-),男,中国电源学会高 级会员,博士,教授,博士生导师,研究方向:新能源发电装备/场站建模与控制、交直流微电网控制、大功率特种电源系统、电能质量控制等,E-mail:yandong_chen@hnu.edu.cn。

何志兴(1989-),男,中国电源学会会员,博士,副教授,研究方向:FACTS技术研究和电力电子装置的研制,Email:hezhi xingmail@163.com。

欧阳红林(1965-),男,博士,教授,博士生导师,研究方向:电力电子和控制工程,E-mail:Oyhl1405.ouyang@vip.sina.com。

罗安(1957-),男,中国电源学会高级会员,博士,教授,中国工程院院士,研究方向:大功率冶金特种电源系统、配电网电能质量控制、企业综合电气节能、新能源分布式发电和微电网控制等,E-mail:an_luo@hnu.edu.cn。

功率放大器主要用于完成信号源输入信号的功率放大和阻抗特性匹配及发射,在很多领域如电动振动试验台、发射系统、核磁共振和声纳探测等[1-3]都有广泛的工程应用。随着负载对功放输出功率和精度要求的提高,大功率、宽带宽、高保真的功率放大器逐渐成为国内外学者研究的热点。

线性功率放大器LPA(linear power amplifier)具有高保真度和出色的动态特性,但由于晶体管偏置电路,LPA在其输出阶段具有非常高的损耗,使得这类放大器效率不高[4-6]。近年来,D类和E类开关功率放大器在不需要高保真度的各种应用中取代了LPA,由于开关功率放大器工作于晶体管的截止区域和饱和区域,因此具有更高的效率,可以实现紧凑且低成本的设计。然而,开关功率放大器产生额外的电磁干扰EMI(electro magnetic interference),且在放大器和负载之间需要设置合适的低通滤波器,但带来了时间延迟、带宽有限和非线性等缺点[5]。

为使功率放大器具有大功率、高效率的输出,同时保持LPA的高保真度,有学者提出通过组合LPA和开关功率放大器实现的混合功率放大器HPA(hybrid power amplifier)[7-9],其中承担主要功率的开关功率放大器与LPA串联连接,LPA只补偿输出电压和开关功率放大器输出电压之间的差值。因此低电压小功率的LPA可用于高电压大功率应用中,显著降低了LPA功率晶体管的电压降,使得HPA具 有宽输出宽带、高输出电压质量和低输出阻抗的优点。此外,除了混合功率放大器来提高输出精度外,利用多电平逆变器在开关功率放大器中的应用也越来越受到关注。文献[8]中研制了1kV·A的混合功率放大器和PWM功率放大器,并对两者的输出性能进行了比较,由于HPA系统受LPA影响,效率最高只有75%,而PWM功率放大器的效率明显高于混合功率放大器。

随着电力电子装置的小型化发展以及功率密度的提高,设备的温度对其安全可靠运行影响很大。由于功率器件的失效率随器件温度呈指数关系增长[10],在实际工作中,可能会因为热量不能及时排出或者分布不均导致器件温度过高甚至烧毁,影响电路的可靠性和寿命[11]。

同时,功率器件的热性能也对功率放大器的输出失真有一定的影响[8],因此研究功率放大器的损耗分布并设计合理的散热系统具有十分重要的意义。目前已有大量学者对变换器的热性能进行了研究[12-14],却鲜有文献对大功率功率放大器设备进行详细的损耗计算及散热系统设计,文献[15]研究了HPA的损耗分布及损耗的影响因素,详细描述其散热系统的设计过程。如果功率放大器在结构和散热系统设计上存在缺陷, 则不能在设定功率下长时间运行, 只能被迫降低功率来减少发热量, 最终会导致功放装置功率密度减小、使用效率降低。

实际工程应用中,大功率装置散热方式通常有风冷和液冷两类[16]。其中,液冷散热通过冷却液体在特定管路内的流动来将装置热量转移到环境中,具有静音环保、密封防尘性好等优点[17],但是水冷散热器的加入会导致装置体积的增大,对体积受限的特殊装置不一定适用;对于中、大功率变换器装置应用来说,强迫风冷散热技术是当前最为成熟且经济性最高的一种散热方式[18]。而风冷设备中散热系统风道的布置和散热片的设计对散热效果影响很大,故对大功率多模块装置的散热设计具有重要意义,可为同类产品的热设计提供思路。

为此,本文提出了一种模块化多电平开关功率放大器MM-SPA(modular multi-level switching pow-er amplifier)及其热设计思路,它能够很好地解决负载对功放大功率、低失真度、高功率密度和高转换效率的需求。对MM-SPA损耗计算进行详细研究,分析了MM-SPA的损耗分布特点,根据功耗及散热要求对散热系统进行了设计,并采用有限元软件ANSYS对散热设计进行仿真和设计优化。最后研制出1台30kW的MM-SPA样机,通过实验验证了理论计算和仿真的正确性。

MM-SPA的结构及工作原理

MM-SPA拓扑采用低压级联高压输出的结构,如图1所示,其功率单元进行模块化设计,每个功率单元模块由二极管整流器、DC/DC变换器以及H桥变换器3部分组成。功率单元内部由380V工频电源输入,经过二极管整流为直流,再经过隔离型高频DC/DC得到稳定的直流,最后经过H桥变换器转换为需要的交流信号。将多个功率单元模块输出级联,得到多电平输出,再经过滤波电路后供给负载。前级整流和DC/DC变换可以实现系统的宽范围调压,后级H桥通过调频调压,对输出进行进一步调节,得到理想的放大信号。该拓扑将多电平变换器应用于开关功率放大器中,具有低电压应力、低电磁干扰、低开关损耗以及高质量输出的优点。

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

图1.MM-SPA拓扑结构

损耗计算

损耗计算是热分析的基础,准确地计算出器件损耗才可以进行合理的热设计。由MM-SPA的结构可知,功放损耗主要包括半导体开关器件的损耗、电容的损耗以及高频变压器的损耗。其中,相对复杂难算的是半导体开关器件,即绝缘栅双极型晶体管IGBT续流二极管的损耗。本文采用一种工程上实用的损耗计算方法,详细介绍了功率放大器损耗计算的过程,包括通态损耗和开关损耗。

1通态损耗

通态损耗是指器件导通过程中,由于导通压降而产生的损耗。通态损耗与器件自身特性、流过的电流及结温有关。在一个基波周期T0内,输出正弦波电流时的IGBT和快恢复二极管FWD的通态损耗可以分别表示为

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

式中:vce(t)和vf(t)分别为IGBT和快恢复二极管的实际导通压降;ic(t)和 if(t)分别为流过IGBT和二极管的电流;σ(t)为占空比。其中输出特性vce(t)与ic(t)为非线性,其典型曲线如图2所示,((vf(t)与if(t)类似,在此不赘述)。将vce(t)与ic(t)之间的关系用直线拟合,可以得到:

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

式中:Vce0为门槛电压;Rce为IGBT通态等效电阻。Vce0和Rce均受温度的影响[19],其值可通过厂家提供的器件手册得到。

考虑到厂家提供的输出特性曲线是在特定测试环境下测试的,不能直接使用。本文分别拟合出结温T(125℃)和T(25℃)下vce(t)与ic(t)的关系曲线,得到2组参数,(Vce0(125℃)和Rce(125℃))和(Vce0(25℃)和Rce(25℃))。通过插值近似则可得到Vce0和Rce关于结温Tvj的 函数关系为:

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

采用SPWM时,逆变器输出电流、电压的基波分别为:

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

式中:Icp和Vp为输出电流和电压的峰值;渍为输出实际电流和电压之间的相角。

装置采用载波移相SPWM,考虑死区的存在,

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

图2.vce(t)与 ic(t)的典型曲线

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

图3.开关能量曲线

在载波移相调制下,第i个模块的单个IGBT和单个二极管的占空比可以分别描述为

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

式中:M为调制比;td为死区时间;λ为载波移相的 角度,λ=Ts/n,n为模块数目。则第i个模块中单个IGBT和单个二极管的通态损耗Pcon_T(i)和 Pcon_D(i)分别为

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

2开关损耗

随着开关频率的提高,开关损耗在整个器件损耗中的比例也变得比较大,在高频开关器件中,开关损耗也会随之增大。开关损耗包括开通损耗和关断损耗两部分。

在每个切换时刻tα、tβ 、tγ,输出电流分别对应为iC(tα)、iC(tβ)、iF(tγ),开关能量曲线如图3所示,据此来拟合计算出开关能量Eon、Eoff、Erec。考虑到实际电压与测试电压之间的差异,每次开关损耗还需要乘以实际导通电压vce,off(tα)、vce,off(tβ)、vf,off(tγ)与测试电 压vce,ref之比。在开关周期内累加所有开关动作的损耗,就可得到第i个模块中IGBT开通、关断和二极管关断时的损耗Pon(i)、Poff(i)和Prec(i),分别为

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

式中:fsw为开关频率;Nα、Nβ和Nγ为开关动作的数量,可根据载波与调制波频率求得。由于二极管开通时损耗很小,在此不考虑,仅考虑二极管的反向恢复损耗。

IGBT和二极管的总损耗由导通和开关损耗之和计算。在1个开关周期内,第i个模块的单个IGBT和单个快恢复二极管的开关损耗Ptot_T(i)和Ptot_D(i)分别表示为

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

n个模块的总损耗可以表示为

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

3损耗计算及其分布特点研究

装置选择的IGBT模块为英飞凌公司的FF150R12KS4,传统的续流二极管由于其反向恢复问题,从而影响开关管的开关损耗,本文高频整流二极管采用碳化硅二极管C3D10170H,其最大优点是反向恢复特性好,理论上反向恢复损耗几乎为0,因此大大降低了损耗。

根据第2节中介绍的方法,在额定工况下分别计算功率单元模块3部分的损耗,结果如表1所示,可知,1个单元模块的损耗为242.85W,则9个模块的总损耗为2185.65W。为了验证理论计算的正确性,利用仿真软件PLECS搭建功放热模型得到相应的损耗值,PLECS的热模块可以快速估算功率损耗。PLECS仿真结果如图4所示,其中P1、P2、P3分别为二极管整流器、DC/DC变换器以及H桥变换器3部分的损耗。

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

表1.额定工况下功率单元模块3个部分损耗计算结果

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

图4.PLECS的仿真结果

为更好地匹配阻抗,为匹配电路设计提供参考依据,研究负载功率因数对MM-SPA损耗的影响程度,在输出视在功率保持0.9p.u.一定时,改变负载功率因数,可以得到其损耗分布曲线,如图5所示。可以看出,功率因数对H桥部分损耗的影响相对较小,对二极管整流器和DC/DC部分影响较大。负载功率因数较大时,总损耗相对较大,随着负载功率因数的增大,输出效率也在不断减小。功率因数为0.9时的损耗分布如图6所示,可以看出,H桥中开关损耗占比72%,导通损耗28%,这是由于设 备工作在高频状态下,开关损耗比例很大。DC/DC部分损耗在3部分中占比最大,达到53%,降低这部分损耗是提升系统效率的关键,可以采用软开关技术、合理设置开关频率、优化控制策略和选用低损耗的新型功率器件等措施合理降损。

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

图5.不同功率因数下的损耗分布

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

图6.功率因数0.9的损耗分布

进一步研究功率放大器输出功率、输出频率和调制度对损耗的影响程度,得到不同工况下的系统损耗并计算效率,效率曲线如图7所示。图7(a)为不同功率等级下效率随输出频率变化的曲线,可以看出不同输出频率对效率影响不大,随着输出功率的增大,效率在不断增加,但功率随着功率增大的越多,效率增长的速度变慢;图7(b)为不同频率下效率随功率等级变化的曲线,在50~1000Hz的宽输出频带内效率基本保持不变,稍呈先增后减的趋势,在400Hz左右效率最高;图7(c)为不同功率等级下效率随调制度变化的曲线,可见效率随着调制度的增大而增大,低调制度时效率相对较低,装置使用时应尽量采用高调制度。

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

图7.功率放大器在不同输出功率、输出频率和调制度输出下的效率曲线

功率放大器的散热设计

电力电子设备热控制的目的是要为芯片级、元件级、组件级和系统级的装置提供良好的热环境,保证它们在规定的热环境下,能按预定的参数正常、可靠地工作。通过计算装置机箱与外界空气对流散热的热流密度和机箱内部各个功率电子元件模块的工作环境温度可以对机箱的散热性能进行评价。热仿真技术已成为电子设备研制中不可或缺的关键技术,通过对机箱产品热量传播方式的分析和温度分布及速度矢量的仿真计算,可以研究加强机箱散热的有效措施并指导结构热设计,尽可能减少热阻,加快散热速度,降低内部温升,提高设备的 可靠性。

在众多的散热方式中,强迫风冷的散热效果远好于自然风冷,复杂性大大低于水冷和油冷,是常用电力电子装置的主要散热方式,考虑到功放使用环境的特殊性对装置体积和可靠性要求较高,故选用强迫风冷作为装置的散热方式。当散热量一定时,除了增强表面换热系数外,还可以通过增加换热面积达到降低温差的目的。基于此,对单纯依靠强迫风冷不能解决的散热问题,往往通过引入散热器,特别是肋片散热器,让换热面积大大增加,使热流密度比没有散热器时减小1个量级,从而大幅降低待冷却物体表面温度。

综上所述,本文采用强迫风冷结合肋片散热器的方式完成MM-SPA设备机柜的散热设计。下面分别从整机机柜功率单元箱两部分进行介绍。

1整机机柜

本文研究的30kW的MM-SPA设备主要由功率单元模块和控制单元箱组成,机箱外形和内部结构如图8所示。采用9个功率单元可以满足30kW的额定输出,其结构布局如图8(a)所示;每个功率单元模块由2个机箱组成,分别包含DC单元箱与H-bridg单元箱,单元箱采用不锈钢材质钢板制作,功率单元箱内部结构布局如图8(b)所示。

假设散热器设计合理,那么散热器可以将发热量传递至散热空间。所选风机将热量排出设备外,风机的风量应能将全部发热量带走。热平衡方程为

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

图8.MM-SPA机箱外形与内部结构示意

式中:L为冷却空气流量,m³/s;Q为设备发热量,kW;ρ为空气密度,kg/m³,取1.13 kg/m³;Cp为空气的比热,kJ/(kg·℃),取1.009kJ/(kg·℃);Δt为冷却空气入口和出口的温升,℃,通常取10℃。计算得设备总发热量为Q=2.2kW,则

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

上述计算得到的风量为带走发热量所需风量。由于该设备电源模块和功放模块体积较大,所需风量较大,故采用2个轴轮风机并联对设备进行抽风冷却,每个单元箱采用8个小风扇进行内部抽风散热,增强散热效果。选用轴流风机FJ16052MABD,最大风量为925m³/h,最大静压为100Pa,小风扇为 AD0312MX-G05,最大风量5.6m³/h,其轴流风机和小风扇的特性曲线如图9所示,但是由于风阻的存在,风机是不可能总是工作在最大风量处的,所以风机的工作点风量肯定小于最大风量。总风量需要大于设备发热量才可以满足系统要求,计算总风量为:总风量=925×2 5.6×8×9=2253.2 m³/h=0.626 m³/s>0.193m³/s,满足系统要求,进行下一步的风道设计。

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

(a)轴流风机FJ16052MABD特性曲线

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

(b)小风扇AD0312MX-G05特性曲线

图9.风机性能特性曲线

MM-SPA各模块单元箱均采用独立散热,机箱内采用整块散热器,主要功率器件及部分器件均固定于散热器上,每个机箱内均有小风扇对其进行散热,各模块风道相互独立,设备运行时,外界冷空气经过单元箱内散热器翅片通道,与单元箱内功率器件等热源进行对流换热后,热量通过散热器基板及翅片带入风道,通过柜顶的风机强制风冷将热量带入柜外,以满足整机的散热需求。

机柜风机的摆放位置对会影响整体散热效果,通常风机有顶部抽风和底部鼓风2种方式。由于热空气呈上升趋势,抽风机常装在机柜顶部,而鼓风机常设置在机柜底部。根据机箱尺寸、设备需求等,考虑底部鼓风方式可能会带入大量灰尘进入机柜,采用前门进风、顶部抽风的风道设计,前门进风口装置滤网用于隔尘。风道设置示意如图10所示。

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

图10.机柜风道示意

采用有限元软件ANSYS对机箱模型进行散热分析。首先对模型进行简化,略去螺钉、螺母、圆角 和安装孔等不影响热路模型的局部细节和小插件,对机箱整体进行散热仿真,再利用提取系统级别的 计算结果对最危险的单元箱级结构进行分析。系统级分析的目的是评估单元箱位置、风扇架及进出口位置的合理性,建模时按整个单元箱均匀发热考虑。单元箱级分析的目的是评估单元箱内各器件分布的合理性及元件是否满足设计要求。

所设计机柜风道下的温度云切面如图11所示,可以看出模块最高温度为56.49℃,最低温度49.07℃,各个模块整体分布相对比较均匀,各模块之间温差不超过8℃,设计的机柜风道可以得到更为理想的热性能。

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

图11.机柜的温度云切面

2功率单元箱模块

功放柜中主要的发热源为功率单元箱,在功率单元箱内部均设计了独立散热,在每个机箱中采用4个小风扇(AD0312MX-G05)进行散热,通过小风扇的抽风将热量沿着单元箱内部的散热片导入机箱后部的风道。

DC单元箱为例进行详细的热分析。功率放大器在工作过程产生的损耗经历时间的积累必定会造成温升问题,其温度变化受很多因素影响,包括单元箱的结构散热器的大小和材质以及气流等。为更精确地计算温度,通过引入热阻的概念得到结温,建立了一个热阻等效网络,如图12所示,IGBT模块各部分损耗功率对应电流源,热阻对应电阻,温升对应电压。图12中:Tj_T和Tj_D分别为IGBT和二极管的结温;TC为IGBT的壳温;Th为散热器最高温度;Ta为环境温度;PT和PD分别为IGBT和FWD 产生的损耗等效电流源;Rthjc_T和Rthjc_D分别为IGBT和二极管硅片至外壳间的热阻;Rthch为管壳与散热器之间的热阻,Rthha为散热器与环境之间的热阻。Rthca与Rthch和Rthha相比数值很大,与Rthch和Rthha并联时可以将其忽略。

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

图12.IGBT模块热阻等效网络

热阻R和功率损耗P以及温升ΔT的关系为:R=ΔT/P。由等效网络可得功率器件的结温为

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

依据热阻网络,可以求出各点的温度,也可以由给定的温度,反求出某一位置的热阻。现以最高的功率器件结温为准,可以反算出散热器的热阻Rha。IGBT最大结温由器件商提供的Datasheet中可以查到为150℃,将结温保持在最大值以下是散热设计的关键部分[19]。IGBT模块直接安装在散热器上,散热器底板最大允许温度可以表示为

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

IGBT内部的热阻可从Datasheet中获取,可知,Rthjh_T=0.13K/W,Rthjh_D=0.31K/W,热阻与损耗结合则可以计算得到散热器的最大热阻,用于散热器的选择。设置最高环境温度为30℃,从而可得散热器的最大热阻为0.47K/W。

进一步,散热器的设计细节要综合考虑设备的结构要求、成本、风压、散热效率和加工工艺等条件。利用ANSYS仿真后,分别得到元件最高温度Tmax、IGBT温度Tigbt以及散热器质量mass和散热器热阻Rth随肋片数量的变化曲线,如图13所示,可以看出,当散热器肋片数量增加时,温度和热阻均先降低后上升,且存在1个肋片数量最佳的区域。综合考虑各变量影响,选择肋片数量为14个。

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

(a)温度随肋片数量的变化

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

(b)质量mass、热阻(Rth,Rthmax)随肋片数量的变化

图13.器件最高温度、IGBT温度以及散热器质量和散热器热阻随肋片数量的变化曲线

根据选定的散热器肋片尺寸,在损耗最大的极限情况下进行热仿真,保证散热可靠性,忽略辐射放热,设置环境温度为30℃,求解结果收敛,对结果进行相应的后处理,可以得到DC单元箱内各部分的温度云图和切面温度云图,如图14所示。从分析结果可以看出DC单元箱最高温度主要集中在电源模块上。其中,电源模块最高温度达到51.94℃。变压器最高温度40.31℃、电感33.21℃、IGBT 46.44℃,均未超过元器件最高使用温度,满足散热要求。

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

(a)箱内各部分

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

(b)切面

图14.DC单元箱温度仿真云图

H-bridge单元箱各部分温度分布和切面温度云图如图15所示。从分析结果可以看出H-bridge单元箱中IGBT温度为68.98℃,控制板上电源芯片温度 34.94℃,均低于最大结温,DC单元箱热设计满足要求。

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

(a)箱内各部分温度分布

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

(b)切面温度云图

图15.H-bridge单元箱温度仿真云图

实验验证

根据前文的热设计思路,研制了1台MM-SPA实物样机,如图16所示,每层功率模块包括1个DC单元箱和1个H-bridge单元箱。在额定功率下利用红外测温仪对功率放大器机箱和单个模块进行测温。单元箱红外测温结果如图17所示。从实验结果可以看出,单元箱表面最高温度46.7℃,机柜表面温度39.2℃,与仿真结果具有较高的一致性,说明了热设计的合理性。

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

图16.MM-SPA实物装置

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

图17.机箱红外测温

为了进一步验证设计的合理性和理论计算的正确性,实验得到输出频率为500Hz和50Hz时不同功率等级下的MM-SPA样机效率,实验与仿真中效率对比曲线如图18所示。由图可以看出,实验结果与仿真结果趋势一致,效率随着功率的增大逐渐增大,满功率运行时整机效率达到最大值92%。考虑到仿真中未考虑电容、变压器等器件的损耗,实验得到的效率值略小于仿真结果。总体来说,不同功率下的MM-SPA效率实验值在误差范围内与仿真较为接近,整机效率可以后续在增加软开关等措施时进行改善。

C语言,Git,分支管理,汇编文件技术文章分享(c语言 github)

图18.不同功率下的MM-SPA效率曲线对比

结语

本文研究了一种模块化多电平结构的大功率开关功率放大器,利用工程实用的损耗计算方法对功放的损耗进行了计算,分析了影响功放功率损耗和转换效率的主要影响因素,并给出了进一步的降损措施。利用仿真软件PLECS对理论计算结果进行了对比研究,验证了计算方法的正确性。根据损耗和散热需求,对MM-SPA的机柜和单元箱进行散热设计,并在有限元仿真软件ANSYS中通过热仿真进行验证。最后研制了1台30kW的MM-SPA样机,实验表明热设计满足散热要求,不同功率下的效率曲线与仿真一致性较好。

参考文献

[1] Mauerer M, Tüysüz A, Kolar J W. Distortion analysis of low- THD/high-bandwidth GaN/SiC class-D amplifier power sta- ges[C]//2012 IEEE Energy Conversion Congress and Expos- ition. Montreal, QC, Canada, 2015: 2563-2571.

[2] Panchalai V N, Chacko B P, Sivakumar N. Digitally con- trolled power amplifier for underwater electro acoustic tra- nsducers[C]//2016 3rd International Conference on Signal Pr-ocessing and Integrated Networks. Noida, India, 2016: 306- 311.

[3] Chacko B P, Panchalai V N, Sivakumar N. Multilevel digital sonar power amplifier with modified unipolar SPWM [C]// 2015 International Conference on Advances in Computing, Communications and Informatics (ICACCI). Kochi, In-dia, 2015: 121-125.

[4] Huber J E, Kolar J W, Pammer G. Hybrid inverter concept for extreme bandwidth high-power AC source[J]. Electron- ics Letters, 2017, 53(14): 947-949.

[5] Salem T E, Fox J C. Development of a 15 MW hardware in the loop electric grid test facility[C]//Power Conversion and Intelligent Motion 2013. Nuremberg, Germany, 2013: 1637- 1642.

[6] Blasko V, Kaura V. A novel control to actively damp reso- nance in input LC filter of a three-phase voltage source in- verter[C]//IEEE Transactions on Industry Applications, 1997, 33(1): 1608-1615.

[7] Beltrame R C, Martins M L D S, Rech C, et al. Hybrid power amplifiers-a review[C]//XI Brazilian Power Electronics Con- ference. Praiamar, Brazil, 2011: 189-195.

[8] Gong Guanghai, Hassler D, Kolar J W. A comparative study of multicell amplifiers for AC-power source applica- tions[J]. IEEE Transactions on Power Electronics, 2011, 26 (1): 149-164.

[9] Beltrame R C, Desconzi M I, Martins M L D S, et al. AC power source based on series-connection between cascaded PWM multilevel inverter and linear power amplifier [C]// Proceedings of the 2011 14th European Conference on Po- wer Electronics and Applications. Birmingham, UK, 2011: 1-10.

[10] 赵红璐, 朱永元, 张银. 大功率逆变器散热设计[J]. 电气 技术, 2018, 19(8): 149-156. Zhao Honglu, Zhu Yongyuan, Zhang Yin. Thermal design of high-power inverter[J]. Electrical Engineering, 2018, 19 (8): 149-156(in Chinese).

[11] 张健. 电力电子器件及其装置的散热结构优化研究[D]. 哈尔滨: 哈尔滨工业大学, 2015. Zhang Jian. Study on heat dissipation structure optimiza- tion of power electronic device and equipment[D]. Harbin: Harbin Institute of Technology, 2015(in Chinese).

[12] 毛志云, 王艳, 姚志国, 等. 基于 ICEPAK 的 SVG 功率柜 散热系统分析[J]. 电气技术, 2016, 17(1): 72-75. Mao Zhiyun, Wang Yan, Yao Zhiguo, et al. The cooling system analysis of SVG power cabinet based on ICEPAK [J]. Electrical Engineering, 2016, 17(1): 72-75(in Chine- se).

[13] 李玲娜, 蔺佳. 基于 ANSYS Icepak 的密闭机箱散热仿真分析[J]. 光电技术应用, 2012, 27(6): 75-79. Li Lingna, Lin Jia. Simulation analysis of thermal runaway of sealed chassis based on ANSYS Icepak[J]. Electro-Optic Technology Application, 2012, 27(6): 75-79(in Chinese).

[14] Coulinge E, Christe A, Dujic D. Electro-thermal design of a modular multilevel converter prototype[C]//PCIM Europe 2016; International Exhibition and Conference for Power El- ectronics, Intelligent Motion, Renewable Energy and Energy Management. Nuremberg, Germany, Germany, 2016: 1-8.

[15] Gong Guanghai, Ertl H, Kolar J W. A multi-cell cascaded power amplifier[C]//Twenty-First Annual IEEE Applied Po- wer Electronics Conference and Exposition, 2006. APEC’ 06. Dallas, TX, USA, 2006: 1550-1556.

[16] 张柏华, 李虹, 王博宇, 等. 混沌 SPWM 功率变换器 IGBT 的 Icepak 温升仿真与实验[J]. 电源学报, 2014, 12(3): 42- 46. Zhang Baihua, Li Hong,Wang Boyu, et al. Thermal simu- lation and experiments of IGBTs in chaotic SPWM con- verter based on Icepak software[J]. Journal of Power Supp- ly, 2014, 12(3): 42-46(in Chinese).

[17] 王龙绪. 牵引变流器水冷散热器研究[D]. 成都: 西南交通 大学, 2015. Wang Longxu. The research on the water-cooled heatsink of traction converter[D]. Chengdu: Southwest Jiaotong Uni- versity, 2015(in Chinese).

[18] 薄晓坤, 任涛, 罗仁俊, 等. 基于 Icepak 的 SVG 设备流 体通风仿真分析[J]. 电力电容器与无功补偿, 2016, 37(2): 22-26. Bo Xiaokun, Ren Tao, Luo Renjun, et al. Simulation analy- sis of fluid ventilation for SVG equipment based on Icepak[J]. Power Capacitor & Reactive Power Compensation, 2016, 37(2): 22-26(in Chinese).

[19] Datasheet of IGBT module FF150R12KS4[OL]. https://www. infineon.com/dgdl/Infineon-FF150R12KS4-DS-v03_04-EN pdf?fileId=db3a304412b407950112b433b1645 d 39.

查看原文:https://www.dianyuan.com/eestar/article-8198.html

更多精彩内容,尽在电子星球 APP(https://www.eestar.com/)

六篇技术文章,让你秒懂电容的脾气秉性

七篇DIY技术文章献给你,让你脑洞全开

五篇文章帮你开启DSP的学习思路

汇总篇:关于PID知识,重点在此

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2024年4月14日 下午2:14
下一篇 2024年4月14日 下午2:26

相关推荐