如何使用LMP91000

Other Parts Discussed in Thread: LMP91000

各位前辈大家好,小弟正在做一个测气体浓度的项目,要用到LMP91000这款芯片,我在网上下载到了其基于MSP430单片机的code,程序一开始就对LMP91000进行设置,命令是0X48,我知道0X48是91000的地址,我的问题是难道直接写入地址,不用写入任何命令就可以从01--12中读取数据吗?然后后面又是写入0X00,写入0X18,让我不太理解,请用过的前辈为我解答一下,谢谢。

I2CSetup(LMP91000_I2C_Address);     (0X48                                      // Initialize I2C modul

TI_LMP91000_MENB_PxOUT &= ~TI_LMP91000_MENB_PIN;                                           // Enable \MENB Pin

TI_LMP91000_MENB_PxDIR |= TI_LMP91000_MENB_PIN;                                                 // Set pin direction is outpu

while (status == TI_LMP91000_NOT_READY)   (0X00)                                                     // wait while device is not ready

   status = LMP91000_I2CReadReg(TI_LMP91000_STATUS_REG);          (0X00)                     // Read device ready status

read_val[0] = LMP91000_I2CReadReg(TI_LMP91000_LOCK_REG);         (0X01)                // Read from lock register default value    

read_val[1] = LMP91000_I2CReadReg(TI_LMP91000_TIACN_REG);        (0X10)                // Read TIA control register default value  

read_val[2] = LMP91000_I2CReadReg(TI_LMP91000_REFCN_REG);         (0X11)                // Read Reference control register default value

read_val[3] = LMP91000_I2CReadReg(TI_LMP91000_MODECN_REG);   (0X12)               // Read Mode control register default value

                          (0X01)                       (0X00)

LMP91000_I2CWriteReg(TI_LMP91000_LOCK_REG, TI_LMP91000_WRITE_UNLOCK);       // unlock the registers for write

                           (0X10)                         (0X18)

LMP91000_I2CWriteReg(TI_LMP91000_TIACN_REG, TIACN_NEW_VALUE);                // Modify TIA control register

read_val[1] = LMP91000_I2CReadReg(TI_LMP91000_TIACN_REG);                   // Read to confirm register is modified

                          (0X10)

// test if write/read values match

if (read_val[1] == TIACN_NEW_VALUE)         (0X18)

{

   while (1)                                                                 // no error: blink LED continuously

   {

       __delay_cycles(250000);

       __delay_cycles(250000);

       TI_LMP91000_LED_PxOUT ^= TI_LMP91000_LED_PIN;      

   }

} else

{

   TI_LMP91000_LED_PxOUT &= ~TI_LMP91000_LED_PIN;                             // error: Set LED OFF  

}  

                               (0X10)                             (0X03)

LMP91000_I2CWriteReg(TI_LMP91000_TIACN_REG, TI_LMP91000_TIACN_REG_VALUE);   // store default value back in TIACN

                             (0X01)                            (0X00)

LMP91000_I2CWriteReg(TI_LMP91000_LOCK_REG, TI_LMP91000_WRITE_LOCK);         // lock the registers

TI_LMP91000_MENB_PxOUT |= TI_LMP91000_MENB_PIN;                             // Disable \MENB Pin  

  • 关于您的问题,正在与产品工程师沟通,一旦有回复会尽快通知您。

    您也可以跟进下面这个帖子,与产线工程师做进一步的沟通:https://e2e.ti.com/support/sensors/f/1023/t/897524

  • (寄存器0x02至0x09是保留的,因此读取它们毫无意义)

    该过程将是(使用MENB作为芯片选择,或者如果在这里仅读取一个设备,则MENB线可以拉低)

    1.首先读取状态寄存器,以查看设备是否准备就绪(这是可选的)
    2.可以读取寄存器0x10、0x11和0x12

    或者

    2.可以写入寄存器0x01,进行解锁,然后可以修改寄存器0x10、0x11,例如:

    解锁和写入3个寄存器(缩小)

    通过I2C进行解锁操作(放大)

    用0x0E写入0x10(放大)

    用0xC0写入0x11(放大)

    用0x03写入0x12(放大)

    3.可以写入寄存器0x01,以重新锁定(如果需要)

    无需进行上述解锁操作即可写入寄存器0x12。

    在您引用的MSP430代码中,有4个演示应用程序示例-修改之前请先检查它们。

  • 谢谢您的回复,我再问三个问题:

    1 我用LMP91000测气体浓度,是否是通过IIC总线给LMP91000写入命令,然后用单片机AD口采样LMP91000的VOUT端信号,那个就是浓度值是吗?我现在就是这样测得,测得的数据一直为0V,我是没有加电极测得,相当于是LMP91000空载。

    2  关于LMP91000的C1端与C2端的电阻值如何选择,我看有些手册上是将C1与C2间接一个0欧电阻,如下图所示,但是C1与C2间不是用来配置TIA的跨阻阻抗的吗?如果接0欧电阻,不是将配置的跨阻阻抗短路了吗?如下图所示。

    3  最后您能帮我看下我的寄存器设置是否正确吗

    void LMP91000_INIT(void)
    {
    LMP91000_IO_INIT();
    i2c_Start();
    i2c_SendByte(0x48);
    i2c_SendByte(0x01);
    i2c_SendByte(0x00);
    i2c_Stop();
    i2c_Delay();
    i2c_Delay();

    i2c_Start();
    i2c_SendByte(0x48);
    i2c_SendByte(0x10);
    i2c_SendByte(0x0C);
    i2c_Stop();
    i2c_Delay();
    i2c_Delay();

    i2c_Start();
    i2c_SendByte(0x48);
    i2c_SendByte(0x11);
    i2c_SendByte(0xC0);
    i2c_Stop();
    i2c_Delay();
    i2c_Delay();

    i2c_Start();
    i2c_SendByte(0x48);
    i2c_SendByte(0x01);
    i2c_SendByte(0x01);
    i2c_Stop();
    i2c_Delay();
    i2c_Delay();

    i2c_Start();
    i2c_SendByte(0x48);
    i2c_SendByte(0x12);
    i2c_SendByte(0x03);
    i2c_Stop();
    i2c_Delay();
    i2c_Delay();
    }

  • TIA电阻增益可以在内部设置(对于该寄存器中的位4:2,使用寄存器0x10,值001b至111b),或者将寄存器0x10设置为外部(使用相同的位并设置为000b),并且增益设置为 使用外部电阻器完成-它(没有显示或描述)不是短路或为零欧姆。

    可以使用EVM工具找到传感器示例设置-

    https://www.ti.com/lit/zip/snac007 (this is the software)

    https://www.ti.com/tool/LMP91000EVM(传感器板,可以直接连接到MCU,产品页面上提供了MSP430源代码)

    您可以从数据库中选择要使用的传感器并获得基本设置-在这里您可以看到氧气传感器的示例

    选择传感器:

    然后查看设置