在NTC那里我接了4.7K的电阻,也就是下图CN3的位置,理应ADC得返回2048左右的ADC值,但是返回出来只有200多,我的单片机芯片SC92F7411,用过他们赛元微里面的例程代码,返回出来的值也是一样,请问我应该怎么改,请大伙指点迷津,谢谢!!!!
void ADC_Init(uint Channel);
unsigned int ADC_GetAverageValue(void);
//unsigned int ADCValue = 0x0000;
uint8_t tmpValue;
bit AdcFlag = 0;
float ADC_Voltage; //ADC电压
float NTC_Temperature; //NTC温度值
uint32_t xdata ADC_Value; //ADC值
/***********ADC采样频率选择*************/
enum ADCFreq {F32=0,F24,F16,F12,F8,F6,F4,F3};
/*****************************************************
*函数名称:void ADC_Init(uint Channel,uchar ADCFreq)
*函数功能:ADC初始化
*入口参数:void
*出口参数:void
*****************************************************/
void ADC_Init(uint Channel)
{
ADCCON = 0X80|Channel; //开启ADC,ADC采样频率为3M ,选择Channel位ADC采样口
if(Channel<8)
{
ADCCFG0 = 1<<Channel; //设置Channel作为采样口
}
else
{
ADCCFG1 = 1<<(Channel-8); //设置Channel作为采样口
}
//ADCCFG2 = F8;
IE |= 0X40; //开启ADC中断
}
/*****************************************************
*函数名称:uint ADC_GetAverageValue(uint Channel,ADC_SamplesNum_TypeDef ADC_SamplesNum)
*函数功能:ADC采样取平均值
*入口参数:
ADC_SamplesNum_TypeDef ADC_SamplesNum:采样次数
*出口参数:
uint:多次采样平均值
*****************************************************/
uint32_t ADC_GetAverageValue(void)
{
ADCCON |= 0X40; //开始一次ADC转换
while(!AdcFlag); //等待ADC转换完成
AdcFlag = 0;
tmpValue=(ADCVH<<4)+(ADCVL>>4); //获取单次转换值
return tmpValue; //返回平均值
}
void ADC_Interrupt(void) interrupt 6
{
ADCCON&=~(0X20); //清中断标志位
AdcFlag = 1;
}
//NTC电阻值
uint32_t code ntc_r[100]=
{
//180°~ 189°
1548,1514,1480,1447,1414,1383,1353,1323,1294,1266,
//190°~199°
1239,1212,1186,1160,1136,1112,1088,1065,1043,1021,
//200°~209°
1000,978,957,937,917,897,878,860,841,824,
//210~219°
807,790,773,758,742,727,712,698,683,670,
//220°~229°
656,643,630,618,606,594,582,571,560,549,
};
// 定义常量
#define R_FIXED 4700.0 // 固定电阻值4.7kΩ
#define B_CONST 4537.0 // NTC的B常数
#define T0 473.15 // 200℃转换为开尔文
#define R0 1000.0 // NTC在200℃时的电阻值1kΩ
/*
函数功能:计算温度的值
参数:无
返回值:无
备注:无
*/
float calculate_temperature(float voltage)
{
float R_ntc;
float V_supply = 5.0; // 电源电压5.0V
float tmp1 = 0.0;
float tmp2 = 0.0;
// 计算NTC电阻值
R_ntc = R_FIXED * (V_supply / voltage - 1); //voltage是ADC值换算过来的电压
// 计算温度(开尔文)
tmp1 = R_ntc/R0;
tmp2 = log(tmp1);
tmp1 = tmp2/B_CONST;
tmp2 = 1/T0;
tmp1 = (tmp1+tmp2);
tmp2 = 1.0/tmp1;
if(tmp2 <= 274)tmp2 = 274;
// 转换为摄氏度
tmp2 -= 273.15;
//tmp1 = tmp2+0.05; //温度补偿
//返回温度
return tmp2;
}
|