MOS管的导通电阻和什么相关?
MOS管的导通电阻和什么相关?
关于这个问题,相信大多数同好首先想到的就是Vgs驱动电压。
但是MOS管的导通电阻不仅仅和Vgs驱动电压有关,Rdson还与Id电流相关。
首先打开数据手册,以BSS138为例,可以看到在手册中有关于Rdson的参数描写,在Vgs驱动电压为10V的时候,导通电阻MAX为3.5Ω@10V(手册中的@的意思是at)然后驱动电压要是小一点(4.5V),导通电阻MAX为6Ω@4.5V。(测试Id电流均为0.22A)
然后再往后看,可以看到一个关于Rdson的曲线,红色框框内的参数是Vgs驱动电压,纵轴参数是导通电阻Rdson,横轴参数是Id电流,也可以看到在Vgs驱动电压不变的情况下,随着Id电流的增加,导通电阻Rdson也是在增大的,由其是在Vgs电压较低的时候,Rdson随着Id电流的变化更为陡峭。换而言之,如果Id电流不变的情况下,如果Vgs驱动电压增大,那么MOS管的Rdson也是更小的。
MOS管的Rdson越小,那么MOS的发热量也就越小,这个也是毋庸置疑的,所以说在MOS管控制大电流的场合,一定要想方设法的增大Vgs驱动电压。
那么下面的电路是不是就看懂了?就是为了让Vgs驱动电压更大,且推挽驱动可以让驱动电流更大,让MOS管导通和关断更快……
查看原文:
https://www.dianyuan.com/eestar/article-8118.html
超级下载算法在IAR EWARM下的使用
痞子衡主导的"学术"项目 《RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计》 v1.0 版发布近 4 个月了,部分客户已经在实际项目开发调试中用上了这个超级下载算法,目前反馈还可以,但这个超级下载算法远未到成熟状态,痞子衡正在策划 v2.0 版本。
RT-UFL v1.0下载地址:
https://github.com/JayHeng/RT-UFL/archive/refs/tags/v1.0.zip
超级下载算法 RT-UFL v1.0 版本主要针对 Segger J-Link 调试器,开发测试也都是在 J-Link Commander 和 J-Flash 软件下进行的,但其实它也适用各大常用 IDE,今天我们就来聊聊它在 IAR EW for Arm 下的使用:
一、准备测试环境
首先需要准备好测试环境,包含必要的软件和硬件,痞子衡的环境如下:
集成开发环境:IAR EW for Arm v8.50.6,点此下载
软件开发包:SDK_2.10.0_EVKB-IMXRT1050(Toolchain需包含IAR),点此下载
软件驱动:J-Link driver v6.86f,点此下载
硬件工具:J-Link Plus调试器
硬件开发板:MIMXRT1050-EVKB (Rev.A1)
上述软件环境里,IAR 版本与 SDK 软件包版本之间没有明确依赖关系,但 J-Link 软件驱动版本与 IAR 版本之间有一些关联,具体在下面 2.2 节里会提及。
J-Link 软件驱动不是一定限制在 v6.86f,只是超级下载算法 v1.0 是在这个版本下详细测试的,其他 J-Link 版本也可能适合,具体需要进一步测试。
二、在IAR EW for Arm下使用步骤
2.1 将超级下载算法包打进J-Link驱动
第一步其实跟 IAR 无关,因为是基于 J-Link 的超级下载算法,所以要给 J-Link 软件驱动先打个更新包,具体参照 《超级下载算法RT-UFL v1.0发布,附J-Link下安装教程》 一文。
Note: IAR 安装过程中会顺便在 \IAR Systems\Embedded Workbench 8.50.6\arm\bin\ 路径下安装一个默认的 J-Link 驱动(版本不可控,应该是跟 IAR 版本匹配的),但为了避免不可预见的问题发生,最好自己手动安装一个明确的 J-Link 驱动版本来使用(痞子衡安装在了 C:\tools_mcu\SEGGER\JLink_V686f)。
2.2 为IAR指定包含超级下载算法的J-Link驱动
在默认情况下,所有 IAR 工程都统一使用 IAR 安装目录下自带的 J-Link 软件驱动及其下载算法(假定 App 工程选项设置里仿真器选择的是 J-Link,且不用 IAR 下载算法),但是我们为了超级下载算法额外安装了一个指定版本的 J-Link 软件驱动(v6.86f),因此我们需要指定 IAR 去使用包含超级下载算法的 J-Link 驱动,这里不是在 App 工程选项里设置,而是需要借助 JLinkDLLUpdater.exe 工具。
在我们额外安装的包含超级下载算法的 C:\tools_mcu\SEGGER\JLink_V686f 目录下,有一个名为 JLinkDLLUpdater.exe 的小工具,双击这个工具,便可看到其搜索到了当前 PC 环境下安装的 IDE 列表,有我们正在使用的 IAR v8.50.6,勾选上 IAR 便能完成 J-Link 驱动的指定。
其实痞子衡当前 PC 上安装了两个版本的 IAR,分别是 v8.50.6 和 v9.10.2,不过 J-Link v6.86f 版本下的 JLinkDLLUpdater.exe 仅识别出了 IAR v8.50.6,这意味着,如果你安装的是 IAR v9.10.2,可能无法去指定使用 额外安装的 J-Link v6.86f 版本驱动。后来痞子衡安装了最新的 J-Link v7.56b,它下面的 JLinkDLLUpdater.exe 能将两个版本的 IAR 都识别出,这就是文章前面提及的 J-Link 驱动版本与 IAR 版本的关联限制。
2.3 使用IAR打开一个SDK工程
现在我们需要一个 IAR 工程,这里我们直接打开 \SDK_2.10.0_EVKB-IMXRT1050\boards\evkbimxrt1050\demo_apps\led_blinky 工程,注意将工程切换到 flexspi_nor build,即代码 XIP 执行版本。
2.4 确保板卡处于Flash启动模式且SDK工程能够XIP
然后将板卡供上电,确保板卡处于 NOR Flash 启动模式(Boot Mode 以及 Boot Cfg 要设置正确),然后再检查一下 IAR 工程里的 Flash 启动头是否与板卡上的实际 Flash 型号相匹配。
Note:要想在 IDE 设置的 Hardware Reset 复位类型下实现在 Flash 调试,上述条件必须要满足,但如果改为 Software/Core Reset 类型,则板卡启动模式以及工程里 Flash 启动头并不影响调试。
2.5 在SDK工程设置里使用J-Link下载算法
IAR 支持非常多种类的硬件仿真器,这里我们首先需要在工程选项 Debugger/ Setup 下的 Driver 下拉菜单里选择 J-Link/J-Trace,表明目标板卡上连接的是 J-Link 型硬件仿真器……
查看原文:
https://www.dianyuan.com/eestar/article-8070.html
三电平电路原理及常见的电路拓扑分析
随着对逆变器的功率密度、效率、输出波形质量等性能要求逐渐增加,中点钳位型(Neutral Point Clamped,NPC)的三电平拓扑逆变器已经得到了广泛的应用,典型的三电平拓扑有二极管型NPC(NPC1)、Conergy NPC(NPC2)、有源NPC(ANPC),如下图所示。
相对于传统的两电平逆变器,三电平逆变器有以下优点:
1.输出波形的谐波成分少:三电平逆变器相对两电平逆变器,增加了一个零电平通路,相电压可输出三个电平,即+Vdc/2、0、-Vdc/2,根据下图可以看到三电平逆变器输出的电压波形更加接近正弦波,具有更低的THD。
2.损耗减小,开关频率提升,系统成本降低:如NPC1拓扑中开关器件的电压可减小为原来的一半,器件开关损耗大幅降低,因此可提高开关频率减小输出滤波器的体积和成本,如果在功率等级不变的情况下,可通过提高母线电压减小输出端的电流,减少输出线缆的成本。
3.器件可靠性提升:在同样电压等级的系统中,三电平拓扑中器件承受的阻断电压降低,器件的可靠性得以提升。
4.改善电磁干扰EMI:由于开关过程中器件的dv/dt大幅降低,系统电磁干扰得到改善。
当然三电平拓扑也存在一些劣势,例如器件成本增加、控制算法复杂度提升、损耗分布不均衡和中点电位波动等问题,但由于三电平拓扑的独特优势,在光伏、储能、UPS、APF等众多场合得以广泛使用,下面就常见的三电平拓扑进行介绍。
01NPC1
1.1电流路径
上图中蓝绿色线条为导通电流路径,紫色线条为对应的零电平换流路径,功率因数为+1对应①和②两种模态,功率因数为-1对应③和④两种模态;
1.2损耗分布
以F3L225R12W3H3器件(NPC1)在100kW PCS的仿真为例,仿真条件为Vdc=1000V,Vac=380V,Fsw=16kHz,Fout=50Hz,在逆变工况时,NPC1的损耗主要集中在T1/T4管,包括导通损耗和开关损耗;T2/T3为常开状态,损耗主要为导通损耗;D5/D6在换流时导通,其损耗包括导通损耗和反向恢复损耗。
在整流工况下,损耗主要集中在D1/D4管和T2/T3管,D1/D4存在导通损耗和反向恢复损耗,T2/T3在换流时产生导通损耗和开关损耗,而D2/D3和D5/D6仅存在导通损耗。
02NPC2
在NPC2拓扑中,用一对共射极或共集电极的IGBT和反并联二极管代替NPC1二极管钳位的功能,减少了两个二极管器件,其中T1/T4管承受全母线电压,T2/T3管承受半母线电压。
2.1电流路径
NPC2的工作模态和NPC1类似,在逆变工况下,正半周期时,T2保持常开状态,T1和D3换流;负半周期时,T3保持常开状态,T4和D2换流。在整流工况下,正半周期时,T2仍保持常开状态,由D1换流至T3/D2;负半周期时,由D4换流至T2/D3。
2.2损耗分布
以F3L500R12W3H7器件(NPC2)在100kW PCS的仿真为例,仿真条件为Vdc=1000V,Vac=380V,Fsw=16kHz,Fout=50Hz,在NPC2拓扑中T1/T4为高压器件,开关损耗较大些,但由于电流路径上的开关器件数量减少,导通损耗更小,因此NPC2拓扑在中低开关频率的系统中效率更优。而NPC1拓扑中电流路径上的器件数量增加,会产生更大的导通损耗,但每个器件只承受半母线电压,开关损耗大幅降低,因此在高频时更有优势……
查看原文:
https://www.dianyuan.com/eestar/article-8117.html
IAR下如何手动拷贝自定义程序段到RAM中执行?
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是IAR下手动拷贝自定义程序段到RAM中执行的方法。
在痞子衡旧文 《IAR下RT-Thread工程自定义函数段重定向失效分析》 里,我们知道 IAR 链接器处理自定义程序段重定向是有一些限制的,只要用户重写了底层 __low_level_init() 函数,那么这个函数里不能调用任何与自定义程序段相关的代码,否则自定义程序段就不会被 IAR 链接器(initialize by copy)正常处理。这其实对用户来说不太友好,既然如此,我们干脆就不用 IAR 链接器来做代码重定向了,今天痞子衡教大家手动拷贝程序段到 RAM 中的方法。
手动拷贝自定义程序段除了解决 IAR 链接器限制之外,还有另外一个用处,那就是拷贝的位置可以由用户决定。比如我们希望将程序重定向到外部 PSRAM 执行,但是在拷贝之前是需要先初始化外部 PSRAM 的,这时候我们完全可以在 main 函数里做完 PSRAM 初始化之后再做程序段的拷贝。
Note 1:阅读本文前需要对《IAR链接文件(.icf)》、《IAR映射文件(.map)》这两种文件有所了解。
Note 2:本文使用的 IAR EWARM 软件版本是 v9.30.1。
一、源文件里自定义程序段
首先我们要将需要重定向到 RAM 中执行的全部关键函数放到同一个自定义程序段里,具体方法参见痞子衡旧文 《在IAR下将关键函数重定向到RAM中执行的方法》 里 2.2 小节。
我们以最经典的 \SDK_2.13.1_MIMXRT1170-EVK\boards\evkmimxrt1170\demo_apps\hello_world\cm7\iar 例程( flexspi_nor_debug build)为例,将其 SysTick_DelayTicks() 函数放到自定义程序段 UserRelocateCode 里,写法如下:
#pragma location = "UserRelocateCode"
void SysTick_DelayTicks(uint32_t n)
{
g_systickCounter = n;
while (g_systickCounter != 0U)
{
}
}
二、链接文件里处理自定义程序段
有了自定义程序段 UserRelocateCode 后,现在我们需要告诉 IAR 链接器,这个程序段将由用户自己做初始化处理。打开工程链接文件
MIMXRT1176xxxxx_cm7_flexspi_nor.icf 添加如下语句。即将 UserRelocateCode 段重定向到 EXTRAM_region 里执行,并且这里最关键的是 initialize manually 这一句(区别于 SDK CodeQuickAccess 段重定向做法所用的 initialize by copy)。
define symbol m_external_ram_start = 0x60000000;
define symbol m_external_ram_end = 0x6003FFFF;
define region EXTRAM_region = mem:[from m_external_ram_start to m_external_ram_end];
initialize manually { section UserRelocateCode };
place in EXTRAM_region { section UserRelocateCode };
编译修改后的工程,查看其映射文件(.map),其中和 UserRelocateCode 段相关的内容如下,这里可以看到除了 P10 之外,P1 里还多了一个名为 UserRelocateCode_init 的段,这其实就是自定义程序段机器码在 Flash 里的存放位置(拷贝数据源)。
*******************************************************************************
*** PLACEMENT SUMMARY
***
"P10": place in [from 0x6000'0000 to 0x6003'ffff] { section UserRelocateCode };
initialize manually with packing = none { section UserRelocateCode };
Section Kind Address Size Object
------- ---- ------- ---- ------
"P1": 0x4738
UserRelocateCode_init 0x3000'6800 0x10 <Block>
Initializer bytes const 0x3000'6800 0x10 <for UserRelocateCode-1>
"P10": 0x10
UserRelocateCode 0x6000'0000 0x10 <Block>
UserRelocateCode-1 0x6000'0000 0x10 <Init block>
UserRelocateCode inited 0x6000'0000 0x10 led_blinky.o [7]
- 0x6000'0010 0x10
三、手动拷贝自定义程序段
上一节我们在映射文件里看到 UserRelocateCode_init 段的出现,这其实 IAR 的默认规定,可在 \IAR Systems\Embedded Workbench 9.30.1\arm\doc\
EWARM_DevelopmentGuide.ENU.pdf 文档找到相应规则,即重定向的自定义段,其初始化值将被放到名为原自定义段名 + _init 后缀的段里
查看原文:
https://www.dianyuan.com/eestar/article-8016.html
更多精彩内容,尽在电子星球 APP(https://www.eestar.com/)