Compare commits

..

3 Commits

Author SHA1 Message Date
起床就犯困 c9f6123264 增加减速过程 2025-07-24 14:52:05 +08:00
起床就犯困 37c56a1a9e 修改减速比,过流保护 2025-07-04 15:36:50 +08:00
起床就犯困 3b990dd88c 修改传动比 2025-06-30 16:34:13 +08:00
9 changed files with 170 additions and 42 deletions

12
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,12 @@
{
"files.associations": {
"full_bridge.h": "c",
"ptz_default_value.h": "c",
"ptz_header_file.h": "c",
"gd32f4xx.h": "c",
"ptz_type_select.h": "c",
"l6235d.h": "c",
"service_presetbitscan.h": "c",
"device_adc_collect.h": "c"
}
}

View File

@ -73,11 +73,11 @@
#ifdef PTZ_MEDIUM_WORM_L6235D_AS5047D #ifdef PTZ_MEDIUM_WORM_L6235D_AS5047D
///*******************************标准云台******************************/ ///*******************************标准云台******************************/
///水平电机减速比 ///水平电机减速比
#define PTZ_HORI_MOTOR_RATIO 25.0//(25.0 * 1.5)//20 #define PTZ_HORI_MOTOR_RATIO 3.0//(25.0 * 1.5)//20
///水平大齿轮减速比 ///水平大齿轮减速比
#define PTZ_HORI_BIG_GEAR_RATIO 80.0//62.0 #define PTZ_HORI_BIG_GEAR_RATIO 80.0//62.0
///水平总减速比 ///水平总减速比
#define PTZ_HORI_RATIO 2000.0//2325//1240.0 #define PTZ_HORI_RATIO 240.0//2325//1240.0
///水平电机调速模拟电压最大值 ///水平电机调速模拟电压最大值
#define PTZ_HORI_VR_MAX 1999 #define PTZ_HORI_VR_MAX 1999
///水平电机调速模拟电压最小值 ///水平电机调速模拟电压最小值
@ -89,11 +89,11 @@
///水平电机最小转速 ///水平电机最小转速
#define PTZ_HORI_MOTOR_MIN_SPEED 400.0//600.0 #define PTZ_HORI_MOTOR_MIN_SPEED 400.0//600.0
///水平云台最大转速 ///水平云台最大转速
#define PTZ_HORI_MAX_SPEED 1.5//1.29//2.4 #define PTZ_HORI_MAX_SPEED 12.5//1.29//2.4
///水平云台最小转速 ///水平云台最小转速
#define PTZ_HORI_MIN_SPEED 0.2//0.3//0.26//0.4 #define PTZ_HORI_MIN_SPEED 1.67//0.3//0.26//0.4
///水平云台默认最佳速度 ///水平云台默认最佳速度
#define PTZ_HORI_BEST_SPEED 1.2//2.0 #define PTZ_HORI_BEST_SPEED 9.0//2.0
/**********************************************************/ /**********************************************************/
@ -116,7 +116,7 @@
///垂直云台最大转速 ///垂直云台最大转速
#define PTZ_VERT_MAX_SPEED 0.5//0.74//2.7 #define PTZ_VERT_MAX_SPEED 0.5//0.74//2.7
///垂直云台最小转速 ///垂直云台最小转速
#define PTZ_VERT_MIN_SPEED 0.07//0.1//0.15//0.5 #define PTZ_VERT_MIN_SPEED 0.067//0.1//0.15//0.5
///垂直云台默认最佳速度 ///垂直云台默认最佳速度
#define PTZ_VERT_BEST_SPEED 0.4//0.7//2.0 #define PTZ_VERT_BEST_SPEED 0.4//0.7//2.0

View File

