国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

學(xué)習(xí)筆記|ADC|NTC原理|測溫程序|STC32G單片機(jī)視頻開發(fā)教程(沖哥)|第十九集:ADC應(yīng)用之NTC

這篇具有很好參考價值的文章主要介紹了學(xué)習(xí)筆記|ADC|NTC原理|測溫程序|STC32G單片機(jī)視頻開發(fā)教程(沖哥)|第十九集:ADC應(yīng)用之NTC。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

1.NTC的原理

NTC(Negative Temperature Coefficient)是指隨溫度上升電阻呈指數(shù)關(guān)系減小、具有負(fù)溫度系數(shù)的熱敏電阻現(xiàn)象和材料。該材料是利用錳、銅、硅、鈷、鐵、鎳、鋅等兩種或兩種以上的金屬氧化物進(jìn)行充分混合、成型、燒結(jié)等工藝而成的半導(dǎo)體陶瓷,可制成具有負(fù)溫度系數(shù)(NTC)的熱敏電阻。其電阻率和材料常數(shù)隨材料成分比例、燒結(jié)氣氛、燒結(jié)溫度和結(jié)構(gòu)狀態(tài)不同而變化。現(xiàn)在還出現(xiàn)了以碳化硅、硒化錫、氮化鉭等為代表的非氧化物系NTC熱敏電阻材料。
學(xué)習(xí)筆記|ADC|NTC原理|測溫程序|STC32G單片機(jī)視頻開發(fā)教程(沖哥)|第十九集:ADC應(yīng)用之NTC,STC32,學(xué)習(xí),筆記,單片機(jī)
材料學(xué)中阻值和溫度的關(guān)系,公式: Rt = RT0EXP(Bn(1/T-1/T0))
式中RT、RT0分別為溫度T、T0時的電阻值,Bn為材料常數(shù).陶瓷晶粒本身由于溫度變化而使電阻率發(fā)生變化,這是由半導(dǎo)體特性決定的。
學(xué)習(xí)筆記|ADC|NTC原理|測溫程序|STC32G單片機(jī)視頻開發(fā)教程(沖哥)|第十九集:ADC應(yīng)用之NTC,STC32,學(xué)習(xí),筆記,單片機(jī)

可以看一下實(shí)際的一個表格(溫度和電阻的表也叫RT表)
學(xué)習(xí)筆記|ADC|NTC原理|測溫程序|STC32G單片機(jī)視頻開發(fā)教程(沖哥)|第十九集:ADC應(yīng)用之NTC,STC32,學(xué)習(xí),筆記,單片機(jī)

廠家一般會提供給你這樣一個表格,當(dāng)前溫度對應(yīng)的一個電阻的阻值,那我們把它拉成一個表格以后就可以很清晰的看到:
隨溫度升高,阻值變小,而且它每一個阻值對應(yīng)的溫度都是恒定的。采集出NTC的阻值,來換算出溫度。非常常用的溫度采集的辦法。

開發(fā)板上的NTC

