大家好,
我找到了一个内部温度传感器的示例,它工作正常。当我尝试将此代码与其他ADC通道一起使用时,问题就开始了。意思是, 我有其他正在使用的通道,设置中所有不同的是 ADC10CTL0的ADC10SHT_3 。在其他通道中,我使用 ADC10SHT_2。 当 在其他通道中启用采样和转换时,温度测量的数值不正常,并且在不同温度下ADC的输出没有变化。 我确实给ADC 30US和更多的是准确的,但仍然不好。
我相信 内部温度会有所不同,我只是不知道是什么。
请提供帮助。
10倍多
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.
大家好,
我找到了一个内部温度传感器的示例,它工作正常。当我尝试将此代码与其他ADC通道一起使用时,问题就开始了。意思是, 我有其他正在使用的通道,设置中所有不同的是 ADC10CTL0的ADC10SHT_3 。在其他通道中,我使用 ADC10SHT_2。 当 在其他通道中启用采样和转换时,温度测量的数值不正常,并且在不同温度下ADC的输出没有变化。 我确实给ADC 30US和更多的是准确的,但仍然不好。
我相信 内部温度会有所不同,我只是不知道是什么。
请提供帮助。
10倍多
是的,当然。
功能1:
长VBAT_SAMPLE()
{
长电压= 0;
const int num_of_SAMP =3;
int i;
长实际电压;
/*现在我们有两个ADC函数,我们需要在每个函数的条目中更改通道。*/
ADC10CTL0 = SREF_1 + ADC10SHT_2 + RefoN + ADC10ON + ADC10IE;//+ Ref2_5V;
ADC10CTL1 = inch_0;//输入A0
ADC10AE0 |= 0x01;// PA.0 ADC选项选择
对于(i = 0;I< num_of_SAMP;I++)
{
ADC10CTL0 || ENC | ADC10SC;//开始采样和转换
延迟(1);
电压+= ADC10MEM;
}
Voltage = voltage/num_of_SAMP;
actual_voltage = 4000 -(int)(((890电压)/2)*10)+130;//890是4.0V的值,我们得到大约每100mV 22的下降。此函数的返回值以mV为单位。
int j;
IF (!(P1IN和CAP_INT.bit))
{
IF ((actual_voltage<voltage_threshold)&&(actual_voltage > 2000))
{
unset_heater();
对于(j=0;j<LED_NUM;j++)
受控(LED[j],开);//打开所有LED
蜂鸣器(500);//激活蜂鸣器4000毫秒
对于(j=0;j<LED_NUM;j++)
受控(LED[j],关闭);//关闭所有LED
low_voltage_flag = TRUE;//将此标志设置为1,以便系统知道电压已下降。
mc = mc + mt/10;
MT = 0;
状态= STATUS_LPM3;//转至LPM3以节省电源,还可用于开始计算VD计时器。
}
否则
{
//low_voltage_flag =假;
}
}
返回Actual_voltage;
ADC10CTL0 &=~ENC;
ADC10CTL0 &=~ADC10SC;
}
功能2:
int sample_light传感器()//对光传感器采样并返回采样值。 计算的值是代表感应到的光量的数值,但是无单位的
{
长样本= 0;
静态长z = 0;
int i;
int sample_avg_num = 10;
int us;
//static long CAL_V15;
ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON+ ADC10ON + ADC10IE;
ADC10CTL1 = inch_5;//输入A1
ADC10AE0 |= 0x20;// PA.5 ADC选项选择
对于(i=0;i<sample_avg_num;i++)
{
ADC10CTL0 |= ENC + ADC10SC;//开始采样和转换
us=22;//等待______ 因此,样品将是准确的
同时(美国)
{
__delay_cycles(1);//990用于1MHz
美国--;
}
样本+= ADC10MEM;
Z = ADC10MEM;
}
sample = sample/sample_avg_num;
Sample =(SAMPE*(((((LON)(*CAL_15V)*100)/3.2768万))/100;//除以数据表中定义的使用ADC校准值的2^15
#ifndef调试
返回样本;
#否则
return VR_DEBUG;/260;
#endif
ADC10CTL0 &=~ENC;
ADC10CTL0 &=~ADC10SC;
}
功能3:(带内部温度传感器)
Int Temperature_measuring()
{
//WDTCTL = WDTPW | WDTHOLD;//停止WDT
长温度;
int num_of_sample = 5;
int i;
int us=300;//等待______ 因此,样品将是准确的
ADC10CTL1 = inch_10 | ADC10DIV_3;//温度传感器ADC10CLK/4
ADC10CTL0 = SREF_1 | ADC10SHT_2 | REFON | ADC10ON | ADC10IE;
ADC10CTL0 || ENC | ADC10SC;//开始采样和转换
对于(i = 0;i < num_of_sample;I++)
{
美国=300;
同时(美国)
{
__delay_cycles(1);//990用于1MHz
美国--;
}
TEMP =温度+ ADC10MEM;
}
temp = temp/num_of_sample;
//IntDegC1=(长)(*CAL_TEMP_15V_30C);
//IntDegC2=(长)(*CAL_TEMP_15V_85C);
//IntDegC4 =(temp - IntDegC1)*(55/(IntDegC2 - IntDegC1)+30;
ADC10CTL0 &=~ENC;
ADC10CTL0 &=~ADC10SC;
回流(温度);
}
仅当在函数1和2中使用“ADC10CTL0 |= ENC + ADC10SC”时,才会出现此问题。 如果我在函数1和函数2中将此行置于注释之下,则温度函数的输出正常。