This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] BQ78350-R1:充电电流值不匹配

Guru**** 2595805 points
Other Parts Discussed in Thread: BQSTUDIO, BQ78350, BQ76940, BQ78350-R1, EV2400

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/828931/bq78350-r1-charging-current-value-mismatch

器件型号:BQ78350-R1
主题中讨论的其他器件:BQSTUDIOBQ78350BQ76940EV2400

您好,

我将 BQ78350用于电池管理系统。 我正在使用 BQStudio 分析 BQ78350寄存器值。 在 AFE 侧、我使用 BQ76940连接到15节锂离子电池。

所有值都匹配(如 BQStudio 中所示)。 当我开始使用直流电源为电池组充电时出现问题。 问题是、当我将 直流源的电流输出保持在0.7mA 至0.9mA 之间时、BQStudio 充电电流读数(寄存器10)显示100mA、而当我保持输出电流大于或等于1A 时、BQStudio 充电电流读数(寄存器10)显示4400mA。 当用于充电的电流小于0.7mA 时、BQStudio 显示0mA。

导致此问题的原因可能是什么?

谢谢   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bhushan:

    测得的电流取决于几个因素。 首先、您的感应电阻器的值是多少? BQ76940通过 ADC 测量感测电阻两端的电压。 当您在 BQ78350中校准电流(请参阅技术参考手册的校准部分)时、它显示的感测电阻值是多少? 是否使用 IPSCALE 功能(仅在 BQ78350-R2固件上提供)?  

    如果您仍然无法识别问题、请发送您的数据闪存设置(.gg 文件)。 这可以从"Data Memory"屏幕中从 BQStudio 导出。

    此致、

    Matt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bhushan:

    您是否能够解决此问题? 如果您需要进一步的帮助、请告诉我或发送您的 gg 文件。

    谢谢、

    Matt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Matt Sunna、您好!

    很抱歉耽误你的回答。 我已经解决了这个问题(这是一个校准问题)、但我遇到 了一个新问题。 我很快会详细介绍这个问题。

    非常感谢。

    此致

    Bhushan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Matt Sunna、

    我使用的是 BQ78350-R1和 BQ76940 (作为 AFE)。 我使用 PIC32MX 通过 SMB 与 BQ78350-R1通信。 我阅读了《BQ78350-R1技术参考》的第17章、在第96页上有一个 SBS 命令的摘要表。 使用上述表格中给出的 SBS 命令、我能够正确读取我的电池组的电池电压、温度、充电/放电电流、周期计数。以下是我用于读取上述参数的函数:-

    unsigned int FrameRad_SMB (unsigned char slave_address、unsigned char registerAdd、unsigned char *数据库、unsigned char Length)


            IdleSMB();                                               //确保模块空闲
           StartBit_SMB ();                                               //Generate Start Condition
           TxSingleByte_SMB (SLAVE_ADDRESS);               //从地址(0x16)+写入位(0)
            IdleSMB();                                         //等待总线空闲
          TxSingleByte_SMB (registerAdd);                       //要从中提取数据的寄存器的发送地址
           IdleSMB();                                        //等待总线空闲
           RestartBit_SMB ();                               //生成重新启动条件
          TxSingleByte_SMB (SLAVE_ADDRESS | 0x01);       //发送带有读取位(1)的从器件地址(0x16)
           IdleSMB();                                         //等待总线空闲
           ReceiveData_SMB (DataByte、Length);               //读取长度字节数
           NotAck_SMB ();                               //Send Not Ack
           StopBit_SMB ();                                       //生成停止

    现在我尝试读取 "SafetyStatus"(SBS 命令= 0x51)。 我使用的技术与读取先前参数的技术相同、但现在我从 BQ78350-R1获得0x04 (显示充电期间的过流、这是错误的、因为我没有为电池组充电、BQ-Studio 在寄存器窗口中显示0x00)。 BQ Studio 使用德州仪器(TI) EV2400模块与 BQ78250-R1连接。然后、我尝试使用 BQ Studio 高级命令 SMB 发送0x51 (我已将此步骤的映像随此帖子附)、并且我还收到了0x04。 然后、我探测 SMBus 并捕获了 BQ Studio 在发送 SBS 命令0x51期间发送的波形。 我在这篇文章中附加了波形图像。 在名为" SMB 的第一个数据包传输"的图像中可以看到、BQ Studio 正在发送 BQ78350-R1的从地址、即0x16、然后注册 SBS 命令、即0x51 (对我来说一切正常)。 现在、在重新启动条件 BQ Studio 发送0x45 (如果我没有错)后、正如我们在名为" SMB 上的第二次传输"的图像中看到的、第二个时钟脉冲看起来失真(为什么?)。 作为响应、BQ78350-R1正在发送2个数据包。 第一个数据包为0x04 (显示在 BQ Studio 高级通信窗口上)、第二个数据包的数据字节为0x01。 BQ78350-R1发送的第二个数据包是什么? 另外,为了响应0x51,BQ78350-R1必须发送4字节的数据包,为什么要发送2个数据包? 此外,没有错误条件,为什么发送0x04 (显示充电过程中的过流)?

    很抱歉、问题太多。

    谢谢

    此致

    Bhushane2e.ti.com/.../SMB_2B00_Advance-Command.rar 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bhushan:

    SafeetyStatus()为4字节,当您使用 ManufacturerBlockAccess 命令执行块读取时,将以小端字节序格式报告。

    Matt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Matt Sunna、

    感谢您的指导。 我将尝试您的建议、并告诉您我的结果。

    此致

    Bhushan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Bhushan。 请告诉我它是如何工作的。

    Matt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Matt Sunna、

    在过去的6小时内、我尝试读取"SafetyStatus"(SBS 命令= 0x51) 、但失败了。 我正在发送0x16、0x00 (ManufacturerAccess()命令)、然后发送0x5100 (SafetyStatus()地址)、然后使用 BQStudio 高级 COMM SMB 实用程序(使用读取块命令中的0x44阻止读取/写入)进行读取。 我没有在 BQStudio 的读取块中获取任何数据。 这是我编写 ManufactureAccess()的部分代码:-

    unsigned int ManufacturerAccess_Write()

     无符号字符错误代码;
     IdleSMB();                                               //确保模块空闲
     StartBit_SMB ();                                     //Generate Start Condition
     TxSingleByte_SMB (0x16);               //从器件添加+写入位
     IdleSMB();                                           //确保传输完成
     错误代码= ACKStatus();                //检查确认位
     TxSingleByte_SMB (0x00);               //transmit ManufactureAccess ()命令(0x00)
     IdleSMB();                                           //确保传输完成
     RestartBit_SMB ();                               //发送重新启动位以重新捕获 SMB
     TxSingleByte_SMB (0x51);                 //发送0x51以获取 SafetyStatus()低字节地址
     IdleSMB();                                           //// 确保传输完成
     RestartBit_SMB ();                           //发送重新启动位以重新捕获 SMB
     TxSingleByte_SMB (0x00);           //发送0x51以获取 SafetyStatus()高字节地址
     IdleSMB();                                    //确保传输完成
     StopBit_SMB ();                       // SMB 帧结束


    您能告诉我我我的方法有什么问题吗?

    感谢您的合作。

    此致

    Bhushan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bhushan:

    我刚刚使用 Advanced Comm 窗口在 EVM 上测试了这一点、它工作正常。 我从 SafetyStatus 上没有高电平位开始、然后我降低电压以使 CUV 位变为高电平、以验证我是否看到了变化:

    在这里、它在"Registers"窗口中得到了确认:

    问题可能是您需要从0x44读取?

    此致、

    Matt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Matt Sunna、

    我们正在开发基于 BQ78350-R1的产品。 在产品中、我们将通过 SMB 使用 PIC32微控制器与 BQ IC 通信。 在最终产品中、我们不使用 BQStudio (仅用于分析 PIC32提供正确的命令并从 BQ IC 接收正确的数据)。 正如我在上一条评论中所说的、我将发送起始位0x16 0x00重新启动0x51重新启动0x00至 PIC32并通过 BQStudio 读取块进行读取、但我无法获取任何数据。

    您能告诉我我我的方法有什么问题吗?

    感谢您的合作。

    此致

    Bhushan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,我又来了

    现在、我正在使用 BQStudio 的高级命令 SMB 工具写入0x00命令和0x51字、并读取 BQ78350-R1使用 PIC32微控制器传输的数据字节(发送0x16和0x23、然后重新启动并发送0x17、然后读取 BQ IC 传输的数据)。 我能够正确读取。 所以、现在我唯一的问题是写入0x16 0x00 0x51 0x00。 即使我使用写入命令(0x16 0x00 0x02 0x51 0x00)发送数据字节的长度、SMB 也会停止工作(主机或从机将 SDA 和 SCL 一直拉低)。

    您能不能建议问题是什么。

    谢谢

    此致

    Bhushan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bhushan、

    您是否正在尝试写入 SafetyStatus? 这是只读的。

    Matt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Matt Sunna、

    不,我不想向 SafetyStatus()写入任何值。 SafeetyAccess()可以通过 ManufactureAccess()或 ManufactureBlockAccess()读取。

    在 ManufactureAccess() Start 位中,0x16+0x00然后是 Restart+0x51,Restart+0x00和 Stop 位被发送到 BQ78350 ,然后发送 Start 位,0x16+0x23,Restart+0x17,然后接收数据字节。

    在 ManufactureBlockAccess()中,发送 START 位+0x16+0x44、Restart+0x02、Restart+0x51、Restart+0x00和 Stop 位,然后发送 Start 位+0x16+0x44、Restart+0x17,然后接收数据字节。

    我正在执行相同的过程、但我根本没有获得数据字节。

    谢谢

    此致

    Bhushan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bhushan:

    我不确定问题是什么。 您能否将示波器或逻辑分析仪连接到 SMBus 并使用 BQStudio 和 MCU 捕获事务? 这可能是调试两者之间不同之处的最佳方法。

    Matt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Matt Sunna、

    我已附加 BQSTudio 和 MCU 传输的信号图像。 请将其与本评论一并附上。

    谢谢

    此致

    Bhushane2e.ti.com/.../2783.Images.rar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bhushan:

    我认为问题在于示波器捕获末尾的起始位。 EV2400图片的起始位波形正确、另一个波形看起来不正确。 你同意吗?

    Matt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Matt Sunna、

    现在,我可以使用我正在读取其他参数(总电池电压、特定电池电压、周期计数)的相同功能正确读取 SafetyStatus()值。 函数代码片段如下所示:-

    unsigned int FrameRad_smb()


            IdleSMB();                                               //确保模块空闲
           StartBit_SMB ();                                               //Generate Start Condition
           TxSingleByte_SMB (0x16);               //Write SLAVE_ADDRESS
            IdleSMB();                                         //等待总线空闲
          TxSingleByte_SMB (0x52);                       //Write 寄存器添加 SafetyStatus()
           IdleSMB();                                        //等待总线空闲
           RestartBit_SMB ();                               //生成重新启动条件
          TxSingleByte_SMB (0x16 | 0x01);       //写入从器件地址+读取位(1)
           IdleSMB();                                         //等待总线空闲
           ReceiveData_SMB (5);               //读取5个字节数
           NotAck_SMB ();                               //Send Not Ack
           StopBit_SMB ();                                       //生成停止

    因此我能够正确读取 safetystatus(),但 我与德州仪器 bq78350-R1第98页的以下段落相混淆
    技术参考资料:-

    ManufacturerAccess()和 ManufacturerBlockAccess()命令可提供各种数据:
    •ManufacturerAccess()通过 Smart Battery 数据集标准提供对数据的访问,
    包括在密封模式下,使用 ManufacturerAccess()写入字和 A 的序列
    ManufacturerData()块读取。
    •ManufacturerBlockAccess()是一个扩展命令,用于访问相同的数据,但是
    对同一命令执行更简单的块写入/读取序列。
    ManufacturerAccess()读取 LifetimeDataBlock1()的示例:
    a.通过 ManufacturerAccess()发送 LifetimeDataBlock1()命令:SMBus 写入字
    0x0060到命令0x00。
    b.命令0x23的 SMBus 读取块:返回块的前两个字节将是数据长度
    接下来的字节将是命令的数据。
    ManufacturerBlockAccess()读取 LifetimeDataBlock1()的示例:
    a.通过 ManufacturerBlockAccess()发送 LifetimeDataBlock1()命令:的 SMBus 写入块
    0x60 + 0x00到命令0x44。 (数据必须以小端字节序发送。)
    b.命令0x44的 SMBus 读取块:返回块的前两个字节将由制造商提供
    访问命令、后跟命令的返回数据。

    我的问题是,如果我可以使用 SBS 命令读取/访问所有寄存器,那么上面一段的内容是什么?

    谢谢

    此致

    Bhushan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    ManufacturerAccess 块读取使您能够以比 SBS 命令更快的速度读取多个数据块。 它还允许您在密封模式下读取数据闪存。

    此致、

    Matt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Matt Sunna、

    感谢您的指导。 它确实有助于获得更多知识。 无论如何,我仍然无法使用制造商访问()读取 safetystatus()。 上次我向您提供了 EV2400 (来自德州仪器(TI)和 BQstudio)以及我的 MCU (PIC32)生成的 SMB 信号的图像。 您说起始位存在问题、但我使用的 SMB 规范与读取其他 SMB 命令时使用的规范相同。

     虽然我可以使用 SMB 命令(不使用 ManufactureAccess())读取 SafetyStatus(),但我的问题是,将来我是否会遇到任何问题,只使用 SMB 命令访问 BQ78350-R1 (正如您所说的,Manufactureaccess()在密封模式下很有用)?

    谢谢

    此致

    Bhushan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bhushan:

    答案实际上取决于您的系统需求。 如果您计划使用 SEAL 功能或需要访问仅可通过 ManufacturureAccess 访问的任何数据闪存信息、则需要使此命令正常工作。  

    我对 Start 位的评论是、它在示波器波形中看起来不正确。 在数据线路变为低电平至少4us 后、时钟必须变为低电平。 我不确定这是不是问题、但它看起来是波形的一个关键差异。  

    此致、

    Matt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Matt Sunna、

    感谢您的指导。 因此,故事的道德意义在于,我无论如何都必须使用 ManufactureAccess()来访问 BQ78350。

    在开始位、我将使用 Microchip 为我的 MCU 提供的标准 SMB 代码。 由于起始位条件在将数据线拉低后自动(在硬件中)下拉时钟线、因此我无法在软件部分更改它。 如果我在前面的陈述中有误、请更正我。

    我怀疑最后一个位(我在两个图像中都用红色墨水环绕)、因为在 PIC32中、最后一个位与时钟脉冲同时处于高电平(意味着微控制器将其视为1)。 即使我的软件部件也不会生成最后一位。 当我再次重新启动此项目时、我将再次发布。

    感谢(无穷大次数)

    此致

    Bhushan