1、传感器工程化考试设计说明书1概述21.1选题的目的和意义 22总体设计方案 2.2.1总体硬件设计 23系统硬件电路设计 3.3.1 单片机及相关电路 33.1.1. 单片机介绍33.1.2. 复位电路43.2 传感器的选用 63.2.1. 光敏电阻的的 A/D转换63.2.2. DS18B2083.2.3. ADC0832转换器83.2.4. ADC0832 功能特性94系统软件设计1.04.1程序总体思路 105硬件与软件的测试 .105. 1硬件测试105.1.1 .电路板初步测试 105.1.2 . LCD1602夜晶屏模块测试 115.1.3 .电路图及原理图115.2软件测试125
2、.2.1. 软件初步测试 125.2.2. 程序如下:126. 1实物的调试216.1.1.实物展示21参考文献25.致 谢 词25独撰声明独1概述1.1选题的目的和意义21世纪是信息化的世纪,各种电信和互联网新技术 ,物联网工程推动了人类文明的 巨大进步。在科学技术得到显著增强的时候,人们对自己的生活提出了更高的要求。电 子化控制系统就在这种条件下孕育而生。;也可以在下班途中,预先将家中的空调打开、 让热水器提前烧好热水、电饭煲煮好香喷喷的米饭。2总体设计方案2.1总体硬件设计本设计通过数据采集模块,实时的采集环境当中三种参数:温度值、湿度值、光照 值。将数据进行简单的编码后再通过无线模块将
3、六种参数数据发送至接收模块。接收模 块通过无线模块接收六个参数的数据,为了达到上述功能,主要设计的硬件模块有:单 片机控制最小系统、温度、热释电模块、光照传感器模块、LCD1602S示模块、控制电路模块系统显示模块STC89C52RC29DS18B20温度传感器控制电路模块图1数据采集与控制模块总体框图3系统硬件电路设计3.1 单片机及相关电路3.1.1. 单片机介绍STC89C5左一种低功耗、高性能CMOS8:微控制器,具有8K在系统可编程Flash 存储器。在单芯片上,拥有灵巧的 8位CPU和在系统可编程Flash ,使得STC89C5纳 众多嵌入式控制应用系统提供高灵活、超有效的解决方案
4、。具有以下标准功能:8k字节Flash , 512字节RAM 32位I/O 口线,看门狗定时器,内置4KBEEPROMMAX810 复位电路,三个16位 定时器/计数器,一个6向量2级中断结构,全双工用行口。另 外STC89X52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下, CPU停止工作,允许RAM定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。 最高运作频率35Mhz,6T/12T可选。TQ F3.CI JX-1 Pi. I 叵话2 T3. 3 也tiA F . |-3. fi i
5、o.pa. 7KTU3 mmF匚E匚EFEEEE匚E.LI.IaLr匚 JLRS HrHULMrurpMT本其原理图如图3所示:心U) 6 媚口 /口. 1 Ull JC 2 dij iw.a wj 也打UH p0- S- .1D 5 PD.C didi;l 7 MIT EAILL. T丽江 咐MP2a 工”5 JL. e .kJ b 5/113 ?2, 1712 2fu!: 厚2加4 吧::弓J2- d m.k图2 STC89C52弓唧图图3 STC89C52实物图STC89C52勺主要性能特点如下: 与MCS-5俾片机产品兼容 256字节内部RAM 8KB Flash ROM,可以榛除10
6、00次以上,数据保存10年 电源控制模式 全静态操作:0Hz33Hz 三级加密程序存储器 32个可编程I/O 口 三个16位定时器/计数器 看门狗定时器 双数据指针 全双工UARTM亍通道 八个中断源3.1.2. 复位电路复位是单片机的初始化操作。其主要功能是把PC始化为0000H,使单片机从0000H 单元开始执行程序。89系列单片机的复位信号是从 RST引脚输入到芯片内的施密特触 发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RSHI脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPUS可以响应并将系统复位。单片机 系统的复位方式有:手动按钮复位和上电复位。产生复位
7、信号的电路逻辑如图4所示。RST.,复位信号的电路逻辑图图4整个复位电路包括芯片内、外两部分。外部电路产生的复位信号(RST)送至施密特触发器,再由片内复位电路在每个机器周期的 S5P2时刻对施密特触发器的输出进行采样,然后才得到内部复位操作所需要的信号。复位操作有上电自动复位和按键手动复位两种方式。STC89C52勺上电复位电路如图5所示,只要在RSTS位输入引脚上接一电容至 Vcc 端,下接一个电阻到地即可。对于CMO型单片机,由于在RST端内部有一个下拉电阻, 故可将外部电阻去掉,而将外接电容减至 1?F。上电复位的工作过程是在加电时,复位电路通过电 容加给RST端一个短暂的高电平信号,
8、此高电平信号随着 Vcc对电容的充 电过程而逐渐回落,即RS础的高电平持续时间取决于电容的充电时间。 为了保证系 统 能够可靠地复位,RST端的高电平信号必须维持足够长的时间。上电时,Vcc的上升时间约为10m6而振荡器的起振时间取决于振荡频率,如晶振频率为10MHz起振时间为1mq晶振频率为1MHz起振时间则为10ms在图2的复位电路中,当Vcc掉电时, 必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电 压将不会对器件产生损害。另外,在复位期间,端口引脚处于随机状态,复位后,系统 将端口置为全“1”态。如果系统在上电时得不到有效的复位,则程序计数器 PC将得 不
9、到一个合适的初值,因此,CPK能会从一个未被定义的位置开始执行程序。VCCX图5上电复位电路按键手动复位有电平方式和脉冲方式两种。其中,按键电平复位是通过使复位端经 电阻与Vcc电源接通而实现的,具电路如图 6所示。而按键脉冲复位则是利用 RC微分 电路产生的正脉冲来实现的,具电路如图 6所示。图6按键电平复位图7 按键脉冲复位电路图3.2 传感器的选用3.2.1. 光敏电阻的的A/D转换光敏传感器分以下几类:1,光敏电阻型。代表器件有 LXD5506型硫化镉光敏电阻。2,光敏二极管型(包括光敏三极管)。品种很多应用最广泛,例如硅光敏二极管2CU2B3,光伏电池型。2DU3。4,热效应红外光型
10、。本次选用光敏电阻,光敏电阻器是利用半导体的光电效应制成的一种电阻值随入射 光的强弱而改变的电阻器;入射光强,电阻减小,入射光弱,电阻增大。光敏电阻如图 10所示。图8 光敏电阻光敏电阻器一般用于光的测量、光的控制和光电转换(将光的变化转换为电的变 化)。光敏电阻器的阻值随入射光线(可见光)的强弱变化而变化,在黑暗条件下,它 的阻值(暗阻)可达150Mg欠,在强光条件(100LX)下,它阻值(亮阻)仅有几百至数 千欧姆。我们在实际测量中,先将光敏电阻用黑色胶布粘贴遮光, 然后测量其两端电压, 在15k欧姆左右,然后去除黑色胶布,用强光照射测量其两端电压,在400欧姆左右。其变化值很大,所以我采
11、用连接 4.7k的比较电阻接入然后将中间比较点输入 ADC0809 的IN0输入口,来测量电压的变化。光敏电阻比较图如 14所示。图9光敏电阻电压比较图光敏电阻通过AD转换的原理是,当光照很强的情况下。光敏电阻的阻值比较小,在400欧姆左右,那么通过计算IN0 口的输入电压大约是4.6v左右。而当遮光的情况 下。光敏电阻的阻值很大。大约15k左右。通过计算计算IN0 的输入电压大约是左右1.2v左右,我经过实际测量和得到参数是强光情况下电压4.2v,而在遮光情况下,电压时1.3v。所以我们的电压变化范围是 1.3v至U4.2v ,电压差是2.9v。由于ADC0832 输出,所以我们将2.9v的
12、电压差分成255份,这样便可以算出光线强度的数据。3.2.2.DS18B20DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式, 磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877 , LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的 DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体 积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。图12 DS18B2姗度传感器1:技术性能描述、独特的单线接口方式,DS18B20在与微处理器连接时
13、仅需要一条口线即可实现微处理器与 DS18B20的双向通讯。、测温范围一55C+125C,固有测温分辨率 0.5 C。、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低, 从而造成信号传输的不稳定。、工作电源:35V/DC、在使用中不需要任何外围元件、测量结果以912位数字量方式串行传送、不锈钢保护管直径6、适用于 DN1525, DN40DN250各种介质工业管道和狭小空间设备测温、 标准安装螺纹 M10X1, M12X1.5, G1/2”任选、PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。3.2
14、.3. ADC0832转换器ADC0832t一个单片集成、单独供电、低功耗、8-bit CMOS:据获取器件。PCF8591具有4个模拟输入、1个模拟输出和1个串行I2C总线接口。ADC0832勺地址引脚A0, A1可用于硬件地址编程,允许在同个I2C总线上接入ADC083潞件,而无需额外的硬件。在ADC083湍件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行 的方式进行传输。ADC0832勺功能包括多路模拟输入、内置跟踪保持、8-bit模数转换和8-bit数模转换。ADC0832勺最大转化速率由I2C总线的最大速率决定。ADC083即路图7所示。ADC矮桨Pl 1 1CH0
15、24CS VCCCHO CLKCHt DOGND DI_TP15图13 ADC0832电路图3.2.4. ADC0832功能特性 8位分辨率; 双通道A/D转换; 输入输出电平与 TTL/CMOSf兼容; 工作频率为 250KHZ,转换时间为 32 pS; 一般功耗仅为 15mW 8P、14PDIP (双列直插)、 PICC多种封装; 商用级芯片温宽为 0 C to +70 0 C: CS_片选使能,低电平芯片使能。 CH0模拟输入通道 0,或作为IN+/-使用。 CH1模拟输入通道 1,或作为IN+/-使用。 GND芯片参考 0电位(地)。 DI数据信号输入,选择通道控制。 DO数据信号输出
16、,转换数据输出。CLK芯片时钟输入图14 ADC0832引脚4系统软件设计4.1 程序总体思路我这个设计的思路是:分别编写数据采集模块和数据接收模块的程序。数据采集模块主要是采集温度、湿度、光照、的数值,将采集到的数据通过LCD1602显示出来。同时在单片机中进行数据 的处理,然后达到控制继电器的目的。4.2 总体程序流程图设计程序开始启动继电器图15 总体流程图5硬件与软件的测试5. 1硬件测试5.1.1 .电路板初步测试电路板通过热转印制作好以后,首先将电路板打磨干净,利用我们的万用表检测 所有的连线,看看是否有跨接在一起的,以便及时出路。然后当焊接好电路板过孔后,再次利用万用表检测电路板
17、上下过孔是否连接正常。最后进行元件的焊接。等到整个板 子都做好以后。利用万用表检测电路板正负连线是否跨接。如果一切正常。然后需要进 行硬件电路连线的测试。线路检测根据电路图用万用表检测 PCB线路是否有短路和断 路现象。根据电路图检查有极性元件是否反接,元件参数是否合适,再检测元件引脚与 对应的线路是否接通,防止虚焊。5.1.2 . LCD16021晶屏模块测试利用万用表测量LCD1602夜晶屏幕的第1脚是否和电路负极相连,2脚是否和电源 正极相连。一切正常后,再测试LCD1602其它8个数据脚和其对应的单片机脚是否连接 正常。如果一切正常,当其他模块测试完毕后便可上电测试模块软件了。5.1.
18、3 .电路图及原理图HR图16原理图SSSSI图17 Pcb封装图5.2软件测试5.2.1. 软件初步测试软件的测试要对每个硬件模块进行软件调试。调试模块时,一定要符合现场环境,即 入口条件和出口条件。调试的手段可采用单步运行的方式和断点运行的方式,通过检查 系统单片机的现场、I/O 口的状态,检测程序执行结果是否符合设计要求。5.2.2. 程序如下:主函数部分#include#include #includelcd.h#includetemp.hsbit bee=P3八6;sbit dat = P3八0;sbit out = P1A0;sbit RX=P2”sbit TX=P2八0;sbit
19、 bee1=P3八5;uint temp;uint max;uint dist;bit flag =0;uchar disdat4= 0,0,0,0,;/* 函数名:LcdDisplay()*函数功能:LCD显示读取到的温度*/* void LcdDisplay(int temp) /lcd 显示int a=0,b=0,c=0;unsigned char datas口 = 0, 0, 0, 0, 0; / 定义数组float tp;if(temp=700)|flag=1) /超出测量范围显示“flag=0;elsedisdat0=S%1000/100;disdat1=S%1000%100/10
20、;disdat2=S%1000%10 %10;dist=disdat1*10+disdat2;LcdWriteCom(0x80+0x40);LcdWriteData(0+disdat0); / 百位 LcdWriteCom(0x80+0x41);LcdWriteData(0+disdat1); / 十位写地址80表示初始地址写地址80表示初始地址LcdWriteCom(0x80+0x42);写地址80表示初始地址LcdWriteData(0+disdat2); / 个位LcdWriteCom(0x80+0x43);LcdWriteData(.);LcdWriteCom(0x80+0x44);写
21、地址80表示初始地址/显示小数点.写地址80表示初始地址LcdWriteData(0+disdat3); / 个位LcdWriteCom(0x80+0x45); 写地址80表示初始地址LcdWriteData(c);/ 显示单位LcdWriteData(m);/*:中断*函数名*函数功能超过测量距离中断*/void zd0 () interrupt 1 /T0中断用来计数器溢出,超过测距范围flag=1;/中断溢出标志/* 函数名:StartModule* 函数功能:启动模块*/void StartModule() 启动模块 TX=1;/启动一次模块_nop_(); _nop_();_nop_
22、();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();TX=0;/* 函数名:control* 函数功能:控制* 输入:无* 输出:无*/*void MainDelayms(uint xms)/延时uchar i;for(;xms0;xms-)for(i=0;i=30) beef(); else bee=1;void Control2() if(dist=3)beef();else bee1=1;/*:main主函数*函数名 *函数功能*/ void main() bee=1;LcdInit();初
23、始化 LCD1602LcdWriteCom(0x87);写地址80表示初始地址LcdWriteData(C);while(1)LcdDisplay(Ds18b20ReadTemp();Control。;Control2();/MainDelayms(2000);/1s 钟刷一次if(dat) out=0;LcdWriteCom(0x89); 写地址80表示初始地址LcdWriteData(w);LcdWriteData(a);LcdWriteData(r);LcdWriteData(n);LcdWriteData(i);LcdWriteData(n);LcdWriteData(g);elseo
24、ut=1;LcdWriteCom(0x89); 写地址80表示初始地址LcdWriteData();LcdWriteData();LcdWriteData();LcdWriteData();LcdWriteData();LcdWriteData();LcdWriteData();TMOD=0x01;/ 设 T0 为方式 1 , GATE=1 ;TH0=0;TL0=0;ET0=1; /允许T0中断EA=1;/开启总中断StartModule();while(!RX); 当RX为零时等待TR0=1;开启计数while(RX); 当RX为1计数并等待TR0=0; 关闭计数Conut(); / 计算L
25、CD显示模块部分#includelcd.h函数名:Lcd1602_Delay1ms函数功能:延时函薪,延时1ms输入:c输出:无说名:该函数是在12MHZ晶振下,*12分频单片机的延时。/*/void Lcd1602_Delay1ms(uint c) 误差 0us一uchar a,b;for (; c0; c-)for (b=199;b0;b-)for(a=1;a0;a-); /* 函数名:LcdWriteCom* 函数功能:向LCD写入一个字节的命令* 输入:com*输出:无*/#ifndef LCD1602_4PINS当没有定义这个 LCD1602_4PINS 时void LcdWrite
26、Com(uchar com)写入命令LCD1602_E = 0;/使能LCD1602_RS = 0;/选择发送命令LCD1602_RW = 0;/ 选择写入LCD1602_DATAPINS = com;/ 放入命令Lcd1602_Delay1ms(1);等待数据稳定LCD1602_E = 1;/ 写入时序Lcd1602_Delay1ms(5);保持时间LCD1602_E = 0;#elsevoid LcdWriteCom(uchar com)写入命令LCD1602_E = 0;使能清零LCD1602_RS = 0;/选择写入命令LCD1602_RW = 0; / 选择写入LCD1602_DAT
27、APINS = com; 由于4位的接线是接到 P0 口的高四位,所以传送高四位不用改Lcd1602_Delay1ms(1);LCD1602_E = 1;写入时序Lcd1602_Delay1ms(5);LCD16021E = 0;/ Lcd1602_Delay1ms(1);LCD1602_DATAPINS = com 4; / 发送低四位Lcd1602_Delay1ms(1);LCD1602_E = 1; 写入时序Lcd1602_Delay1ms(5);LCD16021E = 0;#endif函数名 函数功能 输入输出/*:LcdWriteData:向LCD写入一个字节的数据:dat:无 */
28、#ifndefLCD1602 4PINSvoid LcdWriteData(uchar dat) 写入数据LCD1602_E = 0;使能清零LCD1602_RS = 1; /选择输入数据LCD1602_RW = 0; 选择写入LCD1602_DATAPINS = dat; / 写入数据 Lcd1602_Delay1ms(1);LCD1602_E = 1; 写入时序Lcd1602_Delay1ms(5);/ 保持时间LCD1602_E = 0;#elsevoid LcdWriteData(uchar dat) 写入数据LCD1602_E = 0;LCD1602_RS = 1;LCD1602_R
29、W = 0;使能清零/选择写入数据/选择写入LCD1602_DATAPINS = dat;Lcd1602_Delay1ms(1);由于4位的接线是接到P0 口的高四位,所以传送高四位不用改LCD1602_E = 1; 写入时序Lcd1602_Delay1ms(5);LCD16021E = 0;LCD1602_DATAPINS = dat 0; y-)for(x=110; x0; x-);/* 函数名:Ds18b20Init* 函数功能:初始化* 输 入:无* 输 出:初始化成功返回1 ,失败返回0*!uchar Ds18b20Init()uchar i;DSPORT = 0;将总线拉低 480us960us1 = 70;while(i-);/ 延时 642usDSPORT = 1;/然后拉高总线,如果 DS18B20做出反应会将在15us60us后总线拉低2 = 0;while(DSPORT) 等待 DS18B20 拉低总线 i+;if(i5)/ 等待 5MS return 0;/初始化失败 Delay1ms(1);return 1;/初始化成功/* 函数名:Ds18b20WriteByte* 函数功能:向18B20写入一个字节* 输入:com* 输出:无*/void Ds18b20WriteByte(uchar dat) uint i, j;for(j=0; j= 1;/*