制冷片温差测量

2023-10-07 22:10
文章标签 测量 制冷 温差

本文主要是介绍制冷片温差测量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

温度数据采集处理:

主要原理是使用ADC采集模拟量并转化为数字量, 并由89C52单片机通过串口通信发送给计算机

外围电路图:

image-20201013215847395

image-20201013215606799

image-20201013220048634

  1. 使用PT100作为作为温度传感器
  2. 使用1/4w色环电阻作为分压电阻
  3. 使用XPT2046作为ADC
  4. 使用89C52作为MCU

数据采集步骤:

  1. 连接外部电路
  2. 设置串口波特率4800
  3. 串口发送 1, 控制MCU开始采集数据
  4. 打开设备电源, 快速调节制冷片电流至指定值
  5. 待数据稳定后(约1min~1min30s), 串口发送 2, 控制MCU停止数据采集
  6. 保存串口数据, 开始数据处理

数据处理:

串口接收的数据为xpt2046采集后的未经处理的值, 通过额外的C++ 程序将这些数据转化为温度:

物理量意义:

image-20201013221422395

计算公式:

image-20201013222436244

一些常量的测量值(实验平台不同, 数值不同):

image-20201013222444682

通过Excel将温度数据转化为折线图:

image-20201013222643223

通过Matlab将数据拟合成光滑曲线:

待完成

数据采集+通信程序源码:

MCU与ADC之间的驱动程序这里不做展开分析, 直接放上源码:

xpt2046.h

#ifndef __XPT2046_H_
#define __XPT2046_H_
#define u1 unsigned char
#define u2 unsigned intsbit din=P3^4;
sbit cs=P3^5;
sbit dclk=P3^6;
sbit dout=P3^7;void delay5us(void);   //误差 0us
u2 adread(u1 com);
u2 readdata();
void senddata(u1 com);#endif

xpt2046.c

#include "reg52.h"
#include "xpt2046.h"void senddata(u1 com)
{u1 f1;cs=0;dclk=0;for(f1=0;f1<8;f1++){com=com<<1;din=CY;dclk=1;dclk=0;}
}u2 readdata()
{u2 dat;u1 f2;cs=0;dclk=0;for(f2=0;f2<12;f2++){dat=dat<<1;dat=dat|dout;dclk=1;dclk=0;}return dat;
}u2 adread(u1 com)
{u1 f1;u2 addat;senddata(com);for(f1=6;f1>0;f1--);dclk=1;dclk=0;addat=readdata();cs=1;return addat;}

AD转换(XPT2046).c

