当前位置: 首页 > news >正文

英集芯-IP5385开发调试总结

简介

       我们开发的一款移动电源设备用到英集芯的IP5385,这里做一下开发调试总结,与各位朋友分享一下,欢迎交流。

       IP5385是英集芯的一款移动电源SOC,支持 SCP、 PD3.0、 UFCS 等快充协议, 支持 2~6 节串联电池, 集成升降压驱动, 最大功率 100W。

        支持多个USB口,寄存器数据种类丰富,可根据自己的需求进行相应的读写操作。

一、功能需求

        这里使用IP5385主要是2路USB-C口做输入输出,1路USB-A口单向输出,输入功率最大30W,输出功率最大65W。

        设备有几种工作状态,输入输出端口的电压电流数据,NTC温度需要从IP5385中获取。

1.1 状态数据

        需要获取的状态:充电、放电状态,根据充放电状态,数码管显示不同的状态;

                                     小电流状态,小电流模式下,数码管显示特定状态;

                                      高温、低温、正常温度状态,温度异常状态下,数码管爆闪。

1.2 实时数据

        当A1口输出时,获取A1口的输出电压,输出电流数据;

        当C1口输入输出时,获取C1口的实时电压、电流数据;

        当C2口输入输出时,获取C1口的实时电压、电流数据;

        获取NTC的ADC值,换算成实际的温度。

二、寄存器读写

        寄存器规格书中并不是每个端口的电压、电路数据都能获取到,有些数据获取的是三个MOS后端的总的数据,下面我们来详细看下数据怎么区分。

        2.1 电压数据

        当我们要获取每个端口的电压数据时,发现找不到此寄存器,最后找到一个VSYS电压寄存器,是的,这个就是电路中输入输出端总的电压,电路中具体位置,如下图所示。

        这个电压寄存器,可作为C1,C2输入电压、A1,C1,C2输出电压,就是无论输入还是输出的电压,都是从这里流过。

        这里需要读2个寄存器,分别是电压数据高8位和低8位,读上来之后合成为16位数据,再按照规格书中公式换算成实际电压值即可,VSYS电压寄存器如下图所示。

2.2 电流数据

2.2.1 输入电流

        电流数据寄存器就比较多了,分为输入电流寄存器,输出电流寄存器。

        只有C1,C2可作为输入端,所以输入电流寄存器只需要读C1,C2端的就可以,但是规格书中只有VBUS端的输入电流寄存器,VBUS端也就是C1端,C2端的输入电流数据寄存器没有,这里只能读VSYS端的电流寄存器。

        把读取的VSYS端的电流寄存器,作为C1,C2端的输入电流,寄存器值如下图所示。

2.2.2 输出电流

        A1,C1,C2端口的输出电流,规格书中都有对应的寄存器可读取,分别是VOUT1输出电流寄存器、IVBUS输出电流寄存器、IVIN输出电流寄存器。

        对应的寄存器如下图:

        

2.3 状态寄存器

        状态分为3中:充/放电状态、小电流状态、过温状态。

        那么,对应的状态寄存器需要读取3个:充电状态指示寄存器、输入状态指示寄存器、NTC 状态指示寄存器。

2.3.1 充电状态指示寄存器

        充电状态指示寄存器通过判断bit5的值,bit5为1表示充电状态,为0表示放电状态。

        寄存器值如下图:

2.3.2 输入状态指示寄存器

        该寄存器通过判断bit字节的数据,bit3:1-小电流模式,0-正常模式,这个是后期定制增加的,所以规格书中没有显示。

        寄存器值如下图:

2.3.3 NTC 状态指示寄存器

        过温状态通过判断此寄存器的bit6,bit7字节,来确定是NTC高温保护,还是低温保护。

        寄存器值如下图:

三、代码实现

        通过以上,我们可以知道主控对于IP5385的操作基本只有读数据操作,所以,我们只需要IIC通信的读数据操作就可以,这里代码例程以某一个寄存器读取为例。

        寄存器宏定义代码如下:

#define		PS_IP5385_ADDR					0xEA
#define		PS_IP5385_GET_LITTLE_CUR_STA	0x33	//bit3:1-小电流模式,0-正常模式
#define		PS_IP5385_GET_FASTCHRG_STA		0x32
#define		PS_IP5385_GET_CHRG_STATE		0x31	//bit5=1充电,bit5=0放电,bit2-0=5充满
#define		PS_IP5385_GET_NTC_STATE			0x30	//bit7=1高温保护,bit6=1低温保护
#define		PS_IP5385_GET_NTC_L				0x4A
#define		PS_IP5385_GET_NTC_H				0x4B
#define		PS_IP5385_GET_VSYS_V_L			0x3A	//VSYS电压:可做C1,C2输入电压、A1,C1,C2输出电压
#define		PS_IP5385_GET_VSYS_V_H			0x3B
#define		PS_IP5385_GET_ISYS_I_L			0x48	//IVSYS电流:可做C1,C2输入电流
#define		PS_IP5385_GET_ISYS_I_H			0x49
#define		PS_IP5385_GET_VOUT1_I_L			0x3E	//VOUT输出电流
#define		PS_IP5385_GET_VOUT1_I_H			0x3F
#define		PS_IP5385_GET_IVBUS_L			0x42	//IP5385_C1输出电流
#define		PS_IP5385_GET_IVBUS_H			0x43
#define		PS_IP5385_GET_IVIN_L			0x44	//IP5385_C2输出电流
#define		PS_IP5385_GET_IVIN_H			0x45
#define		PS_IP5385_GET_MOS_STATE			0x35	//输出输入 MOS 状态指示寄存器

        IIC读取状态寄存器代码例程如下:

if(I2CMasterReadData(PS_IP5385_ADDR,PS_IP5385_GET_LITTLE_CUR_STA,&u8IP5385LittleCurSta,1) == TRUE)
{if(((u8IP5385LittleCurSta >> 3) & 0x1) == 1){PS_BattState.EnterLittleCurFlag = 1;}else{PS_BattState.EnterLittleCurFlag = 0;}
}

        IIC读数据寄存器代码例程如下:

case 8:if(MODBUS_GET_BIT(g_stuSysTim.m_u16SystemTimFlag,SYSTEM_10MS_FLAG)){if(I2CMasterReadData(PS_IP5385_ADDR,PS_IP5385_GET_VSYS_V_H,&u8VsysVol,1) == TRUE){su16IP5385VsysVolAdc = u8VsysVol;su16IP5385VsysVolAdc = su16IP5385VsysVolAdc << 8;}MODBUS_CLR_BIT(g_stuSysTim.m_u16SystemTimFlag,SYSTEM_10MS_FLAG);g_stuSysTim.m_u16SysTim5ms = 0;g_su8ReadDatSta = 9;}break;
case 9:if(MODBUS_GET_BIT(g_stuSysTim.m_u16SystemTimFlag,SYSTEM_10MS_FLAG)){if(I2CMasterReadData(PS_IP5385_ADDR,PS_IP5385_GET_VSYS_V_L,&u8VsysVol,1) == TRUE){su16IP5385VsysVolAdc |= u8VsysVol;						u32IP5385VsysVolTem = (su16IP5385VsysVolAdc * 26855) / 10000;	//mVstuBatDat.m_u16VsysVol = (uint16_t)u32IP5385VsysVolTem;}printf("stuBatDat.m_u16VsysVol(C1/C2/A1_Vsys电压):%d\r\n",stuBatDat.m_u16VsysVol);		//调试MODBUS_CLR_BIT(g_stuSysTim.m_u16SystemTimFlag,SYSTEM_10MS_FLAG);g_stuSysTim.m_u16SysTim5ms = 0;g_su8ReadDatSta = 10;}break;

        四、总结

        综上,我们获取了这么多IP5385的寄存器数据,代码实现时需做好模块化设计,建议采用状态机+定时器的模式去设计,所有的寄存器地址采用宏定义,增加代码可读性。

http://www.dtcms.com/a/495018.html

相关文章:

  • ProfiNet转EtherNet/IP工业PLC网关:打通仓储PLC与机器人通讯链路
  • Linux C/C++ 学习日记(27):KCP协议(三):代码结构分析与使用示例
  • 系统移植篇之uboot-5:DDR内存
  • 新开传奇网站刚开上海软件开发公司排名
  • C语言之可变参函数
  • Centos 7 环境下mysql的安装及配置
  • CentOS修改MySQL数据目录后重启失败的问题及解决方案
  • 南宁市优化网站宜昌网站建设
  • 医药网站 备案做哪个网站的直播好
  • 永磁同步电机电流环低“采样与基频比率”(S2F)性能影响与改进
  • Vue3 - defineExpose的使用
  • Go Web 编程快速入门 01 - 环境准备与第一个 Web 应用
  • 图像处理之腐蚀算法-收缩去噪
  • 基于单片机的智能鱼塘饵料投喂系统设计
  • 串扰16-保护地线
  • LED氛围灯方案开发MCU控制芯片
  • 博客网站素材做网络推广一个月多少钱
  • txt怎么做网站wordpress the7 theme
  • 国产OCR模型荣登HF榜首——PaddleOCR-VL技术详解与多场景实测
  • seo网站排名优化快速排ppt背景模板免费下载
  • 保山市住房和城乡建设厅网站长春火车站人工电话
  • 网站开发内容和方法无锡市建设培训中心网站
  • 【Win32 多线程程序设计基础第七章笔记】
  • 大模型在网络安全领域的应用与评测
  • JavaEE--SpringIoC
  • macOS版Sublime简记
  • 机器学习(1)- 机器学习简介
  • 系统架构设计师备考第44天——软件架构演化方式的分类和原则
  • 郑州网站建设公司排行超级工程网站建设上海中心大厦
  • 睢县做网站酒店怎样做网站好评