ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:132.79KB ,
资源ID:5864629      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5864629.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(课程设计报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

课程设计报告.docx

1、课程设计报告目录引言 2第1章 技术指标 3 1.1基本功能要求 31.2提高功能要求 31.3 设计条件5第2章 系统设计方案 5 2.1 原理图设计5 2.2硬件设计5 2.3 软件设计6 第3章 单元电路设计18 3.1控制部分电路设计 18 3.2 矩阵键盘电路设计 183.3 显示部分电路设计 193.4 电源转换电路设计 193.5 温控炉加热驱动模块电路设计 203.6温度采集模块电路设计213.7电路图设计21第4章 测试与调整23 4.1 电源电路测试 23 4.2显示电路测试 23 4.3单片机控制电路测试 234.4矩阵键盘电路检测 234.5 PWM输出电路检测 234

2、.6温度采集电路检测244.7驱动电路检测24 4.8总体电路测试24第5章 设计小节 26 5.1设计任务完成情况 26 5.2问题及改进 26 5.3心得体会 27引言随着计算机技术的发展和普及,以单片机为核心的小型嵌入式设备,已经在工业自动化、办公自动化等领域得到了日益广泛的应用 本课题对工业对象中主要的被控参数电阻炉炉温进行研究,设计了硬件电路和软件程序。硬件电路选用STC89C52单片机及DS18B20, 以STC89C52单片机为主体,构成一个能进行较复杂的数据处理和复杂控制功能的智能控制器,使其既可与微机配合构成两级控制系统,又可作为一个独立的单片机控制系统,具有较高的灵活性和可

3、靠性。单片机根据输入的各种命令,进行智能算法得到控制值,输出PWM脉冲信号,通过驱动电路和整流桥驱动MOSFET,从而加热电阻炉。软件程序采用两重中断嵌套方式。提出了PID控制的方法,即调节三个参数,来实现控制,具有省时、高效的特点,为实现简易的自整定控制带来方便。关键词单片机;温度控制; 调节;计算机仿真;PID第1章 技术指标1.1 基本功能要求:内容:应用计算机的实时监控和温度测量技术,采用单片机、温度检测电路、温度控制电路等,实现电阻炉炉温的实时监控。要求: 1.1.1采用单片机及相应的组成部件完成电阻炉温度控制系统设计,包括硬件电路和软件程序设计; 1.1.2测温范围0100,使其系

4、统控制的温度保温值的变化范围为3060; 1.1.3可根据按键设定目标温度,能够显示控温时的实际炉温和恒温时间等信息。 1.2 提高功能要求:1.2.1 对其主电路和控制电路设计相应的保护电路,使其安全可靠地工作;1.2.2对影响温度控制时间和精度的因素进行分析,改进相应的计算机控制算法,完成计算机控制高效的算法设计。1.3设计条件1.3.1电源条件:双路稳压电源0V30V可调,220V直流电源1.3.2测试条件:双路示波器DS5062C,万用表1.3.2元件清单:如表1.1示。元件清单型号名称及功能数量DS18B20温度传感器1STC89C52单片机11602液晶显示器174HC20四输入与

5、非门19012三极管19013三极管2TLP521-1光电耦合器1PC1010整流桥1IRFP460MOSFET17805电源转换芯片(9V-5V)1按键按键10电阻电阻若干发光二极管发光二极管1电容(450V 220UF)电容1表1-1第二章 系统设计方案2.1原理图设计根据设计要求设计原理图如入2-1所示。图2-1原理图2.2硬件设计 该设计本系统由STC89C52RC 单片机最小系统及其外围电路组成,单片机系统有自己的电源模块、显示模块、温度采集模块,如图2-1所示。用单片机的P0口接上拉1K电阻接液晶1602的数据口,P36和P37口接液晶1602的RS和EN 端。P1口接4*3的矩阵

6、键盘,通过按键进行设定温度设置。键盘的列口通过7420四输入与非门接P32中端口。P20接DS18B20的数据口,用于采集温度。P22作为PWM输出,用于温度的控制。 电路图如图2-2所示。图2-2硬件电路方框图2.3软件设计2.3.1软件设计方案通过外部按键设置要求温控炉恒定的温度,用外部中断0扑捉按键。通过DS18B20采集温度,通过定时器1没10秒钟采集一次温度。通过定时器0输出PWM波。液晶时刻显示设定温度,当前采集温度,PWM输出占空比,温度恒定时间。温度控制采用PID控制,du=kp*(error2-error1)+ki*error2 +kd*(error2-2*error1+er

7、ror0);将采集回来的温度与设定温度进行比较,在设定温度差T1范围内采用纯P控制;当采集温度在温度差T2范围内采用PI控制;当采集温度在温度差T3范围内是PWM输出恒0,通过余热使温度升到设定温度范围内。2.3.2软件流程软件流程图如图2-5所示。图2-3软件流程图2.3.3程序清单(含必要的注释)#include#include#define uchar unsigned char#define uint unsigned intsbit ds=P20;sbit warn=P21;sbit pwm_output=P22;sbit p3_2=P32;sbit lcdrs=P36;sbit l

8、cden=P37;uchar code table=0123456789.;uchar receive2;int error3;uchar pwm_flag,clear_flag,key_flag,time_flag,ui_flag;uchar key,key_temp,keyscan,point,t1,t2,t3,collect_con,time_con;uint duty;int ui;int time;int du;float kp,ki;uint temp,temp1;float f_temp;uchar a,b;void delay(uint z)/延时函数 uint i,j; fo

9、r(i=z;i0;i-) for(j=110;j0;j-);void write_com(uchar com)/液晶显示驱动函数 lcdrs=0; lcden=1; P0=com; delay(5); lcden=0;void write_data(uchar date) lcdrs=1; lcden=1; P0=date; delay(5); lcden=0;void duty_input(char t_duty) /PWM输出 uchar i,j; i=t_duty/10; j=t_duty%10; write_com(0x80+0x40+13); write_data(i+0x30);

10、write_data(j+0x30); write_data(%); TR0=0; duty=100*t_duty; TH0=(65536-duty)/256; TL0=(65535-duty)%256; pwm_output=0; pwm_flag=1; TR0=1;void lcd_init() /液晶显示初始化 write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); write_data(t); write_data(1); write_data(:); write_data

