温控检测技术实习报告.docx

上传人:b****5 文档编号:5916726 上传时间:2023-01-02 格式:DOCX 页数:21 大小:216.19KB
下载 相关 举报
温控检测技术实习报告.docx_第1页
第1页 / 共21页
温控检测技术实习报告.docx_第2页
第2页 / 共21页
温控检测技术实习报告.docx_第3页
第3页 / 共21页
温控检测技术实习报告.docx_第4页
第4页 / 共21页
温控检测技术实习报告.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

温控检测技术实习报告.docx

《温控检测技术实习报告.docx》由会员分享,可在线阅读,更多相关《温控检测技术实习报告.docx(21页珍藏版)》请在冰豆网上搜索。

温控检测技术实习报告.docx

温控检测技术实习报告

一、实验目的

1、对工程实际中的测试系统有整体认识,可以自己设计简单的测控系统,提高实践能力;

2从工程应用实际需要出发,能够认识传感器知识、信号处理电路知识、信号采集及单片机程序设计知识、单片机与计算机串口通信知识、简单的上位机监控软件设计知识等知识;

3能够实际操作测控系统接线,并深刻明白测控电路的工作原理。

二、实验内容

1、根据实验目的,了解PT100、温度变送器、单片机MCS51、A/D转换器、固态继电器、光电耦合器等实验器材的结构及原理;

2、了解温度测控系统原理,设计并绘制整体方案图;

3、了解测控系统中单片机的采集电路原理,并绘制出原理图;

4、对温度测控系统的整体电路进行线路连接,并进行检查;

5、熟悉简单的人机交互软件界面,了解测控系统单片机程序,并将程序通过软件写入单片机中,检测整个系统的测控性能;

6、完成相应的实验报告。

三、实验方案设计

1、方案图

2、方案分析:

该测控系统由温度采集电路、控制电路、加热电路三部分组成。

通过热电阻采集水的温度,然后通过温度变送器将采集到的温度信号转换成模拟电流信号,通过电阻进行I/V转换,得到模拟电压信号,再通过A/D转换器将模拟电压信号转换为数字信号,然后输入单片机中,根据单片机中的程序控制,使输出的电信号发生改变,以控制光电耦合器的闭合,光电耦合器的接通与关闭会使固态继电器发生相应的通闭,而固态继电器直接控制加热电路的通闭,从而控制水的加热,继而影响水的温度。

四、元件工作原理

1、热电阻PT100

该电阻为一种接触电阻式敏感元件,属于铂热电阻,随着水的温度变化,其电阻值也会发生相应的变化。

其电阻和温度变化的关系式为:

Rt=R0[1+AT+BT2+C(t-100)T3]

式中:

R0为0℃下的电阻值,R0=100Ω;T为摄氏温度。

A=3.9X10-3B=-5.8X10-7  

T>=0时C=0;T<0时C=-4.183X10-12

电阻与温度呈非线性关系,但当测量精度要求较低时,电阻值与温度的函数关系可以简化为:

Rt=R0(1+AT)

2、温度变送器

其基本工作原理是将热电阻以三线制方式连接在电桥中,其电阻值的改变会改变测量电压,在通过转换将其变为电流信号再输出。

(实验中的温度变送器的输出电流范围为4~20mA)

R1=R2=R3,因此可以求出:

Rt=(2U-E)R/(2U+E)

3、A/D转换器

实验中采用的是TLC2543转换器,它属于11通道的12位串行A/D转换器,采用的是逐次逼近技术。

其内部没有电源,采用的是外部参考电压。

由公式(REF+-REF-)/212得到其参考电压取2.048V,计算出量子化因式为2.048/212=0.5mv。

即若输出电压2.5V,则量子化数为5,换成二进制数为101,据此同理类推。

4、光电耦合器

当输入到发光二极管为低电平时,发光二极管不导通,右侧光敏二极管也因此不通;当输入高电平时,发光二极管导通发亮,光敏二极管因此开通,从而向固态继电器输入电压。

该装置实现了光电之间的转换。

5、固态继电器SSR

是一种全部由固态电子元件组成的新型无触点开关器件,它利用电子元件(如开关三极管、双向可控硅等半导体器件)的开关特性,可达到无触点无火花地接通和断开电路的目的,因此又被称为“无触点开关”。

6、单片机

单片机,是一种微型计算机,能够通过多种形式的借口使其内部程序对外部工作电路进行有效的控制。

四、电气连接图

五、系统连线图

六、程序设计

1#include

2#include

3#include

4

5#define_HI1

6#define_LOW0

7#define_on1

8#define_off0

9

10#defineint_EX00//外部中断0

11#defineint_T01//定时器0中断

12#defineint_EX12//外部中断1

13#defineint_T13//定时器1中断

14#defineint_ES4//串行口可中断

15#defineint_ET25//8052定时器2中断

16

17#defineucharunsignedchar

18#defineuintunsignedint

19

20

21sbitTXC=P3^5;//MAX485

22

23sbitEOC2543=P3^2;//ADC2543

24sbitCLK2543=P1^0;//ADC2543

25sbitDIN2543=P1^1;//ADC2543

26sbitDOUT2543=P1^2;//ADC2543

27sbitCS2543=P1^3;//ADC2543

28

29sbitWDOG=P3^4;//MAX813

30

31sbitADD1=P2^0;

32sbitADD2=P2^1;//ADDRESS

33

34sbitIN1=P0^0;

35sbitIN2=P0^1;

36sbitIN3=P0^2;

37sbitIN4=P0^3;

38

39sbitOUT1=P0^4;

40sbitOUT2=P0^5;

41sbitOUT3=P0^6;

42sbitOUT4=P0^7;

43

44unsignedintoverflow_count=0;

45unsignedintnow_Vco0=0;

46unsignedintnow_Vco1=0;

47unsignedintnow_Vco2=0;

48unsignedintSetP=0;

49ucharT0_INTERVAL;

50ucharbstart=0;

51unsignedintT0_Init;

52

53

54ucharidatarxd232[6];

55ucharidataAddress;

 

56ucharSendBusy;

57

58voiddelay(ucharxms)//delay1-255ms(22.1184M)

59{

601uchari,j;

611for(j=0;j

621{

632for(i=0;i<220;i++)

642{

653_nop_();

663_nop_();

673_nop_();

683_nop_();

693_nop_();

703_nop_();

713

723}

732}

741}

75

76uintpick_ch0(void)//adcCH0

77{

781uchari;//12bits/msb/bin

791uintvol=0;

801CLK2543=_HI;

811DIN2543=_LOW;

821CS2543=_LOW;

831_nop_();

841_nop_();

851_nop_();

861_nop_();

871_nop_();

881CLK2543=_HI;//时钟上升沿写入CH数据"0000"

891_nop_();

901CLK2543=_LOW;

911_nop_();

921CLK2543=_HI;

931_nop_();

941CLK2543=_LOW;

951_nop_();

961CLK2543=_HI;

971_nop_();

981CLK2543=_LOW;

991_nop_();

1001CLK2543=_HI;

1011_nop_();

1021CLK2543=_LOW;

1031for(i=0;i<8;i++)

1041{

1052CLK2543=_HI;//时钟上升沿写入数据"0000_0000"

1062_nop_();

1072CLK2543=_LOW;

1082}

1091CS2543=_HI;

1101for(i=10;i>0;i--)//delay10us

1111while(EOC2543==0);//在EOC=0时等待!

1121CS2543=_LOW;

1131_nop_();

1141_nop_();

1151_nop_();

1161_nop_();

1171_nop_();

 

1181CLK2543=_LOW;

1191for(i=0;i<11;i++)

1201{if(DOUT2543==_HI){vol|=0x01;}

1212elsevol|=0x00;

1222vol=_irol_(vol,1);

1232CLK2543=_HI;//时钟下升沿读出数据,

1242_nop_();

1252CLK2543=_LOW;}

1261CS2543=_HI;

1271_nop_();

1281_nop_();

1291_nop_();

1301_nop_();

1311returnvol;

1321}

133

134uintpick_ch1(void)//adcCH1

135{uchari;//12bits/msb/bin

1361uintvol=0;

1371CLK2543=_HI;

1381DIN2543=_LOW;

1391CS2543=_LOW;

1401_nop_();

1411_nop_();

1421_nop_();

1431_nop_();

1441_nop_();

1451CLK2543=_HI;//时钟上升沿写入CH数据"0001"

1461_nop_();

1471CLK2543=_LOW;

1481_nop_();

1491CLK2543=_HI;

1501_nop_();

1511CLK2543=_LOW;

1521_nop_();

1531CLK2543=_HI;

1541_nop_();

1551CLK2543=_LOW;

1561_nop_();

1571DIN2543=_HI;

1581CLK2543=_HI;

1591_nop_();

1601CLK2543=_LOW;

1611DIN2543=_LOW;

1621for(i=0;i<8;i++)

1631{CLK2543=_HI;//时钟上升沿写入数据"0000_0000"

1642_nop_();

1652CLK2543=_LOW;};

1661CS2543=_HI;

1671for(i=10;i>0;i--)//delay10us

1681while(EOC2543==0);//在EOC=0时等待!

1691CS2543=_LOW;

1701_nop_();

1711_nop_();

1721_nop_();

1731_nop_();

1741_nop_();

1751CLK2543=_LOW;

1761for(i=0;i<11;i++)

1771{if(DOUT2543==_HI){vol|=0x01;}

1782elsevol|=0x00;

1792vol=_irol_(vol,1);

 

1802CLK2543=_HI;//时钟下升沿读出数据,

1812_nop_();

1822CLK2543=_LOW;}

1831CS2543=_HI;

1841_nop_();

1851_nop_();

1861_nop_();

1871_nop_();

1881returnvol;

1891}

190

191uintpick_ch2(void)//adcCH2

192{uchari;//12bits/msb/bin

1931uintvol=0;

1941CLK2543=_HI;

1951DIN2543=_LOW;

1961CS2543=_LOW;

1971_nop_();

1981_nop_();

1991_nop_();

2001_nop_();

2011_nop_();

2021CLK2543=_HI;//时钟上升沿写入CH数据"0010",

2031_nop_();

2041CLK2543=_LOW;

2051_nop_();

2061CLK2543=_HI;

2071_nop_();

2081CLK2543=_LOW;

2091_nop_();

2101DIN2543=_HI;

2111CLK2543=_HI;

2121_nop_();

2131CLK2543=_LOW;

2141DIN2543=_LOW;

2151_nop_();

2161CLK2543=_HI;

2171_nop_();

2181CLK2543=_LOW;

2191for(i=0;i<8;i++)

2201{CLK2543=_HI;//时钟上升沿写入数据"0000_0000"

2212_nop_();

2222CLK2543=_LOW;};

2231CS2543=_HI;

2241for(i=10;i>0;i--)//delay10us

2251while(EOC2543==0);//在EOC=0时等待!

2261CS2543=_LOW;

2271_nop_();

2281_nop_();

2291_nop_();

2301_nop_();

2311_nop_();

2321CLK2543=_LOW;

2331for(i=0;i<11;i++)

2341{if(DOUT2543==_HI){vol|=0x01;}

2352elsevol|=0x00;

2362vol=_irol_(vol,1);

2372CLK2543=_HI;//时钟下升沿读出数据,

2382_nop_();

2392CLK2543=_LOW;}

2401CS2543=_HI;

2411_nop_();

 

2421_nop_();

2431_nop_();

2441_nop_();

2451returnvol;

2461}

247

248voidpick_ch0_16s(void)//采16次取平均值(四舍五入)

249{

2501uintsum_Vco=0;

2511uchari;

2521for(i=0;i<16;i++)

2531{

2542sum_Vco+=pick_ch0();

2552};

2561i=sum_Vco%16;

2571if(i>10)

2581now_Vco0=sum_Vco/16+1;

2591else

2601now_Vco0=sum_Vco/16;

2611}

262

263voidpick_ch1_16s(void)//采16次取平均值(四舍五入)

264{

2651uintsum_Vco=0;

2661uchari;

2671for(i=0;i<16;i++)

2681{

2692sum_Vco+=pick_ch1();

2702};

2711i=sum_Vco%16;

2721if(i>10)

2731now_Vco1=sum_Vco/16+1;

2741else

2751now_Vco1=sum_Vco/16;

2761}

277

278voidpick_ch2_16s(void)//采16次取平均值(四舍五入)

279{

2801uintsum_Vco=0;

2811uchari;

2821for(i=0;i<16;i++)

2831{

2842sum_Vco+=pick_ch2();

2852};

2861i=sum_Vco%16;

2871if(i>10)

2881now_Vco2=sum_Vco/16+1;

2891else

2901now_Vco2=sum_Vco/16;

2911}

292

293

294voidmain(void)

295{

296

297E=0x00;//初始化时禁止所有中断

298TMOD=0x11;//定时器1工作在工作方式2,定时器0工作在方式1,16位定时计数器

299SCON=0x50;//串行口工作在方式1,10位数据收发,1位起始位,8位数据位,1位停止位

300TCON=0x00;//

301

302P1=0xFF;//先写1到各个I/O端口

303P2=0xFF;

304P3=0xFF;

305P0=0xFF;

3061

3071T0_INTERVAL=10;

3081T0_Init=65536-921.6*T0_INTERVAL;

3091

3101if((ADD2==_LOW)&&(ADD1==_LOW))

3111Address=0x03;

3121elseif((ADD2==_LOW)&&(ADD1==_HI))

3131Address=0x02;

3141elseif((ADD2==_HI)&&(ADD1==_LOW))

3151Address=0x01;

3161else

3171Address=0x00;

3181

3191SendBusy=_LOW;

3201TXC=_LOW;//

3211RCAP2H=0xFF;

3221RCAP2L=220;//11.0592M/9600Baud

3231RCLK=_on;//Timer2作为波特率发生器

3241TCLK=_on;

3251TR2=_on;

3261ES=_on;

3271

3281OUT1=0;

3291OUT2=0;

3301OUT3=0;

3311OUT4=0;

3321

3331delay(100);

3341TH0=T0_Init/256;//25ms,fosc=11059200Hz,fosc/12=921600Hz,

3351例如t=25,X=23040,则应从42496开始计数,t=50,X=46080,则应从19456开始计数

3361t=10,X=9216,则应从56320开始计数,t=5,X=4608,则应从60928开始计数

3371TL0=T0_Init%256;

3381ET0=1;//开定时器0中断

3391TR0=1;

3401EA=1;

3411delay(100);

3421

3431do{

3442

3452if(TR0==0)

3462{

3473pick_ch0_16s();//采集

3483if(bstart==1)

3493{

3504if(((int)((now_Vco0*0.5/100.0-4)*18.75*10))

3514OUT1=_LOW;

3524else

3534OUT1=_HI;

3544}

3553else

3563OUT1=_HI;

3573if(SendBusy==_LOW)

3583TR0=1;

3593}

3602}while

(1);

3611

3621}

363

364voidTimer0(void)interruptint_T0using1

365{

 

3661if(overflow_count>=4)

3671{

3682overflow_count=0;

3692TR0=0;

3702}

3711else

3721overflow_count=overflow_count+1;

3731

3741T0_Init=65536-921.6*T0_INTERVAL;

3751TH0=T0_Init/256;

3761TL0=T0_Init%256;

3771

3781}

379

380

381void_RS232()interruptint_ESusing3//RS232接收中断

382{

3831uchari;

3841uchartemp;

3851if(TI==_on)

3861{

3872TI=_off;

3882gotorx_end;

3892}

3901else

3911RI=_off;

3921for(i=1;i<6;i++)//shif

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 自我管理与提升

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1