Dear TI engineer
I made a RTD board that support two 3-wire RTDs.
The schematic is as follows.
The Vcc is 3.3[v]. And SPI works normally.
The IB1 current is 1mA.
I checked the voltage( between terminal-1 and terminal-2 in P2-RTD) with digital multimeter.
The measured value is 110.87m[V] at room termperature( about 28 degreescelcius).
IB1 = 1mA; Vm = RTD X IB1; RTD = 110.87 Ohms
The value looks like good.
And i read RTD value with LMP90100.
The procedure is in your datasheet( Fig 71. topology #2, page51).
CH0 = ( Vin0 – Vin1);
CH1 = ( Vin1 – Vin6);
(CH0 - CH1) = IB1 X RTD;
RTD = (CH0 – CH1)/IB1;
I read CH0 and CH1 in my board.
In my reading, the ch1 value is larger than ch0 value.
Here is a pseudo code of my program.
I don’t know what is the wrong point in my program.
//===================================================================================
// SPI_Read(addr, read byte);
// SPI_Write(addr, write data);
//============================== SPI Test =============================================
// Reset Control
SPI_Write(0x00, 0xC3); // LMP90100 reset
mdelay(10);
SPI_Write(0x01, 0x09); // SPI control, 0x09 or 0x01
mdelay(10);
// SPI Data Ready Bar Control, Addr(0x11)
SPI_Write(0x11, 0x83); // D6 = drdyb signal
mdelay(10);
// ADC_AUXCN(Addr 0x12), IB1, IB2 Setting, 100uA(0x01), 1000uA(0x0A)
SPI_Write(0x12, 0x0A); // Internal Clock Enable
mdelay(10);
// Channel Sacn Mode(Addr 0x1F)
// ==> 00 110 XXX ==> 0x30(Scanmode 0, Default)
// ==> 01 110 XXX ==> 0x70(Scanmode 1)
// ==> 10 110 XXX ==> 0xB0(Scanmode 2)
// ==> 11 110 XXX ==> 0xF0(Scanmode 3)
SPI_Write(0x1F, 0x30);
mdelay(10);
while(1) {
// =================================== P2 CH#0 ===========================================
// Channel #0 Input Select, CH0 addr = 0x20
// Select VREFP2, VREFN2
// VINP = VIN0
// VINN = VIN1
// ==> 0 1 000 001 ==> 0x41
SPI_Write(0x20, 0x41);
mdelay(10);
// Channel #0 Configuration, CH0 addr = 0x21
SPI_Write(0x21, 0x20); // ODR = 214.65 SPS, FGA Gain = off, Buffer include
mdelay(10);
// ADC Restart
SPI_Write(0x0B, 0x01); // Ox01 = ADC Restart
mdelay(100);
// ADC Ouput Data Read 3Byte
SPI_Read(0x1A, 3); // Addr(0x1A, 0x1B, 0x1C)
mdelay(10);
ch_0 = adc_out1; // adc_out1 is 24bit(0x1A:0x1B:0x1C)
// =================================== P2 CH#1 ===========================================
// Channel #1 Input Select, CH1 = 0x22
// Select VREFP2, VREFN2
// VINP = VIN1
// VINN = VIN6
// ==> 0 1 001 110 ==> 0x4E
// SPI_Write(0x22, 0x4E);
SPI_Write(0x20, 0x4E);
mdelay(10);
// Channel #1 Configuration, CH0 = 0x23(0d35)
// SPI_Write(0x23, 0x20); // ODR = 214.65 SPS, FGA Gain = off, Buffer include
SPI_Write(0x21, 0x20); // ODR = 214.65 SPS, FGA Gain = off, Buffer include
mdelay(10);
// ADC Restart
SPI_Write(0x0B, 0x01); // Ox01 = ADC Restart
mdelay(100);
// ADC Ouput Data Read 3Byte
SPI_Read(0x1A, 0x03); // Addr(0x1A, 0x1B, 0x1C)
mdelay(10);
ch_1 = adc_out1;
// ============================== Temperature Computation ===============================
if( ch_0 > ch_1) {
rtd_value = ch_0 - ch_1;
// rtd_value = rtd_value * 1000;
}
} // End of While()
//===================================================================================
Can you provide a sample code for my schematic ?
Best regards
Dongbeom