📄 adc_temperature.c
字号:
#include "user_func.h"
//*******************************************************************************************************************
//NTC热敏电阻WDCMFE-395-103F 典型参数B值为3950,25摄氏度的阻值为10K欧姆
//龚俊于2005-12-3 10:46根据厂家的提供资料整理出的数据表格
const struct {
int Temp ; //温度
int RES ; //温度所对应的电阻值
}TEMP_TAB[] = {
{ -55, 997466000 } , //温度表格
{ -54, 926658000 } , //温度表格
{ -53, 861289000 } , //温度表格
{ -52, 800914000 } , //温度表格
{ -51, 745124000 } , //温度表格
{ -50, 693543000 } , //温度表格
{ -49, 645845000 } , //温度表格
{ -48, 601704000 } , //温度表格
{ -47, 560840000 } , //温度表格
{ -46, 522993000 } , //温度表格
{ -45, 487925000 } , //温度表格
{ -44, 455415000 } , //温度表格
{ -43, 425265000 } , //温度表格
{ -42, 397290000 } , //温度表格
{ -41, 371321000 } , //温度表格
{ -40, 347205000 } , //温度表格
{ -39, 324799000 } , //温度表格
{ -38, 303972000 } , //温度表格
{ -37, 284605000 } , //温度表格
{ -36, 266688000 } , //温度表格
{ -35, 249818000 } , //温度表格
{ -34, 234204000 } , //温度表格
{ -33, 219659000 } , //温度表格
{ -32, 206105000 } , //温度表格
{ -31, 193468000 } , //温度表格
{ -30, 181681000 } , //温度表格
{ -29, 170683000 } , //温度表格
{ -28, 160416000 } , //温度表格
{ -27, 150829000 } , //温度表格
{ -26, 141871000 } , //温度表格
{ -25, 133500000 } , //温度表格
{ -24, 125672000 } , //温度表格
{ -23, 118350000 } , //温度表格
{ -22, 111498000 } , //温度表格
{ -21, 105084000 } , //温度表格
{ -20, 99077300 } , //温度表格
{ -19, 93449600 } , //温度表格
{ -18, 88175000 } , //温度表格
{ -17, 83229600 } , //温度表格
{ -16, 78590900 } , //温度表格
{ -15, 74238400 } , //温度表格
{ -14, 70152700 } , //温度表格
{ -13, 66316200 } , //温度表格
{ -12, 62712200 } , //温度表格
{ -11, 59325400 } , //温度表格
{ -10, 56141600 } , //温度表格
{ -9, 53147500 } , //温度表格
{ -8, 50330700 } , //温度表格
{ -7, 47679900 } , //温度表格
{ -6, 46184200 } , //温度表格
{ -5, 42833900 } , //温度表格
{ -4, 40619700 } , //温度表格
{ -3, 38533000 } , //温度表格
{ -2, 36565600 } , //温度表格
{ -1, 34710300 } , //温度表格
{ 0, 32960000 } , //温度表格
{ 1, 31308100 } , //温度表格
{ 2, 29748700 } , //温度表格
{ 3, 28276000 } , //温度表格
{ 4, 26884800 } , //温度表格
{ 5, 25570200 } , //温度表格
{ 6, 24327400 } , //温度表格
{ 7, 23152300 } , //温度表格
{ 8, 22040700 } , //温度表格
{ 9, 20988900 } , //温度表格
{ 10, 19993400 } , //温度表格
{ 11, 19050900 } , //温度表格
{ 12, 18158200 } , //温度表格
{ 13, 17312400 } , //温度表格
{ 14, 16510900 } , //温度表格
{ 15, 15751100 } , //温度表格
{ 16, 15030600 } , //温度表格
{ 17, 14347200 } , //温度表格
{ 18, 13698700 } , //温度表格
{ 19, 13083300 } , //温度表格
{ 20, 12499000 } , //温度表格
{ 21, 11944100 } , //温度表格
{ 22, 11416900 } , //温度表格
{ 23, 10916100 } , //温度表格
{ 24, 10440000 } , //温度表格
{ 25, 10000000 } , //温度表格
{ 26, 9556930 } , //温度表格
{ 27, 9147430 } , //温度表格
{ 28, 8757770 } , //温度表格
{ 29, 8386900 } , //温度表格
{ 30, 8033800 } , //温度表格
{ 31, 7697530 } , //温度表格
{ 32, 7377210 } , //温度表格
{ 33, 7072000 } , //温度表格
{ 34, 6781100 } , //温度表格
{ 35, 6503780 } , //温度表格
{ 36, 6239340 } , //温度表格
{ 37, 5967110 } , //温度表格
{ 38, 5746460 } , //温度表格
{ 39, 5516800 } , //温度表格
{ 40, 5297680 } , //温度表格
{ 41, 5088280 } , //温度表格
{ 42, 4888380 } , //温度表格
{ 43, 4697430 } , //温度表格
{ 44, 4514980 } , //温度表格
{ 45, 4340600 } , //温度表格
{ 46, 4173910 } , //温度表格
{ 47, 4014520 } , //温度表格
{ 48, 3862070 } , //温度表格
{ 49, 3716240 } , //温度表格
{ 50, 3588000 } , //温度表格
{ 51, 3443140 } , //温度表格
{ 52, 3315290 } , //温度表格
{ 53, 3192870 } , //温度表格
{ 54, 3075630 } , //温度表格
{ 55, 2963310 } , //温度表格
{ 56, 2855600 } , //温度表格
{ 57, 2752560 } , //温度表格
{ 58, 2653690 } , //温度表格
{ 59, 2558900 } , //温度表格
{ 60, 2467990 } , //温度表格
{ 61, 2380800 } , //温度表格
{ 62, 2297140 } , //温度表格
{ 63, 2216860 } , //温度表格
{ 64, 2139800 } , //温度表格
{ 65, 2065830 } , //温度表格
{ 66, 1994800 } , //温度表格
{ 67, 1926580 } , //温度表格
{ 68, 1861050 } , //温度表格
{ 69, 1798090 } , //温度表格
{ 70, 1737580 } , //温度表格
{ 71, 1679420 } , //温度表格
{ 72, 1623510 } , //温度表格
{ 73, 1569780 } , //温度表格____后面的表格复印不清晰,看不清楚,故省略(龚俊注)
{ 0, 0 }
} ;
/********************************************************************************************************************
【函数名称】int Temperature_Look_Tab( int R )
【功能描述】NTC热敏电阻查表的程序代码
【参数输入】无
【参数返回】无
********************************************************************************************************************/
int Temperature_Look_Tab( int R )
{
unsigned short m = 0 ;
while( TEMP_TAB[m].RES != 0 )
{
if( TEMP_TAB[m].RES < R ) goto LOOK_TAB ;
m++ ;
}
return 255 ; //超过最大极限,表格中无这样的值
LOOK_TAB:
if( m == 0 ) return TEMP_TAB[0].Temp ; //零下55度或更低温度
if( (TEMP_TAB[m-1].RES - R) > (R - TEMP_TAB[m].RES) ) //判别R离谁近
return TEMP_TAB[m].Temp ;
else
return TEMP_TAB[m-1].Temp ;
}
/********************************************************************************************************************
【函数名称】void NTC_Resistor_Temperature_Test( void )
【功能描述】热敏电阻温度测试
【参数输入】无
【参数返回】无
********************************************************************************************************************/
void NTC_Resistor_Temperature_Test( void )
{
unsigned int a ;
unsigned char m ;
unsigned int adc[16] ;
int T ;
#define FEQ_TIMER 1000
unsigned int FEQ = FEQ_TIMER ;
Uart_Printf( UART0, "\nNTC Resistor Temperature_Test, 'ESC' key to exit\n" );
ADC_Channel_6_Init() ;
while ( UART_GetKeyByPolling( UART0 ) != ESC_KEY )
{
for( m = 0; m < 16; m++ ) //16次采样
{
adc[m] = ADC_Channel_6_Measure(); //AIN6是温度检测
}
for( m = 1; m < 16; m++ ) //取平均值
{
adc[0] = adc[0] + adc[m] ;
}
a = adc[0] / 16 ; //平均值
if( FEQ > 1 )
FEQ-- ;
else
{
FEQ = FEQ_TIMER ;
Uart_Printf( UART0, "AIN6 : %04d\n" , a );
a = ( 10000 * 100 * (1023-a) / a ) * 10 ; //计算电阻值,单位是毫欧姆,10K电阻分压;
Uart_Printf( UART0, " Resistor Value is %04d\n" , a );
T = Temperature_Look_Tab( a ) ;
Uart_Printf( UART0, " Temperature Value is %d 'C\n" , T );
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -