当前位置:   article > 正文

炉温控制(Keil代码+Proteus仿真+Matlab仿真)_proteus和matlab联合仿真

proteus和matlab联合仿真

转眼间大三了,课程设计周:炉温控制实验。那好吧,挺简单的,不过还是要做下去。认真做的话能学到不少东西,做的深入的话要用到三款软件: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
  1. //PID Calculate by Li
  2. tempchange();
  3. get_temp();
  4. f_temp_new = f_temp; // °
  5. f_temp_err = f_temp_new - f_temp_old; // ° 升温 大于 0 降温 小于 0
  6. f_temp_rate = f_temp_err / 0.25; // °/s
  7. f_temp_old = f_temp_new; // °
  8. //
 
  1. /********PID Calculate Hot Time************/
  2. void PID(){
  3. hot_time = Canshu_P * (Set_Temp - f_temp_new * 10) + Canshu_D * f_temp_rate * 10;
  4. }
第二:PWM
原理:51的PWM输出。自然要用到定时器操作,首先我们要确定周期,既然中断服务函数的进入时间是50ms,那么我们选择1s为一个周期,在这个周期内我们可以进行20次的翻转电平操作,也就是说我们可以生成1/20 2/20 3/20 4/20 ....................20/20的PWM方波。而这个占空比的入口参数,就是PID算法的结果。即为:hot_time;
  1. void Timer0_ISR(void) interrupt 1 /*50ms中断服务程序*/
  2. {
  3. TH0 = (65536 - 50000) / 256;
  4. TL0 = (65536 - 50000) % 256; /*重装初值*/
  5. /******************PID闭环控制******************************/
  6. time ++ ; //time x 50ms
  7. if(hot_time > 0){
  8. hot_time --;
  9. RELAY = 0; //继电器工作
  10. LED_YELLOW = 0; //黄亮
  11. }
  12. if(hot_time <= 0){
  13. RELAY = 1; //继电器停止
  14. LED_YELLOW = 1; //黄灭
  15. hot_time = 0;
  16. }
  17. if(time == 20){ //1秒一次
  18. time = 0;
  19. now_time ++; //单片机内部计时
  20. if(Flag == 2){
  21. if(set_time > 0){
  22. set_time --;
  23. }
  24. }
  25. if(now_time == 999){
  26. now_time = 0;
  27. }
  28. //PID Calculate by Li
  29. tempchange();
  30. get_temp();
  31. f_temp_new = f_temp; // °
  32. f_temp_err = f_temp_new - f_temp_old; // ° 升温 大于 0 降温 小于 0
  33. f_temp_rate = f_temp_err / 0.25; // °/s
  34. f_temp_old = f_temp_new; // °
  35. //
  36. PID();
  37. }
  38. /**********************************************************/
  39. /**********************检测按键****************************/
  40. if(SET == 0 && (Flag == 0 || Flag == 2)){
  41. Flag = 1;
  42. delay(180);
  43. }
  44. if(Flag == 1){ //温度定好 运行
  45. if(ADD == 0){
  46. Set_Temp += 10;
  47. delay(180);
  48. }
  49. if(CUT == 0){
  50. if(Set_Temp >= 10)
  51. Set_Temp -= 10;
  52. delay(180);
  53. }
  54. if(END == 0){
  55. Flag = 0; //预定温度运行
  56. delay(180);
  57. }
  58. }
  59. if(ADD == 0 && (Flag == 0 || Flag == 2)){
  60. Flag = 3;
  61. delay(180);
  62. }
  63. if(Flag == 2){
  64. if(set_time > 0){
  65. RELAY = 0; //继电器工作
  66. LED_YELLOW = 0; //黄亮
  67. } else {
  68. RELAY = 1; //继电器停止
  69. LED_YELLOW = 1; //黄灭
  70. }
  71. }
  72. if(Flag == 3){ //时间定好 运行
  73. if(ADD == 0){
  74. set_time += 5;
  75. delay(180);
  76. }
  77. if(CUT == 0){
  78. if(set_time >= 5)
  79. set_time -= 5;
  80. delay(180);
  81. }
  82. if(END == 0){
  83. Flag = 2; //预定时间运行
  84. delay(180);
  85. }
  86. }
  87. /**********************************************************/
  88. }

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

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,再回车。

 
细节性的安装教程如下(摘自):
 
安装教程.doc下载网址:
 
做好的Simulink仿真图下载网址:
其实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
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/309483
推荐阅读
相关标签
  

闽ICP备14008679号