@ -14,6 +14,65 @@ static BSP_OS_SEM ptz_vert_stop_mutex;
static char ptz_hori_stop_count;//水平停止计数,防止多次停止多次延时 static char ptz_hori_stop_count;//水平停止计数,防止多次停止多次延时
static char ptz_vert_stop_count;//垂直停止计数,防止多次停止多次延时 static char ptz_vert_stop_count;//垂直停止计数,防止多次停止多次延时
/* 水平停止转动,减速阶梯和切换时间 */
#define hori_stop_step 0.2f
#define hori_stop_time 1
/* 水平减速,减速阶梯和切换时间 */
#define hori_retard_step 0.2f
#define hori_retard_time 2
/**
*
*
*
*/
void ptz_hori_deceleration_process(float step, unsigned char time)
{
float temp = g_ptz.hori_speed_actual;
for (; ; ) {
temp -= step;
g_ptz.hori_speed_set = temp;
if (temp < PTZ_HORI_MIN_SPEED) {
break;
}
OSTimeDlyHMSM(0u, 0u, 0u, time);
}
}
/* 垂直停止转动,减速阶梯和切换时间 */
#define vert_stop_step 1.0f
#define vert_stop_time 1
/* 垂直减速,减速阶梯和切换时间 */
#define vert_retard_step 0.1f
#define vert_retard_time 100
/* 垂直减速,俯仰极限位置 */
#define vert_utmost_step 20.0f
#define vert_utmost_time 1
/**
*
*
*
*/
void ptz_vert_deceleration_process(float step, unsigned char time)
{
float temp = g_ptz.vert_speed_actual;
for (; ; ) {
temp -= step;
g_ptz.vert_angle_set = temp;
if (temp < PTZ_HORI_MIN_SPEED) {
break;
}
OSTimeDlyHMSM(0u, 0u, 0u, time);
}
}
void ptz_sem_post_stop_mutex()//释放云台启停共享资源锁 void ptz_sem_post_stop_mutex()//释放云台启停共享资源锁
{ {
BSP_OS_SemPost(&ptz_hori_stop_mutex); BSP_OS_SemPost(&ptz_hori_stop_mutex);
@ -54,6 +113,9 @@ void ptz_hori_start(char direction, float speed)
void ptz_hori_stop(unsigned short int time) void ptz_hori_stop(unsigned short int time)
{ {
BSP_OS_SemWait(&ptz_hori_stop_mutex, 0u); BSP_OS_SemWait(&ptz_hori_stop_mutex, 0u);
ptz_hori_deceleration_process(hori_stop_step, hori_stop_time);
//停止电机 //停止电机
g_ptz.hori_start_stop_set = PTZ_HORI_STOP; g_ptz.hori_start_stop_set = PTZ_HORI_STOP;
g_ptz.hori_start_stop_actual = g_ptz.hori_start_stop_set; g_ptz.hori_start_stop_actual = g_ptz.hori_start_stop_set;
@ -120,6 +182,11 @@ void ptz_vert_start(char direction, float speed)
void ptz_vert_stop(unsigned short int time) void ptz_vert_stop(unsigned short int time)
{ {
BSP_OS_SemWait(&ptz_vert_stop_mutex, 0u); BSP_OS_SemWait(&ptz_vert_stop_mutex, 0u);
if (time != PTZ_VERT_STOP_TIME) {
ptz_vert_deceleration_process(vert_stop_step, vert_stop_time);
}
if(g_ptz.vert_start_stop_set == PTZ_VERT_START) if(g_ptz.vert_start_stop_set == PTZ_VERT_START)
{ {
//停止电机 //停止电机
@ -273,6 +340,7 @@ static char ptz_hori_rotate_monitor_task()
if(fabs(g_ptz.hori_angle_actual - g_ptz.hori_rotate_plan.stop_near_angle) <= if(fabs(g_ptz.hori_angle_actual - g_ptz.hori_rotate_plan.stop_near_angle) <=
PTZ_HORI_MIN_SPEED_ANGLE) PTZ_HORI_MIN_SPEED_ANGLE)
{ {
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
} }
} }
@ -281,6 +349,7 @@ static char ptz_hori_rotate_monitor_task()
if((fabs(360.0 - g_ptz.hori_rotate_plan.stop_near_angle) + g_ptz.hori_angle_actual) <= if((fabs(360.0 - g_ptz.hori_rotate_plan.stop_near_angle) + g_ptz.hori_angle_actual) <=
PTZ_HORI_MIN_SPEED_ANGLE) PTZ_HORI_MIN_SPEED_ANGLE)
{ {
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
} }
} }
@ -292,6 +361,7 @@ static char ptz_hori_rotate_monitor_task()
if(fabs(g_ptz.hori_angle_actual - g_ptz.hori_rotate_plan.stop_near_angle) <= if(fabs(g_ptz.hori_angle_actual - g_ptz.hori_rotate_plan.stop_near_angle) <=
PTZ_HORI_MIN_SPEED_ANGLE) PTZ_HORI_MIN_SPEED_ANGLE)
{ {
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
} }
} }
@ -300,6 +370,7 @@ static char ptz_hori_rotate_monitor_task()
if((fabs(360.0 - g_ptz.hori_angle_actual) + g_ptz.hori_rotate_plan.stop_near_angle) <= if((fabs(360.0 - g_ptz.hori_angle_actual) + g_ptz.hori_rotate_plan.stop_near_angle) <=
PTZ_HORI_MIN_SPEED_ANGLE) PTZ_HORI_MIN_SPEED_ANGLE)
{ {
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
} }
} }
@ -404,6 +475,7 @@ static char ptz_hori_rotate_monitor_task()
if(fabs(g_ptz.hori_angle_actual - g_ptz.hori_rotate_plan.stop_near_angle) <= if(fabs(g_ptz.hori_angle_actual - g_ptz.hori_rotate_plan.stop_near_angle) <=
PTZ_HORI_MIN_SPEED_ANGLE) PTZ_HORI_MIN_SPEED_ANGLE)
{ {
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
} }
} }
@ -412,6 +484,7 @@ static char ptz_hori_rotate_monitor_task()
if((fabs(360.0 - g_ptz.hori_rotate_plan.stop_near_angle) + g_ptz.hori_angle_actual) <= if((fabs(360.0 - g_ptz.hori_rotate_plan.stop_near_angle) + g_ptz.hori_angle_actual) <=
PTZ_HORI_MIN_SPEED_ANGLE) PTZ_HORI_MIN_SPEED_ANGLE)
{ {
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
} }
} }
@ -423,6 +496,7 @@ static char ptz_hori_rotate_monitor_task()
if(fabs(g_ptz.hori_angle_actual - g_ptz.hori_rotate_plan.stop_near_angle) <= if(fabs(g_ptz.hori_angle_actual - g_ptz.hori_rotate_plan.stop_near_angle) <=
PTZ_HORI_MIN_SPEED_ANGLE) PTZ_HORI_MIN_SPEED_ANGLE)
{ {
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
} }
} }
@ -431,6 +505,7 @@ static char ptz_hori_rotate_monitor_task()
if((fabs(360.0 - g_ptz.hori_angle_actual) + g_ptz.hori_rotate_plan.stop_near_angle) <= if((fabs(360.0 - g_ptz.hori_angle_actual) + g_ptz.hori_rotate_plan.stop_near_angle) <=
PTZ_HORI_MIN_SPEED_ANGLE) PTZ_HORI_MIN_SPEED_ANGLE)
{ {
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
} }
} }
@ -443,6 +518,7 @@ static char ptz_hori_rotate_monitor_task()
break; break;
case PTZ_HORI_DEC_BRAKE_A://减速刹车 case PTZ_HORI_DEC_BRAKE_A://减速刹车
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
g_ptz.hori_rotate_monitor_switch = PTZ_HORI_DEC_BRAKE_B; g_ptz.hori_rotate_monitor_switch = PTZ_HORI_DEC_BRAKE_B;
k = 0; k = 0;
@ -507,6 +583,7 @@ static char ptz_hori_rotate_monitor_task()
if(fabs(g_ptz.hori_angle_actual - g_ptz.hori_rotate_plan.stop_near_angle) <= if(fabs(g_ptz.hori_angle_actual - g_ptz.hori_rotate_plan.stop_near_angle) <=
PTZ_HORI_MIN_SPEED_ANGLE) PTZ_HORI_MIN_SPEED_ANGLE)
{ {
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
} }
} }
@ -515,6 +592,7 @@ static char ptz_hori_rotate_monitor_task()
if((fabs(360.0 - g_ptz.hori_rotate_plan.stop_near_angle) + g_ptz.hori_angle_actual) <= if((fabs(360.0 - g_ptz.hori_rotate_plan.stop_near_angle) + g_ptz.hori_angle_actual) <=
PTZ_HORI_MIN_SPEED_ANGLE) PTZ_HORI_MIN_SPEED_ANGLE)
{ {
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
} }
} }
@ -526,6 +604,7 @@ static char ptz_hori_rotate_monitor_task()
if(fabs(g_ptz.hori_angle_actual - g_ptz.hori_rotate_plan.stop_near_angle) <= if(fabs(g_ptz.hori_angle_actual - g_ptz.hori_rotate_plan.stop_near_angle) <=
PTZ_HORI_MIN_SPEED_ANGLE) PTZ_HORI_MIN_SPEED_ANGLE)
{ {
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
} }
} }
@ -534,6 +613,7 @@ static char ptz_hori_rotate_monitor_task()
if((fabs(360.0 - g_ptz.hori_angle_actual) + g_ptz.hori_rotate_plan.stop_near_angle) <= if((fabs(360.0 - g_ptz.hori_angle_actual) + g_ptz.hori_rotate_plan.stop_near_angle) <=
PTZ_HORI_MIN_SPEED_ANGLE) PTZ_HORI_MIN_SPEED_ANGLE)
{ {
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
} }
} }
@ -582,6 +662,7 @@ static char ptz_hori_rotate_monitor_task()
if(fabs(g_ptz.hori_angle_actual - g_ptz.hori_rotate_plan.stop_near_angle) <= if(fabs(g_ptz.hori_angle_actual - g_ptz.hori_rotate_plan.stop_near_angle) <=
PTZ_HORI_MIN_SPEED_ANGLE) PTZ_HORI_MIN_SPEED_ANGLE)
{ {
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
} }
} }
@ -590,6 +671,7 @@ static char ptz_hori_rotate_monitor_task()
if((fabs(360.0 - g_ptz.hori_rotate_plan.stop_near_angle) + g_ptz.hori_angle_actual) <= if((fabs(360.0 - g_ptz.hori_rotate_plan.stop_near_angle) + g_ptz.hori_angle_actual) <=
PTZ_HORI_MIN_SPEED_ANGLE) PTZ_HORI_MIN_SPEED_ANGLE)
{ {
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
} }
} }
@ -601,6 +683,7 @@ static char ptz_hori_rotate_monitor_task()
if(fabs(g_ptz.hori_angle_actual - g_ptz.hori_rotate_plan.stop_near_angle) <= if(fabs(g_ptz.hori_angle_actual - g_ptz.hori_rotate_plan.stop_near_angle) <=
PTZ_HORI_MIN_SPEED_ANGLE) PTZ_HORI_MIN_SPEED_ANGLE)
{ {
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
} }
} }
@ -609,6 +692,7 @@ static char ptz_hori_rotate_monitor_task()
if((fabs(360.0 - g_ptz.hori_angle_actual) + g_ptz.hori_rotate_plan.stop_near_angle) <= if((fabs(360.0 - g_ptz.hori_angle_actual) + g_ptz.hori_rotate_plan.stop_near_angle) <=
PTZ_HORI_MIN_SPEED_ANGLE) PTZ_HORI_MIN_SPEED_ANGLE)
{ {
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
} }
} }
@ -656,6 +740,7 @@ static char ptz_hori_rotate_monitor_task()
if(fabs(g_ptz.hori_angle_actual - g_ptz.hori_rotate_plan.stop_near_angle) <= if(fabs(g_ptz.hori_angle_actual - g_ptz.hori_rotate_plan.stop_near_angle) <=
PTZ_HORI_MIN_SPEED_ANGLE) PTZ_HORI_MIN_SPEED_ANGLE)
{ {
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
} }
} }
@ -664,6 +749,7 @@ static char ptz_hori_rotate_monitor_task()
if((fabs(360.0 - g_ptz.hori_rotate_plan.stop_near_angle) + g_ptz.hori_angle_actual) <= if((fabs(360.0 - g_ptz.hori_rotate_plan.stop_near_angle) + g_ptz.hori_angle_actual) <=
PTZ_HORI_MIN_SPEED_ANGLE) PTZ_HORI_MIN_SPEED_ANGLE)
{ {
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
} }
} }
@ -675,6 +761,7 @@ static char ptz_hori_rotate_monitor_task()
if(fabs(g_ptz.hori_angle_actual - g_ptz.hori_rotate_plan.stop_near_angle) <= if(fabs(g_ptz.hori_angle_actual - g_ptz.hori_rotate_plan.stop_near_angle) <=
PTZ_HORI_MIN_SPEED_ANGLE) PTZ_HORI_MIN_SPEED_ANGLE)
{ {
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
} }
} }
@ -683,6 +770,7 @@ static char ptz_hori_rotate_monitor_task()
if((fabs(360.0 - g_ptz.hori_angle_actual) + g_ptz.hori_rotate_plan.stop_near_angle) <= if((fabs(360.0 - g_ptz.hori_angle_actual) + g_ptz.hori_rotate_plan.stop_near_angle) <=
PTZ_HORI_MIN_SPEED_ANGLE) PTZ_HORI_MIN_SPEED_ANGLE)
{ {
ptz_hori_deceleration_process(hori_retard_step, hori_retard_time);
g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED; g_ptz.hori_speed_set = PTZ_HORI_MIN_SPEED;
} }
} }
@ -764,6 +852,7 @@ static char ptz_vert_rotate_monitor_task()
if(fabs(g_ptz.vert_angle_actual - g_ptz.vert_rotate_plan.stop_near_angle) <= if(fabs(g_ptz.vert_angle_actual - g_ptz.vert_rotate_plan.stop_near_angle) <=
PTZ_VERT_MIN_SPEED_ANGLE) PTZ_VERT_MIN_SPEED_ANGLE)
{ {
ptz_vert_deceleration_process(vert_retard_step, vert_retard_time);
g_ptz.vert_speed_set = PTZ_VERT_MIN_SPEED; g_ptz.vert_speed_set = PTZ_VERT_MIN_SPEED;
} }
@ -809,6 +898,7 @@ static char ptz_vert_rotate_monitor_task()
if(fabs(g_ptz.vert_angle_actual - g_ptz.vert_rotate_plan.stop_near_angle) <= if(fabs(g_ptz.vert_angle_actual - g_ptz.vert_rotate_plan.stop_near_angle) <=
PTZ_VERT_MIN_SPEED_ANGLE) PTZ_VERT_MIN_SPEED_ANGLE)
{ {
ptz_vert_deceleration_process(vert_retard_step, vert_retard_time);
g_ptz.vert_speed_set = PTZ_VERT_MIN_SPEED; g_ptz.vert_speed_set = PTZ_VERT_MIN_SPEED;
} }
break; break;
@ -875,6 +965,7 @@ static char ptz_vert_rotate_monitor_task()
if(fabs(g_ptz.vert_angle_actual - g_ptz.vert_rotate_plan.stop_near_angle) <= if(fabs(g_ptz.vert_angle_actual - g_ptz.vert_rotate_plan.stop_near_angle) <=
PTZ_VERT_MIN_SPEED_ANGLE) PTZ_VERT_MIN_SPEED_ANGLE)
{ {
ptz_vert_deceleration_process(vert_retard_step, vert_retard_time);
g_ptz.vert_speed_set = PTZ_VERT_MIN_SPEED; g_ptz.vert_speed_set = PTZ_VERT_MIN_SPEED;
} }
@ -909,6 +1000,7 @@ static char ptz_vert_rotate_monitor_task()
if(fabs(g_ptz.vert_angle_actual - g_ptz.vert_rotate_plan.stop_near_angle) <= if(fabs(g_ptz.vert_angle_actual - g_ptz.vert_rotate_plan.stop_near_angle) <=
PTZ_VERT_MIN_SPEED_ANGLE) PTZ_VERT_MIN_SPEED_ANGLE)
{ {
ptz_vert_deceleration_process(vert_retard_step, vert_retard_time);
g_ptz.vert_speed_set = PTZ_VERT_MIN_SPEED; g_ptz.vert_speed_set = PTZ_VERT_MIN_SPEED;
} }
break; break;
@ -924,6 +1016,7 @@ static char ptz_vert_rotate_monitor_task()
g_ptz.vert_arrive_flag = 0; g_ptz.vert_arrive_flag = 0;
g_ptz.vert_rotate_monitor_switch = 0; g_ptz.vert_rotate_monitor_switch = 0;
// ptz_vert_deceleration_process(vert_utmost_step, vert_utmost_time);
ptz_vert_stop(PTZ_VERT_STOP_TIME);//停止延时为0 ptz_vert_stop(PTZ_VERT_STOP_TIME);//停止延时为0
OSTimeDlyHMSM(0u, 0u, 0u, 5u); OSTimeDlyHMSM(0u, 0u, 0u, 5u);
} }
@ -936,6 +1029,7 @@ static char ptz_vert_rotate_monitor_task()
g_ptz.vert_arrive_flag = 0; g_ptz.vert_arrive_flag = 0;
g_ptz.vert_rotate_monitor_switch = 0; g_ptz.vert_rotate_monitor_switch = 0;
// ptz_vert_deceleration_process(vert_utmost_step, vert_utmost_time);
ptz_vert_stop(PTZ_VERT_STOP_TIME); ptz_vert_stop(PTZ_VERT_STOP_TIME);
OSTimeDlyHMSM(0u, 0u, 0u, 5u); OSTimeDlyHMSM(0u, 0u, 0u, 5u);
} }