11、(2); write_data(0); write_com(0x80+5); write_data(0xdf); write_data(0x43); write_com(0x80+9); write_data(t); write_data(2); write_data(:); write_data(0); write_data(0); write_com(0x80+14); write_data(0xdf); write_data(0x43); write_com(0x80+0x40); write_data(t); write_data(:); write_com(0x80+0x40+6);

12、 write_data(s); write_com(0x80+0x40+8); write_data(d); write_data(u); write_data(t); write_data(y); write_data(:);void init() EA=0; TMOD=0x11; /定时器初始化 TH1=0x3c; TL1=0xb0; ET0=1; ET1=1; EX0=1; IT0=1; PT0=1; TR1=1; EA=1; lcd_init(); pwm_flag=0; point=0; t1=20; t2=27; write_com(0x80+12); write_data(2);

13、 write_data(7); key_flag=0; time_flag=0; clear_flag=1; ui_flag=0; ui=0; time=0; duty_input(ui); receive0=0; receive1=0; error0=0; error1=0; error1=0; time_con=0; collect_con=0; P1=0xf0; /PID参数 kp=8; ki=0.6; warn=1;void delay1()/键盘消抖延时函数 uint i,j; for(i=50;i0;i-) for(j=110;j0;j-);uchar scan()/键盘扫描函数

14、uchar i; for(i=0;i=15) /大于15 KP ki=0; ui_flag=0; else /小于15 KP KI ki=0.6; ui_flag=1; if(t2=t1) TR0=0; pwm_output=1; write_com(0x80+0x40+13); write_data(0); write_data(0); ui=0; else if(ui_flag=0) du=kp*(error2-error1); /+kd*(error2-2*error1+error0);/P控制 ui=ui+du; if(ui99) ui=99; if(ui99) ui=99; if(u

15、i99) /温差在13C以上,pwm全速 pwm_output=0; write_com(0x80+0x40+13); write_data(O); write_data(N); write_data( ); TR0=0; else if(ui0)i-; ds=1; i=4; while(i0)i-;bit tempreadbit(void) /读1位函数 uint i; bit dat; ds=0;i+; /i+ 起延时作用 ds=1;i+;i+; dat=ds; i=8;while(i0)i-; return (dat);uchar tempread(void) /读1个字节 uchar

16、i,j,dat; dat=0; for(i=1;i=8;i+) j=tempreadbit(); dat=(j1); /读出的数据最低位在最前面,这样刚好一个字节DAT里 return(dat);void tempwritebyte(uchar dat) /向18B20写一个字节数据 uint i; uchar j; bit testb; for(j=1;j1; if(testb) /写 1 ds=0; i+;i+; ds=1; i=8;while(i0)i-; else ds=0; /写 0 i=8;while(i0)i-; ds=1; i+;i+; void tempchange(void

17、) /DS18B20 开始获取温度并转换 dsreset(); delay(1); tempwritebyte(0xcc); / 写跳过读ROM指令 tempwritebyte(0x44); / 写温度转换指令uint get_temp() /读取寄存器中存储的温度数据 dsreset(); delay(1); tempwritebyte(0xcc); tempwritebyte(0xbe); a=tempread(); /读低8位 b=tempread(); /读高8位 temp=b; temp=temp8; temp=temp|a; f_temp=temp*0.0625; temp=f_t

18、emp+0.5; return temp;void main() init(); while(1) if(key_flag=1) /有键按下 key_flag=0; if(keyscan!=11) /设定温度 if(point=t1*0.95&t2=t1*1.05) time_flag=1; else time_flag=0; /pwm输出void timer0() interrupt 1 using 1 TR0=0; switch(pwm_flag) case 0: TH0=(65536-duty)/256; TL0=(65535-duty)%256; pwm_output=0; pwm_f

19、lag=1; break; case 1: TH0=(65535-(10000-duty)/256; TL0=(65535-(10000-duty)%256; pwm_output=1; pwm_flag=0; break; TR0=1; /按键控制void int0() interrupt 0 using 3 EX0=0; p3_2=1; keyscan=scan(); key_flag=1; /有键按下 while(p3_2); EX0=1;void timer1() interrupt 3 /温度采集 uchar i,j,x,y,z; TR1=0; TH1=0x3c; TL1=0xb0; if(time_flag=1) /温度在稳定范围之内 time_con+; if(time_con=20) /稳定时间加一 time_con=0; time+; x=time/100; y=time%100/10; z=time%100%10; write_com(0x80+0x40+2); write_data(x+0x30); write_data(y+0x30); write_data(z+0x30); if(time_flag=0) time=0; time_con=0; collect_con+; if(collect_con=2

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1