找回密码
 立即注册

QQ登录

只需一步,快速开始

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

初次调试速度PID全过程(分享PID函数)

  [复制链接]
跳转到指定楼层
楼主
ID:102668 发表于 2016-1-16 04:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

所谓PID指的是Proportion-Integral-Differential。翻译成中文是比例-积分-微分。


记住两句话:
1、PID是经典控制(使用年代久远) 2、PID是误差控制()
对直流电机速度进行定速控制:
1、L293作为电机驱动;2、光电传感器-作为输出反馈;3、PWM做为输入控制。 PID怎么对误差控制,听我细细道来:
所谓“误差”就是命令与输出的差值。比如你希望控制转速为4转/s(PWM波占空比=80%),而事实上控制转速只有3.5转/s,则误差: e=0.5转,如果实际转速为4.5转,则误差e=-0.5转(注意正负号)。
该误差值送到PID控制器,作为PID控制器的输入。PID控制器的输出为:误差乘比例系数Kp+Ki*误差积分+Kd*误差微分。
Kp*e + Ki*∫edt + Kd*(de/dt) (式中的t为时间,即对时间积分、微分) 上式为三项求和(希望你能看懂),PID结果后送入电机驱动器。 从上式看出,如果没有误差,即e=0,则Kp*e=0;Kd*(de/dt)=0;而Ki*∫edt 不一定为0。三项之和不一定为0。
总之,如果“误差”存在,PID就会对电机驱动作调整,直到误差=0。 评价一个控制系统是否优越,有三个指标:快、稳、准。
所谓快,就是要使压力能快速地达到“命令值”(不知道你的系统要求多少时间) 所谓稳,就是要压力稳定不波动或波动量小(不知道你的系统允许多大波动) 所谓准,就是要求“命令值”与“输出值”之间的误差e小(不知道你的系统允许多大误差)
对于你的系统来说,要求“快”的话,可以增大Kp、Ki值 要求“准”的话,可以增大Ki值
要求“稳”的话,可以增大Kd值,可以减少压力波动 仔细分析可以得知:这三个指标是相互矛盾的。 如果太“快”,可能导致不“稳”; 如果太“稳”,可能导致不“快”;
只要系统稳定且存在积分Ki,该系统在静态是没有误差的(会存在动态误差); 所谓动态误差,指当“命令值”不为恒值时,“输出值”跟不上“命令值”而存在的误差。不管是谁设计的、再好的系统都存在动态误差,动态误差体现的是系统的跟踪特性,比如说,有的音响功放对高频声音不敏感,就说明功放跟踪性能不好。 调整PID参数有两种方法:1、仿真法;2、“试凑法” 仿真法我想你是不会的,介绍一下“试凑法” “试凑法”设置PID参数的建议步骤:
1、把Ki与Kd设为0,不要积分与微分;
2、把Kp值从0开始慢慢增大,观察压力的反应速度是否在你的要求内; 3、当压力的反应速度达到你的要求,停止增大Kp值; 4、在该Kp值的基础上减少10%; 5、把Ki值从0开始慢慢增大;
6、当压力开始波动,停止增大Ki值;
7、在该Ki值的基础上减少10%;
8、把Kd值从0开始慢慢增大,观察压力的反应速度是否在你的要求内

P、I、D参数整定口诀: 参数整定找最佳,从小到大顺序查

先是比例后积分,最后再把微分加

曲线振荡很频繁,比例度盘要放大

曲线漂浮绕大湾,比例度盘往小扳

曲线偏离回复慢,积分时间往下降

曲线波动周期长,积分时间再加长

曲线振荡频率快,先把微分降下来

动差大来波动慢微分时间应加长

