设计报告——温控电路设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
温控电路设计
报告书
姓名:
学校:
专业:
完成日期:2014/05/16
目录
1.设计要求 (1)
2.总体设计方案 (1)
2.1原理分析 (1)
2.2功能模块的实现 (1)
2.2.1控制模块 (1)
2.2.2温度采集模块 (1)
3.控制程序设计 (2)
3.1程序流程图 (2)
3.2程序模块说明 (2)
附录 (3)
1.主函数 (3)
2.ADS1115驱动程序 (6)
3.原理图 (13)
1.设计要求
设计一个温度测量电路,根据设定温度和测量值比较实现以下控制:
定义:
设定温度:ST(单位℃)
测量温度:T(单位℃)
控制逻辑要求:
当ST> T+2时,继电器闭合(如果当前继电器为断开状态,并且断开时间不够3分钟,不允许闭合);
当ST T-2= 2.总体设计方案 2.1原理分析 根据要求,使用负温度系数的热敏电阻进行温度的测量,使用ADC采集电压,通过单片机计算得到温度值,并依据相应控制逻辑要求控制继电器的动作。 2.2功能模块的实现 2.2.1控制模块 使用89C51单片机进行控制部分的设计,如图1为单片机最小系统原理图,89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压、高性能CMOS 的8位微处理器,具有廉价、使用简单等优点。本设计中采用89C51单片机完全可以满足要求。 通过单片机根据采集到的数据,控制继电器的动作。 图1 2.2.2温度采集模块 热敏电阻温度测量电路采用简单的电阻分压电路,通过AD采集电压变化,通过单片机计算得出温度值,如图2所示。 TI公司的ADS1115是超小型16位精密模数转换器(ADC),具有板载基准电压和振荡器,通过I2C兼容接口传输数据,工作电压从2.0V到5.5V,取样频率高达860SPS,连续模式的功耗仅为150uA,工作温度从–40℃到+140℃。本设计中使用ADS1115采集电压,满足精度要求。 图2 3.控制程序设计 3.1程序流程图 流程图如图3所示,单片机按照该流程进行温度的采集与继电器的控制。 图3 3.2程序模块说明 程序主要分为ADS1115的电压采集、温度值的计算、根据逻辑控制继电器动作三个部分。 附录 1.主函数 #include #include"ads1115.h" #define ST 30.0 //设定温度 sbit relay=P0^7; //继电器控制引脚 float T; //当前温度 int count=0; //定时计数 bit en_relay=1; //继电器允许动作标志位 //温度范围从0~50摄氏度 code float table[]={28.38,27.13,25.94,24.81,23.74,22.72,21.75,20.83,19.95 ,19.12, 18.32,17.57,16.85,16.16,15.5,14.88,14.28,13.71,13.17,12.65, 12.16,11.69,11.24,10.81,10.39,10.0,9.623,9.263,8.918,8.588, 8.272,7.97,7.68,7.402,7.136,6.881,6.637,6.402,6.177,5.961, 5.754,5.556,5.365,5.182,5.006,4.837,4.674,4.518,4.368,4.224,4. 085,0}; void Judge(); //逻辑控制函数 void delay(int); //延时函数 int GetTemp(); //获取温度值 ///******************************************* //函数名称:main //功能:主函数 //参数:无 //返回值:无 //******************************************** void main() { TMOD=0x01; //定时器模式设置 TH0=0x3C; TL0=0xB0; ET0=1; TR0=0; //定时停止 EA=1; while(1) { GetTemp(); Judge(); delay(100); } } ///******************************************* //函数名称:Delay //功能:延时函数 //参数:x 设置延时时间 //返回值:无 //******************************************** void delay(int x) { int i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } ///******************************************* //函数名称:GetTemp //功能:获取电压值并换算成温度值 //参数:无 //返回值:-1:超出范围 1:在测量范围内 //******************************************** int GetTemp() { int i; float vol; float res; vol=ADS1115(0,1); //ADS1115的AIN1输入 res=50.0/vol-10.0; //换算得到热敏电阻当前阻值 if(res>28.38 || res<4.085) return -1; for(i=0;i<50;i++) { if(res<=table[i] && res>table[i+1]) //查表并计算得到温度 { T=i+(table[i]-res)/(table[i]-table[i+1]); } } return 1; } ///*******************************************