dongfang_a 发表于 2011-5-9 18:00:10

L3G4200D的焊接和使用问题

各位前辈,小弟最近在taobao上,下手买了一块L3G4200D和配套的测试板,贴片零件要自己焊上去。其他零件都搞定了,唯独这个LGA-16的L3G4200D处理不好。


硬件安装上,L3G4200D的所有脚都在片子下,没法直接焊接。目前我的解决方法是在测试板和芯片背后分别上锡,然后对准,用热风枪吹。但是这测试板和芯片两侧的焊点似乎不能存很多焊锡,因此非常怀疑吹上后,有虚焊,但焊脚在芯片下方,也没法检测。


接线上,我只接了测试板的SDA、SCL以及VDD GND。测试板上CS已经是上拉了,Vdd_IO接VDD。


软件上,我目前用Arduino nano(atmega 328)来驱动这款芯片,用Wire库,但程序跑不通,Wire.available() 始终= 0。


目前有几点不明:
1.SA0该怎么接。DR和INT应该不是必须接的吧。
2.通信上,淘宝卖家给的C51例程中I2C有ACK函数:


/********************************************************************
应答子函数
函数原型:   void Ack_I2c(bit a);
功能:       主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)
********************************************************************/
void Ack_I2c(bit a)
{

   if(a==0)SDA=0;            /*在此发出应答或非应答信号 */
         else SDA=1;
   Delay1us(3);      
   SCL=1;

   Delay1us(5);                     /*时钟低电平周期大于4μs*/
   
   SCL=0;                      /*清时钟线,钳住I2C总线以便继续接收*/
   Delay1us(2);   
}


但是Arduino 的Wire库里,没有对应的函数,反而多了一个Wire.available()这个c51例程里没有的函数。这样一来,我就不知道怎么移植代码了。



之前,我在调试mma7455的i2c中,Wire库很正常,但mma7455的i2c操作都是读取单字节信息。这次的L3G4200D要一次读6个字节。



现在硬件问题和软件问题交迫。测试非常困难。


望得到前辈指教!

Clinging 发表于 2011-5-10 08:34:54

#include "L3G4200D.h"

#define ClrGyCS()       GPIOC->BSRR = 1 << (16 + 3)
#define SetGyCS()       GPIOC->BSRR = 1 << 3
#define ClrGyCK()       GPIOA->BSRR = 1 << (16 + 1)
#define SetGyCK()       GPIOA->BSRR = 1 << 1
#define ClrGyIO()    GPIOA->BSRR = 1 << (16 + 0)
#define SetGyIO()    GPIOA->BSRR = 1 << 0
#define StateGyIO()       (GPIOA->IDR & 1)

extern void Delay_us(INT32U cnt);

void L3G4200DInit(void)
{
        SetGyCS();
        SetGyCK();
        Delay_us(100000);

        ClrGyCS();
        L3G4200DWriteByte(0x60);
        L3G4200DWriteByte(0xEF);
        L3G4200DWriteByte(0x00);
        L3G4200DWriteByte(0x00);
        L3G4200DWriteByte(0xD1);
        L3G4200DWriteByte(0x00);
        SetGyCS();
}

void L3G4200DReadData(INT16S *px, INT16S *py, INT16S *pz)
{
        ClrGyCS();
        L3G4200DWriteByte(0xE8);
        *px= (INT16U)L3G4200DReadByte() << 8;
        *px |= (INT16U)L3G4200DReadByte();
        *py= (INT16U)L3G4200DReadByte() << 8;
        *py |= (INT16U)L3G4200DReadByte();
        *pz= (INT16U)L3G4200DReadByte() << 8;
        *pz |= (INT16U)L3G4200DReadByte();
        SetGyCS();       
}

void L3G4200DWriteByte(INT8U dat)
{
        INT8U i;

        Delay_us(1);
        for(i = 0; i < 8; i++) {
                if(dat & 0x80) SetGyIO();
                else                    ClrGyIO();
                dat <<= 1;
                Delay_us(1);
                ClrGyCK();
                Delay_us(1);
                SetGyCK();
        }
        Delay_us(1);
}

INT8U L3G4200DReadByte(void)
{
        INT8U i,dat = 0;
       
        SetGyIO();
        for(i = 0; i < 8; i++) {
                Delay_us(1);
                ClrGyCK();
                Delay_us(1);
                dat <<= 1;
                if(StateGyIO()) dat++;
                SetGyCK();
        }
        Delay_us(1);

        return dat;
}

anyever 发表于 2011-5-10 14:14:20

我们家供应L3G4200DLSM303DLH 特价现货 样品也可以出售哦
联系电话15889617160 QQ1085092729

dongfang_a 发表于 2011-5-10 19:48:04

谢谢1楼的程序,尽管不是arduino的,今天把芯片调通了,软硬件都没问题了。

show41 发表于 2011-5-20 17:32:22

回复【3楼】dongfang_a
-----------------------------------------------------------------------

你好,我这两天也在调这个片子,现在有几个地方不大明白。
1.寄存器的配置。使用时需要对其寄存器进行配置吗?需要的话,怎么PDF里没有寄存器的地址说明啊。
2.SUB-ADDRESS的含义。我需要不断的采集他的数据,这个SUB-ADDRESS该怎么写?
谢谢了。

wulax 发表于 2011-5-22 17:12:54

楼主试过用SPI读写吗?

lxl_lw 发表于 2011-5-29 21:56:46

楼主,可否把陀螺仪的相关电路共享一下啊...^_^

