This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Strange temperature sensor behavior SD16

Intellectual 260 points

Replies: 0

Views: 712

Hello,

We have designed a board around the MSP430F47183 and MSP430F47187 microcontroller to acquire metrology data and report back to a collector. One of the metering parameters, temperature, appears to behave in an undesired manner when soaked an an environmental chamber for long periods of time. The reference temperature  behaves consistently with the soak parameters programmed into the chamber controller. The MSP data has a spike at a specific temperature and this spike reoccurs at each transition on the program. 

Unrelated, but possibly related, removing the entire metrology program and using the sample code for the temperature sensor along with uart code to graph, the sensor behaves strangely when touched. Is the on-board sensor highly sensitive to noise on the analog ground plane? If we quickly pass a thumb across the analog decoupling caps on the bottom of the board we can induce a large spike on the temperature sensor that takes multiple samples to decay back to what might be the actual reading. This decay has the exponential look of an RC charge/discharge. 

Here is code that the software team is using to initialize:

void InitSD16()
{
// This gives us 8.192 kHz, when MCLK is 16 MHz, and OSR = 128
SD16CTL = SD16SSEL_1 /* Clock is SMCLK */
| SD16XDIV_2 /* Divide by 16*/
| SD16DIV_0 /* Divide by 1*/
| SD16REFON
| SD16VMIDON;
SD16CTL &= ~SD16REFON;
//SD16CTL &= ~SD16VMIDON;
// Voltage Channel
SD16CCTL0 |= SD16GRP | SD16OSR_128;
//SD16CCTL0 |= SD16SNGL | SD16GRP;
SD16INCTL0 |= SD16INCH_0 | SD16GAIN_1;
// Current Channel
SD16CCTL1 |= SD16IE |SD16OSR_128;
//SD16CCTL1 |= SD16SNGL | SD16IE;//SD16GRP;
SD16INCTL1 |= SD16INCH_1 | SD16GAIN_1;
// Temperature
SD16CCTL2 |= SD16SNGL | SD16IE | SD16OSR_128; // enable interrupt
SD16INCTL2 |= SD16INCH_6 | SD16GAIN_1; // Select Channel A6 = Temperature Sensor
int i =0;
for (i = 0; i < 0x3600; i++) // Delay for 1.2V ref startup
;
SD16CCTL1 |= SD16SC; // Start conversion.
SD16CCTL2 |= SD16SC;
}

Also,
we are using an external reference voltage, 1.2v. 

Any help would be appreciated. 

Here is a graph of the data. Orange is the reference. Green is the TI. Blue is unrelated.