[2] NTC熱敏電阻器參數介紹:
【標稱阻值】
標稱阻值是NTC熱敏電阻器設計的電阻值,常在熱敏電阻器表面標出。標稱阻值是指在基準溫度為25℃時零功率阻值,因此又被稱為電阻值R25。
【額定功率】
額定功率是指熱敏電阻器在環境溫度25℃、相對濕度為45%~80%及大氣壓力為0.87~1.07Pa的大氣條件下,長期連續負荷所允許的耗散功率。
【B值范圍】
B值范圍(K)是負溫度系數熱敏電阻器的熱敏指數,反映了兩個溫度之間的電阻變化。它被定義為兩個溫度下零功率電阻值的自然對數之差與這個溫度倒數之差的比值。B值可用下述公式計算,即
7aec54e736d12f2e67733ffd4fc2d5628535683d.jpg (3.54 KB, 下載次數: 175)
下載附件
2017-7-10 02:46 上傳
式中,R1、R2分別是絕對溫度T1、T2時的電阻值(Ω)。
【零功率電阻值】
在規定溫度下測量熱敏電阻器的電阻值,當由于電阻器內部發熱引起的電阻值變化相對于總的測量誤差來說可以忽略不計時測得的電阻值。
【耗散系數δ(mW/℃)】
耗散系數是指熱敏電阻器消耗的功率與環境溫度變化之比,即
b7fd5266d016092490e73486d40735fae7cd3468.jpg (3.37 KB, 下載次數: 161)
下載附件
2017-7-10 02:46 上傳
式中,W是熱敏電阻消耗的功率(mW);T是熱平衡時的溫度(℃);T0是周圍環境溫度(℃);I是在溫度為T時通過熱敏電阻器的電流(A);R是在溫度為T時熱敏電阻器的電阻值(Ω)。
【時間常數τ(s)】
時間常數τ(s)指的是熱敏電阻器在零功率狀態下,當環境溫度由一個特定溫度向另一個特定溫度突變時,熱敏電阻器阻值變化63.2%所需的時間。
【電阻溫度系數】
電阻溫度系數是指環境溫度變化1℃時熱敏電阻器電阻值的相對變化量。知道某一個型號熱敏電阻器的電阻溫度系數后,就可以估算出熱敏電阻器在相應溫度下的實際電阻值。
0.png (33.57 KB, 下載次數: 186)
下載附件
2017-7-10 02:53 上傳
單片機源程序如下:
- /*---------------------------------------------------------------------*/
- /* --- 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)
2017-7-6 15:01 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|