当前位置:文档之家› 多路温度采集器设计

多路温度采集器设计

J I A N G S U U N I V E R S I T Y 《嵌入式项目应用实践》恭喜你学院名称:计算机科学与通信工程学院班级:计院的孩子小组成员:雷锋教师姓名:你猜猜2016年 5 月 10日一.实验题目多路温度采集系统的设计。

二.实验要求a)使用PROTEUS 8和ARDUINO IDE 进行硬件电路设计和MCU程序设计b)使用ALTIUM DXP 进行PCB版图设计c)三个人一组,完成项目。

每组交一份报告,一份PPT并答辩。

1.使用PROTEUS 8和ARDUINO IDE 进行硬件电路设计和MCU程序设计:将三种温度采集的温度值显示在屏幕上,同时利用串口输出温度值。

d)分别使用LM35、DS18B20、MAX6657器件进行温度采集,使用ARDUINO设计MCU程序。

e)时用拨动开关进行温度来源选择,开关导通时,对应LED点亮,采到的温度要输出到液晶屏和串口。

即最多可以同时显示3个器件采集的温度,最少1个。

当一个都没选时,用蜂鸣器提示。

f)设计时可能数字引脚不够,此时,A0可以做为14脚处理,A1做为15脚,以此类推。

2.使用ALTIUM DXP进行PCB版图设计a)在DXP中绘制原理图。

b)注意:DXP中没有MAX6675芯片,需自己创建原理图元件和PCB封装。

c)液晶屏用合适的接线座替代或自行设计。

d)增加电源变压器插座(假设输入为8V)和LM7805稳压芯片将电压稳定在5V,并做为系统供电。

e)进行PCB版图设计,即进行PCB层数设置、元件布局和布线。

设计时要考虑线宽、布线规定、防噪声设计等。

f)注意:元件位置要合理,便于用户使用。

三.实验内容:1. PROTEUS的使用方法。

Proteus是一个完整的嵌入式系统软、硬件设计仿真平台。

主要使用流程:a)添加元件到元件列表中:在模型选择工具栏中选元件(默认),单击 P 按钮,出现挑选元件窗口,通过关键字 Keywords 筛选,筛选出所需的avr处理器,双击将其放入元件列表;同样的方法放入1-wire温度输出、TCK、从类别 Resistor(电阻)中利用关键字 430R 找出并放入 1000欧姆的电阻,从 Optoelectrics(光电器件)中挑选出不同颜色的发光二极管: LED-GTEENb)将元件放入原理图编辑窗口:在元件列表中左键选取Atmega328p,在原理图编辑窗口中单击左键,这样avr处理器就被放到原理图编辑窗口中了。

同样放置其它各元件。

如果元件的方向不对,可以在放置以前用方向工具转动或翻转后再放入。

左键选择模型选择工具栏中的终端接口图标:从模型中挑选出地线-GROUND和电源-POWER,并在原理图编辑窗口中左击放置到原理图编辑窗口中。

c) 连线按样图绘制电路连线,这里芯片采用了网络标签的方法实现电路连接,即在输入端绘制一小段导线后双击放置节点并结束布线,然后在该线段上放置网络标签,输入标签名称,然后在需要测量的导线上也放置同样的标签,即相当于将这两点连接起来了。

d)仿真对于纯硬件电路可以直接通过仿真按钮进行仿真。

而单片机需要下载程序后才能运行,所以要将事先准备好的仿真程序调试文件或目标文件下载到单片机芯片中。

本例用的是:pro3.hex。

双击元件,出现 Edit Componet 对话框,在 Program File 中单击出现文件浏览对话框,找到pro3.hex 文件,单击确定即将仿真程序装入单片机,单击 OK退出。

然后单击开始仿真,此时可以看到程序的运行结果。

说明:仿真时,元件引脚上的红色代表高电平,兰色代表低电平,灰色代表悬空。

e)MCU程序设计(附源代码)Arduino IDE界面分成三个部分,最上面是工具栏,中间为代码编辑区域,底部为消息通知区。

工具栏中包含6个按钮。

在工具栏下边是打开程序的标签,标签上有程序的文件名。

工具栏明细:在编辑器中输入相应代码后生成.hex文件,然后在proteus进行第4步仿真,即双击元件找到相应的.hex文件即可。

