From 8f6daf1e41da0b089023a96a82efa37ba387eac5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B7=E5=BA=8A=E5=B0=B1=E7=8A=AF=E5=9B=B0?= <11730503+psx123456@user.noreply.gitee.com> Date: Thu, 12 Jun 2025 09:45:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=9E=8B=E7=94=B5=E6=9C=BA=E6=AD=A3?= =?UTF-8?q?=E5=B8=B8=E8=BF=90=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- APP/Common/ptz_default_value.h | 162 ++++++++++++++++-------- APP/Device/Device_speed/speed_to_bldc.c | 32 ++--- APP/Device/Device_speed/speed_to_bldc.h | 4 +- APP/Service/service_statusmonitor.c | 4 +- 4 files changed, 127 insertions(+), 75 deletions(-) diff --git a/APP/Common/ptz_default_value.h b/APP/Common/ptz_default_value.h index d93369c..f4721ce 100644 --- a/APP/Common/ptz_default_value.h +++ b/APP/Common/ptz_default_value.h @@ -334,71 +334,123 @@ #endif +#define NEW_MOTOR #ifdef PTZ_SUPER_LIGHT_WORM_L6235D_AS5047D_24V - ///水平电机减速比 - #define PTZ_HORI_MOTOR_RATIO 3.0 - ///水平大齿轮减速比 - #define PTZ_HORI_BIG_GEAR_RATIO 50.0 - ///水平总减速比 - #define PTZ_HORI_RATIO 150.0 - ///水平电机调速模拟电压最大值 - #define PTZ_HORI_VR_MAX 1999 - ///水平电机调速模拟电压最小值 - #define PTZ_HORI_VR_MIN 250 + #ifndef NEW_MOTOR + ///水平电机减速比 + #define PTZ_HORI_MOTOR_RATIO 27.0 + ///水平大齿轮减速比 + #define PTZ_HORI_BIG_GEAR_RATIO 50.0 + ///水平总减速比 + #define PTZ_HORI_RATIO 1350.0 + ///水平电机调速模拟电压最大值 + #define PTZ_HORI_VR_MAX 1999 + ///水平电机调速模拟电压最小值 + #define PTZ_HORI_VR_MIN 50 - ///转速单位 转/每分 - ///水平电机最大转速 - #define PTZ_HORI_MOTOR_MAX_SPEED 3000 - ///水平电机最小转速 - #define PTZ_HORI_MOTOR_MIN_SPEED 405.0 - ///水平云台最大转速 - #define PTZ_HORI_MAX_SPEED 20.0 - ///水平云台最小转速 - #define PTZ_HORI_MIN_SPEED 2.7 - ///水平云台默认最佳速度 - #define PTZ_HORI_BEST_SPEED 14.4 + ///转速单位 转/每分 + ///水平电机最大转速 + #define PTZ_HORI_MOTOR_MAX_SPEED 3000 + ///水平电机最小转速 + #define PTZ_HORI_MOTOR_MIN_SPEED 405.0 + ///水平云台最大转速 + #define PTZ_HORI_MAX_SPEED 2.2 + ///水平云台最小转速 + #define PTZ_HORI_MIN_SPEED 0.3 + ///水平云台默认最佳速度 + #define PTZ_HORI_BEST_SPEED 1.5 + #endif + #ifdef NEW_MOTOR + ///水平电机减速比 + #define PTZ_HORI_MOTOR_RATIO 3.0 + ///水平大齿轮减速比 + #define PTZ_HORI_BIG_GEAR_RATIO 50.0 + ///水平总减速比 + #define PTZ_HORI_RATIO 150.0 + ///水平电机调速模拟电压最大值 + #define PTZ_HORI_VR_MAX 1999 + ///水平电机调速模拟电压最小值 + #define PTZ_HORI_VR_MIN 50 + + ///转速单位 转/每分 + ///水平电机最大转速 + #define PTZ_HORI_MOTOR_MAX_SPEED 3000 + ///水平电机最小转速 + #define PTZ_HORI_MOTOR_MIN_SPEED 405.0 + ///水平云台最大转速 + #define PTZ_HORI_MAX_SPEED 20.0 + ///水平云台最小转速 + #define PTZ_HORI_MIN_SPEED 2.7 + ///水平云台默认最佳速度 + #define PTZ_HORI_BEST_SPEED 14.4 + #endif /**********************************************************/ + + #ifndef NEW_MOTOR + ///磁编码器和电机之间的减速比 + #define PTZ_VERT_MOTOR_RATIO 27.0 + ///磁编码器与云台轴之间的减速比 + #define PTZ_VERT_BIG_GEAR_RATIO 50.0 + ///垂直总减速比 + #define PTZ_VERT_RATIO 1350.0 + ///垂直电机调速模拟电压最大值 + #define PTZ_VERT_VR_MAX 1899 + ///垂直电机调速模拟电压最小值 + #define PTZ_VERT_VR_MIN 50 - ///磁编码器和电机之间的减速比 - #define PTZ_VERT_MOTOR_RATIO 10.0 - ///磁编码器与云台轴之间的减速比 - #define PTZ_VERT_BIG_GEAR_RATIO 50.0 - ///垂直总减速比 - #define PTZ_VERT_RATIO 500.0 - ///垂直电机调速模拟电压最大值 - #define PTZ_VERT_VR_MAX 1999 - ///垂直电机调速模拟电压最小值 - #define PTZ_VERT_VR_MIN 50 + ///转速单位 转/每分 + ///垂直电机最大转速 + #define PTZ_VERT_MOTOR_MAX_SPEED 3000.0 + ///垂直电机最小转速 + #define PTZ_VERT_MOTOR_MIN_SPEED 405.0 + ///垂直云台最大转速 + #define PTZ_VERT_MAX_SPEED 2.2 + ///垂直云台最小转速 + #define PTZ_VERT_MIN_SPEED 0.3 + ///垂直云台默认最佳速度 + #define PTZ_VERT_BEST_SPEED 1.5 + #endif - ///转速单位 转/每分 - ///垂直电机最大转速 - #define PTZ_VERT_MOTOR_MAX_SPEED 3000.0 - ///垂直电机最小转速 - #define PTZ_VERT_MOTOR_MIN_SPEED 405.0 - ///垂直云台最大转速 - #define PTZ_VERT_MAX_SPEED 6.0 - ///垂直云台最小转速 - #define PTZ_VERT_MIN_SPEED 0.81 - ///垂直云台默认最佳速度 - #define PTZ_VERT_BEST_SPEED 4.3 + #ifdef NEW_MOTOR + ///磁编码器和电机之间的减速比 + #define PTZ_VERT_MOTOR_RATIO 10.0 + ///磁编码器与云台轴之间的减速比 + #define PTZ_VERT_BIG_GEAR_RATIO 50.0 + ///垂直总减速比 + #define PTZ_VERT_RATIO 500.0 + ///垂直电机调速模拟电压最大值 + #define PTZ_VERT_VR_MAX 1899 + ///垂直电机调速模拟电压最小值 + #define PTZ_VERT_VR_MIN 100 + ///转速单位 转/每分 + ///垂直电机最大转速 + #define PTZ_VERT_MOTOR_MAX_SPEED 3000.0 + ///垂直电机最小转速 + #define PTZ_VERT_MOTOR_MIN_SPEED 405.0 + ///垂直云台最大转速 + #define PTZ_VERT_MAX_SPEED 6.0 + ///垂直云台最小转速 + #define PTZ_VERT_MIN_SPEED 0.81 + ///垂直云台默认最佳速度 + #define PTZ_VERT_BEST_SPEED 4.3 - //电机磁极对数 - #define PTZ_HORI_MOTOR_POLE_PAIRS 4.0 - //电机霍尔传感器对数 - #define PTZ_HORI_MOTOR_HALL_PAIRS 3.0 - //电机旋转一圈FG返回的霍尔脉冲数 - #define PTZ_HORI_ONE_CYCLE_HALL_NUM 12.0 - - //电机磁极对数 - #define PTZ_VERT_MOTOR_POLE_PAIRS 4.0 - //电机霍尔传感器对数 - #define PTZ_VERT_MOTOR_HALL_PAIRS 3.0 - //电机旋转一圈FG返回的霍尔脉冲数 - #define PTZ_VERT_ONE_CYCLE_HALL_NUM 12.0 + #endif + //电机磁极对数 + #define PTZ_HORI_MOTOR_POLE_PAIRS 4.0 + //电机霍尔传感器对数 + #define PTZ_HORI_MOTOR_HALL_PAIRS 3.0 + //电机旋转一圈FG返回的霍尔脉冲数 + #define PTZ_HORI_ONE_CYCLE_HALL_NUM 12.0 + //电机磁极对数 + #define PTZ_VERT_MOTOR_POLE_PAIRS 4.0 + //电机霍尔传感器对数 + #define PTZ_VERT_MOTOR_HALL_PAIRS 3.0 + //电机旋转一圈FG返回的霍尔脉冲数 + #define PTZ_VERT_ONE_CYCLE_HALL_NUM 12.0 #endif diff --git a/APP/Device/Device_speed/speed_to_bldc.c b/APP/Device/Device_speed/speed_to_bldc.c index 861cda0..8a8db1f 100644 --- a/APP/Device/Device_speed/speed_to_bldc.c +++ b/APP/Device/Device_speed/speed_to_bldc.c @@ -619,24 +619,24 @@ static void ptz_hori_pid_task() // else #ifdef PTZ_HALL_SPEED_SL - if (g_ptz.hori_speed_actual == 0) { - h_pwm_duty_change(PTZ_HORI_VR_MIN); - } + // if (g_ptz.hori_speed_actual == 0) { + // h_pwm_duty_change(PTZ_HORI_VR_MIN); + // } /* 使能计算速度 */ g_speed_to_hall.hori_speed_t.flag = calculation_enable; /* 超时机制 */ uint32_t timeOut = 0; - + /* 电机转动后,等待进入hall中断启动速度计算 */ while (!(g_speed_to_hall.hori_speed_t.flag == calculation_start || g_ptz.hori_start_stop_set == PTZ_HORI_STOP) - && timeOut < 10) { + && timeOut < 15) { OSTimeDlyHMSM(0u, 0u, 0u, 1u); timeOut++; } - if (timeOut >= 10) { + if (timeOut >= 15) { g_ptz.hori_speed_actual = 0; goto timeOutErr; } @@ -646,11 +646,11 @@ static void ptz_hori_pid_task() g_speed_to_hall.hori_speed_t.flag = calculation_ok; timeOut = 0; - + /* 等待最后一个hall信号到来 */ while (!(g_speed_to_hall.hori_speed_t.flag == calculation_end || g_ptz.hori_start_stop_set == PTZ_HORI_STOP) - && timeOut < 10) { + && timeOut < 10) { OSTimeDlyHMSM(0u, 0u, 0u, 1u); timeOut++; } @@ -1295,9 +1295,9 @@ static void ptz_vert_pid_task() #ifdef PTZ_HALL_SPEED_SL - if (g_ptz.vert_speed_actual == 0) { - v_pwm_duty_change(PTZ_VERT_VR_MIN); - } + // if (g_ptz.vert_speed_actual == 0) { + // v_pwm_duty_change(PTZ_VERT_VR_MIN); + // } /* 使能计算速度 */ g_speed_to_hall.vert_speed_t.flag = calculation_enable; @@ -1308,11 +1308,11 @@ static void ptz_vert_pid_task() /* 电机转动后,等待进入hall中断启动速度计算 */ while (!(g_speed_to_hall.vert_speed_t.flag == calculation_start || g_ptz.vert_start_stop_set == PTZ_HORI_STOP) - && timeOut < 10) { + && timeOut < 15) { OSTimeDlyHMSM(0u, 0u, 0u, 1u); timeOut++; } - if (timeOut >= 10) { + if (timeOut >= 15) { g_ptz.vert_speed_actual = 0; goto timeOutErr; } @@ -1348,7 +1348,7 @@ static void ptz_vert_pid_task() + g_speed_to_hall.vert_speed_t.endTime_us + (SPEED_TIMER_PERIOD - g_speed_to_hall.vert_speed_t.startTime_us); } - g_ptz.hori_speed_actual = (float)g_speed_to_hall.vert_speed_t.hallNum * 5000000.0 / (float)time / PTZ_VERT_RATIO; + g_ptz.vert_speed_actual = (float)g_speed_to_hall.vert_speed_t.hallNum * 5000000.0 / (float)time / PTZ_VERT_RATIO; timeOutErr: @@ -1449,8 +1449,8 @@ timeOutErr: //将PID输出的电机转速模拟电压等级输入到模拟电压输出芯片 -// vert_dac1_data_out( g_ptz.vert_pid.PidUT_uint); - +// vert_dac1_data_out( g_ptz.vert_pid.PidUT_uint); + v_pwm_duty_change(g_ptz.vert_pid.PidUT_uint); //将当前PID输出值保存 g_ptz.vert_pid.LastUT_float = g_ptz.vert_pid.PidUT_float; diff --git a/APP/Device/Device_speed/speed_to_bldc.h b/APP/Device/Device_speed/speed_to_bldc.h index fb27d9e..3d69ba8 100644 --- a/APP/Device/Device_speed/speed_to_bldc.h +++ b/APP/Device/Device_speed/speed_to_bldc.h @@ -241,8 +241,8 @@ #define PTZ_HORI_PID_OUTPUT_LIMIT 200.0//PID调速输出值限定,当前输出值和上一次输出值之间的差异 #define PTZ_VERT_PID_T 30u - #define PTZ_VERT_PID_VERT_KP 35.0//比例系数 - #define PTZ_VERT_PID_VERT_TI 0.0003 //积分系数 + #define PTZ_VERT_PID_VERT_KP 40.0//比例系数 + #define PTZ_VERT_PID_VERT_TI 0.0001 //积分系数 #define PTZ_VERT_PID_VERT_TD 0.0 //微分系数 #define PTZ_VERT_PID_INPUT_LIMIT 100.0//PID调速输入值限定 diff --git a/APP/Service/service_statusmonitor.c b/APP/Service/service_statusmonitor.c index d7feb4d..51cd3f4 100644 --- a/APP/Service/service_statusmonitor.c +++ b/APP/Service/service_statusmonitor.c @@ -300,7 +300,8 @@ static char ptz_motor_rotate_fault_detect_task() { time_ms = 0; } - + + return 1; //垂直 @@ -547,7 +548,6 @@ static char ptz_motor_rotate_fault_detect_task() } - if(g_ptz.vert_start_stop_set == PTZ_VERT_STOP) { vert_rotate_fault_step = 0;//关闭判断