View File

@ -66,8 +66,8 @@
#define PTZ_VERT_DIR_STOP 2 #define PTZ_VERT_DIR_STOP 2
///距离最近刹车点以最小转速运行的距离 ///距离最近刹车点以最小转速运行的距离
#define PTZ_HORI_MIN_SPEED_ANGLE 3.0 #define PTZ_HORI_MIN_SPEED_ANGLE 12.0
#define PTZ_VERT_MIN_SPEED_ANGLE 3.0 #define PTZ_VERT_MIN_SPEED_ANGLE 2.0
///刹车最近距离 ///刹车最近距离
#define PTZ_HORI_STOP_NEAR_DISTANCE 0.01 #define PTZ_HORI_STOP_NEAR_DISTANCE 0.01
@ -77,7 +77,7 @@
///刹车最近距离 ///刹车最近距离
#define PTZ_VERT_STOP_NEAR_DISTANCE 0.01 #define PTZ_VERT_STOP_NEAR_DISTANCE 0.01
///刹车最远距离 ///刹车最远距离
#define PTZ_VERT_STOP_FAR_DISTANCE 4.0 #define PTZ_VERT_STOP_FAR_DISTANCE 3.0
///云台定位精度,也可用于判断是不是同一个位置 ///云台定位精度,也可用于判断是不是同一个位置
#define PTZ_HORI_ANGLE_ACCURACY 0.1 #define PTZ_HORI_ANGLE_ACCURACY 0.1

