电路
核心程序
int main(void)
{
u16 adcx;
float temp;
float y1,y2,y3,y4,y5,y6;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
uart_init(115200); //初始化串口波特率为115200
LED_Init(); //初始化LED
Adc_Init(); //初始化ADC
while(1)
{
adcx=Get_Adc_Average(ADC_Channel_5,20);//获取通道5的转换值,20次取平均
y1=(3.0f*(1.0f/21.0f));//桥电压
y2=(float)((adcx*(3.3f/4096.0f))/100.0f);
y3=(float)y1+y2;//PT电阻电压
y4=(float)(2000.0f*y3)/(3.0f-y3);//普通电阻阻值
y5=(float) (y4-100.0f)/0.385f; //电阻
y6=y5+17.2f;
printf("\r\n温度为:");
printf("%f",y6);
printf("度");
LED0=!LED0;
delay_ms(200);
}
}
实物
测试效果
总结
目前和福绿克万用表测温比较了一下,直接计算温差有17度(说明电路和计算存在误差),修正误差以后,和福绿克测温对比,只有2度的误差。
后面会再次优化电路和算法,并且支持多路测温。
原创,未经允许,不得转载。