[2] NTC热敏电阻器参数介绍:
【标称阻值】
标称阻值是NTC热敏电阻器设计的电阻值,常在热敏电阻器表面标出。标称阻值是指在基准温度为25℃时零功率阻值,因此又被称为电阻值R25。
【额定功率】
额定功率是指热敏电阻器在环境温度25℃、相对湿度为45%~80%及大气压力为0.87~1.07Pa的大气条件下,长期连续负荷所允许的耗散功率。
【B值范围】
B值范围(K)是负温度系数热敏电阻器的热敏指数,反映了两个温度之间的电阻变化。它被定义为两个温度下零功率电阻值的自然对数之差与这个温度倒数之差的比值。B值可用下述公式计算,即
式中,R1、R2分别是绝对温度T1、T2时的电阻值(Ω)。
【零功率电阻值】
在规定温度下测量热敏电阻器的电阻值,当由于电阻器内部发热引起的电阻值变化相对于总的测量误差来说可以忽略不计时测得的电阻值。
【耗散系数δ(mW/℃)】
耗散系数是指热敏电阻器消耗的功率与环境温度变化之比,即
式中,W是热敏电阻消耗的功率(mW);T是热平衡时的温度(℃);T0是周围环境温度(℃);I是在温度为T时通过热敏电阻器的电流(A);R是在温度为T时热敏电阻器的电阻值(Ω)。
【时间常数τ(s)】
时间常数τ(s)指的是热敏电阻器在零功率状态下,当环境温度由一个特定温度向另一个特定温度突变时,热敏电阻器阻值变化63.2%所需的时间。
【电阻温度系数】
电阻温度系数是指环境温度变化1℃时热敏电阻器电阻值的相对变化量。知道某一个型号热敏电阻器的电阻温度系数后,就可以估算出热敏电阻器在相应温度下的实际电阻值。
单片机源程序如下:
- /*---------------------------------------------------------------------*/
- /* --- STC MCU International Limited ----------------------------------*/
- /* --- STC 1T Series MCU Demo Programme -------------------------------*/
- /* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序 */
- /*---------------------------------------------------------------------*/
- /************* 本程序功能说明 **************
- 读ADC和测温度.
- 用STC的MCU的IO方式控制74HC595驱动8位数码管。
- 用户可以修改宏来选择时钟频率.
- 用户可以在"用户定义宏"中选择共阴或共阳. 推荐尽量使用共阴数码管.
- 使用Timer0的16位自动重装来产生1ms节拍,程序运行于这个节拍下, 用户
- 修改MCU主时钟频率时,自动定时于1ms.
- 左边4位数码管显示ADC2接的电压基准TL431的读数, 右边4位数码管显示温度值, 分辨率0.1度.
- NTC使用1%精度的MF52 10K@25度C.
- 测温度时, 为了通用, 使用12位的ADC值, 使用对分查找表格来计算, 小数点后
- 一位数是用线性插补来计算的.
- 所以, 测温度的ADC3进行4次ADC连续采样, 变成12位的ADC来计算温度.
- ******************************************/
- #include "config.H"
- #include "adc.h"
- /****************************** 用户定义宏 ***********************************/
- #define LED_TYPE 0x00 //定义LED类型, 0x00--共阴, 0xff--共阳
- #define Timer0_Reload (65536UL -(MAIN_Fosc / 1000)) //Timer 0 中断频率, 1000次/秒
- /*****************************************************************************/
- /************* 本地常量声明 **************/
- u8 code t_display[]={ //标准字库
- // 0 1 2 3 4 5 6 7 8 9 A B C D E F
- 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
- //black - H J K L N o P U t G Q r M y
- 0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
- 0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46}; //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1
- u8 code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位码
- /************* IO口定义 **************/
- sbit P_HC595_SER = P4^0; //pin 14 SER data input
- sbit P_HC595_RCLK = P5^4; //pin 12 RCLk store (latch) clock
- sbit P_HC595_SRCLK = P4^3; //pin 11 SRCLK Shift data clock
- /************* 本地变量声明 **************/
- u8 LED8[8]; //显示缓冲
- u8 display_index; //显示位索引
- bit B_1ms; //1ms标志
- u16 msecond;
- /************* 本地函数声明 **************/
- u16 get_temperature(u16 adc);
- /**************** 外部函数声明和外部变量声明 *****************/
- /********************** ADC配置函数 ************************/
- void ADC_config(void)
- {
- ADC_InitTypeDef ADC_InitStructure; //结构定义
- ADC_InitStructure.ADC_Px = ADC_P12 | ADC_P13;//设置要做ADC的IO, ADC_P10 ~ ADC_P17(或操作),ADC_P1_All
- ADC_InitStructure.ADC_Speed = ADC_90T; //ADC速度 ADC_90T,ADC_180T,ADC_360T,ADC_540T
- ADC_InitStructure.ADC_Power = ENABLE; //ADC功率允许/关闭 ENABLE,DISABLE
- ADC_InitStructure.ADC_AdjResult = ADC_RES_H8L2; //ADC结果调整, ADC_RES_H2L8,ADC_RES_H8L2
- ADC_InitStructure.ADC_Polity = PolityLow; //优先级设置 PolityHigh,PolityLow
- ADC_InitStructure.ADC_Interrupt = DISABLE; //中断允许 ENABLE,DISABLE
- ADC_Inilize(&ADC_InitStructure); //初始化
- ADC_PowerControl(ENABLE); //单独的ADC电源操作函数, ENABLE或DISABLE
- }
- /**********************************************/
- void main(void)
- {
- u8 i;
- u16 j;
-
- display_index = 0;
- ADC_config();
-
- Timer0_1T();
- Timer0_AsTimer();
- Timer0_16bitAutoReload();
- Timer0_Load(Timer0_Reload);
- Timer0_InterruptEnable();
- Timer0_Run();
- EA = 1; //打开总中断
-
- for(i=0; i<8; i++) LED8[i] = 0x10; //上电消隐
-
- while(1)
- {
- if(B_1ms) //1ms到
- {
- B_1ms = 0;
- if(++msecond >= 300) //300ms到
- {
- msecond = 0;
- j = Get_ADC10bitResult(2); //参数0~7,查询方式做一次ADC, 返回值就是结果, == 1024 为错误
-
- if(j < 1024)
- {
- LED8[0] = j / 1000; //显示ADC值
- LED8[1] = (j % 1000) / 100;
- LED8[2] = (j % 100) / 10;
- LED8[3] = j % 10;
- if(LED8[0] == 0) LED8[0] = DIS_BLACK;
- }
- else //错误
- {
- for(i=0; i<4; i++) LED8[i] = DIS_;
- }
-
- j = Get_ADC10bitResult(3); //参数0~7,查询方式做一次ADC, 返回值就是结果, == 1024 为错误
- j += Get_ADC10bitResult(3);
- j += Get_ADC10bitResult(3);
- j += Get_ADC10bitResult(3);
- if(j < 1024*4)
- {
- /*
- LED8[0] = j / 1000; //显示ADC值
- LED8[1] = (j % 1000) / 100;
- LED8[2] = (j % 100) / 10;
- LED8[3] = j % 10;
- if(LED8[0] == 0) LED8[0] = DIS_BLACK;
- */
- j = get_temperature(j); //计算温度值
- if(j >= 400) F0 = 0, j -= 400; //温度 >= 0度
- else F0 = 1, j = 400 - j; //温度 < 0度
- LED8[4] = j / 1000; //显示温度值
- LED8[5] = (j % 1000) / 100;
- LED8[6] = (j % 100) / 10 + DIS_DOT;
- LED8[7] = j % 10;
- if(LED8[4] == 0) LED8[4] = DIS_BLACK;
- if(F0) LED8[4] = DIS_; //显示-
- }
- else //错误
- {
- for(i=0; i<8; i++) LED8[i] = DIS_;
- }
- }
- }
- }
- }
- /**********************************************/
- // MF52E 10K at 25, B = 3950, ADC = 12 bits
- u16 code temp_table[]={
- 140, //;-40 0
- 149, //;-39 1
- 159, //;-38 2
- 168, //;-37 3
- 178, //;-36 4
- 188, //;-35 5
- 199, //;-34 6
- 210, //;-33 7
- 222, //;-32 8
- 233, //;-31 9
- 246, //;-30 10
- 259, //;-29 11
- 272, //;-28 12
- 286, //;-27 13
- 301, //;-26 14
- 317, //;-25 15
- 333, //;-24 16
- 349, //;-23 17
- 367, //;-22 18
- 385, //;-21 19
- 403, //;-20 20
- 423, //;-19 21
- 443, //;-18 22
- 464, //;-17 23
- 486, //;-16 24
- 509, //;-15 25
- 533, //;-14 26
- 558, //;-13 27
- 583, //;-12 28
- 610, //;-11 29
- 638, //;-10 30
- 667, //;-9 31
- 696, //;-8 32
- 727, //;-7 33
- 758, //;-6 34
- 791, //;-5 35
- 824, //;-4 36
- 858, //;-3 37
- 893, //;-2 38
- 929, //;-1 39
- 965, //;0 40
- 1003, //;1 41
- 1041, //;2 42
- 1080, //;3 43
- 1119, //;4 44
- 1160, //;5 45
- 1201, //;6 46
- 1243, //;7 47
- 1285, //;8 48
- 1328, //;9 49
- 1371, //;10 50
- 1414, //;11 51
- 1459, //;12 52
- 1503, //;13 53
- 1548, //;14 54
- 1593, //;15 55
- 1638, //;16 56
- 1684, //;17 57
- 1730, //;18 58
- 1775, //;19 59
- 1821, //;20 60
- 1867, //;21 61
- 1912, //;22 62
- 1958, //;23 63
- 2003, //;24 64
- 2048, //;25 65
- 2093, //;26 66
- 2137, //;27 67
- 2182, //;28 68
- 2225, //;29 69
- 2269, //;30 70
- 2312, //;31 71
- 2354, //;32 72
- 2397, //;33 73
- 2438, //;34 74
- 2479, //;35 75
- 2519, //;36 76
- 2559, //;37 77
- 2598, //;38 78
- 2637, //;39 79
- 2675, //;40 80
- 2712, //;41 81
- 2748, //;42 82
- 2784, //;43 83
- 2819, //;44 84
- 2853, //;45 85
- 2887, //;46 86
- 2920, //;47 87
- 2952, //;48 88
- 2984, //;49 89
- 3014, //;50 90
- 3044, //;51 91
- 3073, //;52 92
- 3102, //;53 93
- 3130, //;54 94
- 3157, //;55 95
- 3183, //;56 96
- 3209, //;57 97
- 3234, //;58 98
- 3259, //;59 99
- 3283, //;60 100
- 3306, //;61 101
- 3328, //;62 102
- 3351, //;63 103
- 3372, //;64 104
- 3393, //;65 105
- 3413, //;66 106
- 3432, //;67 107
- 3452, //;68 108
- 3470, //;69 109
- 3488, //;70 110
- 3506, //;71 111
- 3523, //;72 112
- 3539, //;73 113
- 3555, //;74 114
- 3571, //;75 115
- 3586, //;76 116
- 3601, //;77 117
- 3615, //;78 118
- 3628, //;79 119
- 3642, //;80 120
- 3655, //;81 121
- 3667, //;82 122
- 3679, //;83 123
- 3691, //;84 124
- 3702, //;85 125
- 3714, //;86 126
- 3724, //;87 127
- 3735, //;88 128
- 3745, //;89 129
- 3754, //;90 130
- 3764, //;91 131
- 3773, //;92 132
- 3782, //;93 133
- 3791, //;94 134
- 3799, //;95 135
- 3807, //;96 136
- 3815, //;97 137
- 3822, //;98 138
- 3830, //;99 139
- 3837, //;100 140
- 3844, //;101 141
- 3850, //;102 142
- 3857, //;103 143
- 3863, //;104 144
- 3869, //;105 145
- 3875, //;106 146
- 3881, //;107 147
- 3887, //;108 148
- 3892, //;109 149
- 3897, //;110 150
- 3902, //;111 151
- 3907, //;112 152
- 3912, //;113 153
- 3917, //;114 154
- 3921, //;115 155
- 3926, //;116 156
- 3930, //;117 157
- 3934, //;118 158
- 3938, //;119 159
- 3942 //;120 160
- };
- /******************** 计算温度 ***********************************************/
- // 计算结果: 0对应-40.0度, 400对应0度, 625对应25.0度, 最大1600对应120.0度.
- // 为了通用, ADC输入为12bit的ADC值.
- // 电路和软件算法设计: Coody
- /**********************************************/
- #define D_SCALE 10 //结果放大倍数, 放大10倍就是保留一位小数
- u16 get_temperature(u16 adc)
- {
- u16 code *p;
- u16 i;
- u8 j,k,min,max;
-
- adc = 4096 - adc; //Rt接地
- p = temp_table;
- if(adc < p[0]) return (0xfffe);
- if(adc > p[160]) return (0xffff);
-
- min = 0; //-40度
- max = 160; //120度
- for(j=0; j<5; j++) //对分查表
- {
- k = min / 2 + max / 2;
- if(adc <= p[k]) max = k;
- else min = k;
- }
- if(adc == p[min]) i = min * D_SCALE;
- else if(adc == p[max]) i = max * D_SCALE;
- else // min < temp < max
- {
- while(min <= max)
- {
- min++;
- if(adc == p[min]) {i = min * D_SCALE; break;}
- else if(adc < p[min])
- {
- min--;
- i = p[min]; //min
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
15883879NTC-10K-74HC595.zip
(93.85 KB, 下载次数: 1082)
|