【嵌入式硬件芯片开发笔记】LP87702/LP87524电源芯片配置流程

news2024/11/16 10:48:29

【嵌入式硬件芯片开发笔记】LP87702/LP87524电源芯片配置流程
LP8752x-Q1 10-A Buck Converter With Integrated Switche
具有诊断功能的 LP87702-Q1 双路降压转换器和 5V 升压转换器

LP87702/LP87524从机地址都是0x60
LP87702/LP87524中的设备ID等寄存器,是根据OTP EPROM来确定的,每一个芯片其设备ID都不同,通过判断是否首次启动来进行不同的操作。
PWM和PFM两种工作模式:前者驱动电流更大,600mA或更大负载下用PWM。强制使用PWM模式时,若负载小,则会自动切换到PFM模式。配置相应寄存器可以控制,建议选择自动模式。

LP87702/LP87524开始运行

  1. 使能VCC_5V,(ENABLE_VCC_5V),VCC_5V_EN引脚输出高电平,EN_LP87702输出高电平(最好是延迟4ms后再延迟4ms)
  2. 根据EEPROM中的某一区域标志位判断LP87702/LP87524是否是首次启动(也可通过I2C_Judge函数来判断设备是否正常,则可忽略这一步骤):

LP87702/LP87524 首次启动:

①软件复位:LP87524 0x18和LP87702 0x1F写入0x01延迟10ms
②读取设备ID寄存器,写入到EEPROM对应部分,对应启动标志位置1

LP87702/LP87524 非首次启动:

①软件复位:LP87524 0x18和LP87702 0x1F写入0x01延迟10ms
②读取EEPROM的设备ID存储部分,读取设备ID寄存器,两者相同则向下进行,否则报错
3. 执行初始化

LP87702初始化.

在这里插入图片描述

  1. 将0x00写入LP87702_CONFIG,不选择下拉,此寄存器也可配置信号延时
  2. 配置以下寄存器,使CLKIN引脚用作控制看门狗的开启/禁用
    #define LP87702_WD_DIS_CTRL_CODE 0x34 连续写入0x87,0x65,0x1B解锁
    #define LP87702_WD_DIS_CONTROL 0x35 写入0x01
    看门狗配置寄存器为0x1C-0x3E
    配置WD_CTRL_2寄存器,可以设置WD_RESET输出方式和有效电平,Bit2默认为0表示WDI无下拉,写入0x00改为推挽输出
    3. 依次配置以下寄存器,使B0输出1.8V,B1输出1.0V,BOOST输出5V:
    #define LP87702_BUCK0_CTRL_1 0x02 默认0x08
    #define LP87702_BUCK0_CTRL_2 0x03 默认0x1A
    #define LP87702_BUCK1_CTRL_1 0x04 默认0x08
    #define LP87702_BUCK1_CTRL_2 0x05 默认0x1A

#define LP87702_BUCK0_VOUT 0x06 写入0xB1
#define LP87702_BUCK1_VOUT 0x07 写入0x4D

#define LP87702_BOOST_CTRL 0x08 写入0x58
若需要延迟开启或关闭,则配置DEALY寄存器
若需启用电压监测,则配置PGOOD寄存器
最后一步再开启电压输出:
BUCK0_CTRL_1 先读取再写入使bit0置1
BUCK1_CTRL_1 先读取再写入使bit0置1
BOOST_CTRL 先读取再写入使bit0置1
4. 若有需要,可编程GPO引脚可以通过配置寄存器来输出高低电平。监测启用时,配置PG_CTRL寄存器可以使GPO用于监测输出。中断及状态在INT和STATUS寄存器内,中断屏蔽配置在MASK寄存器内。SEL_I_LOAD寄存器可开启电流测量。BOOST_ILIM_CTRL寄存器用于配置电流限度。

LP87524初始化

