雨滴科技技术论坛

 找回密码
 立即注册
查看: 2255|回复: 4

msOS学习之路(3)

[复制链接]

68

主题

274

帖子

2443

积分

金牌会员

Rank: 6Rank: 6

积分
2443
扫一扫,手机访问本帖
发表于 2018-7-21 19:36:37 | 显示全部楼层 |阅读模式
本帖最后由 DataH 于 2018-8-5 23:12 编辑

基于msOS PID温度控制
1 简介
该实例是基于msOS平台,使用PID算法对温度进行控制。对于PID温度的控制,其实就是设定一个目标温度,通过PID算法让温度保持在目标温度左右,尽量的靠近目标温度。
2 硬件平台
  • msOS开发板
  • 100欧电阻
  • LM35DT温度传感器

3 PID简介
对于PID的了解是在大学的时候开始的,主要是知道在工业控制方面用到很多,但不知道具体用在哪里,但一直觉得PID很难学。直到听了王总将的课以后,才觉得PID其实也没那么难,在课上王总把PID算法比作买米,例如当我们告诉老板要买多少斤米的时候,P算法就像是老板先估计大概的一个数,然后拿去称,当还少时就再往上加,当过多时,就减掉,尽量的接近目标值,这个过程就是P算法。但是P算法永远不能很好的接近目标值,只能接近目标值,所以要引入I算法,对于I算法就是当老板买米接近目标的时候,在这基础上进行加减,进行微调让当前值更加接近目标值,而不至于过大的调整。通过这个例子,让我对PID有了基本的认识,之后再通过《嵌入式微系统》这一本书,进一步对PID的原理有了更深的了解。其实,PID是通过误差反馈来实现的,P算法就是通过误差来做估计,快速的接近目标值,I算法通过误差来来做微调,获得平衡值以达到目标值,D算法是对于突然变换的情况,能够快速的进行补充,以实现系统更加稳定。
4 实现过程
首先,设定一个目标温度,然后通过PID控制PWM的输出,进而对电阻进行加热,使电阻的温度稳定在目标值的范围。PID加热的过程中需要判断当前的温度是否接近目标值,当接近目标值的时候就开启I算法进行微调,让温度慢慢的加上去,以更加准确的接近目标值,在此过程中只用到了P算法和I算法。PID控制PWM输出的端口使用OUT1,读取LM35DT电压模拟量的端口使用A0口,当读取到LM35DT电压的模拟量后,通过公式转换成温度,并显示到显示屏中。实现的过程如下图所示。
                                                                               1531981910994.png
5 代码实现
5.1 温度转换
从LM35DT读取到的电压模拟量转换成温度。
  1. acc = App.Data.Adc.A0;
  2. data = (data*0.99f) + (acc*0.0008f);
复制代码
5.2 PID控温
这里只用到PI算法来控制。当误差在3摄氏度的时候开启I算法。
  1. void Pid(void)
  2. {
  3.     float Current;
  4.     int Target;
  5.    
  6.     static int Error;
  7.     static int AddError;
  8.    
  9.     static float PidOut;
  10.    
  11.     Target = App.Data.TargetTemperature;
  12.     Current = App.Data.CurrentTemperature;

  13.     Error = Target - Current; //误差

  14.     if(Error < 3 && Error > -3)
  15.     {
  16.         AddError += Error;
  17.         
  18.         if (AddError > 60)
  19.             AddError = 60;
  20.         else if(AddError  100)  
  21.         PidOut = 100;
  22.     else if (PidOut <= 0)   
  23.         PidOut = 0;
  24.    
  25.     App.Data.PidPowerPercent = PidOut;
  26.    
  27.     System.Device.DO.Pwm.SetDutyRatio(PwmChannel1, App.Data.PidPowerPercent);

  28. }
复制代码
6 结果
温度能够在目标值范围2度左右震荡。实现的效果如图下图所示。
                                                    1532172058949.png

回复

使用道具 举报

316

主题

1742

帖子

6041

积分

论坛元老

Rank: 8Rank: 8

积分
6041
发表于 2018-7-21 20:40:21 | 显示全部楼层
好贴,点赞!
系列作品:
财税知识 – 索引
矛盾综合体(关于孩子教育)
我们家的王老师(关于孔明锁、魔方、魔方机器人)
科普 - 索引
美国见闻
回复

使用道具 举报

91

主题

455

帖子

2111

积分

金牌会员

Rank: 6Rank: 6

积分
2111
发表于 2018-7-22 15:12:53 | 显示全部楼层
good job!!!
回复

使用道具 举报

86

主题

488

帖子

1873

积分

金牌会员

Rank: 6Rank: 6

积分
1873
发表于 2018-7-22 17:25:56 | 显示全部楼层
赞                       
回复 支持 反对

使用道具 举报

404

主题

2039

帖子

1万

积分

版主

Rank: 7Rank: 7Rank: 7

积分
10916
发表于 2018-7-22 17:50:30 | 显示全部楼层
这些基础的东西,要做一段时间
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
在线咨询
咨询热线
0755-26787502-8006/8016
扫一扫二维码
直接访问本站

QQ|Archiver|手机版|小黑屋|雨滴科技  

GMT+8, 2022-5-24 04:00 , Processed in 0.072257 second(s), 20 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表