OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2297|回复: 1

增量式PID调节一直为最大值

[复制链接]

4

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2019-7-17
在线时间
40 小时
发表于 2019-8-3 15:11:49 | 显示全部楼层 |阅读模式
10金钱
头文件
#ifndef _PID_H_
#define _PID_H_
#include "stm32f10x.h"
typedef struct
{
    float currdianya; //当前电压
    float setdianya;     //设定电压
//  float currdianliu;  //当前电流
//  float setdianliu;

    float    P;       //比例系数
    float     I;       //积分
    float     D;       //微分

    float    En;  //当前误差
    float   En_1;  //上次误差
    float    En_2;  //前次误差
   
float Dout;   //增量PID,增量值
int  currpwm;   //当前的pwm宽度

}PID;
void PIDParament_Init(void);    //pid初始化
void pid_calc(void);     //PID计算
#endif
.C文件
#include "PID.h"
#include "PWM.h"
#include "usart.h"
#include "TIMER.h"
#include "lcd.h"
PID pid;  //全局变量,main里引用
//pid初始化
void PIDParament_Init()  
{
    pid.setdianya =5.0;  //电压,初始值设定
// pid.setdianliu=0;

pid.currpwm=0;        //当前占空比,当前占空比
  
pid.En=0.0;
pid.En_1=0.0;
pid.En_2=0.0;

pid.P=144;      //比例系数42.63----50.2
pid.I=0.1;      
pid.D=0.0;      

}
//pid计算以及更新数据
void pid_calc()  
{

pid.En=pid.setdianya-pid.currdianya;  //本次电压误差
pid.Dout=pid.P*(pid.En-pid.En_1)+pid.I*pid.En+pid.D*(pid.En-2*pid.En_1+pid.En_2);//增量式PID
    pid.currpwm=(int)(pid.currpwm+pid.Dout);  //本次应该输出的PWM,
printf("\r\n\r\n%d\r\n\r\n",pid.currpwm);

if(pid.currpwm>2400)//限幅
{
   pid.currpwm=2400;
}

if(pid.currpwm<1000)
{
   pid.currpwm=1000;
}

TIM_SetCompare1(TIM5,pid.currpwm);//改变占空比

pid.En_2=pid.En_1;//更新
pid.En_1=pid.En;
}
主函数里不断采集电压,将采集的得到的电压送给:  pid.currdianya=vol0;     //更新pid当前数据
用定时器计数,计数50ms,在溢出中断里进行PID计算.
问题是不管怎么调节参数,输出一直为最大值????

最佳答案

查看完整内容[请看2#楼]

已解决,这种增量式PID应该先调I,再调其他的,不要被位置式PID误解了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2019-7-17
在线时间
40 小时
 楼主| 发表于 2019-8-3 15:11:50 | 显示全部楼层
已解决,这种增量式PID应该先调I,再调其他的,不要被位置式PID误解了
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-30 19:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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