您的位置:首页 > 编程语言 > MATLAB

炉温控制(Keil代码+Proteus仿真+Matlab仿真)

2015-03-27 16:06 453 查看
转眼间大三了,课程设计周:炉温控制实验。那好吧,挺简单的,不过还是要做下去。认真做的话能学到不少东西,做的深入的话要用到三款软件:KEIL  PROTEUS  MATLAB。

做完了仿真和源代码,测试结束。想不来了,不过估计可爱的老师会不同意,必须在这坐两个星期,没事做,来写一波博客记录下吧。

 

-- . -- duang~

 

先把炉温控制实验的要求贴出来:

 

课题要求 (这些都是废话,一般没看的习惯。。。)


1. 了解温度控制系统的构成,熟悉各环节的工作原理。

2.建立炉温控制系统的数学模型。

3.控制算法要求使用PID算法,除了应用基本PID算法进行控制外,要求对该PID控制算法进行改进。分析改进前后的性能指标,并进行相应的理论分析。

4. 完成PID参数整定,调试出稳定的温度控制系统,观察并分析PID整定规律,保存最佳的整定参数与控制曲线图。

5. 设计编写采样、滤波、PID控制及优化算法等相关程序。 

6.  实物的要求忘了....

 

随便看看,要求就行啦,一看实验名字就都懂的。

看见学校发了51单片机来做,Wow,心里那个激动啊,大一是捧在身心玩了好几个月的片子,启蒙老师~

 

 

 

First Blood:proteus仿真

拿到51做东西,第一件事情自然是安装proteus,坐出炉温控制的仿真,仿真做出来,调试代码的时候真的很舒服,正所谓磨刀不误砍柴工。

安装proteus:

百度云盘分享一下:http://pan.baidu.com/s/1hq7Z2S0

安装方法:

1.解压该压缩包,打开安装程序P7.8sp2。



2.一直点击下一步,然后选择Use a locally installed Licence Key。



3.其实这里的两个都可以选的,你只需要链接的第一幅图中的Licence.lxk(注意。这里的Licence是过期的,等安装完成之后我们还需要升级才能打开proteus。)



4.找到并Install,最后close。



5.一直下一步,直到安装结束。



6.安装结束后,打开图1中的破解1.0升级并点击升级其Licence。至此,proteus完全安装完毕。



7.打开解压文件中的仿真图 lxk.DSN



8.下面是我做好的仿真。接下来,我会详细说说仿真图怎么做。



 
 
Proteus仿真入门教学(以本次试验为例):
1.打开软件后,点击File下面的小图标新建一个Design。
2.做仿真,第一步自然要选取需要用到的元件。那么,点击Library选项里的Pick Device



这次试验要用到的元件有:
7SEG-MPX4-CA
AT89C52
BUTTON
BUZZER
CAP
CRYSTAL
DS18B20
LED_GREEN
LED_RED
NOT
PNP
RES
RESPACK-8
3.点击左边小按钮,进入元件模式,再左键单击一下右边的Devices,就可以进行放置元件。大家可以根据自己的喜好放置元件,多多做做仿真就能知道怎么放置比较美观并且自己不容易混乱。



4.放置好元件之后进行连线,该线就是现实中的导电线。如果不会可以打开我的仿真图借鉴。另外仿真中有一个技巧就是可以不练线,直接给引脚编号,同样的编号其实就意味着他们是连接在一起的。  进入LBL模式,进行编号。



5.需要修改参数的话,双击元件即可修改相应的参数。(双击51单片机,可以给它烧录进去生成的HEX文件,这也是仿真和代码的精髓之处,避免了实物调试的麻烦。)相信大家很快就会掌握这个简单易学又实用的仿真软件。





 
 
 
 
 
 
Double Kill:keil代码
仿真完成后,就可以开始写代码了。Keil可以生成Hex文件,Hex文件可以放入proteus仿真图中的51单片机进行联合调试。
 
安装Keil For 51:
简单的科普一下keil,keil估计是每一个单片机初学者的启蒙软件。但是keil并不仅仅用于51,他有非常大兼容性,可以写很多片子的代码。除了Keil for 51之外,还有keil for arm。keil for 51的安装方法我也放了一份放在压缩包里面,打开就能看到。



安装方法:
1. 安装Keil C51 V9.00版本

2. 打开uVision4,点击File---License Management...,打开License Management窗口,复制右上角的CID

3. 打开注册机, 在CID窗口里填上刚刚复制的CID,其它设置不变

4. 点击Generate生成许可号,复制许可号

5. 将许可号复制到License Management窗口下部的New License ID Code,点击右侧的Add LIC

6. 若上方的Product显示的是PK51 Prof. Developers Kit即注册成功,Support Period为有效期,一般可以到30年左右,若有效期较短,可多次生成许可号重新注册。
 
Ps:有的人会奇怪,自己的keil哪怕不适用license也能写代码并编译代码,但是当你代码量写到很大很大的时候,过期的license就会限制你的代码大小,无法编译。
 

Keil For 51 编程入门教学(以本次试验为例):
 
写代码这个活,必须是日常的积累,不是看一篇或者两篇教学就能掌握的,所以建议初学的同学直接拿代码修改修改,理解一下各个代码段和函数的作用。理解了再尝试自己写写。可以说,会改代码的人就已经算是入门了,哪怕平时做电赛做飞思卡尔做一些小项目的时候。
另外初学代码的人,一定要注意代码规范化。代码堆放的美观性,代码的可读性,代码的注释,都是一段优秀代码必不可缺少的。网上对此有非常多的讲解,建议大家有空好好看看。
 
这次的代码有两个关键点,解决这两个关键点自然毫无难处可言了。
第一:PID
//PID Calculate	by Li
tempchange();
get_temp();
f_temp_new = f_temp;					//	 °
f_temp_err = f_temp_new - f_temp_old;	//	 °		  升温 大于 0  降温 小于 0
f_temp_rate = f_temp_err / 0.25;		    //   °/s
f_temp_old = f_temp_new;				//   °
//
 
/********PID Calculate Hot Time************/
void PID(){
hot_time = Canshu_P * (Set_Temp - f_temp_new * 10) + Canshu_D * f_temp_rate * 10;
}

第二:PWM
原理:51的PWM输出。自然要用到定时器操作,首先我们要确定周期,既然中断服务函数的进入时间是50ms,那么我们选择1s为一个周期,在这个周期内我们可以进行20次的翻转电平操作,也就是说我们可以生成1/20 2/20 3/20 4/20 ....................20/20的PWM方波。而这个占空比的入口参数,就是PID算法的结果。即为:hot_time;
void Timer0_ISR(void) interrupt  1      /*50ms中断服务程序*/
{
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;		/*重装初值*/
/******************PID闭环控制******************************/
time ++ ;		  //time x 50ms
if(hot_time > 0){
hot_time --;
RELAY = 0;		     //继电器工作
LED_YELLOW = 0;		 //黄亮
}
if(hot_time <= 0){
RELAY = 1;	         //继电器停止
LED_YELLOW = 1;		 //黄灭
hot_time = 0;
}
if(time == 20){		     //1秒一次
time = 0;
now_time ++;         //单片机内部计时
if(Flag == 2){
if(set_time > 0){
set_time --;
}
}
if(now_time == 999){
now_time = 0;
}
//PID Calculate	by Li
tempchange();
get_temp();
f_temp_new = f_temp;					//	 °
f_temp_err = f_temp_new - f_temp_old;	//	 °		  升温 大于 0  降温 小于 0
f_temp_rate = f_temp_err / 0.25;		    //   °/s
f_temp_old = f_temp_new;				//   °
//
PID();
}
/**********************************************************/
/**********************检测按键****************************/
if(SET == 0 && (Flag == 0 || Flag == 2)){
Flag = 1;
delay(180);
}
if(Flag == 1){										  //温度定好 运行
if(ADD == 0){
Set_Temp += 10;
delay(180);
}
if(CUT == 0){
if(Set_Temp >= 10)
Set_Temp -= 10;
delay(180);
}
if(END == 0){
Flag = 0;									  //预定温度运行
delay(180);
}
}
if(ADD == 0 && (Flag == 0 || Flag == 2)){
Flag = 3;
delay(180);
}
if(Flag == 2){
if(set_time > 0){
RELAY = 0;		     //继电器工作
LED_YELLOW = 0;		 //黄亮
} else {
RELAY = 1;	         //继电器停止
LED_YELLOW = 1;		 //黄灭
}
}
if(Flag == 3){										 //时间定好 运行
if(ADD == 0){
set_time += 5;
delay(180);
}
if(CUT == 0){
if(set_time >= 5)
set_time -= 5;
delay(180);
}
if(END == 0){
Flag = 2;									  //预定时间运行
delay(180);
}
}
/**********************************************************/
}


至于其他的控制都不是什么难事。比如LED,蜂鸣器,继电器。都是很简单的高低电平控制了。具体操作代码可以参考压缩包内的keil文件,有很详细的注释。
至于一些接线的硬件上的连接,比如PNP,DS18B20等的电路,可以参考Proteus里的仿真,原理等下次有空再写吧。不是什么难点,百度一下就有了。
 
 
 
 
 
 
triple kill:Simulink仿真
调试代码中的PID参数,其实我是一直没有做Simulink仿真的习惯,不过老师说不做不行,所以入门了一下,简单的做了一个仿真,但是关于这个的传递函数我不会求,求指导~
Malab Simulink的使用还是非常简单的,模块化编程,这一点和Dream Weaver很像,模块化编程真的是把编程这个很烦的事情大众化,简单化了。给发明这个的神点个赞。
 
Matlab 7 下载地址:
http://pan.baidu.com/s/1gdCLmJh
 

Matlab7.0安装教程
要配置环境变量,如下:右键我的电脑(计算机)——属性——高级系统设置——在高级选项卡中,点环境变量——在系统变量中,吧TEMP、TMP的路径改为C:\temp
在C盘下建一个临时文件夹(安装时用)
3.直接双击压缩包中的setup(注意不用解压缩)
所示在红线内属于序列号。有以下序列号可供选择:
Matlab 7 (R14) 注册码1:14-13299-56369-16360-32789-51027-35530-39910-50517-56079-43171-43696-14148-64597-46518-35191-10070-58980-25665-36629-51033-46438-01127-52395-28569-20030-38795-14563-11876-23292-58825-37547-05827-26397

Matlab 7 (R14) 注册码2:14-58204-39252-07634-11570-16849-09455-22809-05445-13616-29058-08276-06885-12215-41987-21894-60423-57622-18647-58411-24238-20443-59027-07209-27706-28292-14609-15393-48293-13036-12293-43713-57876-43362

Matlab 7 (R14) 注册码3:14-44889-04614-04275-46147-23559-43066-41714-23083-65272-04997-17469-27919-17226-59862-27901-53983-56217-20094-53460-62647-58166-24499-35558-19511-44882-53016-25658-61109-03776-34505-00776-15813-07183

接下来就可以使用matlab了。
可即使按照这样做仍然会出现一些问题,别急!是问题总会有解决的方法。
笔者结合多次安装matlab7.0现将问题解决方案总结如下:
步骤6,7,8均为注意事项,若照以上步骤安装成功可忽略6,7,8

1、运行安装exe时就弹出对话框不能安装。
解决方法:
更改:我的电脑>属性>高级>环境变量>,然后将TEMP和TMP的值都改为C:\temp

2、解压后仍有许多压缩文件,点击stup.exe时出现警告
The installer cannot read the mwinstall.dll file, This is probably due to a CD reader which canshowLinkBubble(this);returnfalse"href="http://www.mathworks.com/"target="_blank">http://www.mathworks.com/ for assistance.
解决方法:
你把安装文件夹复制到一个英文文件夹中,比如直接解压到C盘,点击setup.exe安装即可。很多国外软件放在有中文名的文件夹中运行,这是一个bug。比如win-tc对中文特别敏感。所以建议初学者将这些软件(包括MATLAB)都安装在C盘。
3、运行MATLAB时出现Runtime Error,症状如下:
runtime error

