經過幾天對pid的學習,以及各種的查閱資料,今天自己動手寫了乙個閉環小車的pid調速程式。網上關於pid原理的資料文獻都有很多,這裡我就不多說了,直接給出自己寫的程式,希望對那些看了很多資料不敢動手寫程式的學者有一些幫助。(我自己也是乙個pid的初學者,寫這篇部落格也是為了加深自己的理解,寫的不好的地方,請大家多多提意見)
下面是.c檔案的程式
#include#includetypedef unsigned char u8;
u8 pwm1,pwm2;
typedef struct _pid
pid_value;
pid_value pid;
void pidinit()
/*pid運算函式*/
float setspeed_pid(float speed1,float speed2)
void forward()
.c檔案採用的是增量型pid的調節
這裡是.h檔案的程式
#ifndef __pid_h
#define __pid_h
#include#includesbit enb=p2^0; //右輪電機轉動使能控制位
sbit right_motor_1=p2^2;//右電機控制位1
sbit right_motor_2=p2^1;//右電機控制位2
sbit left_motor_1=p2^3; //左電機控制位1
sbit left_motor_2=p2^4; //左電機控制位2
sbit ena=p2^5; //左輪電機轉動使能控制位
extern u16 pwm1,pwm2;
void forward();
float setspeed_pid(float speed1,float speed2);
#endif
程式就寫到這裡了,希望對我自己和初學者的你們都有幫助。
對於三個引數的確定,一般的也是大都數人都在使用的方法就是:將ki、kd先賦值為零,確定kp,之後是第二個引數ki,最後才是微分引數kd。(三個係數的確定需要不斷的**,找到比較適合的值)
PID學習記錄
pid演算法是個很經典的東西,做平衡小車,飛行器都會有所涉及到,但對於剛剛開始學習pid演算法的我來說簡直是一種折磨和一道難以跨過的坎。因此我把我目前所理解到的pid來好好講解一下,也用來做一次知識鞏固 簡介 pid全名為 比例積分微分控制,是用演算法進行機械控制的一種,也是目前被廣泛應用於工業過程...
PID學習隨筆
pid有兩種,一種是位置式的pid,一種是增量式的pid 位置式的pid適合沒有記憶功能的控制器件,如繼電器 u k kp e k ki kd e k e k 1 增量式pid適合有記憶功能的控制器件,如步進電機 u k u k u k 1 pid p比例 i積分 d微分 p的作用是放大誤差,只關注...
模糊PID學習筆記
傳統pid本質上時微分方程,p通過誤差調節訊號變化幅度,i加強p,也就是誤差在系統中的作用,以增加精度,d通過上一次的誤差差分得到訊號的變化趨勢,並抑制該趨勢,該方法對非線性系統有很好的控制效果。其公式可為 控制器輸出 以上例子為四軸飛行器串級pid,串級pid個人理解上的本質是在單級pid上加強控...