SMC 发表于 2014-8-31 18:52:54

HMC5983 X、Y、Z轴数据一直为零,怎么解决呢?

我分两次在X宝上共买了6颗HMC5983,采用焊锡膏+风枪吹电路板背面的方法焊接,目前焊接了4颗,除一颗虚焊外,其它三颗都是所有的ID、寄存器读写等操作都没问题,就是XYZ轴读数全部为0!
焊接前两颗芯片时采用320°风枪,网友说高了,剩下的两颗全部270°风枪背面吹,这温度够低了。在配置过程中我加了各种长度的delay读数依然为0.
有的网友说要烘烤芯片,我确实没烘烤,没有烘烤设备,不知道是不是这个原因导致的。
我两次买的芯片表面编号都是:A983 2244 。

csaaa 发表于 2014-8-31 19:00:16

SMC 发表于 2014-8-31 19:36:01

csaaa 发表于 2014-8-31 19:00
我曾经买了10片5883.一个月后才上机测试,结果全部是塑料做的假货。卖家说太晚了不认。 ...

能读出ID吗?
我怀疑我的也是假货,虽然能读ID,能配置寄存器。

sunnyqd 发表于 2014-8-31 20:01:58

按我的经验,可能是烫坏了

SMC 发表于 2014-8-31 20:04:58

sunnyqd 发表于 2014-8-31 20:01
按我的经验,可能是烫坏了

还剩下两颗没焊接,我这回用手把芯片按在电路板上,再来看看,如何还是ID什么都对,就是不出数据,那就是芯片有问题了。
对于能不能按住芯片,我实在没把握,但也只有这个方法了。

sunnyqd 发表于 2014-8-31 20:09:14

SMC 发表于 2014-8-31 20:04
还剩下两颗没焊接,我这回用手把芯片按在电路板上,再来看看,如何还是ID什么都对,就是不出数据,那就是 ...

我以前是用电烙铁焊的,这东西很容易烫坏

SMC 发表于 2014-9-2 00:14:15

第五颗芯片用250°风枪吹,尼玛的数据还是0.

guowei681 发表于 2014-9-2 00:36:27

正面 220度吹

SMC 发表于 2014-9-2 12:48:09

guowei681 发表于 2014-9-2 00:36
正面 220度吹

正面213°吹,还是ID什么都对就是数据为零。
网友们说的lock我也注意到了,也尝试读取之前改变配置或者模式,但数据一直保持0

guowei681 发表于 2014-9-2 12:54:55

国产歪货。。。。。。

SMC 发表于 2014-9-2 13:56:08

guowei681 发表于 2014-9-2 12:54
国产歪货。。。。。。

跟店家说你卖的是“国产歪货”,店家说配货的是新来的,不太懂可能拿错了,然后说再给我补发3颗。难不成他们有正品和假冒之分,不然咋会拿错。

guowei681 发表于 2014-9-2 14:03:54

SMC 发表于 2014-9-2 13:56
跟店家说你卖的是“国产歪货”,店家说配货的是新来的,不太懂可能拿错了,然后说再给我补发3颗。难不成 ...

哈    这个料水很深的 我每次用都要先试2个确保没问题才会批量不管哪个周期的都存在这问题

kaka_1314 发表于 2014-9-2 15:38:25

MARK!!!!!!!

SMC 发表于 2014-9-3 23:57:54

本帖最后由 SMC 于 2014-9-4 11:39 编辑

guowei681 发表于 2014-9-2 14:03
哈    这个料水很深的 我每次用都要先试2个确保没问题才会批量不管哪个周期的都存在这问题 ...

