温度调试实验报告_第1页
温度调试实验报告_第2页
温度调试实验报告_第3页
温度调试实验报告_第4页
温度调试实验报告_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

温度检测系统调试实验报告09级电力电子与电力传动张颖1温度检测系统电路原理采用平衡电桥法的温度测量电路。温度传感器采用pt100热电阻,并把它作为测量电桥的一个桥臂。pt100的电阻值在0℃时为100Ω;100℃时为138.5Ω,具体的对照关系可查询分度表。当温度为0℃时,测量电桥平衡,输出为零。一旦温度不为零,电桥平衡被破坏,通过等臂电桥,把PT100据温度变化而引起的微弱的电压变化送到一个差分放大电路,信号经过放大反相后可得到一个在0~100摄氏度内范围为0~2.43v的电压,这样就可以接入c8051f040进行AD转换得到输出对应一定温度值的电压信号。根据多次的实验数据,得出一条直线方程,方程换算为该电压值所对应的温度值。图1温度检测电路原理图2硬件构成硬件系统主要由传感器模块、调理电路、F04单片机和电源模块四部分组成。系统还包括液晶显示。2.1温度传感器PT100简介该电路应用温度传感器PT100。PT100(铂热电阻温度传感器)具有精度高,测温范围宽,使用方便等优点,在工业过程控制和测量系统中得到了广泛的应用。当温度测量范围不大,元件长度和截面积随温度改变引起的阻值变化可以忽略时,热电阻元件的阻值随温度变化可以认为是线性的,可用下式表示:,其中表示0摄氏度时PT100的电阻值100欧姆;表示t摄氏度PT100电阻的阻值;;;经过理论计算:PT100在0~500摄氏度区间的非线性误差为1.2909%;在0~100摄氏度的非线性误差为0.1%,所以在我们的测量范围之内,可以按线性处理。protel制图如图1所示温度检测电路原理图。鉴于电桥的敏感性,对元器件的要求比较高,两个臂上的电阻,即R1,R2最好选择高精度的精密电阻,用万用表从大量普通电阻中筛选几个精度较高的电阻。PCB板图温度检测电路PCB板图2.3温度的标识首先,我们知道在温度为0摄氏度时,PT100的电阻值为100欧姆。假设PT100至于0摄氏度的环境里,调节电位器P2使R6和P2的总电阻为100欧姆达到电桥平衡。而后在温度为70℃时,调节P1使电路的输出达到最大1.748V。而后就可以对其他温度值时的电压进行标定了。实验表明,如此调节之后,对于温度的标定可以带来很大的方便之处。3软件3.1端口设置本模块选择AIN0.0通道AMX0SL=0x00;单端输入AMX0CF=0x00;ADC0开启,连续跟踪模式,对AD0BUSY写1启动ADC0转换,转换结果右对齐ADC0CN=0x80;采用VREF0参考电压,内部温度传感器关闭,内部参考电压产生器开启,内部参考电压输出开启2.43V REF0CN=0x03;禁止ADC0转换结束中断EIE2&=~0x02;禁止ADC0窗口比较中断EIE1&=~0x04。3.2温度数据的处理首先将AD转换得到的数据根据2.3中的方程换算为该值所对应的温度值,注意:由方程直接得到的温度数据若要在液晶屏显示还需要经过一些数据处理,才能准确地显示出来。为了能够精确的得到温度值,实验中,我们采集34组数据,然后经过数据处理,得到的值送显示。3.3液晶显示设计本文设计的液晶显示屏是128x64的。由于市场需求的液晶是多种多样的,例如,64x32、128x64、256x64等等,但是液晶的显示原理都是类似的,只是驱动稍有不同。液晶显示器(LCD)是现在非常普遍的显示器。它具有体积小、重量轻、省电、辐射低、易于携带等优点。根据液晶显示模块使用手册,在半宽字符表与汉字字符表中查找需要显示的字符的ASCII,然后由字符显示的RAM的地址与32个字符显示区域的一一对应关系,找出所要显示的字符的位置。在程序中,通过调用液晶控制相关函数,包括液晶初始化,写数据子程序,写指令子程序,在指定位置显示字符函数等,可以达到所需要的效果。3.4程序/******************************************************************************Copyright(c)2007江苏大学电气学院*Allrightreserved*文件名称:main.c*摘要c8051f040单片机温度数据采集*作者:*完成日期:2009年7月28日******************************************************************************/#include<c8051f040.h>#include<intrins.h>unsignedcharLCD_Ctrl=0;#defineSYSCLK11059200xdataunsignedcharShow_Buf[3][16]={{0xA1,0xA0,0xA1,0xA0,0xA1,0xA0,0xCE,0xDE,0xCF,0xDF,0xA1,0xA0,0xA1,0xA0,0xA1,0xA0},{0xB6,0xE0,0xB2,0xCE,0xCA,0xFD,0xCB,0xAE,0xD6,0xCA,0xBC,0xE0,0xB2,0xE2,0xD2,0xC7}, {0xCE,0xC2,0xA1,0xA0,0xB6,0xC8,0xA1,0xC3,0x20,0x20,0x20,0x20,0x20,0x20,0xA1,0xE6}}; voiddelayus(unsignedchari)//us级延时t=2i+5us{ while(--i);}voiddelayms(unsignedintx)//ms级延时t=xms{ unsignedcharj; while(x--) { for(j=0;j<123;j++){;} }}voidInit_PORT(void){ WDTCN=0x07; WDTCN=0xDE; WDTCN=0xAD; SFRPAGE=0x0F; P0MDOUT=0x00;P0=0xff; P1MDOUT=0x00;P1=0xff; P2MDOUT=0x00;P2=0xff; P3MDOUT=0x00;P3MDIN=0xff;P3=0xff; P4MDOUT=0x00;P4=0xff; P5MDOUT=0x00;P5=0xff; P6MDOUT=0x00;P6=0xff; P7MDOUT=0x00;P7=0xff; SFRPAGE=0x0F; XBR0=0x05; XBR1=0x00; XBR2=0x40; XBR3=0x00;}voidExternal_Crystal(void){ unsignedchari; SFRPAGE=0x0F; OSCXCN=0x67;//配置为外部石英晶振模式,且配置相应频率的驱动电流 for(i=0;i<255;i++);//等待1ms以上 while(!(OSCXCN&0x80));//XTLVLD是否为1,若为1表明外部晶振稳定,可切换到外部时钟 CLKSEL=0x01;//选择外部晶振 OSCICN=0x00;//将内部晶振关闭}voidInit_ADC(void){ SFRPAGE=0x00; AMX0CF=0x00;//单端输入 AMX0SL=0x00;//选择AIN0.0通道 ADC0CF=(SYSCLK/2500000)<<3;//采样频率为2.5MhzPGA增益为1 ADC0CN=0x80;//ADC0开启,连续跟踪模式,对AD0BUSY写1启动ADC0转换,转换结果右对齐 REF0CN=0x03;//采用VREF0参考电压,内部温度传感器关闭,内部参考电压产生器开启,内部参考电压输出开启2.43V EIE2&=~0x02;//禁止ADC0转换结束中断 EIE1&=~0x04;//禁止ADC0窗口比较中断}/*****************************************************************************************************************函数原型 :unsignedintADC(void) **返回 值 :ADCvalue**说 明 :A/D数据处理函数。即为滤波处理,去掉最大值和最小值,数字平滑滤波,AD0BUSY置位启动A/D装换****************************************************************************************************************/unsignedintADC(void){ unsignedinti,j;ADCvalue,ADCvaluemax1=0,ADCvaluemin1=0x0fff,ADCvaluemax2=0,ADCvaluemin2=0x0fff; xdatalongADCvaluesum1=0; xdatalongADCvaluesum2=0; SFRPAGE=0x00; AD0INT=0; AD0BUSY=1; ADCvaluesum2=0; ADCvaluemax2=0; ADCvaluemin2=0xff; for(j=0;j<34;j++) { ADCvaluemax1=0; ADCvaluemin1=0xfff; ADCvaluesum1=0; SFRPAGE=0x00; for(i=0;i<10;i++) { AD0BUSY=1; delayms(28); while(!AD0INT); AD0INT=0; ADCvalue=(ADC0H<<8)+ADC0L; ADCvaluesum1=ADCvaluesum1+ADCvalue; if(ADCvaluemax1<ADCvalue)ADCvaluemax1=ADCvalue; if(ADCvaluemin1>ADCvalue)ADCvaluemin1=ADCvalue; } ADCvalue=(ADCvaluesum1-ADCvaluemin1-ADCvaluemax1)>>3; ADCvaluesum2=ADCvaluesum2+ADCvalue; if(ADCvaluemax2<ADCvalue)ADCvaluemax2=ADCvalue; if(ADCvaluemin2>ADCvalue)ADCvaluemin2=ADCvalue; } ADCvalue=(ADCvaluesum2-ADCvaluemin2-ADCvaluemax2)>>5; return(ADCvalue);}//写数据子程序voidWriteData(unsignedcharDData){ SFRPAGE=0x0F; LCD_Ctrl=LCD_Ctrl|0x04; //RS=1选择数据寄存器 P4=LCD_Ctrl; _nop_();_nop_();_nop_();_nop_(); LCD_Ctrl=LCD_Ctrl&0xfd; //RW=0写 P4=LCD_Ctrl; _nop_();_nop_();_nop_();P7=DData;delayus(100); LCD_Ctrl=LCD_Ctrl|0x01; //E=1 P4=LCD_Ctrl; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); LCD_Ctrl=LCD_Ctrl&0xfe; //E=0 P4=LCD_Ctrl; _nop_();_nop_();_nop_();_nop_(); P7=0xff; delayus(100);}//写指令子程序voidWriteCom(unsignedcharCData){ SFRPAGE=0x0F; LCD_Ctrl=LCD_Ctrl&0xfb; //RS=0选择数据寄存器 P4=LCD_Ctrl; _nop_();_nop_();_nop_();_nop_(); LCD_Ctrl=LCD_Ctrl&0xfd; //RW=0写 P4=LCD_Ctrl; _nop_();_nop_();_nop_();P7=CData;delayus(100); LCD_Ctrl=LCD_Ctrl|0x01; //E=1 P4=LCD_Ctrl; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); LCD_Ctrl=LCD_Ctrl&0xfe; //E=0 P4=LCD_Ctrl; _nop_();_nop_();_nop_();_nop_(); P7=0xff; delayus(100);}voidInit_LCD(void){ unsignedchari; WriteCom(0x30);delayus(100); WriteCom(0x01);delayms(10); WriteCom(0x06);delayus(100); WriteCom(0x0c);delayus(100); WriteCom(0x80); //指定第1行的起始地址 for(i=0;i<16;i++) {WriteData(Show_Buf[0][i]);} WriteCom(0x90); //指定第2行的起始地址 for(i=0;i<16;i++) {WriteData(Show_Buf[1][i]);} WriteCom(0x88); //指定第3行的起始地址 for(i=0;i<16;i++) {WriteData(Show_Buf[2][i]);}}unsignedintTemperprocess(unsignedintTin)//参数传递的是输入电压对应的代码值{ doublet,t1; t=(Tin*2.43)/4096; t1=41.02442*t-8.89405; return((int)(t1*1000));}voidmain(void){ unsignedcharj,sc3,sc2,sc1,sc0; unsignedintTemperadc=0,Temper=0; Init_PORT(); External_Crystal(); Init_ADC(); delayms(500); Init_LCD(); while(1) { Temperadc=ADC(); Temper=Temperprocess(Temperadc); sc3=Temper/10000; sc2=(Temper%10000)/1000; sc1=(Temper%1000)/100; sc0=(Temper%100)/10; Show_Buf[2][9]=0x30+sc3; Show_Buf[2][10]=0x30+sc2; Show_Buf[2][11]=0x2E; Show_Buf[2][12]=0x30+sc1; Show_Buf[2][13]=0x30+sc0; WriteCom(0x8C); for(j=9;j<14;j++) {WriteData(Show_Buf[2][j]);} }}4实验数据根据多次的实验数据,使用直线法得出的方程比较理想,下表是一组测得的实验数据:温度(oC)24262830323436384042444648A/D(mv)79683288793299810251073112411721226127513211372由该组数据可得到一条直线方程为:R=41.02442*d1-8.89405。其中,R为温度值,d1为AD转换得到的电压值。下图是由该组数据得到的曲线图,由图可见该方程在测量范围之内是比较合乎线性的。温度与A/D值对应曲线5总结从了解电路原理

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论