//头文件引入//
#include "reg52.h"
#include "xpt2046.h"
#include "stdio.h"
#define u1 unsigned char
#define u2 unsigned intsbit a1=P2^2;
sbit a2=P2^3;
sbit a3=P2^4;u1 code c1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
u1 v[4];
u1 flag=0,flag2=0,flag3;
float t2;
u2 dat,dat2;
void datapro();//子函数定义//
void delayms(u2 xx)		 	          //延时函数定义//
{u2 i;								 //延时函数两个参数都要  U2u2 o;for(o=xx;o>0;o--)for(i=124;i>0;i--);
}
//中断配置//
void sdeploy()
{T2CON=0x34;IE=IE|0x90;PCON=0x00;SCON=0x50;RCAP2H=0XFF;RCAP2L=0XB1;
/*	IP=0X10;	 */
}
void t1intdeploy()
{TMOD=TMOD|0x10;TH1=0x3C;				   //每50ms溢出一次//TL1=0xb0;TR1=0;IE=IE|0x08;}
void t1int()interrupt 3
{u1 t;TF1=0;TH1=0x3C;				  TL1=0xb0;t++;if(t==2){t=0;flag2=1;}
}
//数据处理//
void datapro()
{dat=adread(0xE4);delayms(1);dat2=adread(0xD4);
}
//数码管显示函数//
void smgdisplay()
{u1 g;for(g=0;g<4;g++){switch(g){case(0):					  //逐个选择case发送段选数据//									 a1=0;a2=0;a3=0;break;case(1):a1=1;a2=0;a3=0;break;case(2):a1=0;a2=1;a3=0;break;case(3):a1=1;a2=1;a3=0;break;}P0=v[g];delayms(1);					   //延时//P0=0x00;delayms(1);					//消影//		   }}
void judge()
{switch(flag){case(1):ES=0;TI=1;printf("Open ADC\n");while(TI==0);TI=0;TR1=1;flag=0;ES=1;break;case(2):ES=0;TI=1;printf("Close ADC\n");while(TI==0);TI=0;TR1=0;flag=0;ES=1;break;case(3):ES=0;TI=1;printf("Error\n");while(TI==0);TI=0;flag=0;ES=1;break;}
}
void main()
{t1intdeploy();sdeploy();v[0]=c1[0];v[1]=c1[0];v[2]=c1[0];v[3]=c1[0];while(1){judge();smgdisplay();if(flag2==1){datapro();v[0]=c1[dat%1000%100%10];v[1]=c1[dat%1000%100/10];v[2]=c1[dat%1000/100];v[3]=c1[dat/1000];t2=(float)dat*5.0/4096.0;flag2=0;ES=0;TI=1;
//			printf("The Voltage is %fV\n",t2);printf("%d\n%d\n",dat,dat2);
//			printf("%d\n",dat2);while(TI==0);TI=0;ES=1;}}	
}//T2中断服务任务分配//
void sint()interrupt 4
{u1 a;RI=0;a=SBUF;	switch(a){case(0x31):flag=1;break;case(0x32):flag=2;break;default:flag=3;}a=0;	 
}

数据处理源码:

#include <iostream>
#include <bits/stdc++.h>
#include <cstdio>
#include <fstream>
#include <sstream>
#include <time.h>using namespace std;int main(int argc, char *argv[]){fstream fIn;fIn.open ("data.txt",ios_base::in);auto fOut=fopen("dataOut1.txt","w+");auto fOut2=fopen("dataOut2.txt","w+");string lineNow;/*** Vcc		输入电压* R1		分压电阻实际阻值* R0_0		测量系统短接阻值* u1		分压电阻电压* u0		PT100电压* r0		PT100电阻* t0		PT100理论计算温度* segDis	单片机原始数据*/const double Vcc=5.03, R1=99.7, R0_0=3.7;double u1, u0, r0, t0;int segDis;stringstream ss;int startTime=clock ();getline(fIn,lineNow);while(lineNow!="Open ADC"){getline(fIn,lineNow);}getline(fIn,lineNow);while(lineNow!="Close ADC"){ss<<lineNow;ss>>segDis;ss.clear();
//		printf("%d\n",segDis);u1=segDis*1.0/4096*Vcc;u0=Vcc-u1;r0=u0/(Vcc-u0)*R1-R0_0;t0=(r0/100-1)/0.00390802;fprintf(fOut,"%lf\n",t0);getline(fIn,lineNow);ss<<lineNow;ss>>segDis;ss.clear();
//		printf("%d\n",segDis);u1=segDis*1.0/4096*Vcc;u0=Vcc-u1;r0=u0/(Vcc-u0)*R1-R0_0;t0=(r0/100-1)/0.00390802;fprintf(fOut2,"%lf\n",t0);getline(fIn,lineNow);}fIn.close ();printf("数据处理结束, 耗时%d mm",clock ()-startTime);return 0;
}

这篇关于制冷片温差测量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/160751

相关文章

温差电现象

温差电现象练习题 1. 两种不同的金属A和B构成温差电偶,冷端温度为0℃,热端温度为T,塞贝克系数为αAB,写出热电势的表达式。 2. 什么是温差电动势?它与哪些因素有关? 3. 解释珀尔帖效应和汤姆逊效应,并说明它们之间的区别。 4. 一块长为10cm,截面积为1mm2 的铜条,两端温度差为100K,铜的电导率为5.8×107 S/m,计算通过铜条的热流密度。 5. 一个温差电偶的热电

R语言统计分析——重复测量方差分析

参考资料:R语言实战【第2版】         所谓重复测量方差分析,即受试者被测量不止一次。本例使用数据集市co2数据集:因变量是二氧化碳吸收量(uptake),自变量是植物类型(Type)和七种水平的二氧化碳浓度(conc)。Type是组间因子,conc是组内因子。Type已经被存储为一个因子变量,还需要将conc转换为因子变量。分析过程如下: # 将conc变量转化为因子变量CO2$c

三维激光扫描点云配准外业棋盘的布设与棋盘坐标测量

文章目录 一、棋盘标定板准备二、棋盘标定板布设三、棋盘标定板坐标测量 一、棋盘标定板准备 三维激光扫描棋盘是用来校准和校正激光扫描仪的重要工具,主要用于提高扫描精度。棋盘标定板通常具有以下特点: 高对比度图案:通常是黑白相间的棋盘格,便于识别。已知尺寸:每个格子的尺寸是已知的,可以用于计算比例和调整。平面标定:帮助校准相机和激光扫描仪之间的位置关系。 使用方法 扫描棋盘:

【无线通信发展史⑧】测量地球质量?重力加速度g的测量?如何推导单摆周期公式?地球半径R是怎么测量出来的?

前言:用这几个问答形式来解读下我这个系列的来龙去脉。如果大家觉得本篇文章不水的话希望帮忙点赞收藏加关注,你们的鼓舞是我继续更新的动力。 我为什么会写这个系列呢? 首先肯定是因为我本身就是一名从业通信者,想着更加了解自己专业的知识,所以更想着从头开始了解通信的来源以及在每一个时代的发展进程。 为什么会从头开始写通信? 我最早是学习了中华上下五千年,应该说朝代史,这个算个人兴趣,从夏

X 射线测厚仪-高效精准,厚度测量的卓越之选

在现代工业的舞台上,对精准度和效率的追求从未停歇。而 X 射线测厚仪,宛如一颗璀璨的明星,以其高效精准的特质,成为厚度测量的卓越之选。 X 射线测厚仪,是科技与智慧的完美结晶。它凭借先进的 X 射线技术,如同一双透视万物的慧眼,能够轻松穿透各种材料,将厚度信息精准地呈现在人们面前。无论是坚硬的金属板材,还是柔软的塑料制品,亦或是富有弹性的橡胶制品,在它的审视下,厚度无处遁形。 高效,是它的另一

Flink全链路延迟的测量方式和实现原理

点击上方蓝色字体,选择“设为星标” 回复”面试“获取更多惊喜 本文已经加入「大数据成神之路PDF版」中提供下载。你可以关注公众号,后台回复:「PDF」 即可获取。 一、背景 Flink Job端到端延迟是一个重要的指标,用来衡量Flink任务的整体性能和响应延迟(大部分流式应用,要求低延迟特性)。 通过流处理引擎竞品对比,我们发现大部分流计算引擎产品,都在告警监控页面,集成了全链路时延指标

示波器测量晶振有没有起振

表笔打到10x 示波器打到10x 然后measure  频率即可得出

sM4040B科学级显微制冷相机特性

sM4040B科学级显微制冷相机特性 sM4040B搭载了 GSENSE4040BSI 3.2 英寸图像传感器,针对传感器固有的热噪声,专门设计了高效制冷模块,使得相机传感器的工作温度比环境温度低达 35-40 度。针对制冷相机常见的低温结雾现象设计了防结雾机制,确保传感器和滤光片表面在低温情况下不会结雾。sM4040B的视频与图像数据通过 USB3 或CameraLink 超高速传输接口传

openlayer的测量面积公式的改进

问题来源: 首先要注意到Polygon内可能含有内部线性环,所以在计算时需要减去环的面积,同时也会有MultiPolygon的存在。所以对之前的公式进行修改。 公式代码: formatArea: function(polygon) {var wgs84Sphere = new ol.Sphere(6362790); //6378137,取该值为了跟sql对应6362789.8747i

【科普】双轴测径仪是根据哪个测量值控制外径尺寸?

单轴测径仪与双轴测径仪都是自带闭环控制功能的在线外径测量设备,单轴测径仪只有一个测头,是根据该测头的检测数据进行控制,这点毋庸置疑,那双轴测径仪这种具备两组测头的设备又是如何控制的,本文就来简单的介绍一下。 JG02-DG系列双通道测径仪内置2组固定式光电测头,可对被测物两个方向的外径尺寸进行实时测量。主要应用于BV线、通讯电缆、塑胶线、电力电缆、光纤、漆包线、铝塑管、钢材、纤维等各类管材、棒材、