OpenEdv-开源电子网

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

PID初始化,参数无法赋值现象,很疑惑

[复制链接]

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2017-9-7
在线时间
16 小时
发表于 2018-6-15 14:22:07 | 显示全部楼层 |阅读模式
初始化函数里我通过传参的形式给结构体的三个参数赋值,发现它始终无法赋值,值始终是0.000,难道是我对结构体的知识有错误吗,希望大佬指点一下
1.png
2.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2017-9-7
在线时间
16 小时
 楼主| 发表于 2018-6-16 20:29:59 | 显示全部楼层
解决了,把MDK重开就可以了  缓存问题,最近都是这种问题  搞得也挺烦的   事情太多,搞得不在状态
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2017-9-7
在线时间
16 小时
 楼主| 发表于 2018-6-15 14:22:41 | 显示全部楼层
#include "PID.h"
#include "usart.h"



//PID结构体
/*****************************************
*
*   位置式PID计算
*         pid.Voltage    为PID初始计算结果  
*         pid.ActulPoint 为实际输出到执行器结果  两者需要需要找到转换的函数式  初始为相等
*
****************************************/
struct _pid
{
        float SetPoint;       
        float ActulPoint;
        float err;
        float err_last;
        float Kp,Ki,Kd;
        float Voltage;
        float integral;               
}pid;
       


//PID初始化
void PID_Init(float Kp,float Ki,float Kd)
{
        pid.SetPoint = 0.0;
        pid.ActulPoint = 0.0;
        pid.err = 0.0;
        pid.err_last = 0.0;
        pid.integral = 0.0;
        pid.Kp = Kp;
        pid.Ki = Ki;
        pid.Kp = Kd;
        pid.Voltage = 0.0;       
        printf("----%f----\r\n",Kp);
        printf("----%f----\r\n",pid.Kp);
               
}


//PID计算
float PID_realise(float SetPoint,float ActulPoint)
{
        pid.SetPoint = SetPoint;

        pid.ActulPoint = ActulPoint;
               
        pid.err = pid.SetPoint - pid.ActulPoint;
               
        pid.integral+= pid.err;
        pid.Kp = 5.0;       
        pid.Voltage=pid.Kp*pid.err+pid.Ki*pid.integral+pid.Kd*(pid.err-pid.err_last);//计算
//printf("----%f----\r\n",pid.Voltage);
        pid.err_last = pid.err;
       
        pid.ActulPoint = pid.Voltage*1.0f;//默认算式输出和结果输出的值相同   需要自己找到转化关系
       

        return pid.ActulPoint;
       
}
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2017-9-7
在线时间
16 小时
 楼主| 发表于 2018-6-15 14:23:08 | 显示全部楼层
        float output;
        short temperature;       

        u8 t1;
        u8 len;         
        u8 t=0;
Set_Temperature = 29;
       
        //u16 count = 0;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        delay_init(168);  //初始化延时函数
        uart_init(115200);                //初始化串口波特率为115200
        PID_Init(5,0,0);//初始化pid参数
        IIC_Init();//初始化iic
  OLED_Init();//初始化oled
        TIM3_OC2_PWMInit(1000-1,84-1);//初始化pwm输出  2khz
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2017-9-7
在线时间
16 小时
 楼主| 发表于 2018-6-15 14:24:13 | 显示全部楼层
是不是也像类一样需要定义一个结构体变量呢,但是它是全局的不是吗,
回复 支持 反对

使用道具 举报

0

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2018-5-19
在线时间
54 小时
发表于 2018-6-16 22:55:59 | 显示全部楼层
看看, 学习了.
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 06:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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