欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    基于LPC的温度模糊控制系统的设计与开发.doc

    • 资源ID:11045724       资源大小:426.87KB        全文页数:26页
    • 资源格式: DOC        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于LPC的温度模糊控制系统的设计与开发.doc

    物理与电子信息学院嵌入式系统课程设计成绩评定表专业:电子信息工程 班级 学号: 姓名:课题名称设计任务与要求1、 设计任务:采用Pt100温度传感器,测温范围0100系统可设定温度值设定温度值与测量温度值可实时显示控温精度:0.52、 设计任务:拟定电路编制软件流程图及给出系统软件主要部分的源程序设计报告成绩评分标准:设计报告成绩:电子作品成绩评分标准:电子作品成绩:课程设计成绩 总成绩: 指导教师:2014年1月15日嵌入式系统课程设计报告设计课题:基于LPC2124的温度模糊控制系统的设计专业班级:电信本一班 学生姓名: 学号:指导教师: 设计时间: 2014年6月 基于LPC2124的温度模糊控制系统的设计一、设计任务级要求1 设计要求 采用Pt100温度传感器,测温范围0100 系统可设定温度值 设定温度值与测量温度值可实时显示 控温精度:0.52.设计任务 拟定电路 编制软件流程图及给出系统软件主要部分的源程序二、 方案设计与论证 方案一:基于的模糊温度控制系统设计,采用以温度偏差及温度偏差变化率作为输入,以调制信号的占空比为输出量的二维模糊控制器结构,温度偏差的模糊化温度偏差error设定温度T0测量温度,因为设定温度的范围在4045,而测量温度的范围在2545,那么温度偏差error的基本论域为5,20,将其划分为10个模糊子集。其方宽图如下:方案二:基于LPC2124的温度模糊控制系统的设计,在本温度测量控制系统中,实际温度值由铂热电阻恒流工作调理电路进行测量。为了克服热电阻的非线性特点,在信号调理电路中加入了负反馈的非线性校正网络,调理电路的输出电压由片内10位A/D转换后送入LPC2124,在LCD显示测量的温度值。输入的设定值由两位的独立式键盘电路进行调整,可对设定值进行加1/减1操作,送入LPC2124,仍在LCD上显示。 本系统的模糊控制算法由LPC2124和程序来实现。先由温度采样与设定值一家之言差求出温度误差,进一步求出误差变化率,经量化及限幅子程度处理,得到误差语言变量E和误差变化率语言变量EC,直接查询模糊控制表就可获得控制量U,然后由定时子程序处理,发出控制信号,从而控制输出功率。若温度偏高,则控制风扇使其降温,达到控制温度的目的。LCD显示屏显示A/D转换LPC2124温度采集误差分析电动机调节键盘按钮控制三、硬件设计)铂热电阻测温调理电路 恒流源驱动电路 本系统采用恒流工作调理电路,铂热电阻选用标称值为的Pt100作为温度传感器,其物理、化学性能在高温和氧化性的介质中非常稳定,在-259.34630.74温域内,可作为温度标准。A1、A2和A3采用低漂移运放OP07A,由于有电流流经铂热电阻传感器,所以当温度为0时,在铂热电阻传感器上有电压降,这个电压为铂热电阻传感器的集团电压,是运放A1输出电压的一部分,使恒流工作调理电路的输出实际不为0。2) 时钟电路 如图所示,LPC2124芯片内部设有一个反相放大器所构成的振荡器,XRAL1和XRAL2分别为振荡电路的输入端和输出端,时钟可以由内部或外部产生,在XRAL1和XRAL2引脚上外接定时器件,内部振荡电路就会产生自激振荡。本系统采用的定时器件为石英晶体和电容组成和关联谐振回路。晶振回路。晶振频率选择11.0592MHz,C1、C2的电容值取30pF,电容的大小可起频率微调的作用。3) 键盘输入电路 如图所示,在本系统中,采用独立式键盘。本键盘完成的功能为输入控制系统的设定值,以便与系统的采样值比较,求出系统的误差和误差变化率。第一个按键进行加1操作,第二个按键进行减1操作。4) 显示电路 显示电路采用LCD显示模块(LM016L),显示温度测量值与设定值。显示电路如图所示。 LM016L可显示现行各16个字符的数据,内嵌控制器HD44780。LM016L引脚功能见表) 温度控制电路 本系统中控制核心电路(控制加热丝加热电路)采用由过零检测晶闸管触发器件MOC3061组成的触发电路,此器件专门用于设计双向晶闸管触发器。当LED导通发射红外线且过零电路检测输出端的交流电压过零时,光控双向晶闸管被触发导通,否则关断。 MOC3061组成的角发电路 图中MOC3061的输出端的最大额定电压是600V,最大重复浪涌电流为1A,电压上升率(dU/dt)约为600V/s,最大可达1500V/s,输入和输出间隔电压大于7500V,输出控制电流为15mA 。 (1)输入限流电阻RIN 。一般来说,当LED中的下身电流IF大于或等于IFT(MOC3061)的IFT=15mA)时,光控双向晶闸管保证触发。在实际设计中,运行时的IF取IFT与最大IF(60mA)之间的值。图 中当P3.4端为低电平时,MOC3061输入电流约为17mA,在4和6输出端之间电压过零时,内部光控双向晶闸管导通,触发外部双向晶闸管KS导通;当P3.4为高电平时,双向晶闸管KS关断。设LED导通压降为1.3V,7407低电平为 0.3V,则有 RIN=(5V-1.3V-0.3V)/17mA=200(2)输出限流电阻R。R是MOC3061的限流电阻,用于限制流经MOC3061的输出端的电流最大值不超过1A。MOC3061的过零检测电压为20V,所以对于电阻性负载,R即会稍大于20。如果是电感性负载,由于电感的影响,触发外部双向晶闸管KS的时间会延长,流经MOC3061输出端的电流会增加,故增大R值,R的取值由下式计算 R=Up/Ip=(220*1.414)/1A=311取值称值300。由于R的加入,使触发电路有一个最小触发电压,低于该电压,外部晶闸管不导通,直到高于该电压才导通。R增大时,最小触发电压增大。 (3)功率晶闸管的门极电阻RG,电阻RG可防止误触发,提高搞干扰能力,一般取300500。 (4)吸收回路RS和CS。RS和CS吸收回路接在双向晶闸管的阳极和阴极之间,用业防止电源的尖峰电压,以及浪涌电流对晶闸的冲击和干扰。一般CS取值为0.010.1F ,RS的聚会为几到几十。在本系统中,CS取值为39。风扇控制电路如图所示。 铂热电阻测温系统的完整电路图如图所示6)模糊控制查询表 系统的模糊控制查询表见表ECE-5-4-3-2-1012345-1055555543211-955555542211-855555542211-755555542111-655555542111-555555542111-455544432111-355544432111-255444322100-1554432111000443321110001332211100002222211100003222110000004222110000005111110000006111110000007111110000008111110000009111110000001011111000000四、软件设计1软件调试(1)系统所需完成的功能编写流程图;(2)对各功能模块进行逐一编写及调试;(3)各功能模块调试正常后,进行联编;(一定要注意地址的分配、程序的连贯及各功能 的相互搭配)(4)对总程序进行调试,调试完成后,要对总程序进行精简,在完成各功能的前提下删除多余程序。测控系统的主程序流程图如图所示。 开始引脚功能配置控制I/O方向输出清零目标板初始化显示字符模糊控制结束主程序流程图显示数字子程序流程如图所示。开始i=5i>0数据转换,取出最低位去掉最低位i-1数字转换成数据指定位置显示数字i=0开始真假显示数字子程序流程图A/D转换子程序流程图如图所示。开始A/D模块设置延时读取A/D转换结果设置通道|进行第一次转换等待转换结束再次自动转换等待转换结束读取A/D转换结果提取A/D转换值数值转换返回假假真真A/D转换子程序流程图2.程序源代码 温度测控系统程序源代码如下:/* File: main.c* 功能:向LCD输出计数值*/#include "config.h"#define rs (1<<9)#define rw (1<<10)#define en (1<<11)#define busy (1<<7)#define ke 2#define kec 2.5uint8 e,ec;fp32 ectemp,prelevel,etemp; uint8 temp=0;uint8 fuzzycode2111= 5,5,5,5,5,5,4,3,2,1,1, 5,5,5,5,5,5,4,2,2,1,1, 5,5,5,5,5,5,4,2,2,1,1, 5,5,5,5,5,5,4,2,1,1,1, 5,5,5,5,5,5,4,2,1,1,1, 5,5,5,5,5,5,4,2,1,1,1, 5,5,5,4,4,4,3,2,1,1,1, 5,5,5,4,4,4,3,2,1,1,1, 5,5,4,4,4,3,2,2,1,0,0, 5,5,4,4,3,2,1,1,1,0,0, 4,4,3,3,2,1,1,1,0,0,0, 3,3,2,2,1,1,1,0,0,0,0, 2,2,2,2,1,1,1,0,0,0,0, 2,2,2,1,1,0,0,0,0,0,0, 2,2,2,1,1,0,0,0,0,0,0, 1,1,1,1,1,0,0,0,0,0,0, 1,1,1,1,1,0,0,0,0,0,0, 1,1,1,1,1,0,0,0,0,0,0, 1,1,1,1,1,0,0,0,0,0,0, 1,1,1,1,1,0,0,0,0,0,0, 1,1,1,1,1,0,0,0,0,0,0;uint8 BCD7;/十位二进制的显示码分别是千百十个位的显示uint32 ADC_Data;void ShowInt(uint8 addr,uint16 num);void ShowByte(uint8 addr,uint16 num);uint32 AD_Convert(void) ;void fuzzy(void);void PWM0(void);void PWM1(void);void PWM2(void);void PWM3(void);void PWM4(void);void PWM5(void);/* File: main()* 功能:显示计数值*/int main(void) PINSEL0=0x00020000; PINSEL1=0x00000000; IO0DIR=0x00cfffff;/设置为输出IO0CLR=0xeff;TargetInit(); ShowByte(0x80,0); ShowByte(0xc0,0); fuzzy();return(0);/* File:delay()* 功能:延时*/void delay(uint32 dly) uint32 i; for(; dly>0; dly-) for(i=0; i<500; i+);/* File:timer0_init* 功能:定时器0初始化*/void timer0_init(void)/定时器计数器0设置,晶振为12M,1秒要运行1000000个周期,T0PR=0;/预分频寄存器T0MR0=Fpclk/20;/匹配值T0MCR=0x00000003;/开放匹配0中断T0TCR=0x00000003;/T0PC和T0TC复位T0TCR=0x00000001;/T0PC和T0TC复位void timer1_init(void)/定时器计数器0设置,晶振为12M,1秒要运行1000000个周期,T1PR=0;/预分频寄存器T1MR0=Fpclk/20;/匹配值T1MCR=0x00000003;/开放匹配0中断T1TCR=0x00000003;/T0PC和T0TC复位T1TCR=0x00000001;/T0PC和T0TC复位/* File:timerInt* 功能:中断处理程序*/void _irq timer0Int(void) uint32 d; d=AD_Convert(); ShowInt(0x86,d); VICVectAddr=0;T0IR=0x00000001; void _irq timer1Int(void) fuzzy();VICVectAddr=0;T0IR=0x00000001; /* File:int_init()* 功能:中断初始化*/void int_init(void) VICIntSelect=0x00000000;VICIntEnable=0x00000030;VICVectCntl0=0x00000024;VICVectAddr0=(int)timer0Int;VICVectCntl1=0x00000025;VICVectAddr1=(int)timer1Int; /* 名称:ChkBusy()* 功能:检查总线是否忙*/void ChkBusy()IO0DIR=0xe00;while(1)IO0CLR=rs;IO0SET=rw;IO0SET=en;if(!(IO0PIN & busy)break;IO0CLR=en;IO0DIR=0xeff;/* 名称:WrOp()* 功能:写函数*/void WrOp(uint8 dat)ChkBusy();IO0CLR=rs;/全部清零IO0CLR=rw;IO0CLR=0xff;/先清零IO0SET=dat;/再送数IO0SET=en;IO0CLR=en;/* 名称:WrDat()* 功能:写数据函数*/void WrDat(uint8 dat)ChkBusy();IO0SET=rs;IO0CLR=rw;IO0CLR=0xff;/先清零IO0SET=dat;/再送数IO0SET=en;IO0CLR=en;/* 名称:lcd_init()* 功能:lcd初始化函数*/void lcd_init(void)WrOp(0x38);WrOp(0x06);/光标加1WrOp(0x0c);/开显示/* 名称:DisText()* 功能:显示文本函数*/void DisText(uint8 addr,uint8 *p)WrOp(addr);while(*p !=0)WrDat(*(p+);/* 名称:DisInt()* 功能:显示文本函数*/void ShowInt(uint8 addr,uint16 num) /在addr处显示数字num/将num转化成五个BCD码存放在全局数组BCD5中uint8 i;for(i=5;i>0;i-) /将NUM数据转化成ASCII码,如521会转化为00521 BCDi-1=(uint8)(num%10+0x30); /取出最低位 num/=10; /去掉最低位 i=0;while(BCDi =0x30 && i<4) BCDi+= ; /NUM转换成数组存放,没有加上小数点BCD5=0; DisText(addr,BCD);void ShowByte(uint8 addr,uint16 num)/在addr处显示数字num/将num转化成五个BCD码存放在全局数组BCD5中uint8 str1="MeasT:"uint8 str2="SetT:"if (addr=0x80)DisText(addr,str1);if (addr=0xc0)DisText(addr,str2); uint32 AD_Convert(void) uint32 data; / 进行ADC模块设置,其中x<<n表示第n位设置为x(若x超过一位,则向高位顺延)ADCR = (1 << 0)|/ SEL = 1 ,选择通道0(Fpclk / 1000000 - 1) << 8) | / CLKDIV = Fpclk / 1000000 -1 ,即转换时钟为1MHz (0 << 16) |/ BURST = 0 ,软件控制转换操作 (0 << 17) | / CLKS = 0 ,使用11clock转换 (1 << 21) | / PDN = 1 , 正常工作模式(非掉电转换模式) (0 << 22) | / TEST1:0 = 00 ,正常工作模式(非测试模式) (1 << 24) | / START = 1 ,直接启动ADC转换 (0 << 27);/ EDGE = 0 (CAP/MAT引脚下降沿触发ADC转换) delay(10); ADC_Data = ADDR;/ 读取ADC结果,并清除DONE标志位 while(1) ADCR = (ADCR&0x00FFFF00)|0x01|(1 << 24);/ 设置通道1,并进行第一次转换 while( (ADDR&0x80000000)=0 ); / 等待转换结束 ADCR = ADCR | (1 << 24);/ 再次启运转换 while( (ADDR&0x80000000)=0 ); / 等待转换结束 ADC_Data = ADDR;/ 读取ADC结果 ADC_Data = (ADC_Data>>6) & 0x3FF; / 提取AD转换值 ADC_Data = ADC_Data * 100/1024; / 数值转换 data=ADC_Data; return(data); void PWM0(void) IO0DIR=1<<23|1<<8; IO0SET=1<<23; PWMMR0=Fpclk/2.5; /设置PWM周期 PWMMR4=0; /设置PWM占空比 PWMLER=0x11; void PWM1(void) IO0DIR=1<<23|1<<8; IO0CLR=1<<23; PWMMR0=Fpclk/2.5; /设置PWM周期 PWMMR4=Fpclk/50; /设置PWM占空比 PWMLER=0x11; void PWM2(void) IO0DIR=1<<23|1<<8;IO0CLR=1<<23; PWMMR0=Fpclk/2.5; /设置PWM周期 PWMMR4=Fpclk/10; /设置PWM占空比 PWMLER=0x11; void PWM3(void) IO0DIR=1<<23|1<<8; IO0CLR=1<<23; PWMMR0=Fpclk/2.5; /设置PWM周期 PWMMR4=Fpclk/5; /设置PWM占空比 PWMLER=0x11; void PWM4(void) IO0DIR=1<<23|1<<8; IO0CLR=1<<23; PWMMR0=Fpclk/2.5; /设置PWM周期 PWMMR4=Fpclk/3.3; /设置PWM占空比 PWMLER=0x11; void PWM5(void) IO0DIR=1<<23|1<<8;IO0CLR=1<<23; PWMMR0=Fpclk/2.5; /设置PWM周期 PWMMR4=Fpclk/2.49; /设置PWM占空比 PWMLER=0x11; void fuzzy(void) uint8 U; uint8 setlevel; fp32 nowlevelc; IO0DIR=1<<23; while(1) if(IO0PIN&0x00300000)!=0x00300000)delay(10);if(IO0PIN&0x00300000)!=0x00300000)if(IO0PIN&0x00300000)=0x00200000)temp+;if(IO0PIN&0x00300000)=0x00100000)temp-; while(IO0PIN&0x00300000)!=0x00300000); ShowInt(0xc6,temp); setlevel=temp; nowlevelc=AD_Convert(); etemp=nowlevelc-setlevel; ectemp=10*(nowlevelc-prelevel); prelevel=nowlevelc; if(etemp>=5)e=5*ke+10; else if(etemp<=-5)e=-5*ke+10; else e=etemp*ke+10; if(ectemp>=2) ec=2*kec+5; else if(ectemp<=-2) ec=-2*kec+5; else if(ectemp<=-1.5)ec=-2*kec+5; else if(ectemp>-1.5 && ectemp<=-0.5) ec=-1*kec+5;else if(ectemp>-0.5 && ectemp<=0.5)ec=5; else if(ectemp>0.5 && ectemp<1.5) ec=kec+5;else ec=2*kec+5; U=fuzzycodeeec; if (U=0)PWM0(); if (U=1)PWM1(); if (U=2)PWM2(); if (U=3)PWM3(); if (U=4)PWM4(); if (U=5)PWM5(); 五、 系统仿真 将上述程序进行编译链接后,打开LPC2124的属性对话窗口,在“Program File”中,单击下拉式按钮,选择fuzzy.hex文件后,即可对系统进行仿真。系统的仿真结果图如图所示。六、总结 经过本次课程设计,在硬件方面我了解了恒流源驱动电路的工作原理:铂热电阻选用标称值为的Pt100作为温度传感器,其物理、化学性能在高温和氧化性的介质中非常稳定,在-259.34630.74温域内,可作为温度标准。A1、A2和A3采用低漂移运放OP07A,由于有电流流经铂热电阻传感器,所以当温度为0时,在铂热电阻传感器上有电压降,这个电压为铂热电阻传感器的集团电压,是运放A1输出电压的一部分,使恒流工作调理电路的输出实际不为0。通过做这次的课程设计,我懂得了时钟电路:LPC2124芯片内部设有一个反相放大器所构成的振荡器,XRAL1和XRAL2分别为振荡电路的输入端和输出端,时钟可以由内部或外部产生,在XRAL1和XRAL2引脚上外接定时器件,内部振荡电路就会产生自激振荡。键盘输入电路:采用独立式键盘。本键盘完成的功能为输入控制系统的设定值,以便与系统的采样值比较,求出系统的误差和误差变化率。温度控制电路的原理:控制核心电路(控制加热丝加热电路)采用由过零检测晶闸管触发器件MOC3061组成的触发电路,此器件专门用于设计双向晶闸管触发器。在软件方面,学会了“检查总线是否忙”的程序的编写,T0的初始化,写数据函数的编程。我们一个团队做出了这个作品,从中我从队员的身上学到了很多,让我觉得团队的力量真的很伟大。 七、参考文献

    注意事项

    本文(基于LPC的温度模糊控制系统的设计与开发.doc)为本站会员(rrsccc)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开