電路圖:
學(xué)習(xí)筆記|ADC|NTC原理|測溫程序|STC32G單片機(jī)視頻開發(fā)教程(沖哥)|第十九集:ADC應(yīng)用之NTC,STC32,學(xué)習(xí),筆記,單片機(jī)
NTC上部接R6的一個10K的一個分壓電阻,與NTC串聯(lián),并且這個NTC邊上并了一個電容(起濾波作用,可忽略)。
實(shí)際的電路示意為:
學(xué)習(xí)筆記|ADC|NTC原理|測溫程序|STC32G單片機(jī)視頻開發(fā)教程(沖哥)|第十九集:ADC應(yīng)用之NTC,STC32,學(xué)習(xí),筆記,單片機(jī)
可以理解為是這么兩個電阻,進(jìn)行的一個分壓,輸出電壓可以按公式計(jì)算。
實(shí)際使用是,單片機(jī)采集到的一個這個腳的電壓,相當(dāng)于就是Vref的一個電壓,也就是我們這里Vref,和單片機(jī)的VREF一致。這邊對應(yīng)的是4096,如果說換算成ADC的話。
也就是可以用adc的數(shù)值去代表,對應(yīng)的一個輸出的一個adc的數(shù)值??梢栽诒砀裆喜檎一蛘卟逯怠?梢宰寙纹瑱C(jī)輕松很多嘛。計(jì)算的到可以用表格,幫助我們很快的計(jì)算出溫度。單片機(jī)盡量不讓它做復(fù)雜的運(yùn)算,我們采集到單片機(jī)的ADC值是不是0-4095,只能采集整數(shù),需要再數(shù)據(jù)處理時日前4舍5入。
學(xué)習(xí)筆記|ADC|NTC原理|測溫程序|STC32G單片機(jī)視頻開發(fā)教程(沖哥)|第十九集:ADC應(yīng)用之NTC,STC32,學(xué)習(xí),筆記,單片機(jī)
假設(shè)采集數(shù)值為3908,則溫度是-35度,那么如果采集值正好是3913,數(shù)值正好卡在3908,3918之間??梢约僭O(shè),它如果說兩個點(diǎn)之間間隙特別近,可近似為一條直線,可進(jìn)行線性插值,
學(xué)習(xí)筆記|ADC|NTC原理|測溫程序|STC32G單片機(jī)視頻開發(fā)教程(沖哥)|第十九集:ADC應(yīng)用之NTC,STC32,學(xué)習(xí),筆記,單片機(jī)
線性插值,得到結(jié)果。

2.NTC的測溫程序編寫

復(fù)制上節(jié)工程14.ADC應(yīng)用,改名為:15.NTC溫度采集,新建\HARDWARE\NTC,單獨(dú)模塊,并將.h文件加入C251引用路徑。
需要新建采集函數(shù),輸入?yún)?shù)是一個0至4095的一個ADC數(shù)值,輸出是一個-40至150度的溫度,溫度換算成整數(shù)-400至1500,放大10倍(保留1位小數(shù))
函數(shù)返回值就是int類型:int Temp_Cal(u16 adc);
以后的場景中不一定是NTC,也可能是PT100等其他傳感器,單獨(dú)用函數(shù)比較容易模塊化管理。
在ntc.c中加入函數(shù)定義及頭文件引用,主函數(shù)里也要調(diào)用:

#include "ntc.h"


//========================================================================
// 函數(shù)名稱:Temp_Cal
// 函數(shù)功能:將讀取到的ADC數(shù)值換算成溫度
// 入口參數(shù): @adc:adc的數(shù)值
// 函數(shù)返回:當(dāng)前的溫度值,保留1位小數(shù),-40至-150度的溫度對應(yīng)的數(shù)值為-400至1500
// 當(dāng)前版本: VER1.0
// 修改日期: 2023
// 當(dāng)前作者:
// 其他備注:
//========================================================================
int Temp_Cal(u16 adc)
{

}

可以把對應(yīng)的參數(shù)數(shù)組先寫過來方便查看,加入3列:adc數(shù)值 溫度 序號,對齊一下。先定義數(shù)組:
有3956,肯定是16位的,數(shù)組定義的數(shù)據(jù)部分需要加大括號,表示賦初值:

u16 adc_table[]=
{ //adc數(shù)值	溫度		序號
	3956, 	//-40		0
	3947, 	//-39		1
	3937, 	//-38		2
	3928, 	//-37		3
	3918, 	//-36		4
	3908, 	//-35		5
	3897, 	//-34		6
	3886, 	//-33		7
	3874, 	//-32		8
	3863, 	//-31		9
	3850, 	//-30		10
	3837, 	//-29		11
	3824, 	//-28		12
	3810, 	//-27		13
	3795, 	//-26		14
	3779, 	//-25		15
	3763, 	//-24		16
	3747, 	//-23		17
	3729, 	//-22		18
	3711, 	//-21		19
	3693, 	//-20		20
	3673, 	//-19		21
	3653, 	//-18		22
	3632, 	//-17		23
	3610, 	//-16		24
	3587, 	//-15		25
	3563, 	//-14		26
	3538, 	//-13		27
	3513, 	//-12		28
	3486, 	//-11		29
	3458, 	//-10		30
	3429, 	//-9		31
	3400, 	//-8		32
	3369, 	//-7		33
	3338, 	//-6		34
	3305, 	//-5		35
	3272, 	//-4		36
	3238, 	//-3		37
	3203, 	//-2		38
	3167, 	//-1		39
	3131, 	//0			40
	3093, 	//1			41
	3055, 	//2			42
	3016, 	//3			43
	2977, 	//4			44
	2936, 	//5			45
	2895, 	//6			46
	2853, 	//7			47
	2811, 	//8			48
	2768, 	//9			49
	2725, 	//10		50
	2682, 	//11		51
	2637, 	//12		52
	2593, 	//13		53
	2548, 	//14		54
	2503, 	//15		55
	2458, 	//16		56
	2412, 	//17		57
	2366, 	//18		58
	2321, 	//19		59
	2275, 	//20		60
	2229, 	//21		61
	2184, 	//22		62
	2138, 	//23		63
	2093, 	//24		64
	2048, 	//25		65
	2003, 	//26		66
	1959, 	//27		67
	1914, 	//28		68
	1871, 	//29		69
	1827, 	//30		70
	1784, 	//31		71
	1742, 	//32		72
	1699, 	//33		73
	1658, 	//34		74
	1617, 	//35		75
	1577, 	//36		76
	1537, 	//37		77
	1498, 	//38		78
	1459, 	//39		79
	1421, 	//40		80
	1384, 	//41		81
	1348, 	//42		82
	1312, 	//43		83
	1277, 	//44		84
	1243, 	//45		85
	1209, 	//46		86
	1176, 	//47		87
	1144, 	//48		88
	1112, 	//49		89
	1082, 	//50		90
	1052, 	//51		91
	1023, 	//52		92
	994	, 	//53		93
	966	, 	//54		94
	939	, 	//55		95
	913	, 	//56		96
	887	, 	//57		97
	862	, 	//58		98
	837	, 	//59		99
	813	, 	//60		100
	790	, 	//61		101
	768	, 	//62		102
	745	, 	//63		103
	724	, 	//64		104
	703	, 	//65		105
	683	, 	//66		106
	664	, 	//67		107
	644	, 	//68		108
	626	, 	//69		109
	608	, 	//70		110
	590	, 	//71		111
	573	, 	//72		112
	557	, 	//73		113
	541	, 	//74		114
	525	, 	//75		115
	510	, 	//76		116
	495	, 	//77		117
	481	, 	//78		118
	468	, 	//79		119
	454	, 	//80		120
	441	, 	//81		121
	429	, 	//82		122
	417	, 	//83		123
	405	, 	//84		124
	394	, 	//85		125
	382	, 	//86		126
	372	, 	//87		127
	361	, 	//88		128
	351	, 	//89		129
	342	, 	//90		130
	332	, 	//91		131
	323	, 	//92		132
	314	, 	//93		133
	305	, 	//94		134
	297	, 	//95		135
	289	, 	//96		136
	281	, 	//97		137
	274	, 	//98		138
	266	, 	//99		139
	259	, 	//100		140
	252	, 	//101		141
	246	, 	//102		142
	239	, 	//103		143
	233	, 	//104		144
	227	, 	//105		145
	221	, 	//106		146
	215	, 	//107		147
	209	, 	//108		148
	204	, 	//109		149
	199	, 	//110		150
	194	, 	//111		151
	189	, 	//112		152
	184	, 	//113		153
	179	, 	//114		154
	175	, 	//115		155
	170	, 	//116		156
	166	, 	//117		157
	162	, 	//118		158
	158	, 	//119		159
	154	, 	//120		160
	150	, 	//121		161
	146	, 	//122		162
	143	, 	//123		163
	139	, 	//124		164
	136	, 	//125		165
	133	, 	//126		166
	129	, 	//127		167
	126	, 	//128		168
	123	, 	//129		169
	120	, 	//130		170
	117	, 	//131		171
	114	, 	//132		172
	112	, 	//133		173
	109	, 	//134		174
	106	, 	//135		175
	104	, 	//136		176
	101	, 	//137		177
	99	, 	//138		178
	97	, 	//139		179
	94	, 	//140		180
	92	, 	//141		181
	90	, 	//142		182
	88	, 	//143		183
	86	, 	//144		184
	84	, 	//145		185
	82	, 	//146		186
	80	, 	//147		187
	78	, 	//148		188
	76	, 	//149		189
	75	, 	//150		190
};

根據(jù)溫度-ADC值計(jì)算表,adc數(shù)值的最大值3956,最小值75,此區(qū)間以外的數(shù)值無效,先剔除:
如果大于數(shù)據(jù)表最大值,直接返回最小值(int類型最小值: -32768),小于最小值,不處理,直接返回最大值,其他情況再進(jìn)行逐一比較:

	if( adc > adc_table[0] )				//溫度大于最小溫度的adc數(shù)值,表示超量程,返回最小數(shù)值
		return -32768;
	else if ( adc < adc_table[190] )		//不處理,直接返回最大值
		return 32767;
	else									//循環(huán)比較
	{
	}

else中比較數(shù)據(jù)的三種情況,等于,小于和大于:

		for( i=0;i<190;i++)					//數(shù)據(jù)的三種情況,等于,小于和大于
		{
			if( adc == adc_table[i] )
			{
				return  i-40;				//換算成溫度減40
			}
			else if( adc < adc_table[i] )
			{
				//不處理,i會++
			}
			else
			{
				return i-1-40;
			}
		}

在demo.c中調(diào)用函數(shù)Temp_Cal進(jìn)行測試。刪除while中的無用代碼,定義變量:int TEMP_VAL;//存放溫度數(shù)值。
假定adc數(shù)據(jù)為1500(用于測試):


	while(1)		//死循環(huán)
	{
		delay_ms(2);
		if( DeviceState != DEVSTATE_CONFIGURED ) 	//
			continue;
		if( bUsbOutReady )
		{
			usb_OUT_done();

            TEMP_VAL = Temp_Cal(1500);              //根據(jù)adc計(jì)算當(dāng)前溫度

            printf("當(dāng)前溫度:%d\r\n",TEMP_VAL);
		}

		if( TIM_10MS_Flag==1 )									//如果10ms到了
		{
			TIM_10MS_Flag = 0;									//清空標(biāo)志位

		}

	}

打開adc初始化,屏蔽VREF_VAL:

	ADC_Init();

	//VREF_VAL = ADC_VrefCal();//adc初始化+電源電壓讀取

編譯,下載,在串口工具中隨意發(fā)送內(nèi)容,單片機(jī)接收到一個數(shù)據(jù)信息后,就可以執(zhí)行if( bUsbOutReady )的內(nèi)容:
發(fā)送任意數(shù)據(jù),顯示:“當(dāng)前溫度:37”,實(shí)現(xiàn)了整數(shù)部分的顯示。
接下來要把小數(shù)部分也顯示出來。保留1位小數(shù)顯示出來,修改:

			else
			{
				i = i - 1;

				temp = adc_table[i] - adc;
				temp = temp *10 / (adc_table[i]-adc_table[i+1]);
				temp += (i-40)*10;
				return temp;
			}

