铂金属多路温度巡回检测仪东华大学单片机课程设计报告答案学号尾号为7_第1页
铂金属多路温度巡回检测仪东华大学单片机课程设计报告答案学号尾号为7_第2页
铂金属多路温度巡回检测仪东华大学单片机课程设计报告答案学号尾号为7_第3页
铂金属多路温度巡回检测仪东华大学单片机课程设计报告答案学号尾号为7_第4页
铂金属多路温度巡回检测仪东华大学单片机课程设计报告答案学号尾号为7_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、 单片机课程设计 多路温度检测 单片机课程设计多路温度巡回检测仪的设计及单片机实验 姓名:东京的樱花 学号:10090# 设计题目:7、多路温度巡回检测仪 指导老师:潘#楼主造福东华学子啦,后面程序可以直接运行哦目录1、 项目设计要求32、 方案可行性分析. . 33、 硬件电路设计. . 4(1)、铂电阻测量单元. 4(2)、按键控制单元. 5(3)、AD转换单元. 6(4)、LED数码管显示单元. 7(5)、数据传输上位机单元. 84、 整体硬件设计连接图. 95、软件设计. . 10(1)、软件设计思想. 10(2)、程序流程图. 11(3)、程序清单. 125、 电路pcb原理图及pc

2、b图设计. 136、 系统protues仿真及调试. 157、 结果与展望. . 169、参考文献. . 1610、附录:程序源代码 + pcb 3d模拟图.161、 项目设计要求题7 多路温度巡回检测仪的设计设计一个多路温度检测仪,共有8个测温点,每个点连续检测8次,以平均值代表该点温度,并轮流在LED显示器上显示。测试检测元件为铂热电阻Pt1000, 温度测量范围为100 +500,测量精度为±1。系统每隔10秒完成一个点的测量,测量值除在LED显示器上显示外,还必须通过串行口(RS485)发送到上位机。任何时刻,可以通过按键切换显示通道。2、方案可行性分析在测温系统中,用温度敏

3、感元件通过电路的调整可以把温度信号转换为模拟电压信号,在将模拟电压信号远距离传输并通过A/D转换得到相应的数字信号,通过程序进行处理得到实时的温度数值。铂热电阻测量范围为200850,R0有10 、100和1000三种,分度号分别为Pt10、Pt100和Pt1000。铂热电阻的精度高,体积小,测温范围宽,稳定性好,再现性好,但是价格较贵。其电阻与温度的关系为:当T0时 R(T)= R0(1+AT+BT²) 当T< 0时 R(T)= R0 1+AT+BT²+CT³(T-100) 式中: RT为被测温度T下的阻值,单位为 R0为0下的阻值 T为实际温度值 A为常