店家新寄给我的焊了一颗还是一模一样的现象。ID对,数据全为零。
我都怀疑是不是我电路图或者程序错了,麻烦你给指导下。
实在不行我就只能换方案了。
u8 HMC5983_Init(void)
{
u8 i = 0, TimeOutCheck=0;
       
u8 HMC5983_Init_Data =
        {
      {0x9C, Configuration_Register_A},
      {0x20, Configuration_Register_B},
      {0x00, Mode_Register},
        };
        for(I=0; I<3; I++)   
        {
                TimeOutCheck+=HMC5983_WriteReg(HMC5983_Init_Data, HMC5983_Init_Data);
                delayms(1);
        }
        /*time out check */
        if(TimeOutCheck!=3*SUCCESS)
                return ERROR;
        return SUCCESS;
}
u8         HMC5983_Read(void)
{
        u8 TimeOutCheck=0,ReadBuf;
        s16 mx,my,mz;
       
        /* Read XYZ Output register */
        TimeOutCheck+=HMC5983_ReadRegs(Data_Output_X_MSB_Register, ReadBuf, 6);
       
       
        mx=ReadBuf<<8 | ReadBuf;   
        mz=ReadBuf<<8 | ReadBuf;
        my=ReadBuf<<8 | ReadBuf;
       
        printf("mx=%d, my=%d, mz=%d\n",mx,my,mz);
       
        if(TimeOutCheck!=SUCCESS)
                return ERROR;
        return SUCCESS;
}

longhandmonkey 发表于 2014-9-4 08:07:15

这颗料水是蛮深的,tb上卖的基本都是赚翻的,所以不在乎多发两颗给你
但是,我用了不少,坏的没遇到过

TimeOutCheck+=HMC5983_WriteReg(HMC5983_Init_Data, HMC5983_Init_Data);
这句没问题吗?二维数组这样一维引用,真的是你想要的结果吗?

SMC 发表于 2014-9-4 11:36:27

本帖最后由 SMC 于 2014-9-4 11:40 编辑

longhandmonkey 发表于 2014-9-4 08:07
这颗料水是蛮深的,tb上卖的基本都是赚翻的,所以不在乎多发两颗给你
但是,我用了不少,坏的没遇到过



你用的时候烘烤过吗?
粘贴的时候显示出错了,我源程序是这样的。怪事了,网页显示的时候居然把二维数组变成了一维数组显示,把小写的 i 改成大写 I 就正确显示了
TimeOutCheck+=HMC5983_WriteReg(HMC5983_Init_Data, HMC5983_Init_Data);

longhandmonkey 发表于 2014-9-4 14:38:45

不烤也没事的,多少有数据的

guowei681 发表于 2014-9-6 09:20:22

楼主正常了?

SMC 发表于 2014-9-6 10:50:39

guowei681 发表于 2014-9-6 09:20
楼主正常了?

店家寄给我的我焊接了一颗还是不行,剩下的两颗已经没信心了。

lxl_lw 发表于 2014-9-6 12:50:09

首先确保程序没问题再说,另外260以下温度猛吹,不会坏

guowei681 发表于 2014-9-7 00:23:42

先考虑程序问题吧

hblf2009 发表于 2014-9-7 00:40:26

买个焊好的模块可以知道是不是程序问题了。担心焊不好可以把芯片反过来,用细铜丝把管脚连出来焊

SMC 发表于 2014-9-9 13:52:38

guowei681 发表于 2014-9-7 00:23
先考虑程序问题吧

总共就三个需要配置的寄存器,手册都快背下来了,我反复检查程序了,没问题的,我决定了,换其它芯片。

SMC 发表于 2014-9-9 13:53:33

hblf2009 发表于 2014-9-7 00:40
买个焊好的模块可以知道是不是程序问题了。担心焊不好可以把芯片反过来,用细铜丝把管脚连出来焊 ...

不折腾了,换其他芯片,重新制版。

wycox 发表于 2016-9-30 11:55:39

跟楼主遇到相似的问题,开始时能正常操作配置、模式、状态以及特征值寄存器,但是数据结果寄存器读取值一直无正常变化。
目前通过调整读写时钟速率和寄存器读写顺序,已得到跟随磁场明显变化的数据结果,待进一步分析数据是否正常。
估计楼主的问题跟我一样,应该还是程序的问题。
页: [1]
查看完整版本: HMC5983 X、Y、Z轴数据一直为零,怎么解决呢?