工程师笔记|逐波限流保护实现方案

2023-10-19 02:59

本文主要是介绍工程师笔记|逐波限流保护实现方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

7024add94411c6a37244da82ea131595.png

前言

在电源设计中经常会使用逐波限流保护来保证电流不超过限定的最大值,若在短时内多次触发逐波限流保护则强制封锁 PWM 输出,让系统进入故障保护状态,在这个过程中需要对逐波限流触发次数进行计数,以此来判断是否进入故障保护,本文针对该功能,基于 STM32G474 高精度定时器,介绍如何实现逐波限流保护以及保护次数计数。

逐波限流原理介绍

所谓逐波限流指在电源工作过程中,对电感电流或是功率管导通电流进行实时监测,一旦超出设定范围,则在该 PWM 周期内立即关闭相关的 PWM 驱动,直到下个 PWM 周期再自动使能PWM 驱动,若电流信号一直超限,则一直封锁 PWM,直到电流恢复正常的下一个新的 PWM 周期后,才能重新使能 PWM 输出。工作过程示意图如下图所示,OCP 表示过流保护,高电平表示电流超限。

e41e10382f8e34bb5d4f0554eaa31e26.png

STM32G474 逐波限流保护的实现

STM32G474 的高精度定时器除了能产生高精度的 PWM 波外,还包含了外部事件管理器,能对多达 10 个外部事件进行处理。可以设置外部事件的触发源、触发方式(沿触发或是电平触发)、相应方式(同步或是异步)以及事件的滤波方式。外部事件的一个最重要的作用就是用来对输出的PWM 进行控制,触发 PWM 的 Set 与 Reset 动作。

6d2c6d4d4531f85983543e3b4bab6cd4.png

在触发源的选择上,每个外部事件可以从 4 个源中进行选择:

• 外部 pin 脚输入

•内部比较器输出

• 其他定时器触发信号(如 TIM1/2/3_TRGO)

• ADC 看门狗事件(ADCx_ADC1/2/3)

对应逐波限流功能,可以选择外部 pin 脚输入或是内部比较器输出,推荐的方式为内部比较器输出。外部电流采样信号直接输入到片上比较器(COMPx_INP),比较器的输出结果作为外部事件触发源。

c2e46ec5d7cb9ab4197176bfe70b2325.png

基于以上的介绍,利用 CubeMx 工具进行相应的配置来说明整个功能的实现过程,以高精度定时器中的 Timer A 为例,主要介绍外部事件与逐波限流保护的配置,其他的配置不再赘述。外部事件的配置如下,触发源为内部比较器 2 的输出,高电平有效。

b616720d6861709c4d7e2e17c9d41438.png

为了使用内部比较器,必须对内部对应的比较器进行配置,一般选择 DAC 的输出作为比较器的参考,所以还需要对 DAC 进行配置。比较器的配置如下,设置回差,减少比较器输出抖动。

56cc22fff58b17b618a84840be284ff9.png

DAC 的配置如下(如果选择 VREFINT 或是COMPx_INM 则无需配置 DAC):

4c2d0805e0fdfebe56b7e14860ddff01.png

PWM 输出的配置如下,PWM 的 Reset 除了比较事件外,添加外部事件源。

802bcfdd1ee26453c433e6a22fc42e87.png

基于以上的配置,在生成的工程代码中添加必要的外设启动函数即可,如下:

cb9096d4ca68a57e71a43900849fcc85.png

通过示波器查看波形,黄色表示输出 PWM 驱动;绿色内部比较器输出信号,输出为高时表示限流保护,触发封波,输出为低则 PWM 可正常输出。

12e0cf4151394a42cb39ab16b49c39aa.png

逐波限流触发次数计数的实现

很多应用中不但需要实现逐波限流,还需要对某段时间内触发逐波限流的次数进行计数,以此来判断系统是否出现短路或是过载,然后决定系统是否进入永久保护状态,除非软件再次使能输出。

在高精度定时器中,外部事件不但可以用来触发 PWM 动作,它还可以被定时器内部的捕获单元捕获,所以可以通过读取捕获标志位来判定外部事件是否发生并进行计数;另外如本文采用了内部比较器的输出作为外部事件的触发源,可以通过直接读取比较器的比较中断标识或是输出状态的方式来判定外部事件是否发生并进行计数。

下面以读取捕获标识为例说明如何实现该功能,该方法更加通用。在 CubeMx 中配置高精度定时器的 Capture 功能,如下:

fe6aa88c1f6327cc7302e11040a70067.png

在软件中添加如下的代码,假如判断周期为 1 秒,本文给出伪代码的形式,具体代码需根据实际的应用进行修改。

7b62564e1f967f8b575d7ebe3114236f.png

小结

本文对逐波限流的原理进行了简单介绍,给出了如何利用 STM32G474 系列 MCU 的高精度定时器中的相关功能实现逐波限流以及逐波限流计数的方案。

3389b95ce48899f6e53a8c6be00b26c8.png

1.中国芯片替代方案公司名单公布(70个类别)

2.为什么原理图总画不好?这些技巧要知道

3.嵌入式设备如何显示IP属地?

4.RISC-V面向MCU/MPU、RTOS,但面临挑战。。。

5.单片机固件自更新的一个方法!

6.玄铁杯RISC-V应用创新大赛正式开赛,现开放报名!

49e15dea15dc340cbfbbb130764d37e3.gif

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

这篇关于工程师笔记|逐波限流保护实现方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/236835

相关文章

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除