打印

DS2438电流读数异常问题

[复制链接]
1525|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
系统上电后,读取电压,电流,温度等数据时,电压,温度的数据正常,电流读数03FE(不带负载情况下),没带负载,但是读出来的电流值确是满的,通过万用表测量采样电阻两端的电压,发现采用电阻两端电压正常,电压读数为0。求解。在上一版本中Vsens+,Vsens-跟图示是想反的,即图示的Vsens+实际是Vsens-;因为上板中通过割线,然后飞线,电流读数正常,这版中按照飞线的方式调换下 情况依旧,请大师指点。

DS2438.jpg (149.14 KB )

DS2438

DS2438

相关帖子

沙发
山之彼端|  楼主 | 2015-11-13 09:18 | 只看该作者
电池输入端是 72+ 跟J6——BAT-输入端;电池组输出+:72V+经过一个继电器输出,电池组输出- 为J7-电池包- 输出端

使用特权

评论回复
板凳
beef~| | 2015-11-14 16:29 | 只看该作者
你说的上版本中Vsens+,Vsens-跟图示是相反的是什么意思    以前的ds2438跟现在的不一样么

使用特权

评论回复
地板
山之彼端|  楼主 | 2015-11-17 16:03 | 只看该作者
就是原先的Vsens+接Vsens-,Vsens-接Vsens+

使用特权

评论回复
5
山之彼端|  楼主 | 2015-11-18 08:01 | 只看该作者
经过测试,输出不带载,电流输出异常,带载之后 随着负载增大,电流增大,电流输出正常。目前就是要解决空载情况下电流不为0的情况

使用特权

评论回复
6
beef~| | 2015-11-18 13:14 | 只看该作者
山之彼端 发表于 2015-11-17 16:03
就是原先的Vsens+接Vsens-,Vsens-接Vsens+

官网上  以及所有数据资料中  2引脚都是Vsens+  3引脚都是Vsens-啊   

使用特权

评论回复
7
beef~| | 2015-11-18 13:16 | 只看该作者
山之彼端 发表于 2015-11-18 08:01
经过测试,输出不带载,电流输出异常,带载之后 随着负载增大,电流增大,电流输出正常。目前就是要解决空 ...

我也出现这种问题  好像是需要写一个校准电流的程序吧

使用特权

评论回复
8
山之彼端|  楼主 | 2015-11-19 09:28 | 只看该作者
beef~ 发表于 2015-11-18 13:14
官网上  以及所有数据资料中  2引脚都是Vsens+  3引脚都是Vsens-啊

一开始参照这个做的,总觉得电流走向有点问题,后来参考datasheet做,按照理解将+,-对换了

1题.jpg (57.06 KB )

1题.jpg

使用特权

评论回复
9
山之彼端|  楼主 | 2015-11-19 09:29 | 只看该作者
beef~ 发表于 2015-11-18 13:16
我也出现这种问题  好像是需要写一个校准电流的程序吧

你后来有解决吗?

使用特权

评论回复
10
beef~| | 2015-11-19 20:01 | 只看该作者

