PID(程式學習)

2021-08-28 03:21:28 字數 1084 閱讀 4955

經過幾天對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上加強控...