PID参数的确定及实际应用
对于PID 参数的确定前辈们早就说了
先把 I 和D =0 搞好P在说
我们接下来就先搞P
首先定义一个PID 结构体的变量
struct pid_unit unit; // 生成一个PID控制模块
然后初始化PID
pid_init(unit, 1, 0,0); // 对该模块进行初始化
为什么用1呢?我采样的是一个0-1024的 给的控制信号是一个 0-10 000 000 的延时值
这个和1有什么关系呢?
我也不清楚 反正先用1搞吧看看效果
不过明眼人一看 就知道如果是1的话 系统 设定采样值是512 初始状态是0
那么输出 会从0开始增加(采样值 和控制信号) 大致趋势为(YZ 代表示采样状态可能正可能负)
(0 0) (0 1*512)(YZ0 512+YZ0) 。。
我们可以这么理解 我给了512的控制信号 看看情况。。系统输出小于512的话 那么我在给一个512的信号 加上 系统输出增加量(应为上一次是0 所以这次就是YZ0) 如果系统输出大于512 那么 加的这个YZ0自然就是负值
也就是说 系统给的控制信号会小于512
这就是 直观的P 控制效果
先拿去用用在说
时间常数选为 1 这个我觉得可以随便选,,应为我不是真实的 采样时间 这个1表示的只是一个采样 间隔单位
具体影响还是* P I D 去调整
函数调用 pid_control(unit, (conv-redvad),1);
继昨天的P 程序,,
反正乱七八糟的,,今天程序总算正常运行了
(没有良好的编程习惯是不行的)
记得昨天P取得是1哈。。。
效果不错。。灯泡 在最亮 到最暗 之间 迅速变化着
可以得出以下结论:
1我的P调节正常工作了
2:P的系数 取得太大太大,,,整个系统震荡,,而且剧烈的严重
基于此现修改P=0.25 为什么是0.25 呢? 应为是0.25=1/4
为什么是1/4呢?因为 我的是单片机 算完后 左移2位就完成了
不过有个问题哦,,,就是我的PID 子函数 为了通用性 不方便修改
而我不希望 将0.25 作为P的比例系数传进去,,
不管了 反正现在 I 和D都是0 先这样搞
dpid=pid_control(unit, (convad-redvad),1)>>2;
未完待续
- VHDL结构体的行为描述法(06-06)
- VHDL结构体的数据流描述法(06-06)
- VHDL结构体的结构化描述法(06-06)
- niosII中串口RS232程序使用结构体和联合体结合的用法(12-16)
- 关于结构体数据存储的对齐问题(12-01)
- 结构体中动态内存的管理(malloc和free)(12-01)