//校准电流的偏移量寄存器1
/*void Read_Temperature1(void)
{    unsigned char i,j;
unsigned char ds2438[9];     
      int   x,y;
     union{
         unsigned char  c[2];
         int x;
         }temp;
i=owreset();
while(i==0x80);
write_byte(0xCC); // Skip ROM
        write_byte(0x4E); // Write Scratchpad
        write_byte(0x00); // Write Page
        write_byte(0x00); // Write Cortrol
i=owreset();
        while(i==0x80);
        write_byte(0xCC); // Skip ROM
        write_byte(0xBE); // Read Scratchpad
        write_byte(0x00); // Read 0th Page
i=owreset();
        while(i==0x80);
        write_byte(0xCC); // Skip ROM
        write_byte(0x48); // Read Scratch Pad to Memory  
        write_byte(0x00); // Copy 0th Page  
delay1ms(30);
i=owreset();
while(i==0x80);
write_byte(0xCC); // Skip ROM
        write_byte(0x4E); // Write Scratchpad
        write_byte(0x01); // Write Page
        write_byte(0x00); // Write Cortrol
write_byte(0x00); // Write Cortrol
write_byte(0x00); // Write Cortrol
write_byte(0x00); // Write Cortrol
write_byte(0x00); // Write Cortrol
write_byte(0x00); // Write Cortrol
write_byte(0x00); // Write Cortrol
write_byte(0x00); // Write Cortrol
i=owreset();
while(i==0x80);   
        write_byte(0xCC); // Skip ROM
        write_byte(0xBE); // Read Scratch Pad
        write_byte(0x01);
i=owreset();
        while(i==0x80);
        write_byte(0xCC); // Skip ROM
        write_byte(0x48); // Read Scratch Pad to Memory  
        write_byte(0x01); // Copy 0th Page  
delay1ms(30);
i=owreset();
while(i==0x80);   
        write_byte(0xCC); // Skip ROM
        write_byte(0xBE); // Read Scratch Pad
        write_byte(0x01);
       for(j=0;j<9;j++)
         {
   ds2438[j]=read_byte();
          }

}
//////////////////////////////////////////////////////////////////////////////////////
//校准电流的偏移量寄存器2
void Read_Temperature2(void)
{    unsigned char i,j;
unsigned char ds2438[9];     
      int   x,y;
     union{
         unsigned char  c[2];
         int x;
         }temp;
initcommand();
i=owreset();
while(i==0x80);   
        write_byte(0xCC); // Skip ROM
        write_byte(0xB8); // Read Scratch Pad
        write_byte(0x00);
i=owreset();
while(i==0x80);   
         write_byte(0xCC); // Skip ROM
         write_byte(0xBE); // Read Scratch Pad
         write_byte(0x00);
         for(j=0;j<9;j++)
         {
   ds2438[j]=read_byte();
          }
   temp.c[1]=ds2438[5];
           temp.c[0]=ds2438[6];
           i=owreset();
   while(i==0x80);
           write_byte(0xCC); // Skip ROM
           write_byte(0x4E); // Read Scratch Pad to Memory  
           write_byte(0x00); // Copy 0th Page  
       write_byte(0x00); // Copy 0th Page
   i=owreset();
   while(i==0x80);   
           write_byte(0xCC); // Skip ROM
           write_byte(0xBE); // Read Scratch Pad
           write_byte(0x00);
   i=owreset();
           while(i==0x80);
           write_byte(0xCC); // Skip ROM
           write_byte(0x48); // Read Scratch Pad to Memory  
           write_byte(0x00); // Copy 0th Page  
   delay1ms(30);
   i=owreset();
           while(i==0x80);
           write_byte(0xCC); // Skip ROM
           write_byte(0x4E); // Read Scratch Pad to Memory  
           write_byte(0x01); // Copy 0th Page  
   write_byte(0x00); // Copy 0th Page  
   write_byte(0x00); // Copy 0th Page
   write_byte(0x00); // Copy 0th Page  
   write_byte(0x00); // Copy 0th Page  
   write_byte(0x00); // Copy 0th Page  
   write_byte(0xFF); // Copy 0th Page  
   write_byte(0xFF); // Copy 0th Page   
   write_byte(0x00); // Copy 0th Page
   i=owreset();
   while(i==0x80);   
           write_byte(0xCC); // Skip ROM
           write_byte(0xBE); // Read Scratch Pad
           write_byte(0x01);
   i=owreset();
           while(i==0x80);
           write_byte(0xCC); // Skip ROM
   write_byte(0x48); // Read Scratch Pad to Memory  
           write_byte(0x01); // Copy 0th Page
   delay1ms(30);  
   i=owreset();
   while(i==0x80);   
           write_byte(0xCC); // Skip ROM
           write_byte(0xBE); // Read Scratch Pad
           write_byte(0x01);
           for(j=0;j<9;j++)
           {
     ds2438[j]=read_byte();
           }
     initcommand();
}*/

使用特权

评论回复
11
beef~| | 2015-11-19 20:04 | 只看该作者

我按照你的方式  把sens-和sens+调换了一下  发现最后输出电流一直为0   给你发的校准程序你可以试用一下   因为电流没出来过正确的电流   所以我不知道对不对   在调换之前   我测得的电流一直是0xFFFE

使用特权

评论回复
12
beef~| | 2015-11-19 20:07 | 只看该作者
既然我们要做的这么类似   不如加个好友可好 方便交流  我的qq是1983088265

使用特权

评论回复
13
山之彼端|  楼主 | 2015-11-20 09:00 | 只看该作者
看来理解有误 Vsens+跟Vsens-连接有误,电池放电的时候应该是负电流,电池充电的时候应该是正电流

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

21

帖子

1

粉丝