Clinging 发表于 2011-5-30 07:04:43

回复【5楼】wulax
-----------------------------------------------------------------------

1L的代码是3线SPI

frankshen 发表于 2011-6-4 19:06:18

各位前辈

请问下让L3G4200D是不是给控制寄存器ctrl——reg1 赋值 0x47然后读值就可以 ?



我是 先发地址 0x20再发数据 0x47    ; 这里设置ctrl_reg1 = 0x47

再发地址 0xa8   读数据               ;这里读X轴的低位

可是看SDO引脚没有信号输出啊?

anyever 发表于 2011-6-8 09:55:16

供应L3G4200D 50RMB/PCSLSM303DLH 100RMB/PCS 特价现货
联系电话15889617160 QQ1085092729

786186278 发表于 2011-6-23 00:02:33

楼主能否分享一下你之前错在哪里使自己没有调出来吗?

colinedeng 发表于 2011-8-29 11:26:13

LZ 能不能共享下电路图,本人也在研究这款芯片!colinedeng@163.com
谢谢!

anyever 发表于 2011-9-22 11:08:36

L3G4200D    iPhone三轴陀螺仪    买芯片送PCB(图)调试程序
L3G4200D已经满刻度的± 250 / ± 500 / ± 2000 DPS,是能够测量用户可选择的带宽率。这些伟大的游戏和虚拟现实的输入设备,GPS导航系统和机器人技术的工作 。

LSM303DLH   iPhone三轴加速度计买芯片送PCB(图)调试程序
LSM303DLH是一个三轴加速度计与三轴磁传感器相结合。该传感器具有一个易于使用的I2C接口。电源电压应在2.5和3.3 VDC之间
热线15889617160 QQ108592729 anyever@walsoon.com贾生

Farid 发表于 2011-10-18 10:08:38

回复【3楼】dongfang_a
-----------------------------------------------------------------------
您好,可否提供您的arduino下I2C测试代码给小弟学习下,我现在也在弄这个,目前还没有思路。谢谢!
Email:dingfang1@lenovo.com

lxl_lw 发表于 2011-11-9 18:42:58

楼主热风枪是对着什么方向吹的啊?

zzx499 发表于 2011-11-28 14:59:12

回复【10楼】frankshen
-----------------------------------------------------------------------

不知道你解决了没有,我也是按照这个顺序去读写没有数据。也不不知道是芯片坏了,还是时序、电路有问题。我会读0x20地址也读不出来写进去的值

xld007 发表于 2011-12-1 14:59:55

我也是这样焊接的,不过容易把芯片搞坏。

cyberjok 发表于 2011-12-1 15:24:38

这个要多少钱来着?

n104391455 发表于 2012-1-10 14:10:11

mark

HuNB 发表于 2012-1-11 10:00:35

我焊这种芯片的时候一半是画板的时候把焊盘向外延伸0.8-1mm,焊的时候先把芯片翻过来,拿锡丝在芯片引脚上镀锡,然后摆正,烙铁头上挂锡加热焊盘固定。然后再各个边的焊盘上锡焊接,原先固定的那边也要把固定的锡刮掉,上点流动性好的新锡。我经常用这种办法焊加速度计,问题不大,偶尔放歪了才需要拿热风枪加热调整

aricc 发表于 2012-1-13 22:05:00

楼主能不能把电路图发一下。
aricc@sohu.com

MrLCL 发表于 2012-1-27 17:59:32

回复【4楼】show41
-----------------------------------------------------------------------

你去www.alldatasheet.com去下载。我一开始和你情况差不多,没寄存器的索引。

MrLCL 发表于 2012-1-27 18:03:17

回复【18楼】lxl_lw
-----------------------------------------------------------------------

我一般直接吹芯片,或者四周先吹一下

Farid 发表于 2012-2-1 10:40:22

回复【楼主位】dongfang_a
-----------------------------------------------------------------------

楼主可否发一下你的寄存器的一些配置?

FLYCAIBIRD 发表于 2012-2-22 15:14:51

回复【楼主位】dongfang_a
-----------------------------------------------------------------------

我也想知道是什么原因导致先前调试失败......./emotion/em007.gif

240671900 发表于 2012-3-5 23:12:51

学习了,这是模拟SPI.用同志用硬件stm32的SPI调通的没有呀

Name_006 发表于 2012-3-5 23:58:15

我的做法是 用热风枪吹 并且加助焊膏助焊膏有一定的最高温度 能保护芯片不至于太高温度 并且焊锡受热均匀 溶化后能把芯片浮起来 自动对准

HYZ1989 发表于 2012-9-6 00:19:16

Name_006 发表于 2012-3-5 23:58 static/image/common/back.gif
我的做法是 用热风枪吹 并且加助焊膏助焊膏有一定的最高温度 能保护芯片不至于太高温度 并且焊锡受热均匀 ...

请问,热风枪温度设置多少比较合适呢/

Name_006 发表于 2012-9-6 00:51:38

HYZ1989 发表于 2012-9-6 00:19 static/image/common/back.gif
请问,热风枪温度设置多少比较合适呢/

一般的芯片 貌似 最高温度 都在 270到 350 之间一般热风枪 250度左右就足够了                                                      

paul_guo 发表于 2013-7-10 22:07:32

这东西的确不容易焊,你为什么不直接买焊好的模块呢?

zibouv 发表于 2018-4-24 14:33:02

谢谢L3G4200D资料分享
页: [1]
查看完整版本: L3G4200D的焊接和使用问题