2. 设计完成的PROTEUS 电路图。

3. DXP原理图的设计a.加载元器件库并找到相应的元器件进行放置例如要搜索三端稳压器7805 元件相关的可以在Seach Criteria(搜索标准)选项区域中Name文本框中键入L7805,选择Contains,单击Search 按钮开始搜索,查找结果会显示在Result 对话框中b.调整元器件位置并设置元器件属性c.连接导线、放置电源与接地用绘制导线工具来连接元器件间的引脚d.更新元器件编号e.保存文件并编译4. 设计完成的DXP 原理图。

5. PCB设计a.检查完原理图元件封装后,生成网络表b.创建PCB 文档并保存c.设置工作层,设置捕捉栅格(2.5mm),定义原点并绘制电路板物理边界及电气边框d.加载元件封装库,网络表及元件,单击execute changes按钮和close按钮,即可看见载入的元件和网络飞线e.自动布局及手动布局执行菜单命令Tools/Auto Placement/Auto Placer,因为本实验元器件只有17个,选择分组布局。

然后手工调整元件布局,如移动元件,双击元件设置旋转f.自动布线执行Design/Rules 菜单命令,设置导线宽度规则Width,设地线GND导线宽度为60mil(min:50mil,max:80mil ),电源导线宽度为50mil(Min:40mil,Max:60mil)6. 设计完成的PCB 图。

这个图太乱,自己按步骤来 5. 元件清单元件名称 proteusDXP PCB avr 处理器Atmega328p ATmega8L-8PC Atmel Microcontroller 8-Bit AVR.IntLibDS128B20DS151820Dallas Sensor Temperature Sensor.IntLib模拟信号温度输出LM35NSC Temperature Sensor.IntLib 电阻RESRes19芯D插座COMPIM Miscellaneous Devices.IntLib 四路拨动开关DIPSW_4 MiscellaneousConnectors.IntLib 液晶屏LM016 LCD1 蜂鸣器6. 设计时遇到的问题。

1. proteusa )添加发光二极管原件时,直连的电阻倘若阻值过大,则二极管不亮。

一开始选择了1000欧姆的电阻,后来改为100欧姆的电阻。

b )DS18B20温度采集器需要添加串口输出显示屏。

未添加前,采集到的温度在串口输出正常,但是在液晶屏上显示的温度始终为-127摄氏度;添加串口输出显示屏后,串口及液晶屏输出温度均显示正常。

c )最开始使用的Speaker 蜂鸣器需要连接三极管放大电路才能发出声音。

Sounder 则不需要,因此更改为Sounder 蜂鸣器。

d )第一次检查时忘记加串口输出的代码导致串口输出不受控制,修改代码后串口输出正常。

2. DXP 原理图设计a )DXP 中没有MAX6675芯片,需自己创建原理图元件和PCB 封装。

封装过程:1.新建.schlib 文件,用于原理图元件的封装2.新建.pcblib 文件,用于PCB 图的封装3.新建library 工程文件,将以上两个文件放入,编译后即可形成库文件b)液晶屏采取自行设计的方式,自己画图并封装,步骤同上。

c)根据实验要求增加电源变压器插座(假设输入为8V)和LM7805稳压芯片将电压稳定在5V,并做为系统供电。

在元件库中并未找到上述两种元件,我们采取PWR2.5为系统供电,而L78M05CV的输出电压在4.75-5.25之间满足实验要求。

3.PCB设计a)导入原理图时Atmega芯片缺失,不明原因,在DXP中删除该元件并重新放入后,PCB导入成功。

7.电路设计的考虑。

A)p roteus*温度在液晶屏上的显示布局*Led和所采集的温度的对应关系B)D XP原理图在与proteus电路相吻合的基础上,增加电源变压器插座和稳压芯片将电压稳定在5V,并做为系统供电C)P CB设计*在原理图基础上,进行合理的布局和布线,满足功能要求及美观,元件位置要合理,便于用户使用。

*稳压芯片用来稳定电压,保证工作电路的稳定性*高电平与低电平压差较小,不考虑分压*不用的I/O接口不要悬空防止受外界干扰而成为振荡信号四.实验感想经过几个星期的努力,我们小组完成了这个多路温度采集系统设计的实验,它实现了简单的温度采集功能,可以将三种温度采集的温度值显示在屏幕上,同时利用串口输出温度值。

