【BMS】BJB MC33772 电流测量

news2024/11/17 19:36:00

一、硬件准备

1、主控板子:S32K312 板子

2、BJB 板子:MC33772 BJB 板子

3、硬件连接:

两个板子独立 12V 供电,外部电流接线流经分流器 Shunt ,分流器方向从下往上流向得到正值数据。

 4、BJB 测量电流电路注意事项

① 板子上预留的外部电压模拟测试电流采样电路需要去掉,如下图,BJB 板子电路图如示意图一致

二、软件准备

1、S32DS 软件 IDE

2、软件包获取:

① 进入官网下载 ,Go on Package manager webpage.

② 勾选 S32K344 HVBMS ,然后下载


 

3、环境安装

S32K312 以及 S32 DS 安装环境查看《BMS_SWInstalationGuide_Hvbms_2024.pdf》,在上述官网页面点击下图位置,即可下载用户指导手册,按照手册一步步下载安装即可完成环境的安装

4、软件更改

芯片更换为 S32K312 ,上述已经下载了 S32K344 的 BMS 例程,按照 S32K344 的 EB tresos 配置,在S32K312 的例程上,直接在 EB tresos 更改外设,添加 MC33772 ,MC33665 对应的组件即可,如下图,其他外设配置可以参考 S32K344 例程。(如客户及用户此步骤无法操作,可以联系 我们 WPI ATU ,在允许的情况下可以提供这套移植好的 demo)

三、测量电流软件流程

1、 查看数据手册

《ds633730 - MC33772C Datasheet.pdf》里面有提示:电流采样使能后至少等待 2.7us 后才能进行 ADC 转化。

2、 ADC 采样配置

配置 ADC 采样平均次数,次数越高采样时间越长,在 EB 配置当中,ADC2 的采样分辨率设置为 15bit

3、 查看代码配置,进行修改:先使能 电流采样,再进行 ADC 转换

HVBMS_Errors Bjb_StartMeas(void)
{
    Std_ReturnType Status = E_OK;
    /* Clear TD */
    Status = Bms_TD_Clear(&BmsTDCfg_Tpl2);
    
    /* Start measurements */
Status |= Bcc_772c_CC_ControlMeasurements(BCC_772C_ALL_CHAIN_TPL, BCC_772C_ALL_DEVICE_TPL, BCC_772C_CC_START, &BmsTDCfg_Tpl2);

/* Add 2 ms delay to wait for the device to finish current measurement */
Status |= Bms_TD_InsertPhyEvent(&BmsTDCfg_Tpl2, PHY_TIMER, 2000U);
Status |= Bcc_772c_COM_InsertNop(BS_CHAIN_ADDR, 1, &BmsTDCfg_Tpl2);

/* Call Bcc_772c_Send */
Status |= Bms_TD_Send(&BmsTDCfg_Tpl2, &PhyError);
if(Status != E_OK)
{
return ERROR_BJB_START_MEASUREMENTS_TD_FILL;
}

/* Wait until PHY processes the request */
Td_Wait(&BmsTDCfg_Tpl2);
if(PhyError != PHY_NO_ERROR)
{
return ERROR_BJB_START_MEASUREMENTS_TD_SEND;
}

/* Clear TD */
Status = Bms_TD_Clear(&BmsTDCfg_Tpl2);

Status |= Bcc_772c_MSR_StartConversion(BCC_772C_ALL_CHAIN_TPL, BCC_772C_ALL_DEVICE_TPL, MC33772C_ADC_CFG_AVG_8_SAMPLES_ENUM_VAL, &BmsTDCfg_Tpl2);
/* Add 2 ms delay to wait for the device to finish current measurement */
Status |= Bms_TD_InsertPhyEvent(&BmsTDCfg_Tpl2, PHY_TIMER, 2000U);
Status |= Bcc_772c_COM_InsertNop(BS_CHAIN_ADDR, 1, &BmsTDCfg_Tpl2);

/* Call Bcc_772c_Send */
Status |= Bms_TD_Send(&BmsTDCfg_Tpl2, &PhyError);
if(Status != E_OK)
{
return ERROR_BJB_START_MEASUREMENTS_TD_FILL;
}

/* Wait until PHY processes the request */
Td_Wait(&BmsTDCfg_Tpl2);
if(PhyError != PHY_NO_ERROR)
{
return ERROR_BJB_START_MEASUREMENTS_TD_SEND;
}

/* Clear TD */
Status = Bms_TD_Clear(&BmsTDCfg_Tpl2);
return NO_ERROR;
}

4、 读取数据

HVBMS_Errors Bjb_ReadMeasurementsResults(BjbMeasurementType MeasurementType)
{
        volatile Std_ReturnType Status = E_OK;
        uint8 BS_Device_Addr;
        Bcc_772c_CcISenseValueType CcIsense[BS_DEVICE_CNT];
        //Bjb_ReadIsolation();

        Status = Bms_TD_Clear(&BmsTDCfg_Tpl2);
        uint16 CurrentData[BS_DEVICE_CNT][5] = {0,0};
        /* Start measurements */
        do
        {
                /* Read current measurements */
                if(MeasurementType == BJB_CURRENT_MEASUREMENT)
                {
                        //delay 10ms
                        Status |= Bms_TD_InsertPhyEvent(&BmsTDCfg_Tpl2, PHY_TIMER, 5000);
                        Status |= Bcc_772c_CC_ControlMeasurements(BCC_772C_ALL_CHAIN_TPL, BCC_772C_ALL_DEVICE_TPL, BCC_772C_CC_RESTART, &BmsTDCfg_Tpl2);
                        /* Add 2 ms delay to wait for the device to finish current measurement */
                        Status |= Bms_TD_InsertPhyEvent(&BmsTDCfg_Tpl2, PHY_TIMER, 2000U);
                        Status |= Bcc_772c_COM_InsertNop(BS_CHAIN_ADDR, 1, &BmsTDCfg_Tpl2);

                        /* Call Bcc_772c_Send */
                        Status |= Bms_TD_Send(&BmsTDCfg_Tpl2, &PhyError);
                        if(Status != E_OK)
                        {
                                return ERROR_BJB_START_MEASUREMENTS_TD_FILL;
                        }

                        /* Wait until PHY processes the request */
                        Td_Wait(&BmsTDCfg_Tpl2);
                        if(PhyError != PHY_NO_ERROR)
                        {
                                return ERROR_BJB_START_MEASUREMENTS_TD_SEND;
                        }

                        /* Clear TD */
                        Status = Bms_TD_Clear(&BmsTDCfg_Tpl2);

                        for(BS_Device_Addr = 1; BS_Device_Addr <= BS_DEVICE_CNT; BS_Device_Addr++)
                        {
                            Status |= Bcc_772c_CC_GetData(BS_CHAIN_ADDR, BS_Device_Addr, &BmsTDCfg_Tpl2);
                        }
                        Status |= Bms_TD_Send(&BmsTDCfg_Tpl2, &PhyError);
                        if(Status != E_OK)
                        {
                                return ERROR_BJB_READ_MEASUREMENTS_CURRENT_TD_FILL;
                        }

                        /* Wait until PHY processes the request */
                        Td_Wait(&BmsTDCfg_Tpl2);
                        if(PhyError != PHY_NO_ERROR)
                        {
                            return ERROR_BJB_READ_MEASUREMENTS_CURRENT_TD_SEND;
                        }
                        /* Check DATA_RDY bits for current measurements */
                        if( ((((BmsTDCfg_Tpl2).PhyTD)->Response).Data[9] & 0x8000)&
                            ((((BmsTDCfg_Tpl2).PhyTD)->Response).Data[12] & 0x8000)&
                                ((((BmsTDCfg_Tpl2).PhyTD)->Response).Data[24] & 0x8000)&
                                ((((BmsTDCfg_Tpl2).PhyTD)->Response).Data[27] & 0x8000) )
                        {
                            Status = E_OK;
                        }
                        else
                            Status = E_NOT_OK;
                        
                        if(Status != E_OK)
                        {
                            return ERROR_BJB_READ_MEASUREMENTS_CURRENT_VALUE_EXTRACT;
                        }
                        
                        /* Read current measurements */
                        for(BS_Device_Addr = 1; BS_Device_Addr <= BS_DEVICE_CNT; BS_Device_Addr++)
                        {
                            /* RShunt 100 uOhm */
                            CcIsense[BS_Device_Addr-1].RShunt = RSHUNT;
                            Status |= Bcc_772c_CC_ExtractISense(BS_CHAIN_ADDR, BS_Device_Addr, &CcIsense[BS_Device_Addr-1], &BmsTDCfg_Tpl2);
                            PackCurrent[BS_Device_Addr-1] = CcIsense[BS_Device_Addr-1].ISense;//单位 mA
                        }
                        break;
                }      
        } while(0);
    Status = Bms_TD_Clear(&BmsTDCfg_Tpl2);

    return NO_ERROR;
}

