Other Parts Discussed in Thread: BQ76PL455A
Dear all,
My name is Miguel and I am trying to make a custom implementation of the BQ76PL455A chip. I have developed several electronic boards and the latest version has already been tested with the battery packs we will be using and connecting to the GUI everything looks to be working, even after connecting several of the boards in daisy cahin (using only the sensing and balancing of 8 cells per board and IC).
I will then be using an STM32 microcontroller to control the whole BMS system including the communications with the chips. I have already looked at the several example codes that are available for this IC, but I have several questions that are not too clear when comparing the code to the datasheet.
1. In the sys_main.c file of the simplest example code you provide, there's the following sequence of functions within the main function
WakePL455(); CommClear(); CommReset(); // The wake tone will awaken any device that is already in shutdown and the pwrdown will shutdown any device // that is already awake. The least number of times to sequence wake and pwrdown will be half the number of // boards to cover the worst case combination of boards already awake or shutdown. for(nDev_ID = 0; nDev_ID < TOTALBOARDS>>1; nDev_ID++) { nSent = WriteReg(nDev_ID, 12, 0x40, 1, FRMWRT_ALL_NR); // send out broadcast pwrdown command delayms(5); //~5ms WakePL455(); delayms(5); //~5ms }
Q.1. Could you develop a bit more on this pwrdown command, why is it needed and why there's also a Wakeup call every time and for every board used in the system?
2. Also, concerning the Wake-Up procedure, it is stated in the datasheet and in some other posts here at E2E that the wakeup pulse should be a 0-1-0 100us pulse. Nevertheless, in the provided code the definition of this function is as follows ...
void WakePL455() { // toggle wake signal gioSetBit(gioPORTA, 0, 0); // assert wake (active low) delayus(10); gioToggleBit(gioPORTA, 0); // deassert wake }
Q.2. ... and I don't understand why. Also, and concerning Q.1. I thought that a single wakeup tone in the bottom most board (master) would be enough to send the wakeup command through the COMM+/- automatically to the slave boards. Is this so?
Q.3. Could you also provide a bit of a summary of all the power states of the IC? I understand the three (SHUTDOWN,IDLE,AWAKE) but given the many possible states that lead to passing from one to another it is quite unclear as an overall picture. Is it possible to pass from SHUTDOWN to AWAKE directly and ignore IDLE? Is IDLE used just while setting up values in the registers upon initialization?
Thank you very much for your help,
Miguel Quero