新型电机pid调节

This commit is contained in:
起床就犯困 2025-06-09 14:40:49 +08:00
parent 0be9dda6a2
commit 973dc0352b
3 changed files with 16 additions and 12 deletions

View File

@ -338,11 +338,11 @@
#ifdef PTZ_SUPER_LIGHT_WORM_L6235D_AS5047D_24V #ifdef PTZ_SUPER_LIGHT_WORM_L6235D_AS5047D_24V
///ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD> ///ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD>
#define PTZ_HORI_MOTOR_RATIO 27.0 #define PTZ_HORI_MOTOR_RATIO 3.0
///ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>ּ<EFBFBD><D6BC>ٱ<EFBFBD> ///ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>ּ<EFBFBD><D6BC>ٱ<EFBFBD>
#define PTZ_HORI_BIG_GEAR_RATIO 50.0 #define PTZ_HORI_BIG_GEAR_RATIO 50.0
///ˮƽ<CBAE>ܼ<EFBFBD><DCBC>ٱ<EFBFBD> ///ˮƽ<CBAE>ܼ<EFBFBD><DCBC>ٱ<EFBFBD>
#define PTZ_HORI_RATIO 1350.0 #define PTZ_HORI_RATIO 150.0
///ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>ֵ ///ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>ֵ
#define PTZ_HORI_VR_MAX 1999 #define PTZ_HORI_VR_MAX 1999
///ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ѹ<EFBFBD><D1B9>Сֵ ///ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ѹ<EFBFBD><D1B9>Сֵ
@ -354,11 +354,11 @@
///ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD>Сת<D0A1><D7AA> ///ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD>Сת<D0A1><D7AA>
#define PTZ_HORI_MOTOR_MIN_SPEED 405.0 #define PTZ_HORI_MOTOR_MIN_SPEED 405.0
///ˮƽ<CBAE><C6BD>̨<EFBFBD><CCA8><EFBFBD>ת<EFBFBD><D7AA> ///ˮƽ<CBAE><C6BD>̨<EFBFBD><CCA8><EFBFBD>ת<EFBFBD><D7AA>
#define PTZ_HORI_MAX_SPEED 2.2 #define PTZ_HORI_MAX_SPEED 20.0
///ˮƽ<CBAE><C6BD>̨<EFBFBD><CCA8>Сת<D0A1><D7AA> ///ˮƽ<CBAE><C6BD>̨<EFBFBD><CCA8>Сת<D0A1><D7AA>
#define PTZ_HORI_MIN_SPEED 0.3 #define PTZ_HORI_MIN_SPEED 2.7
///ˮƽ<CBAE><C6BD>̨Ĭ<CCA8><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD> ///ˮƽ<CBAE><C6BD>̨Ĭ<CCA8><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
#define PTZ_HORI_BEST_SPEED 1.6 #define PTZ_HORI_BEST_SPEED 12.0
/**********************************************************/ /**********************************************************/

View File

