資料介紹
PID例子
[電機與驅動] 一個簡單的PID
PID
#include 《hidef.h》 /* common defines and macros */
#include “derivative.h” /* derivative-specific definitions */
#include 《mc9s12xs128.h》
//定義PID參數
#define VV_KPVALUE 3 //比例
#define VV_KIVALUE 40 //積分
#define VV_KDVALUE 3 //微分
#define VV_MAX 10000 //返回的最大值,是pwm的周期值
#define VV_MIN 0
#define VV_DEADLINE 0X08 //速度PID,設置死區范圍
typedef struct PID //定義數法核心數據
{
signed int vi_Ref; //速度PID,速度設定值
signed int vi_FeedBack; //速度PID,速度反饋值
signed long vi_PreError; //速度PID,前一次,速度誤差,,vi_Ref - vi_FeedBack
signed long vi_PreDerror; //速度PID,前一次,速度誤差之差,d_error-PreDerror;
unsigned int v_Kp; //速度PID,Ka = Kp
unsigned int v_Ki; //速度PID,Kb = Kp * ( T / Ti )
unsigned int v_Kd; //速度PID,
signed long vl_PreU; //電機控制輸出值
}PID;
PID sPID; // PID Control Structure
void PIDInit(void)
{
sPID.vi_Ref = 0 ; //速度設定值
sPID.vi_FeedBack = 0 ; //速度反饋值
sPID.vi_PreError = 0 ; //前一次,速度誤差,,vi_Ref - vi_FeedBack
sPID.vi_PreDerror = 0 ; //前一次,速度誤差之差,d_error-PreDerror;
sPID.v_Kp = VV_KPVALUE;
sPID.v_Ki = VV_KIVALUE;
sPID.v_Kd = VV_KDVALUE;
sPID.vl_PreU = 0 ; //電機控制輸出值
}
unsigned int v_PIDCalc( PID *pp )
{
signed long error,d_error,dd_error;
error = (signed long)(pp-》vi_Ref - pp-》vi_FeedBack); // 偏差計算
d_error = error - pp-》vi_PreError;
dd_error = d_error - pp-》vi_PreDerror;
pp-》vi_PreError = error; //存儲當前偏差
pp-》vi_PreDerror = d_error;
if( ( error 《 VV_DEADLINE ) && ( error 》 -VV_DEADLINE ) ); //設置調節死區
//速度PID計算
pp-》vl_PreU += (signed long)( pp -》 v_Kp * d_error + pp -》 v_Ki * error + pp-》v_Kd*dd_error);
else if( pp-》vl_PreU 》= VV_MAX ) //速度PID,防止調節最高溢出
pp-》vl_PreU = VV_MAX;
else if( pp-》vl_PreU 《= VV_MIN ) //速度PID,防止調節最低溢出
pp-》vl_PreU = VV_MIN;
else
;
return ( pp-》vl_PreU ); // 返回預調節占空比
}
void main(void) {
/* put your own code here */
InitMCu();
IncPIDInit();
int g_CurrentVelocity=0; //全局變量也初始化
int g_Flag=0; //全局變量也初始化
EnableInterrupts;
While(1)
{
if (g_Flag&&vi_FeedBack)
{
PWMOUT+= v_PIDCalc( PID *pp );
g_Flag&=~ vi_FeedBack;
}
}
}
for(;;) {
_FEED_COP(); /* feeds the dog */
} /* loop forever */
/* please make sure that you never leave main */
}
- [單片機]一個例子說PID算法
- 經典的PID控制技術圖書《Advanced PID Control》pdf 0次下載
- 基于PID控制的DC-DC升壓開關電源 28次下載
- 基于FPGA的PID系統源碼下載 80次下載
- PID控制中如何整定PID參數 67次下載
- PID調節及PID調節的基本原理 51次下載
- Labview Excel例子文件下載 148次下載
- 改進的足球機器人PID調節器設計 9次下載
- 到底什么是串級PID
- 使用單片機和Arduino實現增量式PID位置式PID算法和PID庫免費下載 69次下載
- PID控制經典教程之位置式PID控制原理(上) 0次下載
- PID控制經典教程之位置式PID控制原理(下) 0次下載
- PID_REG3 11次下載
- PID_通俗教程 0次下載
- arm應用程序的例子.
- 位置式PID與增量式PID的區別 7255次閱讀
- PID項目實例詳解 2150次閱讀
- 一個模擬解像力圖表的例子 1124次閱讀
- 串級PID的相關概念 1964次閱讀
- 什么是PID?位置式PID與增量式PID有何不同 3.6w次閱讀
- 變頻器的PID控制原理框圖_變頻器的PID的作用 1.2w次閱讀
- 什么是PID控制? 3.2w次閱讀
- PID是什么PID的形象說明和調試口訣詳細說明 1.8w次閱讀
- 一文詳解工業自動化控制中PID的應用和整定方法 7002次閱讀
- pid控制器的輸入輸出_PID控制器的控制實現 2.8w次閱讀
- 如何從逆變器側防治PID效應 1.8w次閱讀
- 光伏組件PID效應 6353次閱讀
- 增量式pid參數調整公式及策略 5.5w次閱讀
- 深度解析PID 5615次閱讀
- PID理論詳解 8047次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 2開關電源基礎知識
- 5.73 MB | 6次下載 | 免費
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設計
- 0.60 MB | 3次下載 | 免費
- 5基于FPGA的光纖通信系統的設計與實現
- 0.61 MB | 2次下載 | 免費
- 6基于FPGA的C8051F單片機開發板設計
- 0.70 MB | 2次下載 | 免費
- 751單片機窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費
- 8基于51單片機的RGB調色燈程序仿真
- 0.86 MB | 2次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33564次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21548次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6653次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537796次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191185次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183278次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論