View File

@ -80,7 +80,7 @@
#define PTZ_HORI_PID_HORI_TD 0//0.001//微分系数 #define PTZ_HORI_PID_HORI_TD 0//0.001//微分系数
#define PTZ_HORI_PID_INPUT_LIMIT 100.0//PID调速输入值限定 #define PTZ_HORI_PID_INPUT_LIMIT 100.0//PID调速输入值限定
#define PTZ_HORI_PID_OUTPUT_LIMIT 200.0//PID调速输出值限定当前输出值和上一次输出值之间的差异 #define PTZ_HORI_PID_OUTPUT_LIMIT 80.0//PID调速输出值限定当前输出值和上一次输出值之间的差异
#define PTZ_VERT_PID_T 30u #define PTZ_VERT_PID_T 30u
#define PTZ_VERT_PID_VERT_KP 20.0//6//6.0//比例系数 #define PTZ_VERT_PID_VERT_KP 20.0//6//6.0//比例系数
@ -88,7 +88,7 @@
#define PTZ_VERT_PID_VERT_TD 0//0.001//微分系数 #define PTZ_VERT_PID_VERT_TD 0//0.001//微分系数
#define PTZ_VERT_PID_INPUT_LIMIT 100.0//PID调速输入值限定 #define PTZ_VERT_PID_INPUT_LIMIT 100.0//PID调速输入值限定
#define PTZ_VERT_PID_OUTPUT_LIMIT 200.0//PID调速输出值限定当前输出值和上一次输出值之间的差异 #define PTZ_VERT_PID_OUTPUT_LIMIT 100.0//PID调速输出值限定当前输出值和上一次输出值之间的差异
#define PTZ_HORI_PID_T_MAX 80//75u//PID调速最大周期 #define PTZ_HORI_PID_T_MAX 80//75u//PID调速最大周期
#define PTZ_VERT_PID_T_MAX 80//75u//PID调速最大周期 #define PTZ_VERT_PID_T_MAX 80//75u//PID调速最大周期