4、数3.9083×10³/ B为常数-5.775×107/² C为常数-4.183×1012/4由于我们要测得温度是100-500,所以,不用考虑小于0的情况了。所以公式为:R(T)= R0(1+AT+BT²)由数学知识可以直接解出T=(-A-sqrt(A2-4*B(1-R(t)/R0))/2B(1)因为A、B、R(0)已知,所以只要测到R(t)就能够算出T。所以我们将测量电阻上的电压来算出电阻的阻值,进而得出他现在的温度。2、 硬件电路设计(1)、铂电阻测量单元设计思想:铂金属的阻值会随着温度变化而变化,所以可以通过测量它的电阻来确定

5、温度。我们可以通过串接另一个阻值已知的电阻通过电压的变化而确定铂金属的阻值。由电路知识求得:RV9=3*u/(5-u).(2)式(2)、按键控制单元设计思想:由于有八路信号,所以可以用3*3的矩阵键盘,或者用8各独立的键盘来控制八路信号。我这里由于简化设计就用了8个独立的键盘控制。低电平有效。(3)、AD转换单元设计思想:由于精度要求+-1度,从100-500所以有400个档位,所以要9位(512)或者9位以上的AD转换器才能实现这个精度。我这里使用了TLC1543,这个ad芯片的精度很高,为10位串行逐步逼近型AD转换器(1024)。所以能精确到0.4度。其工作过程分为两个周期:访问周期和采

6、样周期。(4)、LED数码管显示单元设计思想:LED接收来自p0口的数据信号与地址信号,通过地址锁存,分时复用来实现LED数码管的动态显示,我这里用74ls373来作为锁存器,来锁住数据与地址信息。(5)、数据传输上位机单元设计思想:由于rs232传输的距离有限,所以我们这里使用传输距离更远的rs485。Max485位一款rs485。但是由于485电平和rs232电平不符,所以,当我们连接计算机的时候还是要接上max232用来转换电平。4、整体硬件设计连接图软件设计(1)、软件设计思想在本次设计中,mcu主要的工作是将ad采集来的数据,通过一定的计算转化成为温度的值,并且将这个值通过p0口输出

7、到led数码管上。在循环扫描八个检测点的时候,顺便扫描按键部分,看有没有按键被按下,按下则进入按键服务程序,执行按键指定的测量。并通过串口传输到上位机上。由于软件源代码过长,这里简略的写ad部分(详细软件部分见附录)uint ADC(uchar chn1)uchar i;uchar addr8; uint ADresult; AD_eoc=1; AD_cs=0;_nop_();addr8=chn1;addr8<<=4;for(i=0;i<4;i+)/写地址 AD_add=(bit)(addr8&0x80);AD_clk=1;AD_clk=0;addr8<<

8、=1; for(i=0;i<6;i+) /采样AD_clk=1;AD_clk=0;AD_cs=1;while(!AD_eoc);/查询_nop_();ADresult=0;AD_cs=0; /移位传数据for(i=0;i<10;i+)AD_clk=1;ADresult<<=1;m=AD_dat;ADresult+=m;AD_clk=0;AD_cs=1;return(ADresult);(2)、程序流程图(3)、程序清单void delay(uint z)延时z 毫秒void display(num)显示子程序,显示num和数据uint ADC(uchar chn1)AD

9、转换子程序,负责转化模拟信号位数字信号void Send(unsigned char dat)串口发送子程序,负责将收集到的数据发送到上位机上void jianpan(void)键盘检测子程序,负责不断地扫描键盘,看是否有键盘按下void main()主函数5、电路pcb原理图及pcb图设计用altium designer6.9设计并做出原理图pcb图设计画好原理图后电器检查通过后编译,并design-updatato pcb再布局布线覆铜。6、系统protues仿真及调试通过protues仿真,可以了解自己的电路到底能不跑起来,大部分的原件还是找得到的,就是不知道叫什么名字,所以在百度里查查

10、名字后再连线,之后就是通过keil来编译生成的hex文件烧到mcu中去。8、 结果与展望通过本次课程设计,我更深刻理解了单片机,特别是51系列的单片机。当然,我也了解了一点avr的知识。Avr价格上面还是有点高,所以现在51单片机还是有很大的市场的。但是51的引脚比较少,所以还是主要用于简单的控制上面。对于我们大自动化的学生,我们可不要认为会51就好了,至少得学个arm cortex-m3吧。对于有追求,有理想的学生,我们更应该好好学习arm9的内容,以及linux系统。要是更高级的话,x86芯片也可以去研究。可是学校给我们做实验的机会太少了。就那几台设备,而且课内充满做一下,都不到在干什么。

11、对于实验室,我只能说,粥少僧多啊。主要还是没有实验室地皮的问题。建议扩展地皮,要建一个自由实验室,以用来给买不起试验设备的学子一个做实验的平台。我们应该做的是扬长避短,发挥所长,为社会做贡献。9、参考文献郭天祥10天学会单片机视频mcs-51单片机原理与应用张毅刚 刘杰 哈尔滨工业大学出版社郭天祥10天学会PCB教程视频10、附录:程序源代码 + pcb 3d模拟图(见附录)附录#include <reg52.h>#include<intrins.h>#include <math.h>#define uchar unsigned char#define ui

12、nt unsigned intuint num;float num1; int keyval;int o;int i;int q;int rt;int tr;double n2;uchar port,m;uchar ge,shi,bai,qian;sbit wela=P27; int sy;sbit dula=P26; uchar led10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;sbit AD_eoc=P10;sbit AD_clk=P11;sbit AD_add=P12;sbit AD_dat=P13;sbit AD_cs=P1

13、4;sbit S1=P35; /将S1位定义为P1.4引脚sbit S2=P34; sbit S3=P20; sbit S4=P21; sbit S5=P22; sbit S6=P23; sbit S7=P24; sbit S8=P25; void delay(uint z)uint k; for(z;z>0;z-) for(k=1000;k>0;k-); void display(num) n2=num;n2=n2*5/1024; n2=(3*n2)/(5-n2)*1000;/r1=3k电压求电阻 n2=3383.8-8.658*(sqrt(175850-23.1*n2); sy

14、=n2; bai=sy/100%10; shi=sy/10%10; ge=sy%10; P0=0xff; wela=1;wela=0;P0=ledbai; dula=1;dula=0; P0=0Xf7; wela=1;wela=0; delay(1); P0=0xff; wela=1;wela=0;P0=ledshi; dula=1;dula=0;P0=0xef; wela=1;wela=0;delay(1);P0=0xff; wela=1;wela=0; P0=ledge; dula=1;dula=0;P0=0xdf; wela=1;wela=0;delay(1);P0=0xff; wela

15、=1;wela=0;P0=o; dula=1;dula=0;P0=0xfe; /显示哪一路标号 wela=1;wela=0;delay(1);uint ADC(uchar chn1)uchar i;uchar addr8; uint ADresult; AD_eoc=1; AD_cs=0;_nop_();addr8=chn1;addr8<<=4;for(i=0;i<4;i+)/写地址 AD_add=(bit)(addr8&0x80);AD_clk=1;AD_clk=0;addr8<<=1; for(i=0;i<6;i+) /采样AD_clk=1;AD

16、_clk=0;AD_cs=1;while(!AD_eoc);/查询_nop_();ADresult=0;AD_cs=0; /移位传数据for(i=0;i<10;i+)AD_clk=1;ADresult<<=1;m=AD_dat;ADresult+=m;AD_clk=0;AD_cs=1;return(ADresult);void Send(unsigned char dat) SBUF=dat; while(TI=0) ; TI=0; void delay5(void) unsigned char m,n; for(m=0;m<200;m+) for(n=0;n<2

17、50;n+) ; void jianpan(void) if(S1=0) /按键S1被按下 tr=0; for(rt=0;rt<10;rt+)port=0x0a; o=led1;num=ADC(port); tr=num+tr; num=tr/10; for(q=0;q<50;q+)display(num); Send(ledbai); Send(ledshi); Send(ledge); /发送数据 tr=0; if(S2=0) keyval=2; tr=0; for(rt=0;rt<10;rt+) port=0x09; o=led2;num=ADC(port);tr=nu

18、m+tr;num=tr/10; for(q=0;q<50;q+)display(num); Send(ledbai); Send(ledshi); Send(ledge); tr=0; if(S3=0) keyval=3; tr=0; for(rt=0;rt<10;rt+) port=0x08; o=led3;num=ADC(port);tr=num+tr; num=tr/10;for(q=0;q<50;q+)display(num); Send(ledbai); Send(ledshi); Send(ledge); tr=0; if(S4=0) keyval=4; tr=0

19、; for(rt=0;rt<10;rt+) port=0x07;o=led4;num=ADC(port);tr=num+tr;num=tr/10;for(q=0;q<50;q+)display(num); Send(ledbai); Send(ledshi); Send(ledge); tr=0; if(S5=0) tr=0; for(rt=0;rt<10;rt+) port=0x06; o=led5;num=ADC(port);tr=num+tr; num=tr/10; for(rt=0;rt<50;rt+)display(num); Send(ledbai); Se

20、nd(ledshi); Send(ledge); tr=0; if(S6=0) tr=0; for(rt=0;rt<10;rt+) port=0x05; o=led6;num=ADC(port);tr=num+tr; num=tr/10;for(q=0;q<50;q+)display(num); Send(ledbai); Send(ledshi); Send(ledge); tr=0; if(S7=0) tr=0; for(rt=0;rt<10;rt+) port=0x04; o=led7;num=ADC(port);tr=num+tr; num=tr/10;for(q=0

21、;q<50;q+)display(num); Send(ledbai); Send(ledshi); Send(ledge); tr=0; if(S8=0) tr=0; for(rt=0;rt<10;rt+) port=0x03;o=led8;num=ADC(port);tr=num+tr; num=tr/10;for(q=0;q<50;q+)display(num); Send(ledbai); Send(ledshi); Send(ledge); o=led1; ; void main() TMOD=0x20; /TMOD=0010 0000B,定时器T1工作于方式2 S

22、CON=0x40; /SCON=0100 0000B,串口工作方式1 PCON=0x00; /PCON=0000 0000B,波特率9600 TH1=0xfd; /根据规定给定时器T1赋初值 TL1=0xfd; /根据规定给定时器T1赋初值 TR1=1; /启动定时器T1 while(1) jianpan(); tr=0; for(rt=0;rt<10;rt+)port=0x0a; o=led1;num=ADC(port); tr=num+tr;jianpan(); num=tr/10; for(q=0;q<20;q+)display(num);jianpan(); Send(le

23、dbai); Send(ledshi); Send(ledge); tr=0; for(rt=0;rt<10;rt+) port=0x09;jianpan(); o=led2;num=ADC(port);tr=num+tr;num=tr/10; for(q=0;q<30;q+)jianpan();display(num); Send(ledbai); Send(ledshi); Send(ledge); tr=0; for(rt=0;rt<10;rt+) port=0x08; o=led3;jianpan();num=ADC(port);tr=num+tr; num=tr/10;for(q=0;q<30;q+)display(num); jianpan(); Send(ledbai); Send(ledshi); Send(ledge); tr=0; for(rt=0;rt<10;rt+) port=0x07; o=led4; jianpan();num=ADC(port);tr=num+tr;num=tr/10;for(q=0;q<30;q+)d

温馨提示

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

评论

0/150

提交评论