初级会员
- 积分
- 64
- 金钱
- 64
- 注册时间
- 2017-7-26
- 在线时间
- 23 小时
|
本帖最后由 金大米 于 2017-7-27 09:02 编辑
由于自己能力的原因,一直是网上拿来主义,没有分享过.由于公司的一个新的项目,接触到了DS2780/DS2781库仑计,今天就将他们分享一下吧.这两个芯片的区别就是输入电压的范围不一样.DS2780只能适用于单节锂电池,DS2781可以使用一到两节的锂电池.当我一拿到DS2780的时候也是蛮惊讶的,这个小东西竟然比我的STM8L还贵,TTSOP8的封装还是蛮小的.惊讶过后就是一脸懵逼,网上基本没有DS2780的完整的教程,有的只是为数不多的驱动程序,但基本上程序的参数填写没有说明.在网上蹦跶了好久也没找到好的方法,突然有一天在美信官网闲逛时,看到了一丝丝的希望.首先在官网上下载DS2780的上位机软件,然后在某宝上买一片DS2480B单总线转串口芯片,如下图
注意,没有DS2480B和DS2780的话,上位机软件是打不开的.
然后在软件里按照表填写锂电池参数,我的锂电池没有参数表,就按照DS2780手册里的表,大致的填写参数了.为什么要填写参数,因为有些数据我是不知道如何计算的,手册里也没有提示,只能由软件填写到DS2780里,然后再读出来,这样就能获得参数了.如果换了锂电池,只要打开软件修改参数就行了.初始化程序
void DS2780_Default(void)
{
delay_ms(10);
DS2780_Reset();
/*设置老化系数*/
//95%
Wire_WriteStr(0x14,0x79);
Wire_EEPROM_CopyStr(0x14);
/*设置控制寄存器*/
//BIT 7 Reserved 保留位
//BIT 6 UVEN 0 欠压使能
//BIT 5 PMOD 0 电源模式使能位
//BIT 4 RNAOP 0 读网络地址代码,0x33
//BIT 3 0 保留位
//BIT 2 PSPIO 0 保留位
//BIT 1 PSDQ 0 保留位
//BIT 0 0 保留位
Wire_WriteStr(0x60,0x00);
Wire_EEPROM_CopyStr(0x60);
Wire_WriteStr(0x61,0x04);
Wire_EEPROM_CopyStr(0x61);
/*设置老化容量*/
//容量为1Ah,检流电阻0.02,1*0.02*1000000/6.25=3200=0x0C80
Wire_WriteStr(0x62,0x0C);
Wire_EEPROM_CopyStr(0x62);
Wire_WriteStr(0x63,0x80);
Wire_EEPROM_CopyStr(0x63);
/*设置充电电压*/
//电压为4.173V/19.5mV=214
Wire_WriteStr(0x64,0xD7);
Wire_EEPROM_CopyStr(0x64);
/*设置最小充电电流*/
//最小电流为12.5mA,涓流充电,Rsns为20mR
Wire_WriteStr(0x65,0x05);
Wire_EEPROM_CopyStr(0x65);
/*设置有效空电压*/
//电压为3.315V/19.5mV=170
Wire_WriteStr(0x66,0xAA);
Wire_EEPROM_CopyStr(0x66);
/*设置有效空电流*/
//电流为50mA
Wire_WriteStr(0x67,0x05);
Wire_EEPROM_CopyStr(0x67);
/*设置40度下有效空电量*/
Wire_WriteStr(0x68,0x00);
Wire_EEPROM_CopyStr(0x68);
/*设置取样电阻*/
//1/0.02=50=0x32电阻单位mhos
Wire_WriteStr(0x69,0x32);
Wire_EEPROM_CopyStr(0x69);
/*设置40度下有效电量值*/
Wire_WriteStr(0x6A,0x0C);
Wire_EEPROM_CopyStr(0x6A);
Wire_WriteStr(0x6B,0x80);
Wire_EEPROM_CopyStr(0x6B);
/*设置满电量曲线*/
Wire_WriteStr(0x6C,0x52);
Wire_EEPROM_CopyStr(0x6C);
Wire_WriteStr(0x6D,0x52);
Wire_EEPROM_CopyStr(0x6D);
Wire_WriteStr(0x6E,0xA4);
Wire_EEPROM_CopyStr(0x6E);
Wire_WriteStr(0x6F,0xA4);
Wire_EEPROM_CopyStr(0x6F);
/*设置有效空电量曲线*/
Wire_WriteStr(0x70,0x00);
Wire_EEPROM_CopyStr(0x70);
Wire_WriteStr(0x71,0x62);
Wire_EEPROM_CopyStr(0x71);
Wire_WriteStr(0x72,0x21);
Wire_EEPROM_CopyStr(0x72);
Wire_WriteStr(0x73,0x21);
Wire_EEPROM_CopyStr(0x73);
/*设置待机电量曲线*/
Wire_WriteStr(0x74,0x10);
Wire_EEPROM_CopyStr(0x74);
Wire_WriteStr(0x75,0x21);
Wire_EEPROM_CopyStr(0x75);
Wire_WriteStr(0x76,0x21);
Wire_EEPROM_CopyStr(0x76);
Wire_WriteStr(0x77,0x52);
Wire_EEPROM_CopyStr(0x77);
/*设置电阻增益*/
Wire_WriteStr(0x78,0x04);
Wire_EEPROM_CopyStr(0x78);
Wire_WriteStr(0x79,0x1B);
Wire_EEPROM_CopyStr(0x79);
/*设置检流电阻温度补偿*/
//检流电阻为100ppm
Wire_WriteStr(0x7A,0x03);
Wire_EEPROM_CopyStr(0x7A);
/*设置出厂增益*/
Wire_WriteStr(0x7B,0x04);
Wire_EEPROM_CopyStr(0x7B);
Wire_WriteStr(0x7C,0x1B);
Wire_EEPROM_CopyStr(0x7C);
}
|
|