資源簡介
在PID算法中,我們如果只是使用單個閉環PID控制會出現很多的不足。例如我們在單獨使用位置環時,在電機未能達到預設位置時,電機的運行狀態是100%PWM滿偏運行的,這樣在我們實際運用時,如果我們使用的電機功率很高就會造成速度過快的現象。所以在電機的控制過程中,最好是多環控制。
在設計過程中,我是不斷地嘗試得出的結果。最終得出將位置環和速度環的輸出疊加的方法,在位置沒有到達預設位置時雖然位置環的輸出會是滿偏,但滿偏會讓速度出現偏差,速度環就會輸出負值反過來抑制總的輸出,這樣我們就可以在實現位置環的同時也有了速度環的控制。但注意的是在快達到預設位置時需要將速度環關閉。
代碼片段和文件信息
#include?“pid.h“
PID?pid;?//存放PID算法所需要的數據
PID1?pid1;
void?PID_Init()
{
pid.Sv=03000;?????//用戶設定值
pid.Pv=00.0;??????//檢測值
pid.OUT0?=00;??????//PID常數
pid.Ek=0.0;???????//當前誤差值
pid.Ek_1=0.0;?????//上一個誤差值
pid.Ek_2=0.0;?????//上上一個誤差值
pid.Kp=36;?????//比例常數
pid.Ki=0.25;???????//積分常數
pid.Kd=135;???????//微分常數
pid.uplimit=6000;?//上限值
pid.lowlimit=-6000;//下限值
}
void?PID1_Init()
{
pid1.Sv=1400.525;?????//用戶設定值
pid1.Pv=00.0;??????//檢測值
pid1.OUT0?=0;??????//PID常數
pid1.Ek=0.0;???????//當前誤差值
pid1.Ek_1=0.0;?????//上一個誤差值
pid1.Ek_2=0.0;?????//上上一個誤差值
pid1.Kp=6.5;?????//比例常數
pid1.Ki=0.36;???????//積分常數
pid1.Kd=0.00005;???????//微分常數
pid1.uplimit=6000;?//上限值
pid1.lowlimit=-6000;//下限值
pid1.PIDOUT=-6000;
}
float?Set_Pwm(float?moto1)
{
float?OUT;
if(moto1>0) AIN2=0 AIN1=1;
else? ??????????AIN2=1 AIN1=0;
OUT=myabs(moto1);
return?OUT;
}
//絕對值函數
float?myabs(float?a)
{? ???
??int?temp;
if(a<0)??temp=-a;??
??else?temp=a;
??return?temp;
}
int?PID1_output?()
{
float?PIDOUT;
pid1.Ek=pid1.Sv-pid1.Pv;
PIDOUT=pid1.Kp*(pid1.Ek-pid1.Ek_1)+pid1.Ki*pid1.Ek+pid1.Kd*(pid1.Ek_2*pid1.Ek_1+pid1.Ek_2)+pid1.OUT0;
pid1.Ek_2=pid1.Ek_1;
pid1.Ek_1=pid1.Ek;
pid1.PIDOUT+=PIDOUT;
pid1.PIDOUT=(pid1.PIDOUTpid1.uplimit)???pid1.uplimit?:?pid1.PIDOUT;
return?pid1.PIDOUT;
}
int?PID_output?()
{
float?PIDOUT;
pid.Ek=pid.Sv-pid.Pv;
PIDOUT=pid.Kp*pid.Ek+pid.Ki*(pid.Ek+pid.Ek_1+pid.Ek_2)+pid.Kd*(pid.Ek-pid.Ek_1)+pid.OUT0;
pid.Ek_2=pid.Ek_1;
pid.Ek_1=pid.Ek;
pid.PIDOUT=PIDOUT;
pid.PIDOUT=(pid.PIDOUTpid.uplimit)???pid.uplimit?:?pid.PIDOUT;
return?pid.PIDOUT;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-07-21?15:14??PID\
?????文件????????1845??2019-07-21?15:14??PID\pid.c
?????文件?????????818??2019-07-21?14:28??PID\pid.h
- 上一篇:ALM12.5管理員手冊
- 下一篇:電機伺服控制和PID算法
評論
共有 條評論