凌力尔特的LTC2943电池电量电压测试芯片有用过的吗

2019-07-21 01:02发布

最近要用凌力尔特的LTC2943芯片测量多节电池的电压.
目前只找到了官网的Arduino版本的DEMO,地址在这: http://www.linear.com.cn/product/LTC2943#code  

请问有人有用STM32F103系列的芯片做过?求相关例程或者资料,全鹰文的手册实在是头痛。。。。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
42条回答
beyond696
1楼-- · 2019-07-21 18:44
可以先用USB转I2C适配器来调试
https://item.taobao.com/item.htm ... amp;id=545506536384
kiang
2楼-- · 2019-07-21 19:17
 精彩回答 2  元偷偷看……
爱奔跑的IT
3楼-- · 2019-07-21 21:23
 精彩回答 2  元偷偷看……
ADS1993
4楼-- · 2019-07-22 03:18
本帖最后由 ADS1993 于 2017-7-7 17:13 编辑
爱奔跑的IT 发表于 2017-7-7 16:44
你好,很感谢你的代码,我的用的是LTC2942器件地址为7bits的0x64,加上以为读写位后也是0XC8,电压寄存器 ...

LTC2943_WriteByte(0x01,0xFC);
你要先根据你的需求 设置  0x01寄存器中的 内容
捕获.PNG
特别是
B[7:6] ADC Mode    这个是 模式选择
默认是 不工作的   [00] Sleep

说明书 说的很详细
最好先确认 初始化 是否成功,先读取  0x01 里面的数值 看看 是不是 默认值  
爱奔跑的IT
5楼-- · 2019-07-22 05:24
ADS1993 发表于 2017-7-7 16:58
LTC2943_WriteByte(0x01,0xFC);
你要先根据你的需求 设置  0x01寄存器中的 内容

你好,我重新设置了一下没能成功,能否发一下您的核心代码借鉴一下,刚开始搞这块不是很懂,谢谢了,shubaoj@foxmail.com
ADS1993
6楼-- · 2019-07-22 10:33
爱奔跑的IT 发表于 2017-7-10 08:56
你好,我重新设置了一下没能成功,能否发一下您的核心代码借鉴一下,刚开始搞这块不是很懂,谢谢了,

1.首先确定 硬件 连接 没问题
DC1812A-3-SCH.png
2.确定 IIC 通讯 初始化 成功,可以用逻辑分析仪 看一下 时序。
我用的 硬件 IIC
先初始化IIC  然后  设置    0x01;    LTC2943_WriteByte(0x01,0xFC);  
然后
double D_DC_V=0.;
D_DC_V   = GET_LTC2943_voltage();
就可以读取数据了
[mw_shl_code=c,true]/************************************************
函数名称 :GET_LTC2943_mAh
功    能 :返回 电池容量
参    数 :
            resistor  : 外接电阻 阻值 单位欧姆
            prescalar : M 的 分频 设置值
返 回 值 : 浮点数 数值 mAh
作    者 :
*************************************************/
float GET_LTC2943_mAh(float resistor, uint16_t prescalar)
// The function converts the 16-bit RAW adc_code to mAh
{
  uint8_t adc_code_M;
  uint8_t adc_code_L;
  uint16_t adc_code;

  float mAh_charge;
  LTC2943_ReadByte(LTC2943_ACCUM_CHARGE_MSB_REG, &adc_code_M);
  LTC2943_ReadByte(LTC2943_ACCUM_CHARGE_LSB_REG, &adc_code_L);
  adc_code  = (((adc_code_M << 8) & 0xFF00)) + ((adc_code_L)&(0X00FF));

  mAh_charge = 1000*(float)(adc_code*LTC2943_CHARGE_lsb*prescalar*50E-3)/(resistor*4096);
  return(mAh_charge);
}
/************************************************
函数名称 : LTC2943_code_to_voltage
功    能 : 返回 电池 电压
参    数 :
返 回 值 : 浮点数 数值  V
作    者 :
*************************************************/
double GET_LTC2943_voltage(void)
// The function converts the 16-bit RAW adc_code to Volts
{
  uint8_t adc_code_M;
  uint8_t adc_code_L;
  uint16_t adc_code;
  double voltage;

  LTC2943_ReadByte(LTC2943_VOLTAGE_MSB_REG , &adc_code_M);
  LTC2943_ReadByte(LTC2943_VOLTAGE_LSB_REG , &adc_code_L);
  adc_code  = (((adc_code_M << 8) & 0xFF00)) + ((adc_code_L)&(0X00FF));

  voltage = ((double)adc_code/(65535))*LTC2943_FULLSCALE_VOLTAGE;

  return(voltage);
}

/************************************************
函数名称 :GET_LTC2943_current
功    能 :返回 当前 电流值
参    数 :
           resistor  : 外接电阻 阻值 单位欧姆
返 回 值 :
作    者 :
*************************************************/
float GET_LTC2943_current(float resistor)
// The function converts the 16-bit RAW adc_code to Amperes
{
  uint8_t adc_code_M;
  uint8_t adc_code_L;
  uint16_t adc_code;
  float current;

  LTC2943_ReadByte(LTC2943_CURRENT_MSB_REG , &adc_code_M);
  LTC2943_ReadByte(LTC2943_CURRENT_LSB_REG , &adc_code_L);
  adc_code  = (((adc_code_M << 8) & 0xFF00)) + ((adc_code_L)&(0X00FF));

  current = (((float)adc_code-32767)/(32767))*((float)(LTC2943_FULLSCALE_CURRENT)/resistor);
  return(current);
}

/************************************************
函数名称 :GET_LTC2943kelvin_temperature
功    能 :返回 当前温度值
参    数 :
返 回 值 :浮点数 数值   K
作    者 :
*************************************************/
float GET_LTC2943kelvin_temperature(void)
// The function converts the 16-bit RAW adc_code to Kelvin
{
  uint8_t adc_code_M;
  uint8_t adc_code_L;
  uint16_t adc_code;
  float temperature;

  LTC2943_ReadByte(LTC2943_TEMPERATURE_MSB_REG   , &adc_code_M);
  LTC2943_ReadByte(LTC2943_TEMPERATURE_LSB_REG   , &adc_code_L);
  adc_code  = (((adc_code_M << 8) & 0xFF00)) + ((adc_code_L)&(0X00FF));


  temperature = adc_code*((float)(LTC2943_FULLSCALE_TEMPERATURE)/65535);
  return(temperature);
}
/************************************************
函数名称 :GET_LTC2943_temperature
功    能 :返回 当前温度值
参    数 :
返 回 值 :浮点数 数值   ℃
作    者 :
*************************************************/
float GET_LTC2943_temperature(void)
// The function converts the 16-bit RAW adc_code to Celcius
{
  uint8_t adc_code_M;
  uint8_t adc_code_L;
  uint16_t adc_code;
  float temperature;

  LTC2943_ReadByte(LTC2943_TEMPERATURE_MSB_REG   , &adc_code_M);
  LTC2943_ReadByte(LTC2943_TEMPERATURE_LSB_REG   , &adc_code_L);
  adc_code  = (((adc_code_M << 8) & 0xFF00)) + ((adc_code_L)&(0X00FF));

  temperature = (adc_code*((float)(LTC2943_FULLSCALE_TEMPERATURE/65535))) - 273.15;

  return(temperature);
}
[/mw_shl_code]
  


一周热门 更多>