在这里插入图片描述

  1. 将0x40写入LP87524_CONFIG,CLKIN下拉,其他不选择下拉,此寄存器也可配置信号延时
  2. 将0x00写入PIN_FUNCTION寄存器,使其不使用GPIO功能
  3. 依次配置以下寄存器,使B0输出3.3V,B1输出1.8V,B2输出1.2V,B3输出1.0V
    #define LP87524_BUCK0_CTRL1 0x02 写入0x34,bit7控制开启
    #define LP87524_BUCK1_CTRL1 0x04 写入0x44,bit7和EN1控制开启
    #define LP87524_BUCK2_CTRL1 0x06 写入0x54,bit7和EN2控制开启
    #define LP87524_BUCK3_CTRL1 0x08 写入0x64,bit7和EN3控制开启

#define LP87524_BUCK0_VOUT 0x0A 写入0xFC
#define LP87524_BUCK0_FLOOR_VOUT 0x0B 写入0xFC
#define LP87524_BUCK1_VOUT 0x0C 写入0xB1
#define LP87524_BUCK1_FLOOR_VOUT 0x0D 写入0xB1
#define LP87524_BUCK2_VOUT 0x0E 写入0x75
#define LP87524_BUCK2_FLOOR_VOUT 0x0F 写入0x75
#define LP87524_BUCK3_VOUT 0x10 写入0x4D
#define LP87524_BUCK3_FLOOR_VOUT 0x11 写入0x4D
若需要延迟开启或关闭,则配置DEALY寄存器
若需启用电压监测,则配置PGOOD寄存器
最后一步再开启电压输出:
BUCK0_CTRL1 先读取再写入,使bit7置1
BUCK1_CTRL1 先读取再写入,使bit7置1,EN1输出高电平
BUCK2_CTRL1 先读取再写入,使bit7置1,EN2输出高电平
BUCK3_CTRL1 先读取再写入,使bit7置1,EN3输出高电平
3. 若有需要,可使能EN的GPIO复用功能,编程引脚可以通过配置寄存器来输出高低电平。中断及状态在INT和STAT寄存器内,中断屏蔽配置在MASK寄存器内。SEL_I_LOAD寄存器可开启电流测量。

代码例程

/*!
 * @brief       	使能LP87702_WDI引脚的定时器,开启定时器中断和PWM,并设置占空比为50
 *
 * @param 				None
 *
 * @return				None
 */
void Enable_LP87702_WDI_TIM(void)
{
	HAL_TIM_Base_Start_IT(&htim3);
	HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_4);
	__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_4,50);
}

/*!
 * @brief       	复位LP87702
 *
 * @param 				None
 *
 * @return				false/true: 错误/正确标志
 */
bool Reset_LP87702(void)
{
	uint8_t dat=0;
	dat=0x01;
	if(I2C_Write_x(&hi2c4,LP87702_Slave_Add,LP87702_RESET,1,&dat,1,true)!=true)
	{
		return false;
	}
	delay_ms(10);
	return true;
}

/*!
 * @brief       	初始化LP87702
 *
 * @param 				None
 *
 * @return				0/1: 错误/正确标志
 */