在这次实验中,我们使用了LM35、DS18B20、MAX6657器件进行温度采集,同时也实现了LED灯的点亮与温度的输出,多温度和单温度的采集等功能,并绘制了相应的DXP原理图及PCB图。

在第一次检查proteus 设计时我们小组还存在许多的不足之处,如输出不受控制,以及没有声音等问题。

但是在之后,我们逐字斟酌实验指导书,并与老师和同学进行了讨论与交流,查阅资料后,找到了解决问题的办法。

原理图及PCB图则是根据实验课上学到的知识以及研读实验指导书来完成的。

通过这次的课程设计,我们在PROTEUS使用以及电路的设计方面的技能提高了不少,还学到了其他方面的东西,比如做设计的要领,IDE软件的使用等等。

同时还学会了开发设计需要团队精神。

我们每个小组成员都付出了努力,比如程序设计,画图,文档制作等工作。

每个成员都发挥了不同的努力使得完成的效率大大提高。

在今后的工作中也要加强团队合作精神。

这次实验的难度主要在于作业量较大,除了proteus的设计与调试,原理图与PCB的设计也需要耐心和细心才得以完成,这离不开我们小组每个人的努力。

更要感谢申老师对我们的的指导和他对我们严格的要求。

起初的几天,我们查阅资料,从书中找,上网查,但是始终没有一个具体方案,经过申老师对我们的指点,我们可以从宏观把握整个实验。

之后几天,我们逐个问题攻破,把每块都制作出来,然后整合成我们所需要的程序,刚开始还调试不出来,经过我们小组成员的努力,最后我们终于弄好了。

这次实验让我们受益匪浅,也实实在在的学到了不少东西,尤其是严谨的态度。

五.实验源代码(arduino)。

/*在串口输出显示正常,DS18B20偶尔会出现-127,并不妨碍程序正常显示//DS18B20#include <OneWire.h>#include <DallasTemperature.h>#define ONE_WIRE_BUS 6OneWire oneWire(ONE_WIRE_BUS);DallasTemperature sensors(&oneWire);//LM35int sensorValue=0;float float_sensorValue;//TCK#include "Max6675.h"Max6675 ts(8, 9, 10);//16#include <LiquidCrystal.h>LiquidCrystal lcd(12, 11, 5, 4, 3, 2);int swpin1=A1;int swpin2=A2;int swpin3=A3;int nullpin=13;int sta1,sta2,sta3;void setup() {Serial.begin(9600);//LM35//TCKts.setOffset(0);//16pinMode (swpin1,INPUT);pinMode (swpin2,INPUT);pinMode (swpin3,INPUT);pinMode (nullpin,OUTPUT);lcd.begin(32, 2);//DS18B20Serial.println("Dallas Temperature IC Control Library Demo"); sensors.begin();}void loop() {delay(1000);lcd.clear();sta1=digitalRead(swpin1);sta2=digitalRead(swpin2);sta3 =digitalRead(swpin3);//LM35sensorValue = analogRead(A0);float_sensorValue=(float)sensorValue/1023*500;if(sta1==LOW){lcd.print("LM35");lcd.setCursor(0, 1);lcd.print(float_sensorValue,1);Serial.print("Temperature for the LM35 is: ");Serial.println(float_sensorValue,1);}//TCKif(sta2==LOW){lcd.setCursor(5, 0);lcd.print("TCK");lcd.setCursor(5, 1);lcd.print(ts.getCelsius());Serial.print("Temperature for the TCK is: ");Serial.println(ts.getCelsius(), 2);}//DS18B20sensors.requestTemperatures();if(sta3==LOW){lcd.setCursor(10, 0);lcd.print("DS18B20");lcd.setCursor(10, 1);lcd.println(sensors.getTempCByIndex(0));Serial.print("Temperature for the DS18B20 is: "); Serial.println(sensors.getTempCByIndex(0));}//NULLif(sta1 !=LOW&&sta2 !=LOW && sta3 !=LOW) {digitalWrite(nullpin,LOW);}else{digitalWrite(nullpin,HIGH); }}。

相关主题