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.

Calibration for bq30z554-r1

Other Parts Discussed in Thread: BQ30Z554-R1

I am working on writing a program to calibrate by bq30z554-r1 design.  I have successfully calibrated my 3 cell voltages, PACK voltage, BAT voltage, and CC Offset.  I am following the SLUUA79 instructions in section 2.  I'm having trouble with the Board Offset calibration.  The equation given in the TRM is

Board Offset = (ADCcc - CCoffset)*CoulombCounterOffsetSamples

I am reading the following values (taking the average of 20 samples for ADCcc):

ADCcc = -112

CCoffset = -7104

CoulombCounterOffsetSamples = 64

This gives me a Board Offset value of 447,488 which is larger than the 2Byte size of the flash value.  I have verified the CCoffset and CouloumbCounterOffsetSamples using the bqEasy software.  I've used the bqEasy software to enter calibration mode, turn on the ADC out (0xF082), and read the ADC values through ManufacturerData.  This gives me the same ADCcc value as my code is giving me.

Am I doing something wrong, or is the equation incorrect?  The bqEasy software is able to calibrate the board offset properly.

Thanks for your help!

  • Kyle
    Are these the raw values that you read from the pack or have you converted them to decimal. e.g Did you rad -112 for the ADCcc or did you read FF90? Please provide the raw numbers and I will check the calculations.

    Tom
  • ADCcc = 0xFF90

    CCoffset = 0xE440

    CoulombCounterOffsetSamples = 0x40

  • Kyle

    I worked with the equations and here is what I found.

    Board Offset = ADCcc - CCoffset / CCoffset samples) * CCoffset samples

    for your case.

    Board Offset = (FF90 - E440/40) * 40 = FFC0 = -64 in decimal


    Try entering -64 and see whether that works.

    Tom

  • Yes. That equation works, and I've verified it with the Board Offset value that the bqEasy software writes to flash during its calibration.

    My next problem with my calibration routine is the temperature calibration for the internal temperature as well as TS1 and TS2. In SLUUA79 section 2.7, it says to "Read the reported temperature from Temperatures()". Does this mean that I need to read SBScommand 0x08? This command returns a Word, so it can't contain the Tint, TS1, and TS2 values.

    The TRM does not tell me to use the calibration mode values, but I tried reading those values anyway to see if that would work. I read the values returned on ManufacturerData() when the unit is in CAL mode, but the Internal temperature sensor value seems to decrease as temperature increases (I put a heat gun over the IC). What am I missing? Here are the raw values I am reading:

    Internal Temp Offset = 0x41
    TINT (taken from the calibration mode return) = 0x417B
    TEMPtint = ambient = 220 (22degC)
  • Any ideas for temperature calibration. The bqEV software seems to do it correctly, I just dont know how.
  • The temperature calibration procedure is:

    • Read the temperatures with MAC command 0x72.
    • Convert the value to decimal.
    • Divide the value by 10.
    • Convert the value from Kelvin to Celsius. This will be the TSx value.
    • Read the TSx offset(old) from the data flash.
    • Convert this value to decimal. This will be the TSxoffset(old) value.

    • The TEMP(TSx) is the known reference temperature. 


    Assume that the TEMP(Tsx) is 25 C.

    The TSxoffset(old) is 0 from the data flash.

    Read the TSx from MAC 73. Read 0BB3, which is 26.35 C.

    TSx(offset) = 25 - 26.35+0 = -1.35.

    Multiple this number by 10 and convert to HEX. (F3)

    Write this number to the TSx offset(old) in the data flash.

  • Thanks, Tom. That cleared everything up for me!