uint8_t Init_LP87702(void)
{
	uint8_t dat=0;
	
	Enable_VCC_5V;
	delay_ms(5);
	Enable_LP87702_EN;	
	delay_ms(5);
	
	if(!I2C_Judge(&hi2c4,LP87702_Slave_Add))
	{
		return 0;
	}
	
	if(!Reset_LP87702())
	{
		return 0;
	}
	
	dat=0x00;
	I2C_Write_x(&hi2c4,LP87702_Slave_Add,LP87702_CONFIG,1,&dat,1,true);
	
	dat=0x87;
	I2C_Write_x(&hi2c4,LP87702_Slave_Add,LP87702_WD_DIS_CTRL_CODE,1,&dat,1,true);
	dat=0x65;
	I2C_Write_x(&hi2c4,LP87702_Slave_Add,LP87702_WD_DIS_CTRL_CODE,1,&dat,1,true);
	dat=0x1B;
	I2C_Write_x(&hi2c4,LP87702_Slave_Add,LP87702_WD_DIS_CTRL_CODE,1,&dat,1,true);
	
	dat=0x01;
	I2C_Write_x(&hi2c4,LP87702_Slave_Add,LP87702_WD_DIS_CONTROL,1,&dat,1,true);
	
	dat=0x00;
	I2C_Write_x(&hi2c4,LP87702_Slave_Add,LP87702_WD_CTRL_2,1,&dat,1,true);
	
	dat=0x08;
	I2C_Write_x(&hi2c4,LP87702_Slave_Add,LP87702_BUCK0_CTRL_1,1,&dat,1,true);
	dat=0x1A;
	I2C_Write_x(&hi2c4,LP87702_Slave_Add,LP87702_BUCK0_CTRL_2,1,&dat,1,true);
	dat=0x08;
	I2C_Write_x(&hi2c4,LP87702_Slave_Add,LP87702_BUCK1_CTRL_1,1,&dat,1,true);
	dat=0x1A;
	I2C_Write_x(&hi2c4,LP87702_Slave_Add,LP87702_BUCK1_CTRL_2,1,&dat,1,true);
	
	dat=0xB1;
	I2C_Write_x(&hi2c4,LP87702_Slave_Add,LP87702_BUCK0_VOUT,1,&dat,1,true);
	dat=0x4D;
	I2C_Write_x(&hi2c4,LP87702_Slave_Add,LP87702_BUCK1_VOUT,1,&dat,1,true);
	
	dat=0x58;
	I2C_Write_x(&hi2c4,LP87702_Slave_Add,LP87702_BOOST_CTRL,1,&dat,1,true);
	
	delay_ms(10);
	
	dat=I2C_Read_y(&hi2c4,LP87702_Slave_Add,LP87702_BUCK0_CTRL_1,1,1,true);
	dat|=(1<<0);
	I2C_Write_x(&hi2c4,LP87702_Slave_Add,LP87702_BUCK0_CTRL_1,1,&dat,1,true);
	
	dat=I2C_Read_y(&hi2c4,LP87702_Slave_Add,LP87702_BUCK1_CTRL_1,1,1,true);
	dat|=(1<<0);
	I2C_Write_x(&hi2c4,LP87702_Slave_Add,LP87702_BUCK1_CTRL_1,1,&dat,1,true);
	
	dat=I2C_Read_y(&hi2c4,LP87702_Slave_Add,LP87702_BOOST_CTRL,1,1,true);
	dat|=(1<<0);
	I2C_Write_x(&hi2c4,LP87702_Slave_Add,LP87702_BOOST_CTRL,1,&dat,1,true);
	
	return 1;
}

/*!
 * @brief       	复位LP87524
 *
 * @param 				None
 *
 * @return				false/true: 错误/正确标志
 */
bool Reset_LP87524(void)
{
	uint8_t dat=0;
	dat=0x01;
	if(I2C_Write_x(&hi2c2,LP87524_Slave_Add,LP87524_RESET,1,&dat,1,true)!=true)
	{
		return false;
	}
	delay_ms(10);
	return true;
}

/*!
 * @brief       	初始化LP87524
 *
 * @param 				None
 *
 * @return				0/1: 错误/正确标志
 */