program:E:\MATLAB7\bin\win32\MATLAB.exe

this application has requested the runtime to terminate it in an unusual way. please contact the application's support team for more information
另一个对话框里边还有一串JAVA程序。
解决方法:
把电脑主题改成了WindowXP经典主题,再次运行,就OK了。
如果不想启用经典模式,也有另一种解决方法:点击桌面的matlab快捷方式,右键点击“属性”,,点兼容性,选择用兼容模式运行,例如用WIN2000运行就可以了!这下好了吧,即不换回你漂亮的主题,又可用matlab了
4、Matlab安装后可能会遇到这样的问题,打开后窗口出来了,但一会儿以后又自动关闭了! 解决方法:
①、我的电脑—>属性—>高级—>环境变量.

②、在系统变量下面添加如下内容
点击新建,输入:
变量名:BLAS_VERSION

变量值:C:\Matlab7\bin\win32\atlas_Athlon.dll

(变量值的第一个字母为你的MATLAB安装在那个盘的盘符名,如在C盘即为C:\Matlab7\bin\win32\atlas_Athlon.dll。在E盘即为:E:\Matlab7\bin\win32\atlas_Athlon.dll)
5、运行MATLAB时,窗口显示:The element type "name" must be terminated by the matching
end-tag "".Could not parse the file: e:\matlab\toolbox\ccslink\ccslink\info.xml

解决方法:
①、找到安装文件目录下的info.xml文件,路径为:C:\matlab\toolbox\ccslink\ccslink(以安装在C盘为例)
②、用记事本方式打开info.xml,找到里面的一行Link for Code Composer Studio?/name>,然后把/name>改为就可以了。
6、安装MATLAB时,有一个对话框显示:To configure Real-Time Windows Target you must type 'rtwintgt -setup' in a MATLAB command window

解决方法:
在安装好的MATLAB窗口中输入:rtwintgt –setup,再回车。

 
细节性的安装教程如下(摘自):
http://www.baidu.com/link?url=S1PXEiyILe8Zl7Y5vKPwzuTKpgQFGQogJ7aYbeRntgHsGJ7Vol7uOoJVrcm-wR1wN5YOi7HaycTbvhwcWGkhw_&ie=utf-8&f=3&tn=baidu&wd=matlab%207&inputT=783&rsp=0&bs=matlab
 
安装教程.doc下载网址:
http://pan.baidu.com/s/1gdncIKN
 
做好的Simulink仿真图下载网址:
http://pan.baidu.com/s/1c03xPle
其实Simulink很简单的,不需要像keil上一样,根据别人的修改。只需要记住以下三个步骤,就可以完成一套Simulink的仿真啦。(其实和proteus步骤差不多。)
1.打开matlab,点击该按钮控件打开Simulink。



2.查找并添加元件,元件名称大家可以自己看着图3中的元件名称查找。



3.连线,编译,开始仿真。和proteus的过程真的很像~



4.修改参数后,双击Scope示波器,Auto一下之后就可以看到输出波形,这套参数是不是很棒。



6.修改参数实例(修改step的参数。)双击打开Step设置,即可修改,因为温度最终老师要求设定在60度,所以将该项中的Final value设置为60.



Simulink我用的挺少的,在此只是对怎么搭建一个PID模型和调试PID参数进行简单的操作。
 
 
 
 
 
 
 
就这样吧,写完了,也还算详细具体吧,当然也遗漏了很多细节。缺什么大家留言说一下,有时间我再慢慢添加吧。大的工程项目其实也和这些小的简单的实验差不多,都是一样的步骤,一步一步来,不能操之过急,反而什么都学不会了。
 
 
 
                                                                                                                                                                                                                                         2015、03、27
                                                                                                                                                                                                                                            Themelody
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息