【GD32F310G-START】NTC温度计
[复制链接]
【GD32F310G-START】电压表 - GD32 MCU - 电子工程世界-论坛 (eeworld.com.cn)
在获取电压后,得到它的电压十分的准确,接上NTC后,立马变成温度计了:
原理图:
1、程序,在ADC获到电压的基础之上增加电阻获取与温度转换:
/*10K NTC 温度与阻值对应表 X轴代表温度 Y轴代表阻值*/
int X_Temp[24] = {-30,-20,-15,-10,-3,-2,-1,0,6,12,18,25,31,37,45,50,57,63,70,76,83,89,94,100};
int Y_Res[24] = {1706211,938797,707223,537697,371848,35241,33567,31908,23698,17794,13498,9900,7625,5925,4288,3529,2709,2177,1701,1386,1101,909,778,649};
/*************************************************
*函数名称:OneDimensionalEquation
*功 能:解一元一次方程 给出两点坐标和第三点的x值或y值 得出第三点y值或x值
*参 数:
*返 回 值:
*************************************************/
float OneDimensionalEquation(int x1,int y1,int x2,int y2,int Unkown_x,int Unkown_y)
{
float k = 0;
float b = 0;
k = (((int32_t)y1-(int32_t)y2)/((int32_t)x1-(int32_t)x2));
b = y1-x1*k;
if(0 == Unkown_x) //如果unknown_x设为0 就是求x的值 否则求y值
return ((float)Unkown_y-b)/k;
else
return ((float)Unkown_x*k+b);
}
/*************************************************
*函数名称:uint8_t Res_To_Temperature(uint16_t NTC_Res)
*功 能:计算真实温度
*参 数:NTC当前阻值
*返 回 值:温度值
*************************************************/
float Res_To_Temperature(uint16_t NTC_Res)
{
uint8_t Loop = 0;
uint8_t StartPoint = 0;
float RealTemp = 0;
/*查找阻值所对应的区间*/
for(Loop = 0;Loop < 17;Loop++)
{
if(NTC_Res > Y_Res[Loop+1])
{
StartPoint = Loop;
break;
}
}
RealTemp = (float)OneDimensionalEquation(X_Temp[StartPoint],Y_Res[StartPoint],X_Temp[StartPoint+1],Y_Res[StartPoint+1],0,NTC_Res);
return RealTemp;
}
float get_temper(uint8_t channel)
{
uint16_t value,R_value;
float R;
value = adc_Channel_Average(ADC_CHANNEL_9);
R_value = (value * 10000)/(4096-value);
return Res_To_Temperature(R_value);
}
主程序:
vref_value = get_temper(ADC_CHANNEL_9);
sprintf(show_adc_str,"%.2f C",vref_value);
LCD_ShowString(18,36,show_adc_str,WHITE,BLUE,32,0);
这样一个温度计可以了,一下步用无线串口发送给RVB2601,完成温度采样。
|