PT100测温 程序+电路 LM358+TL431+PT100+单片机自带AD

电路
在这里插入图片描述
核心程序

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度的误差。
后面会再次优化电路和算法,并且支持多路测温。

原创,未经允许,不得转载。

### PT100温度传感器与LM358运放搭配使用 #### 电路设计原理 PT100是一种常用的铂电阻温度传感器,其阻值随温度变化而改变。为了将这种阻值的变化转换成易于处理的电压信号,通常会使用运算放大器来构建惠斯通电桥电路或差动放大电路LM358是一款双通道低功耗互补金属氧化物半导体(CMOS)运算放大器,适合用于此类应用。 #### 电路连接方式 在实际应用中,可以通过以下方法实现PT100LM358的合作: - **构成惠斯通电桥**:利用四个电阻组成一个平衡电桥结构,其中一个位置放置PT100作为敏感元件;当环境温度发生变化时,PT100的阻抗也会随之变动,从而打破原有的电桥平衡状态并产生微弱的不平衡电压输出。 - **接入差分输入端口**:此部分由两个同相和反相比例系数相同的LM358单元共同完成,负责接收来自上述电桥产生的毫伏级直流偏移量,并对其进行适当比例增益调整以便后续模数转换或其他数据处理环节能够正常工作[^1]。 #### 应用实例说明 下面给出具体的硬件连线示意图以及相应的Arduino代码片段用来读取经过LM358放大的PT100所感应到的实际室温数值。 ```plaintext +Vcc (电源正极) | |--- R1 ---+ | | GND | Vout -> AIN0(Arduino Analog Input Pin) | / +-------/\/\/\-----> LM358 Output /\/\ Rf(反馈电阻) / + - +------< PT100 Temperature Sensor - +--------/ / R2 / GND ``` 其中R1, R2为固定精密电阻,用于形成恒流源给PT100供电;Rf则决定了整个系统的灵敏度即放大倍数。 ```cpp // Arduino Sketch Example Code to Read PT100 with LM358 Amplifier const int analogInPin = A0; // Analog pin where we connect the sensor voltage output float vRef = 5.0; int rawValue; void setup() { Serial.begin(9600); } void loop() { rawValue = analogRead(analogInPin); // Reads the value from the sensor float voltage = rawValue * (vRef / 1024.0); // Convert the digital reading into a voltage. float temperatureCelsius = calculateTemperature(voltage); Serial.print("Voltage: "); Serial.println(voltage); Serial.print("Temperature: "); Serial.print(temperatureCelsius); Serial.println(" C"); delay(1000); } float calculateTemperature(float voltage){ const float refResistor = 470.0; // Reference resistor used in Wheatstone bridge circuit const float pt100ResistanceAtZeroDegree = 100.0; // Resistance of PT100 at 0 degree Celsius const float alphaCoefficient = 0.00385; // Alpha coefficient for PT100 float rPt100 = ((refResistor * voltage)/(vRef-voltage)); // Calculate resistance based on measured voltage return (((rPt100 / pt100ResistanceAtZeroDegree)-1)/alphaCoefficient)*(-1); // Use Callendar-Van Dusen equation approximation } ```
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值