View File

@ -13,24 +13,41 @@ static char ptz_temp_volt_current_fault_detect_task()
{//只报故障,不做响应 {//只报故障,不做响应
static unsigned short int time_ms; static unsigned short int time_ms;
static char hori_fault = 0;
static char vert_fault = 0;
time_ms ++; time_ms ++;
if(time_ms < 50) if(time_ms < 50)
{ {
//轻型云台峰值电流5.4A //轻型云台峰值电流5.4A
if(H_ADC_Collect.Phase_curr_V >= PHASE_CURRENT ||H_ADC_Collect.Phase_curr_U >= PHASE_CURRENT ||H_ADC_Collect.Phase_curr_W >= PHASE_CURRENT ) if(H_ADC_Collect.Phase_curr_V >= PHASE_CURRENT ||H_ADC_Collect.Phase_curr_U >= PHASE_CURRENT ||H_ADC_Collect.Phase_curr_W >= PHASE_CURRENT )
{//堵转检测,防止电机堵转烧坏,结合电机卡死故障监测,与云台工作电流监测。 {//堵转检测,防止电机堵转烧坏,结合电机卡死故障监测,与云台工作电流监测。
if (g_ptz.fault_detect.Phase_curr_H != FAULT) {
hori_fault++;
if (hori_fault > 20) {
g_ptz.fault_detect.Phase_curr_H = FAULT;//水平电机相电流过大,报警 g_ptz.fault_detect.Phase_curr_H = FAULT;//水平电机相电流过大,报警
ptz_hori_stop(PTZ_HORI_STOP_TIME); ptz_hori_stop(PTZ_HORI_STOP_TIME);
} }
}
}
else {
hori_fault = 0;
}
if(V_ADC_Collect.Phase_curr_V >= PHASE_CURRENT ||V_ADC_Collect.Phase_curr_U >= PHASE_CURRENT ||V_ADC_Collect.Phase_curr_W >= PHASE_CURRENT ) if(V_ADC_Collect.Phase_curr_V >= PHASE_CURRENT ||V_ADC_Collect.Phase_curr_U >= PHASE_CURRENT ||V_ADC_Collect.Phase_curr_W >= PHASE_CURRENT )
{//堵转检测,防止电机堵转烧坏,结合电机卡死故障监测,与云台工作电流监测。 {//堵转检测,防止电机堵转烧坏,结合电机卡死故障监测,与云台工作电流监测。
if (g_ptz.fault_detect.Phase_curr_V != FAULT) {
vert_fault++;
if (vert_fault > 20) {
g_ptz.fault_detect.Phase_curr_V = FAULT;//垂直电机相电流过大,报警 g_ptz.fault_detect.Phase_curr_V = FAULT;//垂直电机相电流过大,报警
ptz_vert_stop(PTZ_VERT_STOP_TIME); ptz_vert_stop(PTZ_VERT_STOP_TIME);
} }
}
}
else {
vert_fault = 0;
}
return 1; return 1;
} }
else else

