文章寫的是基於數字pid控制器的閉環電機速度控制系統,系統以stc89c51微控制器為控制核心,通過電機驅動l298n(這裡因為所用電機是個小馬達,額定電流和堵轉電流不算大,所以用的是tc1508s做驅動)控制電機轉速,電機轉速控制採用pwm控制。在對電機轉速進行調速的過程同時,微控制器對電機的轉速進行實時採集,並在lcd1602顯示屏上實時顯示電機實際轉速。由於pid引數整定的需要,在設計中利用按鍵實現pid引數顯示和修改;同時使用按鍵控制電機的目標轉速。
以下是主要硬體部分:
霍爾感測器測速的使用非常簡單,在電機同軸上安裝幾個小磁鐵,當磁鐵靠近霍爾感測器的時候,輸出端輸出低電平。
下面部分**,後面會附上**zip,僅供參考。
主程式:
#include
"include.h"
void
main()
}
初始化程式:
#include
#include
"init.h"
#include
"lcd_drive.h"
#include
"key.h"
#include
"tim.h"
#include
"int0.h"
#include
"pid.h"
#include
#define kp 7.03
#define ki 2.39
#define kd 0
void
motor_init
(void);
void
system_init
(void
)void
motor_init
(void
)
pid的c檔案:
#include
"pid.h"
#include
"int0.h"
#include
"string.h"
pid velocity_pid;
int out=0;
//------------------------------------------
// 設定pid引數
//------------------------------------------
void
set_pid_parameter
(float kp,
float ki,
float kd)
//增量式pid
float
incpidcalc
(pid *pidx,
int nextpoint)
定時器c檔案:
#include
"tim.h"
#include
"delay.h"
#include
"int0.h"
#include
"key.h"
#include
"pid.h"
bit bling_bling=0;
//閃爍標誌位,選中的引數會閃爍,用於螢幕
void
timer0init
(void
)//50毫秒@12.000mhz
void
timer1init
(void
)//100uãë@12.000mhz
void
tim0_isr
() interrupt 1}if
(_50ms_dida==2)
//100msµãµ½âö³å¸öêý
for(i=
0;i<
9;i++
) out=
(int
)incpidcalc
(&velocity_pid,pulse_sum[9]
);if(velocity_pid.setpoint==
0)out =0;
pulse =0;
/******************************/
_50ms_dida=0;
}}void
tim1_isr
() interrupt 3
else
if(dirct_flag==0)
//motor_in0 = 0;motor_in1 = 1;//·´×ª
}}
按鍵c檔案:
#include
"key.h"
#include
"lcd_drive.h"
#include
"pid.h"
int aim_velocity=0;
uint8 parameter=0;
bit key_aux=
0,inte***ce_flag=0;
bit dirct_flag=
0,off_and_on=0;
void
_5_key_scan
(void
)else
if(dirct_flag==0)
}}else
if(switch==
0&& key_aux==1)
//¿ª¹ø¼üºíñ¡ôñpid²îêý¼ü
if(off_and_on ==1)
else
if(dirct_flag ==0)
}}else}if
(up_speed==
0&& key_aux==1)
}}if(down_speed==
0&& key_aux==1)
else
if(inte***ce_flag)}}
if(inte***ce_f ==
0&& key_aux==1)
//½çãæçð»»°´¼ü
else}if
(clockwise_key && switch && up_speed && down_speed && inte***ce_f)
//鬆開
key_aux =1;
}
顯示屏的程式就不貼了,每個人使用的顯示屏都可以不一樣。只要資訊能顯示出來都可以了。
下面附上程式壓縮包。motor_incpid.zip
直流電機pwm 直流電機的調速方法
直流電機的調速方法 一 概述 一是調節電樞電壓,二是調節勵磁電流,1 常見的微型直流電機,其磁場都是固定的,不可調的永磁體,所以只好調節電樞電壓。調節電樞電壓方法 常用的一是可控矽調壓法,再就是脈寬調變法 pwm pwm的h型屬於調壓調速。pwm的h橋只能實現大功率調速。國內的超大功率調速還要依靠可...
直流電機PID調節 P
其實要用pid調節的話,最好是使用帶有編碼器的比較高階一點的直流減速電機,但是因為它 有點貴,所以我們一般做智慧型小車就會選用普通的直流電機,但是普通的直流電機也是可以使用pid調節的,雖然它的效果沒有帶編碼器得到直流減速電機的好,但是我們也可以在調節的過程中慢慢地深刻的理解pid調節的含義。今天先...
PID演算法控制直流電機筆記
1.將偏差的比例 積分和微分通過線性組合構成控制量,用這一控制量對被控物件進行控制,這樣的控制器稱為pid控制器。簡單說就是根據系統的誤差,利用比例 積分 微分計算出控制量進行控制。2.為什麼需要pid演算法?電機在不同負載情況下,為了保持速度不變,需要不斷調整pwm占空比,pid演算法可以動態調整...