转眼间大三了,课程设计周:炉温控制实验。那好吧,挺简单的,不过还是要做下去。认真做的话能学到不少东西,做的深入的话要用到三款软件: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

炉温控制(Keil代码+Proteus仿真+Matlab仿真)相关推荐

  1. 基于IMAGE法的房间回响模型创建、C++代码实现、matlab仿真

    基于IMAGE法的房间回响模型创建.C++代码实现.matlab仿真 1.模型简介 \qquad在处理声音信号时,我们要对信号先进行采集.那么我们就必须要有,一个发出声音的声源,一个进行声音采集的传感 ...

  2. (转载)基于TDOA声源定位算法仿真–MATLAB仿真

    (转载)基于TDOA声源定位算法仿真–MATLAB仿真 转载自:https://blog.xxcxw.cn/archives/28 声源定位算法是利用麦克风阵列进行声音定位,属于宽带信号,传统的MUS ...

  3. 抗积分饱和 PID代码实现,matlab仿真实现

    抗饱和PID 前几天开始我就计划把c电机仿真的PI控制器代码优化一下的时候,群里刚好讨论了Microchip的AN1078文档中的PI框图: 在这里插入图片描述 找了点视频和文章,大家感兴趣可以去看 ...

  4. matlab比例环节代码,典型环节MATLAB仿真.doc

    实验一 典型环节的MATLAB仿真 一.实验目的 1.熟悉MATLAB桌面和命令窗口,初步了解SIMULINK功能模块的使用方法. 2.通过观察典型环节在单位阶跃信号作用下的动态特性,加深对各典型环节 ...

  5. 雷达系统设计matlab仿真 代码,雷达系统设计matlab仿真

    雷达系统设计matlab仿真 MATLAB Code Chap1 casestudy1_1.m fig1_12.m fig1_13.m fig1_16.m fig1_19.m fig1_21.m fi ...

  6. 雷达干扰样式仿真matlab仿真

    雷达干扰样式仿真matlab 噪声调幅干扰 噪声调频干扰 切片重构干扰 间歇采样转发干扰 梳状谱干扰 频谱弥散干扰 噪声卷积干扰 噪声乘积干扰 代码私聊 噪声调幅干扰 噪声调幅干扰(AM)的数学模型表 ...

  7. 激光光束传输影响matlab仿真,matlab仿真光束的传输特性详解.doc

    课程设计题目: 用matlab仿真光束的传输特性. 任务和要求 用matlab仿真光束通过光学元件的变换. 设透镜材料为k9玻璃,对1064nm波长的折射率为1.5062,镜片中心厚度为3mm,凸面曲 ...

  8. 蒙特卡洛粒子滤波定位算法_基于粒子滤波的TBD算法仿真—MATLAB仿真

    目标跟踪的最终目的是在最小的误差下确定目标的位置,而在无线传感器网络中要实现这个目的需要很多相关技术的支持,如定位技术.目标检测技术.估计技术.节能技术等.目标跟踪问题的求解有很多方法, 从算法的考虑 ...

  9. matlab 声源定位csdn_[转]基于TDOA声源定位算法仿真--MATLAB仿真

    声源定位算法是利用麦克风阵列进行声音定位,属于宽带信号,传统的MUSIC和DOA算法并不适用该场景,本仿真主要用TDOA算法进行定位. 常用的阵列信号定位算法主要有三大类:基于高分辨率谱估计的定位技术 ...

最新文章

  1. 策略模式 极其简单的列子
  2. SSRS:服务器更名后,ReportingService无法使用和登录的解决办法
  3. 年少成名的我并没有放弃自己,谁敢说她\他文章比我写的好?!,不服来战!...
  4. JavaScript高级程序设计学习(六)之设计模式
  5. Linux入门笔记——文件操作命令1
  6. 服务器内存超限问题_内存超限该怎么办?
  7. 苹果屏幕旋转怎么设置_iPhone12屏幕供应商是谁 苹果12屏幕怎么查看是哪家
  8. python爬取网页美文网文章内容
  9. php获取当前进程的id
  10. 计算机硬盘有坏道,电脑硬盘有坏道怎么办?
  11. 完美解决Chrome主页老是被毒霸网址大全篡改
  12. MAC里“微软雅黑”字体标准体和粗体无法同时使用问题的解决方法
  13. 关于VCT(voxel cone trace——基于体素的锥形光线追踪)Renderer的代码解读
  14. 鸿蒙阴阳星辰塔,第1298章鸿蒙星辰塔的新能力
  15. 《操作系统》-调度算法
  16. 如何进行有效的大数据处理、分析?
  17. 如何利用PPT制作九宫格图片效果
  18. java 一年中的第几天_Java计算某个日期是一年中的第几天
  19. deadline_timer使用说明
  20. arcgis 栅格计算器(Spatial Analyst/Raster Calculator)

热门文章

  1. cmd怎么从c盘切换到D盘到指定文件夹
  2. sequelize如何建立关联关系表模型来实现联表查询?【多对多篇】
  3. 常见的微信小程序类型有哪些?
  4. jieba下TextRank实现
  5. ubuntu的linux基础命令,Linux基础学,Ubuntu Linux命令行简明教程
  6. C语言实现简单计算器程序
  7. windows10如何打开计算机配置文件,Win10电脑怎么设置打开文件夹选项?
  8. 如何做小红书封面?笔记要爆封面设置少不了
  9. vcenter 6.0进入linux界面
  10. hwclock设置日期_hwclock命令