这是我在STM32F103RB上做速度PID的PID函数,当然也可以利用ST公司自带的DSP库,
//======================================================================
//Adjust these three factor ,to achieve the best control effect
//P:1~10之间 I:0-5之间 D:0.1~1
float P_Coefficient=4.75;
float I_Coefficient=0.55;
float D_Coefficient=0.2;
#define Diff_Order 4 /* Differential order*/
int Temp,DestTemp,HeatPower;
int Set_Distant;
long int Integral=5; // Points accumulated
float Prev_Error[10]; // Record ten times before the error
float P,I,D;
float Ek,E;
unsigned char FirstFlag=1;
/*******************************************************************************
* Funtion name:PID Control
* Time:2013/3/5
* Author:zhuhao
*******************************************************************************/
float PID_Control(float Error)
{
int i;
float Output;
float Ture;
if(FirstFlag)//The first execution
{
FirstFlag=0;
for(i=0;i<10;i++)
Prev_Error=Error;
}
for(i=0;i<10;i++)
Prev_Error[i+1]=Prev_Error;// Buffer queue
Prev_Error[0]=Error;//
Ek=Error-Prev_Error[Diff_Order];//
E=0.8+Ek*0.2;//IIR
P=P_Coefficient*Error;// Calculate the proportional component
I=I_Coefficient*Integral;// Calculate the integral component
D=D_Coefficient*E;//Calculate the derivative component
Output=(P+I+D);
if(Output>0)
{
Ture=Output;
}
if(Output>=100||Output<=0||Error<-40||Error>40)//Saturated or large deviation integral
{
if(Integral>0&&Error<0)
Integral+=Error;
if(Integral<0&&Error>0)
Integral+=Error;
}
else
Integral+=Error;
if(Integral<-10) Integral=-10;
if(Integral>10) Integral=10;
if (Output>=100)
Output=99;
else if(Output<=0)
Output=Ture;
return Output;
}
经过试验发现通过PID函数的调节,设定转速与实际转速相差无几,一般在0;01~0.05转左右,抗干扰好

串口数据波形分析仪软件可以到51黑搜索


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

使用道具 举报

沙发
ID:164569 发表于 2017-2-14 11:40 | 只看该作者
非常棒的入门介绍。
回复

使用道具 举报

板凳
ID:164250 发表于 2017-2-15 10:19 来自手机 | 只看该作者
棒棒的
回复

使用道具 举报

地板
ID:92231 发表于 2017-2-16 07:47 来自手机 | 只看该作者
很好的教程,长知识了
回复

使用道具 举报

5#
ID:165114 发表于 2017-3-1 14:44 | 只看该作者
有51的代码吗?
回复

使用道具 举报

6#
ID:153706 发表于 2017-4-5 15:10 | 只看该作者
楼主无私
回复

使用道具 举报

7#
ID:186620 发表于 2017-4-6 11:50 来自手机 | 只看该作者
可以很强势,可以学习
回复

使用道具 举报

8#
ID:206025 发表于 2017-7-20 17:35 | 只看该作者
厉害啊大神带带我
回复

使用道具 举报

9#
ID:144138 发表于 2017-8-3 10:30 | 只看该作者
楼主可以发一下波形分析软件和整个的工程吗?
回复

使用道具 举报

10#
ID:205044 发表于 2017-8-3 17:38 | 只看该作者
很好的教程,长知识了
回复

使用道具 举报

11#
ID:209158 发表于 2017-12-17 11:25 | 只看该作者
bangbangde
回复

使用道具 举报

12#
ID:163950 发表于 2017-12-18 13:03 | 只看该作者
看着还不错,楼主,这是属于位置式的PID吧?
回复

使用道具 举报

13#
ID:127591 发表于 2018-8-10 10:38 | 只看该作者
感谢分享!
回复

使用道具 举报

14#
ID:384932 发表于 2018-8-10 11:56 | 只看该作者
谢谢分享,受用
回复

使用道具 举报

15#
ID:380280 发表于 2018-8-22 17:35 | 只看该作者
搂住能把串口数据波形分析仪软件这个软件共享出来吗?万分感谢,一直在找这样的软件
回复

使用道具 举报

16#
ID:473730 发表于 2019-3-13 11:35 | 只看该作者
跪求楼主的串口数据波形分析仪
回复

使用道具 举报

17#
ID:605886 发表于 2019-9-10 14:43 | 只看该作者
很棒啊,谢谢分享
回复

使用道具 举报

18#
ID:730649 发表于 2020-9-17 20:36 | 只看该作者
真心感谢楼主的分享
回复

使用道具 举报

19#
ID:613705 发表于 2021-9-22 08:30 | 只看该作者
串口数据波形分析仪
回复

使用道具 举报

20#
ID:796915 发表于 2022-2-7 20:34 | 只看该作者

同志这个代码51运行不起来
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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