找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2033|回复: 3
打印 上一主题 下一主题
收起左侧

keil uv2 做PID运算时,一个浮点数突然接近0

[复制链接]
跳转到指定楼层
楼主
ID:180691 发表于 2017-3-24 16:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个温控项目,用到PID运算,历史误差累加值,经常无规律的变为接近0,不知道问题出在哪里

#define Proportion 0.05
#define Integral   0.0002
#define Derivative 4
int xdata dError,LastError,num_counter,open_duty;
int setPoint;
float xdata SumError=0.0;
int Error;
float xdata real_error;


每3秒值执行一下PID调整运算,SumError经常无规律变为0,可是没有理由啊,加热也还未到设定点。

============================================*/
void auto_adjust(int  NextPoint)
{       
    int i;
        int xdata i1,i3,i4,i5;
        float xdata i6;
        long xdata i6a;
        float xdata i2;
        long xdata i2a;
        Error = setPoint - NextPoint;           // 偏差        
        if(Error > 500)
        {
                open_duty =        50;//全开通               
        }       
        else
        {               
                SumError += Error;                  // 积分                
                dError = Error - LastError;             // 当前微分        
                LastError = Error; CLWDT;
                real_error = SumError*Integral + Proportion*Error+  Derivative * dError; CLWDT;
                i1=Proportion*Error;i2=(SumError*Integral);i3=Derivative * dError;i5=real_error;CLWDT;       
                open_duty = (int)(real_error+0.5);                
        }

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:182904 发表于 2017-3-24 21:30 | 只看该作者
不懂pid  正准备用 帮顶  顺带着在这里等待大神讲解
回复

使用道具 举报

板凳
ID:180691 发表于 2017-3-24 22:42 | 只看该作者
觉得应该是keil 数据类型转换的问题,
可是我用软件仿真没有出现转换错误。
用在硬件上运行,就可能出现这问题。
硬件原因我也大致查找了,无干扰复位。也加强了地线,屏蔽,远离干扰源。而且程序其它数值运行一直正常。就这个SumError偶尔跳回0附近。
如果这个值不出问题,温度可以稳定为99.8---100.5之间。性能还算可以。
回复

使用道具 举报

地板
ID:180691 发表于 2017-3-25 22:42 | 只看该作者
定义为long就对了
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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