@ -98,7 +98,7 @@ void ptz_hori_pid_clear_zero()
// hori_dac0_data_out(0); // hori_dac0_data_out(0);
} }
static float ptz_hori_pid_calculate(float H_SampSpeed) static float ptz_hori_pid_calculate(float H_SampSpeed, uint32_t H_SampTime)
{ {
float H_IError,H_IIncPid; float H_IError,H_IIncPid;
H_IError = g_ptz.hori_speed_set - H_SampSpeed;//当前误差PID_INPUT_LIMIT H_IError = g_ptz.hori_speed_set - H_SampSpeed;//当前误差PID_INPUT_LIMIT
@ -112,7 +112,10 @@ static float ptz_hori_pid_calculate(float H_SampSpeed)
// H_IError = PTZ_HORI_PID_INPUT_LIMIT * -1; // H_IError = PTZ_HORI_PID_INPUT_LIMIT * -1;
// } // }
//增量计算 //增量计算
H_IIncPid = g_ptz.hori_pid.A * H_IError + g_ptz.hori_pid.B * g_ptz.hori_pid.LastError + g_ptz.hori_pid.C * g_ptz.hori_pid.PrevError; // H_IIncPid = g_ptz.hori_pid.A * H_IError + g_ptz.hori_pid.B * g_ptz.hori_pid.LastError + g_ptz.hori_pid.C * g_ptz.hori_pid.PrevError;
H_IIncPid = PTZ_HORI_PID_HORI_KP * (H_IError - g_ptz.hori_pid.LastError) + PTZ_HORI_PID_HORI_TI * H_SampTime * H_IError;
//存储误差,用于下次计算 //存储误差,用于下次计算
g_ptz.hori_pid.PrevError = g_ptz.hori_pid.LastError; g_ptz.hori_pid.PrevError = g_ptz.hori_pid.LastError;
g_ptz.hori_pid.LastError = H_IError; g_ptz.hori_pid.LastError = H_IError;
@ -652,7 +655,7 @@ static void ptz_hori_pid_task()
continue; continue;
} }
int32_t time; uint32_t time;
if (g_speed_to_hall.hori_speed_t.endTime_60ms > g_speed_to_hall.hori_speed_t.startTime_60ms) { if (g_speed_to_hall.hori_speed_t.endTime_60ms > g_speed_to_hall.hori_speed_t.startTime_60ms) {
time = (g_speed_to_hall.hori_speed_t.endTime_60ms - g_speed_to_hall.hori_speed_t.startTime_60ms - 1) * SPEED_TIMER_PERIOD time = (g_speed_to_hall.hori_speed_t.endTime_60ms - g_speed_to_hall.hori_speed_t.startTime_60ms - 1) * SPEED_TIMER_PERIOD
+ g_speed_to_hall.hori_speed_t.endTime_us + (SPEED_TIMER_PERIOD - g_speed_to_hall.hori_speed_t.startTime_us); + g_speed_to_hall.hori_speed_t.endTime_us + (SPEED_TIMER_PERIOD - g_speed_to_hall.hori_speed_t.startTime_us);
@ -679,7 +682,7 @@ static void ptz_hori_pid_task()
else else
{ {
//计算PID控制器输出值 //计算PID控制器输出值
g_ptz.hori_pid.PidUT_float = ptz_hori_pid_calculate(g_ptz.hori_speed_actual) + g_ptz.hori_pid.LastUT_float; g_ptz.hori_pid.PidUT_float = ptz_hori_pid_calculate(g_ptz.hori_speed_actual, time) + g_ptz.hori_pid.LastUT_float;
//控制PID的输出值增量当前输出值与上一次输出值的差值必须在某个范围内 //控制PID的输出值增量当前输出值与上一次输出值的差值必须在某个范围内
//即防止PID增量过大 //即防止PID增量过大

View File

@ -229,10 +229,11 @@
//#define PTZ_HORI_PID_JY02A_SPEED //#define PTZ_HORI_PID_JY02A_SPEED
//#define PTZ_VERT_PID_JY02A_SPEED //#define PTZ_VERT_PID_JY02A_SPEED
#define PTZ_PID_HALL_SPEED 1 #define PTZ_PID_HALL_SPEED 1
#define PTZ_HALL_SPEED_SL 1
#define PTZ_HORI_PID_T 30u #define PTZ_HORI_PID_T 30u
#define PTZ_HORI_PID_HORI_KP 20.0//<2F><><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5> #define PTZ_HORI_PID_HORI_KP 35.0//<2F><><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
#define PTZ_HORI_PID_HORI_TI 100.0 //<2F><><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5> #define PTZ_HORI_PID_HORI_TI 0.0003 //<2F><><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
#define PTZ_HORI_PID_HORI_TD 0.0 //΢<><CEA2>ϵ<EFBFBD><CFB5> #define PTZ_HORI_PID_HORI_TD 0.0 //΢<><CEA2>ϵ<EFBFBD><CFB5>
#define PTZ_HORI_PID_INPUT_LIMIT 100.0//PID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>޶<EFBFBD> #define PTZ_HORI_PID_INPUT_LIMIT 100.0//PID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>޶<EFBFBD>