uint8_t Init_LP87524(void)
{
	uint8_t dat=0;
	
	Enable_VCC_5V;
	delay_ms(5);
	Disable_LP87524_EN1;
	Disable_LP87524_EN2;
	Disable_LP87524_EN3;
	delay_ms(5);
	
	if(!I2C_Judge(&hi2c2,LP87524_Slave_Add))
	{
		return 0;
	}
	
	if(!Reset_LP87524())
	{
		return 0;
	}
	
	dat=0x40;
	I2C_Write_x(&hi2c2,LP87524_Slave_Add,LP87524_CONFIG,1,&dat,1,true);
	
	dat=0x00;
	I2C_Write_x(&hi2c2,LP87524_Slave_Add,LP87524_PIN_FUNCTION,1,&dat,1,true);
	
	dat=0x34;
	I2C_Write_x(&hi2c2,LP87524_Slave_Add,LP87524_BUCK0_CTRL1,1,&dat,1,true);
	dat=0x44;
	I2C_Write_x(&hi2c2,LP87524_Slave_Add,LP87524_BUCK1_CTRL1,1,&dat,1,true);
	dat=0x54;
	I2C_Write_x(&hi2c2,LP87524_Slave_Add,LP87524_BUCK2_CTRL1,1,&dat,1,true);
	dat=0x64;
	I2C_Write_x(&hi2c2,LP87524_Slave_Add,LP87524_BUCK3_CTRL1,1,&dat,1,true);
	
	dat=0xFC;
	I2C_Write_x(&hi2c2,LP87524_Slave_Add,LP87524_BUCK0_VOUT,1,&dat,1,true);
	dat=0xFC;
	I2C_Write_x(&hi2c2,LP87524_Slave_Add,LP87524_BUCK0_FLOOR_VOUT,1,&dat,1,true);
	dat=0xB1;
	I2C_Write_x(&hi2c2,LP87524_Slave_Add,LP87524_BUCK1_VOUT,1,&dat,1,true);
	dat=0xB1;
	I2C_Write_x(&hi2c2,LP87524_Slave_Add,LP87524_BUCK1_FLOOR_VOUT,1,&dat,1,true);
	dat=0x75;
	I2C_Write_x(&hi2c2,LP87524_Slave_Add,LP87524_BUCK2_VOUT,1,&dat,1,true);
	dat=0x75;
	I2C_Write_x(&hi2c2,LP87524_Slave_Add,LP87524_BUCK2_FLOOR_VOUT,1,&dat,1,true);
	dat=0x4D;
	I2C_Write_x(&hi2c2,LP87524_Slave_Add,LP87524_BUCK3_VOUT,1,&dat,1,true);
	dat=0x4D;
	I2C_Write_x(&hi2c2,LP87524_Slave_Add,LP87524_BUCK3_FLOOR_VOUT,1,&dat,1,true);
	
	dat=I2C_Read_y(&hi2c2,LP87524_Slave_Add,LP87524_BUCK0_CTRL1,1,1,true);
	dat|=(1<<7);
	I2C_Write_x(&hi2c2,LP87524_Slave_Add,LP87524_BUCK0_CTRL1,1,&dat,1,true);
	
	dat=I2C_Read_y(&hi2c2,LP87524_Slave_Add,LP87524_BUCK1_CTRL1,1,1,true);
	dat|=(1<<7);
	I2C_Write_x(&hi2c2,LP87524_Slave_Add,LP87524_BUCK1_CTRL1,1,&dat,1,true);
	Enable_LP87524_EN1;
	
	dat=I2C_Read_y(&hi2c2,LP87524_Slave_Add,LP87524_BUCK2_CTRL1,1,1,true);
	dat|=(1<<7);
	I2C_Write_x(&hi2c2,LP87524_Slave_Add,LP87524_BUCK2_CTRL1,1,&dat,1,true);
	Enable_LP87524_EN2;
	
	dat=I2C_Read_y(&hi2c2,LP87524_Slave_Add,LP87524_BUCK3_CTRL1,1,1,true);
	dat|=(1<<7);
	I2C_Write_x(&hi2c2,LP87524_Slave_Add,LP87524_BUCK3_CTRL1,1,&dat,1,true);
	Enable_LP87524_EN3;
	
	return 1;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/73413.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

维护4年的组件化框架 Component 升级到 KComponent 啦

前言 KComponent 它来啦. 从 2018.8 开始, Component 项目正式开源. 到目前已经 4 年的时间了. 这几年中, Component 不断升级优化. 最后趋于稳定. 为了组件化框架更好的发展, KComponent 继承了 Component 的优点, 升级为一个纯 Kotlin 的项目. 不再支持 Java, 注解驱动器也…

Java招生报名咨询系统毕业设计,Java招生咨询问答系统设计与实现,毕业设计论文怎么写毕设源码开题报告需求分析怎么做

功能清单 【系统管理员功能】 关于我们设置&#xff1a;设置学校简介、联系我们、加入我们、法律声明、学校详情 广告管理&#xff1a;设置小程序首页轮播图广告和链接 留言列表&#xff1a;所有用户留言信息列表&#xff0c;支持删除 会员列表&#xff1a;查看所有注册会员信…

20.前端笔记CSS-精灵图

1、为啥要精灵图 一个网页中往往会应用很多小的背景图像作为修饰&#xff0c;当网页中的图像过多时&#xff0c;服务器就会频繁的接收和发生请求图片&#xff0c;造成服务器的请求压力过大&#xff0c;这会大大降低页面的加载速度 为了有效减少服务器接收和发生请求的次数&…

[附源码]JAVA毕业设计图书借阅系统演示录像(系统+LW)

[附源码]JAVA毕业设计图书借阅系统演示录像&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目…

你不知道的goland技巧

很多人使用 Goland 有很长时间的&#xff0c;却没有好好利用上 Goland 工具带给我们的遍历&#xff0c;今天咱们就来解锁一下新技巧 过去我们使用 Goland 就是简单的配置一下 go 的 proxy &#xff0c;以及配置一下 ssh &#xff0c;与服务器进行文件的上传和下载&#xff0c;其…

基于Hadoop的用户购买行为的商品推荐系统

目录 一 绪论 1 1.1 编写目的 1 1.2 背景及意义 1 1.3 开发及运行环境 2 二 需求分析 3 2.1 系统概述 3 2.3 系统功能需求 4 2.3.1 收集原始数据 4 2.3.2 计算物品相似度矩阵 4 2.3.3 计算用户购买向量 5 2.3.4 计算推荐向量并去重和排序 5 2.3.4 数据入库 5 2.3.5 作业控制 5 …

百数:用报表搭建生产进度看板,让生产更高效

现如今我国已经步入了全新的现代化科技时代&#xff0c;国内各个行业对于数字技术也在进行着不断地应用和研究。目前数字技术在企业生产管理系统的运用中具备较为显著的优势&#xff0c;其中生产进度看板就是数字化管理系统的重要应用之一。 生产进度看板是一种可视化管理系统…

计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度附Matlab代码和论文复现

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

Mysql性能测试主要内容

Mysql性能测试主要内容 相信很多做性能测试的朋友都知道&#xff0c;性能测试并不单单只是看服务器cpu、IO、内存、网络等&#xff0c;我们还需要了解Mysql性能&#xff0c;那么我们看看Mysql性能主要内容有哪些呢&#xff1f; MySql数据库介绍 Mysql相信大家做测试的&#…

领导科学论坛杂志领导科学论坛杂志社领导科学论坛编辑部2022年第10期目录

理论前沿 列宁《怎么办&#xff1f;》中理论斗争思想及其当代价值研究 游玲; 1-7 共青团引领青年思想的百年历程及经验启示 许丽珠; 8-14 新发展格局下推进乡村产业振兴的现实困境与实践进路 杨帆; 15-19 “三治融合”治理体系的内部逻辑与创新策略 皋媛;戢仕铭…

进阶 - Git的Feature分支

本篇文章&#xff0c;是基于我自用Linux系统中的自定义文件夹“test_rep”&#xff0c;当做示例演示 具体Git仓库的目录在&#xff1a;/usr/local/git/test_rep Git的Feature分支 软件开发中&#xff0c;总有无穷无尽的新的功能要不断添加进来。添加一个新功能时&#xff0c;你…

yolov4-tiny通过pytorch导出不带split算子的onnx

前言 最近一直忙于模型移植板端&#xff0c;用了不少厂家的sdk&#xff0c;发现挺多厂家的sdk都处于起步阶段&#xff0c;缺少一些技术支持&#xff0c;比如不支持五维向量&#xff0c;不支持一些onnx算子&#xff0c;不支持过深的模型结构&#xff0c;我最爱的Yolov5,v6,v7等…

阿里云公网部署openyurt集群添加本地边缘节点并支持metrics-server和prometheus

公网部署openyurt集群并支持metrics-server和prometheus删除以前的集群创建虚拟网卡初始化主节点安装kubeadm等初始化安装网络插件flannel根据官方文档调整部署OpenYurt的Control-Plane组件部署openyurt/openyurt组件部署kuboard方便可视化主节点改造使其可以部署metrics-serve…

字节算法中了80%!靠着这份GitHub上的算法小抄,成功斩获字节Offer

最近&#xff0c;GitHub上的算法小抄又火了&#xff01;已经有不少人靠它手撕算法题&#xff0c;拿下了字节、腾讯等大厂offer&#xff01; 不问不知道&#xff0c;这份刷题笔记来自FB高级架构师、ACM金牌选手。 这位大佬在刷题和打ACM比赛中总结出了经验和套路&#xff0c;又…

C#基础知识体系框架图,及起对应我发过的博客

自己工作开发C#上位机总结的&#xff0c;不好勿喷&#xff0c;更多资料去微软官网搜索就好 下面按照从基础到开发使用的顺序&#xff0c;对应我以前发过的链接&#xff08;后面再附上我自己的框架图&#xff09;&#xff1a; C#与C不同的一些基础命令_花开莫与流年错_的博客-…

深入理解Java中的三个修饰符(抽象(abstract)、静态(static)和最终的,不可变(final))【配视频】

&#x1f345;程序员小王的博客&#xff1a;程序员小王的博客 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 如有编辑错误联系作者&#xff0c;如果有比较好的文章欢迎分享给我&#xff0c;我会取其精华去其糟粕 &#x1f345;java自学的学习…

Linux文件系统上的特殊权限

Linux 的文件权限&#xff0c;远不止 rwx 那么简单&#xff0c;还有一些特殊权限是用来打破限制和默认的安全上下文规则的&#xff0c;除了之前介绍过的隐藏属性&#xff0c;还有几个显式的特殊权限。下面就来说说 Linux 文件系统上的 SUID&#xff0c;SGID 和 Sticky 权限。 …

Vue2基础篇-20-生命周期回调函数

1.vue2的生命周期 beforeCreate &#xff1a;在实例初始化之后,进行数据侦听和事件/侦听器的配置之前同步调用&#xff1b; created: 在实例创建完成后被立即同步调用; beforeMount: 在挂载开始之前被调用 mounted : 实例被挂载后调用; beforeUpdate&#xff1a; 在数据发生…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java民生租赁车辆管理信息系统w29s0

如果你自己基础不好或者是小白的情况下那就建议你选择网站、系统类的去做&#xff0c;但是还得问问你们导师&#xff0c;如果你们导师没问题就可以&#xff0c;因为有的导师是不愿意你们选择做网站、系统的&#xff0c;毕竟做的人比较多&#xff0c;重复率调高&#xff0c;选择…

springboot中统一日志管理

Springboot中统一日志管理 一、为什么要用日志&#xff1f; 一般分为两个大类&#xff1a;操作日志和系统日志 **操作日志&#xff1a;**用户在操作软件时记录下来的操作步骤&#xff0c;便于用户自己查看。主要针对的是用户。 **系统日志&#xff1a;**系统日志是记录系统…