View File

@ -113,7 +113,7 @@
#define PTZ_HALL_DETECT 30//30 #define PTZ_HALL_DETECT 30//30
//相电流运行最大值 //相电流运行最大值
#define PHASE_CURRENT 3.5 #define PHASE_CURRENT 4.8
#endif #endif
//L6235D涡轮蜗杆重型云台 //L6235D涡轮蜗杆重型云台

View File

@ -360,21 +360,21 @@ void h_bldc_six_step()
H_Hall_state.Hall_value = h_hall_senser_value_get(); H_Hall_state.Hall_value = h_hall_senser_value_get();
if((H_Hall_state.Hall_value <= 6)&&(H_Hall_state.Hall_value >= 1)) if((H_Hall_state.Hall_value <= 6)&&(H_Hall_state.Hall_value >= 1))
{ {
// if(g_ptz.hori_direction_set == PTZ_HORI_DIR_RIGHT)
// {//电机正转- 1
// h_six_step_commu[(7-H_Hall_state.Hall_value) -1]();
// }else{//电机反转
// h_six_step_commu[H_Hall_state.Hall_value -1]();
// }
//直齿云台转向
if(g_ptz.hori_direction_set == PTZ_HORI_DIR_RIGHT) if(g_ptz.hori_direction_set == PTZ_HORI_DIR_RIGHT)
{//电机正转- 1 {//电机正转- 1
h_six_step_commu[H_Hall_state.Hall_value -1]();
}else{//电机反转
h_six_step_commu[(7-H_Hall_state.Hall_value) -1](); h_six_step_commu[(7-H_Hall_state.Hall_value) -1]();
}else{//电机反转
h_six_step_commu[H_Hall_state.Hall_value -1]();
} }
//直齿云台转向
// if(g_ptz.hori_direction_set == PTZ_HORI_DIR_RIGHT)
// {//电机正转- 1
// h_six_step_commu[H_Hall_state.Hall_value -1]();
// }else{//电机反转
// h_six_step_commu[(7-H_Hall_state.Hall_value) -1]();
// }
} }
} }
@ -401,6 +401,11 @@ void v_bldc_six_step()
}else{//电机反转 }else{//电机反转
v_six_step_commu[(7-V_Hall_state.Hall_value) -1](); v_six_step_commu[(7-V_Hall_state.Hall_value) -1]();
} }
// if (g_ptz.vert_direction_set == PTZ_VERT_DIR_UP) {//电机正转- 1
// v_six_step_commu[(7-V_Hall_state.Hall_value) -1]();
// } else {//电机反转
// v_six_step_commu[V_Hall_state.Hall_value -1]();
// }
// if(g_ptz.vert_pid.PidUT_float < 0) // if(g_ptz.vert_pid.PidUT_float < 0)

View File

@ -825,7 +825,7 @@
</option> </option>
<option> <option>
<name>IlinkIcfFile</name> <name>IlinkIcfFile</name>
<state>D:\psx\Pan-Tilt\1.software\HY\6.0 MW22-01A\BSP\IAR\GD32F450xE_APP.icf</state> <state>D:\psx\Pan-Tilt\1.software\HY\6.0 MW22-01A\BSP\IAR\GD32F450xE.icf</state>
</option> </option>
<option> <option>
<name>IlinkIcfFileSlave</name> <name>IlinkIcfFileSlave</name>