插值計(jì)算示意圖:
學(xué)習(xí)筆記|ADC|NTC原理|測溫程序|STC32G單片機(jī)視頻開發(fā)教程(沖哥)|第十九集:ADC應(yīng)用之NTC,STC32,學(xué)習(xí),筆記,單片機(jī)
如果adc的入口參數(shù)是1500,計(jì)算返回值為379,重新編譯下載,串口工具顯示:“當(dāng)前溫度:379”,已正常實(shí)現(xiàn)。

3.實(shí)戰(zhàn)小練

做一個簡易溫度計(jì)
1.能檢測當(dāng)前的溫度,保留一位小數(shù);(上節(jié)函數(shù)已實(shí)現(xiàn))
2.數(shù)碼管顯示當(dāng)前溫度。在demo.c中的 TIM_10MS_Flag代碼段中實(shí)現(xiàn)??匆幌聰?shù)碼管代碼中要用到的哪幾個。
因?yàn)镹TC的溫度變化比較慢,300-500ms刷新一次即可,定義計(jì)數(shù)變量int count =0;

			count++;
			if (count >= 30)                            //每次延時10ms,30次延時300ms
			{
                count = 0;
                //待延時執(zhí)行代碼部分
			}

修改代碼ADC_Read(3)的返回值作為Temp_Cal的入口參數(shù):

		if( TIM_10MS_Flag == 1 )									//如果10ms到了
		{
			TIM_10MS_Flag = 0;									//清空標(biāo)志位

			count++;
			if (count >= 30)							//每次延時10ms,30次延時300ms
			{
				count = 0;
				TEMP_VAL = Temp_Cal(ADC_Read(3));              //根據(jù)adc計(jì)算當(dāng)前溫度,NTC在通道3上
				SEG0 = TEMP_VAL / 1000 	% 10 ;
				SEG1 = TEMP_VAL / 100 	% 10 ;
				SEG2 = TEMP_VAL / 10 	% 10 +10;			//+10,增加小數(shù)點(diǎn)位的顯示
				SEG3 = TEMP_VAL / 1  	% 10;
			}
		}

P1.3還需要設(shè)置為高阻輸入,利用stc工具:P1M0 = 0x00; P1M1 = 0x08; //P1.3高阻輸入,放在adc初始化之后。
學(xué)習(xí)筆記|ADC|NTC原理|測溫程序|STC32G單片機(jī)視頻開發(fā)教程(沖哥)|第十九集:ADC應(yīng)用之NTC,STC32,學(xué)習(xí),筆記,單片機(jī)
編譯下載,正常顯示溫度。不同開發(fā)板NTC位置可能有區(qū)別,對照原理圖找一下。

總結(jié)

1.學(xué)會使用NTC測量溫度。
2.舉一反三,可以了解別的例如PT100等的電阻測溫。
3.ADC章節(jié)結(jié)束,課外可以嘗試別的ADC的傳感器。

課后練習(xí)

給今天的溫度計(jì)增加如下功能:
1.增加開關(guān)機(jī)按鍵,開機(jī)數(shù)碼管顯示—,關(guān)機(jī)數(shù)碼管不顯示
2 開機(jī)之后按下測量鍵,測量20次數(shù)據(jù),間隔50ms測量一次,并計(jì)算平均值并顯示。
3.測量完成蜂鳴一聲,LED(背光燈)點(diǎn)亮三秒后熄滅。
4.30秒不操作自動關(guān)機(jī)。
最后希望大家課后去看看試驗(yàn)箱程序里的關(guān)手ADC的代碼,學(xué)習(xí)和理解下別人好的代碼。文章來源地址http://www.zghlxwxcb.cn/news/detail-727841.html

到了這里,關(guān)于學(xué)習(xí)筆記|ADC|NTC原理|測溫程序|STC32G單片機(jī)視頻開發(fā)教程(沖哥)|第十九集:ADC應(yīng)用之NTC的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包