极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16592|回复: 1

请问这样的结果,是实现了PID库的效果了吗?

[复制链接]
发表于 2016-4-17 23:04:56 | 显示全部楼层 |阅读模式
本帖最后由 pig881 于 2016-4-18 11:05 编辑

我把 Arduino 官方的 PID_V1.h 库 的 Basic 代码 稍微改动了一下:

#include <PID_v1.h>

#define PIN_INPUT 0
#define PIN_OUTPUT 3

//Define Variables we'll be connecting to
double Setpoint, Input, Output, Result;

//Specify the links and initial tuning parameters
double Kp=1, Ki=0, Kd=0.22;  
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);

void setup()
{  Serial.begin(9600);
  //initialize the variables we're linked to
  Input = analogRead(PIN_INPUT);
  Input=map(Input,0,1023,0,254);
  
   
Setpoint = 100;    // 我希望的 最终输出值 维持在100

myPID.SetOutputLimits(-255,255); //加入这一句试试看  
  //turn the PID on
  myPID.SetMode(AUTOMATIC);
}

void loop()
{

  Input = analogRead(PIN_INPUT);    // 输入是由 一个 电位器 来控制
  Input=map(Input,0,1023,0,254);   // 把输入值映射一下

  myPID.Compute();
  analogWrite(PIN_OUTPUT, Input+Output);

  
  Serial.print(Input);
  
  Serial.print(",");
  Serial.print(Output);

Serial.print(",");   
   Serial.print(Output+ Input);    //  我觉得输出的最终结果就是 对 Input 进行补偿

   Serial.print("\n");
   
  delay(500);
}



Serial  chart 图: 这里我用  电位器 手动 调整 变化大小来作为输入 Input

图中 Input 值是 绿色线,Output 是 红色线, 输出的最终结果 是蓝色线





不手动调节电位器 也会有波动,如下图:



我也不知道是不是就是这个效果, 好像 如果 输入变化比较大,那么最终结果也会有一段时间变化比较大,是不是要加入 delay 来消除变化输出呢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2016-10-28 14:19:45 | 显示全部楼层
楼主现在知道怎么搞了吗?知道分享下喂
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 19:44 , Processed in 0.036154 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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