amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 9191|回复: 34

L3G4200D的焊接和使用问题

[复制链接]
发表于 2011-5-9 18:00:10 | 显示全部楼层 |阅读模式
各位前辈,小弟最近在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个字节。



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


望得到前辈指教!
发表于 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;
}
发表于 2011-5-10 14:14:20 | 显示全部楼层
我们家供应L3G4200D  LSM303DLH 特价现货 样品也可以出售哦
联系电话15889617160 QQ1085092729
 楼主| 发表于 2011-5-10 19:48:04 | 显示全部楼层
谢谢1楼的程序,尽管不是arduino的,今天把芯片调通了,软硬件都没问题了。
发表于 2011-5-20 17:32:22 | 显示全部楼层
回复【3楼】dongfang_a
-----------------------------------------------------------------------

你好,我这两天也在调这个片子,现在有几个地方不大明白。
1.寄存器的配置。使用时需要对其寄存器进行配置吗?需要的话,怎么PDF里没有寄存器的地址说明啊。
2.SUB-ADDRESS的含义。我需要不断的采集他的数据,这个SUB-ADDRESS该怎么写?
谢谢了。
发表于 2011-5-22 17:12:54 | 显示全部楼层
楼主试过用SPI读写吗?
发表于 2011-5-29 21:56:46 | 显示全部楼层
楼主,可否把陀螺仪的相关电路共享一下啊...^_^
发表于 2011-5-30 07:04:43 | 显示全部楼层
回复【5楼】wulax  
-----------------------------------------------------------------------

1L的代码是3线SPI
发表于 2011-6-4 19:06:18 | 显示全部楼层
各位前辈

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



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

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

可是看SDO引脚没有信号输出啊?
发表于 2011-6-8 09:55:16 | 显示全部楼层
供应L3G4200D 50RMB/PCS  LSM303DLH 100RMB/PCS 特价现货
联系电话15889617160 QQ1085092729
发表于 2011-6-23 00:02:33 | 显示全部楼层
楼主能否分享一下你之前错在哪里使自己没有调出来吗?
发表于 2011-8-29 11:26:13 | 显示全部楼层
LZ 能不能共享下电路图,本人也在研究这款芯片!colinedeng@163.com
谢谢!
发表于 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贾生
发表于 2011-10-18 10:08:38 | 显示全部楼层
回复【3楼】dongfang_a  
-----------------------------------------------------------------------
您好,可否提供您的arduino下I2C测试代码给小弟学习下,我现在也在弄这个,目前还没有思路。谢谢!
Email:dingfang1@lenovo.com
发表于 2011-11-9 18:42:58 | 显示全部楼层
楼主热风枪是对着什么方向吹的啊?
发表于 2011-11-28 14:59:12 | 显示全部楼层
回复【10楼】frankshen
-----------------------------------------------------------------------

不知道你解决了没有,我也是按照这个顺序去读写没有数据。也不不知道是芯片坏了,还是时序、电路有问题。我会读0x20地址也读不出来写进去的值
发表于 2011-12-1 14:59:55 | 显示全部楼层
我也是这样焊接的,不过容易把芯片搞坏。
发表于 2011-12-1 15:24:38 | 显示全部楼层
这个要多少钱来着?
发表于 2012-1-10 14:10:11 | 显示全部楼层
mark
发表于 2012-1-11 10:00:35 | 显示全部楼层
我焊这种芯片的时候一半是画板的时候把焊盘向外延伸0.8-1mm,焊的时候先把芯片翻过来,拿锡丝在芯片引脚上镀锡,然后摆正,烙铁头上挂锡加热焊盘固定。然后再各个边的焊盘上锡焊接,原先固定的那边也要把固定的锡刮掉,上点流动性好的新锡。我经常用这种办法焊加速度计,问题不大,偶尔放歪了才需要拿热风枪加热调整
发表于 2012-1-13 22:05:00 | 显示全部楼层
楼主能不能把电路图发一下。
aricc@sohu.com
发表于 2012-1-27 17:59:32 | 显示全部楼层
回复【4楼】show41
-----------------------------------------------------------------------

你去www.alldatasheet.com去下载。我一开始和你情况差不多,没寄存器的索引。
发表于 2012-1-27 18:03:17 | 显示全部楼层
回复【18楼】lxl_lw
-----------------------------------------------------------------------

我一般直接吹芯片,或者四周先吹一下
发表于 2012-2-1 10:40:22 | 显示全部楼层
回复【楼主位】dongfang_a  
-----------------------------------------------------------------------

楼主可否发一下你的寄存器的一些配置?
发表于 2012-2-22 15:14:51 | 显示全部楼层
回复【楼主位】dongfang_a
-----------------------------------------------------------------------

我也想知道是什么原因导致先前调试失败......
发表于 2012-3-5 23:12:51 | 显示全部楼层
学习了,这是模拟SPI.用同志用硬件stm32的SPI调通的没有呀
发表于 2012-3-5 23:58:15 | 显示全部楼层
我的做法是 用热风枪吹 并且加助焊膏  助焊膏有一定的最高温度 能保护芯片不至于太高温度 并且焊锡受热均匀 溶化后能把芯片浮起来 自动对准
发表于 2012-9-6 00:19:16 | 显示全部楼层
Name_006 发表于 2012-3-5 23:58
我的做法是 用热风枪吹 并且加助焊膏  助焊膏有一定的最高温度 能保护芯片不至于太高温度 并且焊锡受热均匀 ...

请问,热风枪温度设置多少比较合适呢/
发表于 2012-9-6 00:51:38 | 显示全部楼层
HYZ1989 发表于 2012-9-6 00:19
请问,热风枪温度设置多少比较合适呢/

一般的芯片 貌似 最高温度 都在 270  到 350 之间  一般热风枪 250度左右就足够了                                                        
发表于 2013-7-10 22:07:32 | 显示全部楼层
这东西的确不容易焊,你为什么不直接买焊好的模块呢?
发表于 2018-4-24 14:33:02 | 显示全部楼层
谢谢L3G4200D资料分享
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 工信部备案:粤ICP备09047143号 公安备案:44190002001997(交互式论坛) )

GMT+8, 2018-10-17 20:58

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表