四、参考资料

1、MC33772 数据手册

2、BJB 用户参考手册 UM11847

欢迎登录大大通,阅读原文,浏览更多精彩技术内容吧!

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

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

相关文章

【python】如何切换ipynb的kernel至指定conda环境

需求介绍 打开(若无新建环境) 环境 conda env list conda activate cvml conda install ipykernel python -m ipykernel install --name cvml 以上完成后&#xff0c;打开jupyter 创建一个python文件 在kernel——>change kernel——>python[conda env:cvml] 参考资料…

第167天:应急响应-日志自动提取分析项目_ELK_Logkit_LogonTracer_Anolog等

目录 案例一&#xff1a; 日志自动提取-七牛Logkit&观星应急工具 Logkit 观星 案例二&#xff1a;日志自动分析-Web-360 星图&Goaccess&ALB&Anolog 360 星图 GoAccess ALB Anolog f8x 案例一&#xff1a; 日志自动提取-七牛Logkit&观星应急工具 …

前端框架:选择的艺术

一、简介 在现代 web 开发中&#xff0c;前端框架扮演着至关重要的角色。 首先&#xff0c;它们极大地提升了开发效率。以 React、Vue 和 Angular 为例&#xff0c;这些框架采用组件化的开发模式&#xff0c;允许开发者将页面拆分成独立的、可复用的组件。例如&#xff0c;在一…

ESXi 5.5 系统克隆到SD卡或USB磁盘上

对于如何将安装在本地磁盘上的ESXi系统克隆到SD卡或USB磁盘上&#xff0c;以便快速实现ESXi主机的VSAN-Ready状态。正好猫猫也有点兴趣&#xff0c;所以&#xff0c;就研究了下这个方式&#xff0c;大致的工作思路就是“先通过dd命令将ESXi系统克隆到VMFS Datastore成为一个文件…

一起发现CMake太美-02-CMake是什么CMake的运行原理

本系列课程的主要内容包括&#xff1a; 点击本课程的 链接 可以进入视频课程的学习。 下面介绍本系列课程的第二课的主要内容&#xff0c;本节课从CMake是什么&#xff0c;能做什么&#xff0c;以及CMake的远亲近邻入手&#xff0c;让大家对CMake有一个大致的了解。 1. CMak…

汽车线束之故障诊断方案-TDR测试

当前&#xff0c;在汽车布局中的线束的性能要求越来越高。无法通过简单的通断测试就能满足性能传输要求。早起对智能化要求不高&#xff0c;比如没有激动雷达、高清摄像、中央CPU等。 近几年的智能驾驶对网络传输要求越来越高&#xff0c;不但是高速率&#xff0c;还需要高稳定…

ACM第三次考核题解

ACM第三次考核题解 题目序号难度题目编号题目考察知识点1签到题A这是一道很难的题&#xff01;&#xff01;&#xff01;输出2迷之难度F神说要有光&#xff0c;于是有了手电筒贪心3简单BThis is a real English problem&#xff01;思维 英语4简单C玩具简单排序5简单I“近义词…

物联网系统中基于IIC通信的数字温度传感器测温方案

01 物联网系统中为什么要使用数字式温度传感器芯片 物联网系统中使用数字式温度传感器芯片的原因主要有以下几点&#xff1a; 高精度与稳定性 高精度测量&#xff1a;数字式温度传感器芯片&#xff0c;如DS18B20&#xff0c;采用芯片集成技术&#xff0c;能够有效抑制外界不…

MISC - 第八天(gnuplot绘图工具,核心价值观编码,outguess隐写工具,ntfs流)

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天给大家继续讲解MISC的相关知识 梅花香之苦寒来 附件信息: 附件是一张图片&#xff0c;放到hxd检索相关信息 发现有一段十六进制文本 https://gchq.github.io/CyberChef/ 这个网站拥有丰富的编码和解码内容…

matlab中在一个图上持续画多条曲线的方法

