在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;
}
|