智能仪表课程设计
题 目: 温度控制系统 学 院: 沈阳工业大学工程学院 专 业: 测控技术与仪器 班 级: 0801 姓 名: 金迅安 学 号: 220080332 指导教师: 李英顺
完成日期:2011年12月12日
目录
摘要 ............................... ......................5 1、设计目的及原理 ..................................... 5 1.1设计题目和目的 .................................. 5 1.1.1 设计题目 ..................................... 5 1.1.2 设计题目.....................................
1.2 设计原理 .......................................... 5 2.硬件设计 ......................................... 5 2.1系统原理框图......................................... 6
1.2.3 完整原理图 ................................... 6 1.2.4 PCB制图 ...................................... 8 1.3设计原理分析 ....................................... 8 1.3.1 气敏传感器工作原理 ........................... 8 1.3.2 声光报警控制电路 ............................. 9 1.3.3 排气电路工作原理 ............................ 11 1.3.4 整体工作原理说明 ............................ 12 1.4 所用芯片及其他器件说明 ........................... 12 1.4.1 IC555定时器构成多谐振荡电路图 ............... 12
1
1.5 附表一:有害气体的检测、报警、抽排电路所用元件 ... 14
摘要
在工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要被控参数。其中,温度控制也越来越重要。在工业生产的很多领域中,人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制。采用单片机对温度进行控制不仅具有控制方便、简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大的提高产品的质量和数量。因此,单片机对温度的控制问题是一个工业生产中经常会遇到的控制问题。
单片机是一种集CPU、RAM、ROM、I/O接口和中断系统等部分于一体的器件,只需要外加电源和晶振就可实现对数字信息的处理和控制。因此,单片机广泛用于现代工业控制中。
本论文侧重介绍“单片机温度控制系统”的软件设计及相关内容。论文的主要内容包括:采样、滤波、键盘、LED显示和报警系统,加热控制系统,单片机MCS-51的开发以及系统应用软件开发等。作为控制系统中的一个典型实验设计,单片机温度控制系统综合运用了微机原理、自动控制原理、模拟电子技术、数字控制技术、键盘显示技术等诸多方面的知识,是对所学知识的一次综合测试。
2
一、设计目的及原理
1.1设计题目和目的
1.1.1设计题目
采用ATmega16单片机实现智能数字显示仪表。要求8位数码管显示(4位显示测量值,4位显示设定值),4输入按钮(功能选择、数码管选择、数字增加、数字减少),可设定上下限报警(蜂鸣器报警)。适配Cu100热电阻,测温范围为0℃~150℃。采用比例控制、并用晶闸管移相驱动1000W电加热器(电源电压为AC220V)。 1.1.2设计目的
单片机综合练习是一项综合性的专业实践活动,目的是让学生将所学的基础理论和专业知识运用到具体的工程实践中,以培养学生综合运用知识能力、实际动手能力和工程实践能力,为此后的毕业设计打下良好的基础。
1.2设计原理
由热电阻传感器送来的电信号在测量桥路进行冷端自动补偿后,送入放大器,一面把信号进行放大,同时把非线性信号校正为线性信号,经线性放大信号一路A/D转换电路把模拟量转换成数字信号进行数字显示,另一路传输到调节网络,进行规定的比较运算,同时输出一个需要的控制信号和进行工作状态指示。
3
二、硬件设计
2.1系统原理框图
按 键 Atmega16l单片机 热电阻输入 下 载 报 警 指示和显示 通 信
本设计智能温度数显表由温度监测、信号处理、输出控制三部分组成。其系统框图如图1所示,它通过Cu100热电阻传感器获取绕组温度值,经信号调理电路处理后直接送入控制器的A/D转换输入端。微控制器根据信号数据及设定的各种控制参数,按照嵌入的软件控制规律执行计算与处理,自动显示智能仪表数显表可测的温度范围、并根据当前状态输出正常、设定上下线报警等
4
2.2基本模块简介
2.2.1 Atmega16单片机
温控仪控制核心采用Atmega16单片机, 具有16KB 系统内可编程Flash的8 位微控制器 ATmega16 有如下特点:16K字节的系统内可编程Flash(具有同时读写的能力,即RWW), 512 字节EEPROM,1K 字节SRAM,32 个通用I/O 口线,32 个通用工作寄存器,用于边界扫描的JTAG 接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/ 计数器 (T/C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程增益(TQFP 封装) 的ADC ,具有片内振荡器的可编程看门狗定时器,一个SPI 串行端口,以及六个可以通过软件进行选择的省电模式。工作于空闲模式时CPU 停止工作,而USART、两线接口、A/D 转换器、SRAM、T/C、SPI 端口以及中断系统继续工作;掉电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之外都停止工作;在省电模式下,异步定时器继续运行,允许用户保持一个时间基准,而其余功能模块处于休眠状态; ADC 噪声抑制模式时终止CPU 和除了异步定时器与ADC 以外所有I/O 模块的工作,以降低ADC 转换时的开关噪声; Standby 模式下只有晶体或谐振振荡器运行,其余功能模块处于休眠状态,使得器件只消耗极少的电流,同时具有快速启动能力;扩展Standby 模式下则允许振荡器和异步定时器继续工作。 2.2.2 Cu100热电阻传感器及电路
铜电阻在测温范围内电阻值和温度呈现线性关系,温度系数大适用于无腐蚀介质,超过150℃易被氧化,铜电阻有R0=100Ω和R0=50Ω两种,本次课程设计采用的是Cu100的热电阻,Cu100热电阻测温范围为0℃--150℃,其分度表如下:
5
T(℃) -50 R(Ω) 78.48 T(℃) 0 R(Ω) 100 T(℃) 80 -40 82.80 10 -30 87.11 20 -20 91.41 30 -10 95.71 40 -0 100 50 60 70 104.29 108.57 112.85 117.13 121.4 90 100 110 120 130 125.68 129.96 140 150 R(Ω) 134.24 138.52 142.80 147.08 151.37 155.67 156.96 164.27
热电阻输入电路:
该电路采用Cu100热电阻进行测温,1N4148二极管对热电偶冷端进行补偿,采用TLV2252M放大器对输入信号进行放大。
2.2.3数码管显示及指示电路
6
A:显示电路
aRSM0bcdefgh.51051051051051051051051011742101117421105353RSM7n812n79n6n586LLMRMRn412n39n2n186abcdefghLLMRMR.SMG1...abcdefgh.SMG2...设定值显示hgfedcba151512345679实际值显示HQw n8n7n6n5n4n3n2n112345679QAQBQCQDQEQFQGQQHH1HC595RCKGSRCLRRCKGSRCLRSRCKSRCKSERVccSERVccgndgnd813121011141613121011JSPI321J5951PB5MOSIPB4PB7SCK321dataRCKSRCK+514168QAQBQCQDQEQFQGQQHH1Uy1Uy2HC595
SM1显示的是热电偶测的电加热器的实际温度值,SM2显示的是人工设计的电加热器的期望温度值。数码管是有HC595芯片来驱动的,HC595接在SPI通信的3个接口上。
B:指示电路
7
指示电路是指示按键的输入状态的。D1、D2、D3、D4与S1、S2、S3、S4一一对应,当某个按键按下时,单片机相应的引脚将置低电平,使该按键相对应的二极管发光。 2.2.4按键电路
4个按键与单片机的接线图及个按键的作用如上图所示;当单片机的引脚输入为低电平时,表示该引脚所对应的按键按下,单片机实现相应的功能。 2.2.5报警电路
8
当温度超过报警限时,单片机相应管脚输出一定频率的电平。蜂鸣器发出响声。 2.2.6下载电路
下载程序代码用的是SPI接口,用ISP电缆对单片机进行编程。 2.2.7通信电路
该模块用到跳线,不通信时D0、D1口作为常规I/O口使用;通信时其作为通信口使用,实现单片机与单片机或是其它上位机的通信。
9
2.2.8输出驱动电路
采用光控过零驱动晶闸管,进而控制电加热器的通断电。 2.2.9电源电路
10
三、软件设计语言及注释
#include Flash unsigned char SHUMA[]={0xC0,0xF9,0xA4,0XB0,0x99,0x92 0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,};//定义数码管译码数组 定义数码管位选数组; { SPI初始化; Void SPI_MasterInit(void) {DDRB|=(1〈〈5)|(1〈〈7); SPCR=(1〈〈6)|(1〈〈4) |(1〈〈5)|(1〈〈1)| (1〈〈0); } Void SPI_595_Out(unsigned char i) {SPDR=i; While(!SPDR&(1<<7))){;} } Void main(void) {unsigned char saomiao=0; Unsigned char w[10]; DDRA=0x00; PORTA=0X00; DDRB=0XB0; PORTB=0Xff; DDRC=0XFC; PORTC=0XFF; PORTD=0X00; DDRD=0XFF; SPI_Masterlnit(); While(1) {{data[0]=1234;data[1]=5678; W[0]=data[0]%10; W[1]=data[0]/10%10; W[2]=data[0]/100%10; W[3]=data[0]/1000%10; W[4]=data[0]%10; W[5]=data[0]/10%10; W[6]=data[0]/100%10; W[1]=data[0]/1000%10; } PORTB&=~(1<<4); SPI_595_Out(weizhi[saomiao]); SPI_595_Out(disp[w[saomiao]]; 11 PORTB=|(1<<4); saomiao++; if(saomiao>=8 saomiao=0; while(1) {uchar j=0; uint i; DDAR=0xFF; DDRB=0XFF; PORTD=0XFF; DDRD=0X00; While(1) {if((PIND|0XEE)==0XEF) For(i=0;i<2000;i++); If((PIND|0XEF)==0XEF) {j++; If(j>99)j=0; } While(PIND|0XEF)==0XEF); PORTB=SHUMA[j/10]; PORTC=SHUMA[j%10]; PORTA=~j; }} {while(1) PORTC=SHUMA[counter]; } //数码管与LED灯显示语句: if(display_time= =1) //如果显示标记display_time=1,则执行显示任务,完成一位数码管显示 { 数码管扫描显示语句;//采用两片74HC595扫描数码管 display_time= =0; } //ADC转换与数字滤波语句: if(sample_time= =1) {ADC转换、数字滤波与非线性校正程序; sample_time= =0; } //ADC输出数值判断、报警、位式算法运算与控制量输出: if (control_time= =1) {温度值判断与报警语句; //具有比例算法的运算语句: {Error = SetPoint – temp_value; //求偏差 LastError = Error; 12 out=Proportion*Error //比例算法 } control_time=0; } //DAC转换语句: if (DAC_time= =1) {DAC数据输出语句; DAC_time=0; } } //PCA0中断服务程序用于产生PWM输出(高优先级中断) void PCA0_ISR (void) interrupt 11 //使用定时器0溢出作为时钟源 {//PWM输出语句: unsigned int duty; //定义占空比变量,5000μs对应5V,1000μs对应1V TMOD=0X10; //定时器1,工作模式1,16位定时模式 TH1=(65536-1000)/256; //定时1初始化 TL1= (65536-1000)%256; ET1=1; //允许定时器1中断 EA=1; //允许总中断 TR1=1; //启动定时器1 } //定时器1中断服务程序,用于产生显示、ADC转换、DAC与控制周期等标记 定时器1中断服务程序: timer1() interrupt 3 { static bit w; //定义位变量 if(w==0) //当w=0时,P2.0输出低电平 TL1= (65535-(6000-duty))%256; P2_0=0;} //这里用P2.0引脚输出PWM信号 else {TH1=(65535-duty)/256; //定时器1赋初值(高电平区间) TL1= (65535-duty)%256; P2_0=1; //当w=0时,P2.0输出高电平 } w=!w; } //设置定时器1中断级别低于PCA void timer1() interrupt 3 {static n,m,k,h; n++; m++,k++;h++; if(n= = display_time0) //display_time0为显示周期 {n=0; display_time=1; } if(m= = sample_time0) //sample_time0为ADC转换周期 13 {m=0; sample_time=1; } if(k= = control_time0) //control_time0为控制周期 {k=0; control_time=1;} if(h= = DAC_time0) //DAC_time0为控制周期 {h=0; DAC_time=1;}} 3.1 数字PID 本文控制算法采用数字PID 控制,数字PID 算法表达式如下所示: 其中,KP 为比例系数;KI=KPT/TI 为积分系数;T 为采样周期,TI 为积分时间系数;KD=KPTD/T 为微分系数,TD 为微分时间系数。u(k) 为调节器第k次输出, e(k) 为第k 次给定与反馈偏差。 对于PID 调节器,当偏差值输出较大时,输出值会很大,可能导致系统不稳定,所以在实际中,需要对调节器的输出限幅[4],即当|u|>umax 时,令u=umax 或u=-umax ,或根据具体情况确定。 14 15 16 总结 通过为期两周的课程设计学习,我受益匪浅。此次课程设计基本靠自学完成,在短短的两周时间内要完成这项任务,对我来说有一定的难度和挑战。通过自己搜索知识以及向老师和其他同学请教,我一步步提高自己的综合知识水平和创新能力,巩固了以前学过的基础知识并扩大了知识面。在设计过程中学到了很多课堂上没有接触到的东西,让我感到很有意义。 通过此次课程设计学习,让我感触最深的有两点:一是基础知识的决定性作用,没有足够的知识做根基是无法完成设计的;而是熟练掌握一些电子电工设计软件的必要性,例如Multisim、protel 和Proteus等,因为再好的创新都需要通过这些途径来表达。在设计的过程中,我遇到了一些难题,例如仿真软件操作问题;设计毒气检测时,如何实现灵明度的调节;小车的正反转电路设计,以及其驱动电路等等。但我通过请教老师同学、上网查看相关教程等途径,一一解决了这些问题。 此次设计最大的收获是让我坚定了自己对专业学习的信心。我充分发掘了自己的潜力,找到了自己的优点,当然也发现了自己的不足之处,这让我可以在以后的学习过程中有着重的进行发展与提高,使自己一步步成长为高水平的人才。 17 五、参考文献 1、夏路易 《智能仪表设计基础——基于Atmega16单片机》 2009.08 2、康华光等 《电子技术基础》 高等教育出版社 3、黄俊,王兆安 《电力电子变流技术》 机械工业出版社 4、徐科军等.《传感器与检测技术》(第二版).电子工业出版社 5、牛昱光等.《单片机原理与接口技术》. 电子工业出版社 6、中国单片机资源网 http://www.c51.cn/iczldata/Index.html 18 因篇幅问题不能全部显示,请点此查看更多更全内容