在数据分析的过程中&#xff0c;会遇到一种情况&#xff0c;就是想对多组数据进行分析&#xff0c;这时就想把他们放在同一张图里&#xff0c;来看他们表现出来的特征。如下图所示&#xff1a; 例如&#xff0c;我这里有几组数据&#xff0c;想对他们的整体趋势进行分析。 1、…

四非人的保研之路,2024(2025届)四非计算机的保研经验分享(西南交通、苏大nlp、西电、北邮、山软、山计、电科、厦大等)

文章目录 一、个人背景二、夏令营北京邮电大学CS西南交通大学CS深圳大学CS苏州大学NLP南开大学CS 三、预推免北京邮电大学CS华东师范大学 CS和大数据电子科技大学 CS东北大学 CS厦门大学 信息学院山东大学 CS和SE西安电子科技大学 CS 四、个人经验五、上岸 一、个人背景 学校专…

Megabit兆比特加密货币市场比特币—看涨信号预示着比特币价格上涨

在过去的30天里&#xff0c;比特币[BTC]在经历了2个月的极端波动后&#xff0c;其价格图表出现了显著反弹。事实上&#xff0c;自7月份触及70016美元的高点以来&#xff0c;BTC已经大幅下跌&#xff0c;甚至跌至4.9万美元的当地低点。 Megabit兆比特自成立以来,Megabit凭借用户…

Thingsboard 网关实战 modbus通信 rpc下发控制指令

我们这里说的是Thingsboard通过网关modbus通信接入设备&#xff0c;然后通过rpc下发指令去控制开关信号的设备&#xff0c;不会网关通过modbus接入设备的&#xff0c;可以看我之前的文章&#xff0c;从小白教学。 下面我们就说如何下发rpc开关信号指令 第一步.在modbus配置文…

谷歌外链需要持续发吗?

肯定是需要的&#xff0c;在搜索引擎优化的世界里&#xff0c;外链就像是给你网站的“投票”。搜索引擎会根据这些“投票”来判断你网站的权威性和相关性。要想让这些“投票”真正发挥作用&#xff0c;就必须保持一定的持续性和稳定性。如果你停滞不前&#xff0c;竞争对手可就…

Shopify电商平台的接口对接

Shopify API是一组定义好的函数或方法&#xff0c;通过这些接口&#xff0c;开发者可以与Shopify商店进行数据交互&#xff0c;实现各种功能。比如&#xff0c;你可以在你的应用中通过接口获取商品信息、创建订单、查询物流状态等等。 为什么需要对接Shopify API&#xff1f; …

校企合作 | 宝兰德与西安航空职业技术学院共筑智慧教育新高地

在教育领域持续变革的今天&#xff0c;智慧教育作为提升教学质量、优化资源配置的关键策略&#xff0c;正逐步成为教育发展的主流趋势。近日&#xff0c;西安航空职业技术学院副校长郭红星、信息中心副主任李畅及主任李永锋等领导莅临宝兰德西安研发中心&#xff0c;双方就智慧…

使用PHP获取商品描述API:解锁电商数据的金钥匙

在电子商务领域&#xff0c;获取商品的详细信息对于商家和消费者来说至关重要。taobao作为中国最大的在线购物平台之一&#xff0c;提供了丰富的API接口供开发者使用。其中&#xff0c;商品描述API允许开发者获取商品的详细描述&#xff0c;这对于提升用户体验和优化商品页面至…

sql-labs靶场

第一关&#xff08;get传参&#xff0c;单引号闭合&#xff0c;有回显&#xff0c;无过滤&#xff09; ?id-1 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schemasecurity) -- 第二关&#xff08;get传参&#xff0c;无闭…

如何使用ChatGPT,提示词篇之【编程代码】ChatGPT镜像网站

一、 ChatGPT可以做什么&#xff1f; ChatGPT能做的事情非常多&#xff01;它不仅仅是一个对话AI。以下是一些主要功能&#xff1a; 1. 回答问题&#xff1a;无论是学术问题、技术问题&#xff0c;还是生活琐事&#xff0c;ChatGPT都能提供帮助。 2. 写作助手&#xff1a;可以…

Unity3D 客户端多开

Unity3D 实现客户端多开 客户端多开 最近在做好友聊天系统&#xff0c;为了方便测试&#xff0c;需要再开一个客户端。 简单的方法&#xff0c;就是直接拷贝一个新的项目&#xff0c;但是需要很多时间和占用空间。 查阅了网络资料&#xff0c;发现有一种软链接&#xff0c;…