我英语不好,很多专业术语第一次接触,写博客来记录一下,顺便督促自己。
首先是BQ769X0的特性
基本的BQ769X0的PIN脚
示意图
电池连接方法
官方给的接线示意图。
可以看到VC5-VC0,VC5接的是正极,VC0-VC4接的电池负极
根据数据手册其他地方的short的用法,这个short的意思是 no connect 就是NC 不接。
看个大概吧 原装电池盒被我手贱 拆坏了
BQ76930内置三个副系统(Subsystems)
一、测量系统(The Measurement subsystem)
核心作用是 数字化(digitize)每个电池的电压(cell voltages)和电池包的电流(pack current),外部热敏电阻温度(external thermistor temperature), 和内部核心温度(internal die temperature)
二、保护系统(The Protection subsystem)
如果主机无法对某个错误事件做出及时处理,该系统就会提供最基础的或者第二层的硬件保护措施来支持电池的失效模式与影响分析(FMEA,Failure Mode and Effects Analysis)。如果出现错误,会触发看门狗事件,必须由主机来重置恢复正常。在错误事件中,ALERT PIN 会不停翻转。
错误包括:过压(OV) 欠压(UV) 放电过流(OCD) 放电短路(SCD)
三、控制系统(The Control subsystem)
实行一些有用的包特性。例如:充电放电低侧NCH FET驱动,电池平衡驱动,警告信号输出,低压差线性稳压驱动,等等。
两个基本芯片模式。船模式(SHIP Mode) 普通模式(NORMAL Mode)
普通模式有所有操作模组,芯片会达到最高功耗。OCD和SCD使能,且不可取消。ADC和CC由主控设置,默认打开。
船模式是最基本和最省电的模式。每次安装电池包或者复位事件(POR(Power On Reset)EVENT)bq芯片自动进入船模式中。在船模式中,最少的模块被打开,包括VSTUP和初级BOOT检测(就是最基本的板载和复位)。
boot detector. Waking from SHIP mode to NORMAL mode requires pulling the TS1 pin greater than
VBOOT, which triggers the device boot-up sequence
从船模式转换到普通模式需要给TS1 PIN 大于 VBOOT的电平。大于1V,stm32和51的GPIO绝对没问题。TS1也是内部热敏电阻的一个接口。
从普通模式转换到船模式
首先,[SHUT_A] and [SHUT_B] 应该保证都是0,其实以下的命令就是关闭命令,本质上是bq769x0重启进入船模式。
14位的ADC
用于测量电池的电压和温度。名义上的范围是0-6.275V,最小量程位382uV。
使能:
为了使能ADC,[ADC_EN] bit in the SYS_CTRL1 register must be set.
使能后,过压和欠压保护启用。该位在设备进入普通模式的时候自动设置。
每5个电池,如果此时没有被平衡,测量的窗口期为50ms,完整的数据更新要250ms。BQ769X0测量是每5个测量。50ms的窗口期,据数据手册所说,是为了消除嘈杂电机环境的影响。数据存储在内置的EEPROM中。
计算公式
示例:
GAIN是最小量程382uV, OFFSET偏移是30mV
注意!!!
刚从船模式转换到普通模式需要等一会才能读取电压数据。
使用微控制器来实时校准
ADC在出厂的时候进行过校准:
bq769x0的模拟前端 (AFE) 是有主要的包保护和基本的检测应用的。某些系统可能需要更精准的表现。感觉跟我们初学者没有关系.......
就是再用另外一套ADC测量电压,跟BQ的电压做对比校准。
16位的CC(coulomb counter,库仑计数器)
本质上是靠一个16位的ADC来测量电压,配合感应电阻完成测量电流和电量。
RSNS为感应电阻,与电池电路串联的,mΩ级,我买的LLY电子科技的开发板这边是4mΩ。
测量的周期是250ms
测量的电压的公式:有正负之分,充放电的方向不一样。中间有一段不在计算范围内。
该功能可以选择一直打开或者打开一次。
使能:
在一直打开的模式中,数据每250ms刷新,并反转ALERT PIN。需 set [CC_EN] = 1.
打开一次,需 ensure [CC_EN] = 0 and set [CC_ONESHOT] = 1.
外部热敏电阻
官方公式:汗流浃背了,连单位都没标,靠猜。3.3应该是V,Vtsx单位是uV要转换,最后电阻给是欧姆。10000刚好对应10kΩ。这个Rts应该写成10K* VTSX / (3.3-VTSX),写成整数乘以分数的形式才好理解。
然后这是算出此时的热敏电阻的阻值,还要靠公示算出此时的温度。相应的热敏电阻的数据手册,10kΩ的NTC应该都差不多,具有普遍性。
这个B很重要,我单片机是在25°以下工作的,现在是3月份,....也算作3950K吧。
这里的T要按单位K来计算。
公式转换示例:
注意:log运算在c语言的<math.h>中,log()底为e,为ln。log10() 的底是10。
使能方法
摸具温度检测器
注意:当你切换温度检测器的源(外部或者内部)的时候,要有2s延迟。
使能:
公式:
没错,你没有看错是除以0.0042相当于乘以238,最后温度的单位是开尔文。最后单位是开尔文,但是非要写个25摄氏度........
16位的包电压
举了一个例子,怎么将16位的ADC值转化为电压。可是前面14位的不是已经教了吗,而且16位ADC不是在CC那里,测感应电阻电压吗?给的这个例子的VBAT还是供电电压,有什么意义呢......
保护系统
BQ出厂自带一定参数的保护,但是你不应该把这个当作你唯一的保护措施。官方建议把这当成你的BMS系统的第二道防线。第一道防线,是你自己的客制化防线。在普通系统中,通过上述CC块,以32KHZ的采样模拟频率,来检测OCD和SCD。
OV和UV出厂自带一个初始的阈值,在BQ进入普通模式时自动载入(RAM),这个值你也可以自定义,参照上述14位 ADC计算电压的方法,进行反推,但是你只能自定义其中的8位。因为这个值存在RAM,不能掉电保存。
注意:为了有灵活的电池连接数量,如果某个电池的电压低于最小检测值(不接,或者电池出问题电压太短),BQ就会将其短路。
减少测试调试的时间
通过设置 SYS_CTRL2 寄存器 中的 [DELAY_DIS] 可以忽略OV/UV的错误保护定时器,允许错误情况在200ms内被注册。数据手册寄存器处的描述,是取消OV, UV, OCD, 和 SCD 的延时,忽略它们的延时电路,但是任然有250ms的延时。
控制系统
示意图
DSG:控制放电的场效应管的栅极。 CHG:控制充电的场效应管的栅极。
在发生错误后,会被自动置为0,但是它不会自己置为1,需要主控操作。
在发生错误后,主控需要主动清除 SYS_STAT 寄存器的一些位。某些错误,比如OV和UV,任然存在,会马上重新进入错误态。
电池平衡
bq76920很好的支持内部和外部消极的电池平衡选项。bq76930和40推荐使用外部电池平衡。估计是因为30 40支持的电池数量更多,用内部平衡的方法,没有20稳定。主控对电池平衡有精确的控制是积极的表现。每个bq设备提供
如果用内部的电流平衡,每个电池最高只能平衡50mA。如果你用外部平衡方案,可以平衡更多!
使能
VC1–VC0的第一节电池,使能 CELLBAL1 寄存器中的 [CB1] 以此类推。
多个电池可以同时平衡。积极的用户可以考虑一下。相邻的电池不能同时的平衡,这可能会造成电池PIN脚超过最大值,外部方案也不建议。
如果你使用内部方案,注意不要超过电池整体掉电速度。
每个组内相邻的不能同时平衡,不同组可以。
电池平衡任务占每250ms的百分之70,因为一部分时间被ADC用来测量普通电压。
如果 [ADC_EN] =1 OV和UV保护不会被电池平衡测率影响,ADC会暂时挂起平衡任务。这样保证此时,OV和UV保护不会突然被触发,或者错过OV/UV事件。
注意:以下事件发生后,平衡策略会清除,需要主控重新开启。
DEVICE_XREADY是内部发生错误的标志
警报
ALERT PIN 是可以通过GPIO连接的高电平中断触发器。它是 SYS_STAT 寄存器所有位的或值。想要清除该PIN,需要 写1 来清除寄存器中对应的位。这样会自动清除 ALERT pin 。里面应该用到了非门。
例子:
BQ连接了第二个过压保护IC,当ALERT pin 被强制拉高,[OVRD_ALERT]中断位会置1,进而自动关闭CHG和DSG。设备无法识别ALERT信号,当其被其它情况拉高。(多个错误事件近期发生,只会识别第一个)
注意 ALERT PIN 没有设置消抖,注意保护该PIN收干扰,或者其它寄生性瞬变。
输出LDO
就是输出一个低电压的电平,可以给连接的组件供电,比如MCU和LED,2.5V或者3.3V的选择在EEPROM中配置。
I2C通信
bq769x0与MCU的接口是标准100KHZ的接口。BQ的设备地址是出厂自带的,需要查此处
例如,我的芯片是BQ7693003DBT,i2c地址为0x08
注意:地址是7位,加上读1,写0后应该为0x11或0x10
如果CRC校验失败,bq769x0会停止I2C的接收。CRC校验是可选的,不写不收也行。
CRC运算:
写:
读: