1、温控检测技术实习报告一、实验目的1、对工程实际中的测试系统有整体认识,可以自己设计简单的测控系统,提高实践能力;2 从工程应用实际需要出发,能够认识传感器知识、信号处理电路知识、信号采集及单片机程序设计知识、单片机与计算机串口通信知识、简单的上位机监控软件设计知识等知识;3能够实际操作测控系统接线,并深刻明白测控电路的工作原理。二、实验内容1、根据实验目的,了解PT100、温度变送器、单片机MCS51、A/D转换器、固态继电器、光电耦合器等实验器材的结构及原理;2、了解温度测控系统原理,设计并绘制整体方案图;3、了解测控系统中单片机的采集电路原理,并绘制出原理图;4、对温度测控系统的整体电路进
2、行线路连接,并进行检查;5、熟悉简单的人机交互软件界面,了解测控系统单片机程序,并将程序通过软件写入单片机中,检测整个系统的测控性能;6、完成相应的实验报告。三、实验方案设计1、方案图 2、方案分析:该测控系统由温度采集电路、控制电路、加热电路三部分组成。通过热电阻采集水的温度,然后通过温度变送器将采集到的温度信号转换成模拟电流信号,通过电阻进行I/V转换,得到模拟电压信号,再通过A/D转换器将模拟电压信号转换为数字信号,然后输入单片机中,根据单片机中的程序控制,使输出的电信号发生改变,以控制光电耦合器的闭合,光电耦合器的接通与关闭会使固态继电器发生相应的通闭,而固态继电器直接控制加热电路的通
3、闭,从而控制水的加热,继而影响水的温度。 四、元件工作原理 1、热电阻PT100 该电阻为一种接触电阻式敏感元件,属于铂热电阻,随着水的温度变化,其电阻值也会发生相应的变化。 其电阻和温度变化的关系式为: Rt = R0 1 + A T + B T2 + C( t - 100) T3 式中: R0 为0 下的电阻值,R0 = 100 ; T 为摄氏温度。A=3.9X10-3 B=-5.8X10-7 T=0时 C=0;T0时 C=-4.183X10-12电阻与温度呈非线性关系,但当测量精度要求较低时,电阻值与温度的函数关系可以简化为:Rt = R0 (1 + A T) 2、温度变送器 其基本工作
4、原理是将热电阻以三线制方式连接在电桥中,其电阻值的改变会改变测量电压,在通过转换将其变为电流信号再输出。(实验中的温度变送器的输出电流范围为420mA) 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、为低电平时,发光二极管不导通,右侧光敏二极管也因此不通;当输入高电平时,发光二极管导通发亮,光敏二极管因此开通,从而向固态继电器输入电压。该装置实现了光电之间的转换。5、固态继电器SSR是一种全部由固态电子元件组成的新型无触点开关器件,它利用电子元件(如开关三极管、双向可控硅等半导体器件)的开关特性,可达到无触点无火花地接通和断开电路的目的,因此又被称为“无触点开关”。6、单片机 单片机,是一种微型计算机,能够通过多种形式的借口使其内部程序对外部工作电路进行有效的控制。四、电气连接图五、系统连线图六、程序设计1 #include 2 #include 3 #include 4 5 #defin
6、e _HI 1 6 #define _LOW 0 7 #define _on 1 8 #define _off 0 9 10 #define int_EX0 0 / 外部中断0 11 #define int_T0 1 / 定时器0中断 12 #define int_EX1 2 / 外部中断1 13 #define int_T1 3 / 定时器1中断 14 #define int_ES 4 / 串行口可中断 15 #define int_ET2 5 / 8052定时器2中断 16 17 #define uchar unsigned char 18 #define uint unsigned in
7、t 19 20 21 sbit TXC=P35; /MAX485 22 23 sbit EOC2543=P32; /ADC2543 24 sbit CLK2543=P10; /ADC2543 25 sbit DIN2543=P11; /ADC2543 26 sbit DOUT2543=P12; /ADC2543 27 sbit CS2543=P13; /ADC2543 28 29 sbit WDOG=P34; /MAX813 30 31 sbit ADD1=P20; 32 sbit ADD2=P21; /ADDRESS 33 34 sbit IN1=P00; 35 sbit IN2=P01;
8、36 sbit IN3=P02; 37 sbit IN4=P03; 38 39 sbit OUT1=P04; 40 sbit OUT2=P05; 41 sbit OUT3=P06; 42 sbit OUT4=P07; 43 44 unsigned int overflow_count=0; 45 unsigned int now_Vco0=0; 46 unsigned int now_Vco1=0; 47 unsigned int now_Vco2=0; 48 unsigned int SetP=0; 49 uchar T0_INTERVAL; 50 uchar bstart=0; 51 un
9、signed int T0_Init; 52 53 54 uchar idata rxd2326; 55 uchar idata Address; 56 uchar SendBusy; 57 58 void delay(uchar xms) /delay 1-255ms(22.1184M) 59 60 1 uchar i, j; 61 1 for(j=0;jxms;j+) 62 1 63 2 for(i=0;i220;i+) 64 2 65 3 _nop_(); 66 3 _nop_(); 67 3 _nop_(); 68 3 _nop_(); 69 3 _nop_(); 70 3 _nop_
10、(); 71 3 72 3 73 2 74 1 75 76 uint pick_ch0(void) /adc CH0 77 78 1 uchar i; / 12bits/msb/bin 79 1 uint vol=0; 80 1 CLK2543=_HI; 81 1 DIN2543=_LOW; 82 1 CS2543=_LOW; 83 1 _nop_(); 84 1 _nop_(); 85 1 _nop_(); 86 1 _nop_(); 87 1 _nop_(); 88 1 CLK2543=_HI; /时钟上升沿写入CH数据0000 89 1 _nop_(); 90 1 CLK2543=_LO
11、W; 91 1 _nop_(); 92 1 CLK2543=_HI; 93 1 _nop_(); 94 1 CLK2543=_LOW; 95 1 _nop_(); 96 1 CLK2543=_HI; 97 1 _nop_(); 98 1 CLK2543=_LOW; 99 1 _nop_(); 100 1 CLK2543=_HI; 101 1 _nop_(); 102 1 CLK2543=_LOW; 103 1 for (i=0; i0;i-) /delay 10us 111 1 while (EOC2543=0); /在EOC=0时等待! 112 1 CS2543=_LOW; 113 1 _n
12、op_(); 114 1 _nop_(); 115 1 _nop_(); 116 1 _nop_(); 117 1 _nop_(); 118 1 CLK2543=_LOW; 119 1 for (i=0; i11; i+) 120 1 if (DOUT2543=_HI) vol|=0x01; 121 2 else vol|=0x00; 122 2 vol=_irol_(vol,1); 123 2 CLK2543=_HI; /时钟下升沿读出数据, 124 2 _nop_(); 125 2 CLK2543=_LOW; 126 1 CS2543=_HI; 127 1 _nop_(); 128 1 _
13、nop_(); 129 1 _nop_(); 130 1 _nop_(); 131 1 return vol; 132 1 133 134 uint pick_ch1(void) /adc CH1 135 uchar i; / 12bits/msb/bin 136 1 uint vol=0; 137 1 CLK2543=_HI; 138 1 DIN2543=_LOW; 139 1 CS2543=_LOW; 140 1 _nop_(); 141 1 _nop_(); 142 1 _nop_(); 143 1 _nop_(); 144 1 _nop_(); 145 1 CLK2543=_HI; /
14、时钟上升沿写入CH数据0001 146 1 _nop_(); 147 1 CLK2543=_LOW; 148 1 _nop_(); 149 1 CLK2543=_HI; 150 1 _nop_(); 151 1 CLK2543=_LOW; 152 1 _nop_(); 153 1 CLK2543=_HI; 154 1 _nop_(); 155 1 CLK2543=_LOW; 156 1 _nop_(); 157 1 DIN2543=_HI; 158 1 CLK2543=_HI; 159 1 _nop_(); 160 1 CLK2543=_LOW; 161 1 DIN2543=_LOW; 162
15、 1 for (i=0; i0;i-) /delay 10us 168 1 while (EOC2543=0); /在EOC=0时等待! 169 1 CS2543=_LOW; 170 1 _nop_(); 171 1 _nop_(); 172 1 _nop_(); 173 1 _nop_(); 174 1 _nop_(); 175 1 CLK2543=_LOW; 176 1 for (i=0; i11; i+) 177 1 if (DOUT2543=_HI) vol|=0x01; 178 2 else vol|=0x00; 179 2 vol=_irol_(vol,1); 180 2 CLK2
16、543=_HI; /时钟下升沿读出数据, 181 2 _nop_(); 182 2 CLK2543=_LOW; 183 1 CS2543=_HI; 184 1 _nop_(); 185 1 _nop_(); 186 1 _nop_(); 187 1 _nop_(); 188 1 return vol; 189 1 190 191 uint pick_ch2(void) /adc CH2 192 uchar i; / 12bits/msb/bin 193 1 uint vol=0; 194 1 CLK2543=_HI; 195 1 DIN2543=_LOW; 196 1 CS2543=_LOW;
17、 197 1 _nop_(); 198 1 _nop_(); 199 1 _nop_(); 200 1 _nop_(); 201 1 _nop_(); 202 1 CLK2543=_HI; /时钟上升沿写入CH数据0010, 203 1 _nop_(); 204 1 CLK2543=_LOW; 205 1 _nop_(); 206 1 CLK2543=_HI; 207 1 _nop_(); 208 1 CLK2543=_LOW; 209 1 _nop_(); 210 1 DIN2543=_HI; 211 1 CLK2543=_HI; 212 1 _nop_(); 213 1 CLK2543=_
18、LOW; 214 1 DIN2543=_LOW; 215 1 _nop_(); 216 1 CLK2543=_HI; 217 1 _nop_(); 218 1 CLK2543=_LOW; 219 1 for (i=0; i0;i-) /delay 10us 225 1 while (EOC2543=0); /在EOC=0时等待! 226 1 CS2543=_LOW; 227 1 _nop_(); 228 1 _nop_(); 229 1 _nop_(); 230 1 _nop_(); 231 1 _nop_(); 232 1 CLK2543=_LOW; 233 1 for (i=0; i11;
19、 i+) 234 1 if (DOUT2543=_HI) vol|=0x01; 235 2 else vol|=0x00; 236 2 vol=_irol_(vol,1); 237 2 CLK2543=_HI; /时钟下升沿读出数据, 238 2 _nop_(); 239 2 CLK2543=_LOW; 240 1 CS2543=_HI; 241 1 _nop_(); 242 1 _nop_(); 243 1 _nop_(); 244 1 _nop_(); 245 1 return vol; 246 1 247 248 void pick_ch0_16s(void) /采16次取平均值(四舍五
20、入) 249 250 1 uint sum_Vco=0; 251 1 uchar i; 252 1 for (i=0;i10) 258 1 now_Vco0=sum_Vco/16+1; 259 1 else 260 1 now_Vco0=sum_Vco/16; 261 1 262 263 void pick_ch1_16s(void) /采16次取平均值(四舍五入) 264 265 1 uint sum_Vco=0; 266 1 uchar i; 267 1 for (i=0;i10) 273 1 now_Vco1=sum_Vco/16+1; 274 1 else 275 1 now_Vco1
21、=sum_Vco/16; 276 1 277 278 void pick_ch2_16s(void) /采16次取平均值(四舍五入) 279 280 1 uint sum_Vco=0; 281 1 uchar i; 282 1 for (i=0;i10) 288 1 now_Vco2=sum_Vco/16+1; 289 1 else 290 1 now_Vco2=sum_Vco/16; 291 1 292 293 294 void main(void) 295 296 297 E=0x00 ; /初始化时禁止所有中断 298 TMOD=0x11; / 定时器1工作在工作方式2,定时器0工作在方
22、式1,16位定时计数器 299 SCON=0x50; / 串行口工作在方式1,10位数据收发,1位起始位,8位数据位,1位停止位 300 TCON=0x00; / 301 302 P1=0xFF; /先写1到各个I/O端口 303 P2=0xFF; 304 P3=0xFF; 305 P0=0xFF; 306 1 307 1 T0_INTERVAL=10; 308 1 T0_Init=65536-921.6*T0_INTERVAL; 309 1 310 1 if(ADD2=_LOW)&(ADD1=_LOW) 311 1 Address=0x03; 312 1 else if(ADD2=_LOW)
23、&(ADD1=_HI) 313 1 Address=0x02; 314 1 else if(ADD2=_HI)&(ADD1=_LOW) 315 1 Address=0x01; 316 1 else 317 1 Address=0x00; 318 1 319 1 SendBusy=_LOW; 320 1 TXC=_LOW; / 321 1 RCAP2H=0xFF; 322 1 RCAP2L=220; / 11.0592M/9600 Baud 323 1 RCLK=_on; /Timer2作为波特率发生器 324 1 TCLK=_on; 325 1 TR2=_on; 326 1 ES=_on ;
24、327 1 328 1 OUT1=0; 329 1 OUT2=0; 330 1 OUT3=0; 331 1 OUT4=0; 332 1 333 1 delay(100); 334 1 TH0=T0_Init/256 ; /25ms,fosc=11059200Hz,fosc/12=921600Hz, 335 1 例如t=25,X=23040,则应从42496开始计数,t=50,X=46080,则应从19456开始计数 336 1 t=10,X=9216,则应从56320开始计数,t=5,X=4608,则应从60928开始计数 337 1 TL0=T0_Init%256 ; 338 1 ET0=1
25、; /开定时器0中断 339 1 TR0=1; 340 1 EA=1; 341 1 delay(100); 342 1 343 1 do 344 2 345 2 if(TR0=0) 346 2 347 3 pick_ch0_16s(); /采集 348 3 if(bstart=1) 349 3 350 4 if( (int)(now_Vco0*0.5/100.0-4)*18.75*10)=4) 367 1 368 2 overflow_count=0; 369 2 TR0=0; 370 2 371 1 else 372 1 overflow_count=overflow_count+1; 37
26、3 1 374 1 T0_Init=65536-921.6*T0_INTERVAL; 375 1 TH0=T0_Init/256 ; 376 1 TL0=T0_Init%256 ; 377 1 378 1 379 380 381 void _RS232() interrupt int_ES using 3 /RS232接收中断 382 383 1 uchar i; 384 1 uchar temp; 385 1 if (TI=_on) 386 1 387 2 TI=_off; 388 2 goto rx_end; 389 2 390 1 else 391 1 RI=_off; 392 1 for (i=1; i6; i+) / shif
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1