拓展板上面的NTC接到开发板的A0接口。对应PA3引脚,第8通道的ADC。
这次用例程的ADC板块的ADC_MultiChannelSingleConversion工程,大致看一下程序的功能如下:
从一开始,ADC就会按顺序在每次按键触发时按顺序逐一转换选定的通道(discontinuous mode).DMA将转换数据到数组,数组一直更新(circular mode)。
当DMA传输完成时,LED1开启;在下一个DMA半传输时,LED1熄灭。
ADC序列完成后(执行三个ADC转换),将计算电压和温度并将其存储在变量中:
uhADCxConvertedData_VoltageGPIO_mVolt
uhADCxConvertedData_VrefInt_mVolt
hADCxConvertedData_Temperature_DegreeCelsius
uhADCxConvertedData_VrefAnalog_mVolt
大致改一下,显示一行转换好的电压值,即hADCxConvertedData_VoltageGPIO_mVolt,另一行显示转换的温度值。
先看一下NTC的datasheet:https://item.szlcsc.com/14214.html
温度与阻值对应的表如图:
NTC的采样电路原理图与公式如图所示:
利用EXCEL计算出对应阻值的采样所得电压值:
取出0-99摄氏度,由于datasheet上面给的是5摄氏度为一步,方便一点我就先计算间隔为线性关系。
定义一个数组表,查表法测试温度,如下:
const unsigned int temptab[]={ //0 to 99? 10k ntc 3380K
886,914,943,972,1001,
1030,1060,1090,1121,1151,
1181,1212,1243,1275,1306,
1337,1368,1400,1431,1463,
1494,1525,1556,1588,1619,
1650,1680,1710,1740,1771,
1801,1830,1859,1889,1918,
1947,1974,2002,2029,2057,
2084,2111,2139,2166,2193,
2212,2236,2259,2282,2306,
2330,2359,2381,2402,2429,
2438,2457,2477,2496,2516,
2535,2552,2569,2587,2603,
2621,2636,2652,2667,2683,
2698,2712,2726,2739,2753,
2767,2779,2791,2804,2816,
2828,2839,2849,2860,2870,
2881,2890,2900,2909,2919,
2928,2936,2945,2953,2962,
2970,2994,2985,2992,3000,
};
原程序是采样A2接口的电压,修改至A0接口的。
部分程序如下:
temp=uhADCxConvertedData_VoltageGPIO_mVolt;
if(temp>3007)
{
couter=100;
}
else if(temp<100)
{
couter=0;
}
else
{
for(couter=0;couter<100;couter++)
{
if(temptab[couter]>temp) break;
}
}
LCD_ShowIntNum(60,120,uhADCxConvertedData_VoltageGPIO_mVolt,4,RED,WHITE,32);
LCD_ShowString(130,120,"mV",RED,WHITE,32,0);
LCD_ShowIntNum(80,90,couter,2,RED,WHITE,32);
Draw_Circle(125,98,3,RED);//画个圆当摄氏度单位的圆圈
LCD_-ShowChar(130,90,'C',RED,WHITE,32,0);
全部程序链接如下:
链接:https://pan.baidu.com/s/1-BfKNi-WrbsB9JX2U_t2Ag
提取码:8888
复制这段内容后打开百度网盘手机App,操作更方便哦
效果如图: