水平自检没问题了(磁编获取水平角度不对,用手旋动齿轮角度不变),垂直自检没有上光电开关

This commit is contained in:
REASEARCHER\18383 2025-10-20 08:55:22 +08:00
parent 1dcd7bbe76
commit b84ffa3e9b
4 changed files with 17 additions and 27 deletions

View File

@ -59,11 +59,12 @@ void ptz_sem_post_stop_mutex()
*/ */
void set_speed_to_servoMotor(uint8_t motorType, float speed) void set_speed_to_servoMotor(uint8_t motorType, float speed)
{ {
//转换为电机端的r/min
speed = speed * PTZ_HORI_RATIO + 0.5;
/*水平电机*/ /*水平电机*/
if ( motorType == horiMotorType )//水平电机 if ( motorType == horiMotorType )//水平电机
{ {
//转换为电机端的r/min
speed = speed * PTZ_HORI_RATIO;
//设置速度电机的r/min范围-6000~6000 //设置速度电机的r/min范围-6000~6000
servoSendData(horiMotorType, WriteMotorOneReg(H_MOTOR, H06_SPEED_COMMU_SET_VALUE, (int16_t)speed) servoSendData(horiMotorType, WriteMotorOneReg(H_MOTOR, H06_SPEED_COMMU_SET_VALUE, (int16_t)speed)
, WRITE_ONE_REG_FRAME_NUM, lowPriority); , WRITE_ONE_REG_FRAME_NUM, lowPriority);
@ -71,6 +72,8 @@ void set_speed_to_servoMotor(uint8_t motorType, float speed)
/*垂直电机*/ /*垂直电机*/
else else
{ {
//转换为电机端的r/min
speed = speed * PTZ_VERT_RATIO;
//设置速度电机的r/min范围-6000~6000 //设置速度电机的r/min范围-6000~6000
servoSendData(vertMotorType, WriteMotorOneReg(V_MOTOR, H06_SPEED_COMMU_SET_VALUE, (int16_t)speed) servoSendData(vertMotorType, WriteMotorOneReg(V_MOTOR, H06_SPEED_COMMU_SET_VALUE, (int16_t)speed)
, WRITE_ONE_REG_FRAME_NUM, lowPriority); , WRITE_ONE_REG_FRAME_NUM, lowPriority);
@ -139,10 +142,9 @@ void ptz_hori_start(char direction, float speed)//输入参数的speed是云台
// servoSendData(horiMotorType, WriteMotorOneReg(H_MOTOR, H06_SPEED_COMMU_SET_VALUE, speed)//设置速度电机的r/min范围-6000~6000 // servoSendData(horiMotorType, WriteMotorOneReg(H_MOTOR, H06_SPEED_COMMU_SET_VALUE, speed)//设置速度电机的r/min范围-6000~6000
// , WRITE_ONE_REG_FRAME_NUM, lowPriority); // , WRITE_ONE_REG_FRAME_NUM, lowPriority);
set_speed_to_servoMotor(horiMotorType, speedTemp); set_speed_to_servoMotor(horiMotorType, speedTemp);
// OSTimeDlyHMSM(0u, 0u, 0u, 5u);
servoSendData(horiMotorType, WriteMotorOneReg(H_MOTOR, H03_DI1_LOGICAL_SELEC, 1) servoSendData(horiMotorType, WriteMotorOneReg(H_MOTOR, H03_DI1_LOGICAL_SELEC, 1)
, WRITE_ONE_REG_FRAME_NUM, lowPriority); //使能电机 , WRITE_ONE_REG_FRAME_NUM, lowPriority); //使能电机
OSTimeDlyHMSM(0u, 0u, 0u, 50u);
g_ptz.hori_speed_set = speedTemp; g_ptz.hori_speed_set = speedTemp;
//设定转动方向 //设定转动方向
g_ptz.hori_direction_last = g_ptz.hori_direction_set; g_ptz.hori_direction_last = g_ptz.hori_direction_set;
@ -161,15 +163,13 @@ void ptz_hori_stop(unsigned short int time)
BSP_OS_SemWait(&ptz_hori_stop_mutex, 0u); BSP_OS_SemWait(&ptz_hori_stop_mutex, 0u);
set_speed_to_servoMotor(horiMotorType, 0); set_speed_to_servoMotor(horiMotorType, 0);
// servoSendData(horiMotorType, WriteMotorOneReg(H_MOTOR, H03_DI1_LOGICAL_SELEC, 0)
// , WRITE_ONE_REG_FRAME_NUM, highPriority); //失能电机
//停止电机 //停止电机
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;
g_ptz.hori_direction_actual = PTZ_HORI_DIR_STOP; g_ptz.hori_direction_actual = PTZ_HORI_DIR_STOP;
// set_speed_to_servoMotor(horiMotorType, 0);
g_ptz.hori_speed_set = 0; g_ptz.hori_speed_set = 0;
g_ptz.hori_speed_actual = 0; g_ptz.hori_speed_actual = 0;
@ -181,8 +181,6 @@ void ptz_hori_stop(unsigned short int time)
, WRITE_ONE_REG_FRAME_NUM, lowPriority); //失能电机 , WRITE_ONE_REG_FRAME_NUM, lowPriority); //失能电机
} }
ptz_hori_stop_count ++; ptz_hori_stop_count ++;
// servoSendData(horiMotorType, WriteMotorOneReg(H_MOTOR, H03_DI1_LOGICAL_SELEC, 0)
// , WRITE_ONE_REG_FRAME_NUM, highPriority); //失能电机
//电子稳定 //电子稳定
#ifdef PTZ_ELECTRIC_STABLE_L6235D #ifdef PTZ_ELECTRIC_STABLE_L6235D
ptz_hori_electric_stable_init(); ptz_hori_electric_stable_init();
@ -198,10 +196,12 @@ void ptz_vert_start(char direction, float speed)//输入参数的speed是云台
switch ( direction ) switch ( direction )
{ {
case PTZ_VERT_DIR_UP://伺服电机默认速度为正使云台向上 case PTZ_VERT_DIR_UP://伺服电机默认速度为正使云台向上
break;
case PTZ_VERT_DIR_DOWN: case PTZ_VERT_DIR_DOWN:
speed = -speed;
break; break;
case PTZ_VERT_DIR_STOP: case PTZ_VERT_DIR_STOP:
speed = -speed; break;
default: default:
break; break;
} }
@ -230,17 +230,13 @@ void ptz_vert_stop(unsigned short int time)
{ {
BSP_OS_SemWait(&ptz_vert_stop_mutex, 0u); BSP_OS_SemWait(&ptz_vert_stop_mutex, 0u);
set_speed_to_servoMotor(vertMotorType, 0);
//停止电机 //停止电机
g_ptz.vert_start_stop_set = PTZ_VERT_STOP; g_ptz.vert_start_stop_set = PTZ_VERT_STOP;
g_ptz.vert_start_stop_actual = g_ptz.vert_start_stop_set; g_ptz.vert_start_stop_actual = g_ptz.vert_start_stop_set;
g_ptz.vert_direction_actual = PTZ_VERT_DIR_STOP; g_ptz.vert_direction_actual = PTZ_VERT_DIR_STOP;
//设定转动速度
// servoSendData(vertMotorType, WriteMotorOneReg(V_MOTOR, H06_SPEED_COMMU_SET_VALUE, 0)//设置速度
// , WRITE_ONE_REG_FRAME_NUM, lowPriority);
set_speed_to_servoMotor(vertMotorType, 0);
g_ptz.vert_speed_set = 0; g_ptz.vert_speed_set = 0;
g_ptz.vert_speed_actual = 0; g_ptz.vert_speed_actual = 0;
@ -248,9 +244,9 @@ void ptz_vert_stop(unsigned short int time)
{ {
OSTimeDlyHMSM(0u, 0u, 0u, time); OSTimeDlyHMSM(0u, 0u, 0u, time);
ptz_vert_stop_count = 0; ptz_vert_stop_count = 0;
servoSendData(vertMotorType, WriteMotorOneReg(V_MOTOR, H03_DI1_LOGICAL_SELEC, 0)
, WRITE_ONE_REG_FRAME_NUM, highPriority); //失能电机
} }
servoSendData(vertMotorType, WriteMotorOneReg(V_MOTOR, H03_DI1_LOGICAL_SELEC, 0)
, WRITE_ONE_REG_FRAME_NUM, highPriority); //失能电机
ptz_vert_stop_count ++; ptz_vert_stop_count ++;
//电子稳定 //电子稳定
#ifdef PTZ_ELECTRIC_STABLE_L6235D #ifdef PTZ_ELECTRIC_STABLE_L6235D

View File

@ -251,15 +251,10 @@ static void ptz_recv_hori_servo_task()
CPU_INT08U err; CPU_INT08U err;
while(1) { while(1) {
OSSemPend(g_horiMotorMutex, 0, &err); OSSemPend(g_horiMotorMutex, 0, &err);
// stopTimeOut(H_MOTOR);
if ( ( MotorReplyForWrite(H_MOTOR) | MotorReplyForRead(H_MOTOR) ) == false) if ( ( MotorReplyForWrite(H_MOTOR) | MotorReplyForRead(H_MOTOR) ) == false)
{ {
// servoLinkListMemPut(horiMotorType);
// H_MOTOR_STOP;
// stopTimeOut(H_MOTOR);
continue; continue;
} }
// OSTimeDlyHMSM(0u, 0u, 0u, 5u);
stopTimeOut(H_MOTOR); stopTimeOut(H_MOTOR);
//释放信号量,通知能发送一次 //释放信号量,通知能发送一次
OSSemPost(g_horiSpeedMutex); OSSemPost(g_horiSpeedMutex);
@ -277,13 +272,11 @@ static void ptz_recv_vert_servo_task()
CPU_INT08U err; CPU_INT08U err;
while(1) { while(1) {
OSSemPend(g_vertMotorMutex, 0, &err); OSSemPend(g_vertMotorMutex, 0, &err);
stopTimeOut(V_MOTOR);
if ( ( MotorReplyForWrite(V_MOTOR) | MotorReplyForRead(V_MOTOR) ) == false) if ( ( MotorReplyForWrite(V_MOTOR) | MotorReplyForRead(V_MOTOR) ) == false)
{ {
// V_MOTOR_STOP;
continue; continue;
} }
stopTimeOut(V_MOTOR);
//释放信号量,通知能发送一次 //释放信号量,通知能发送一次
OSSemPost(g_vertSpeedMutex); OSSemPost(g_vertSpeedMutex);
} }

View File

@ -310,6 +310,7 @@ static void ptz_hori_servo_task()
else { else {
pdebug(DEBUG_LEVEL_FATAL,"ptz_hori_servo_task no data...\n\r"); pdebug(DEBUG_LEVEL_FATAL,"ptz_hori_servo_task no data...\n\r");
} }
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
} }
} }
@ -346,7 +347,7 @@ static void ptz_vert_servo_task()
else { else {
pdebug(DEBUG_LEVEL_FATAL,"ptz_vert_servo_task no data...\n\r"); pdebug(DEBUG_LEVEL_FATAL,"ptz_vert_servo_task no data...\n\r");
} }
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
} }
} }

View File

@ -956,7 +956,7 @@ static unsigned char ptz_vert_complete_self_check_task()
{ {
///首先读取光电开关的状态,初步判断垂直状态 ///首先读取光电开关的状态,初步判断垂直状态
case PTZ_VERT_SELF_CHECK_COMPLETE_STEP: case PTZ_VERT_SELF_CHECK_COMPLETE_STEP:
set_speed_to_servoMotor(vertMotorType, PTZ_VERT_SELF_CHECK_SPEED); set_speed_to_servoMotor(vertMotorType, PTZ_VERT_SELF_CHECK_SPEED);
g_ptz.vert_ps_sw1_down_fall = 0; g_ptz.vert_ps_sw1_down_fall = 0;
g_ptz.vert_ps_sw1_up_rise = 0; g_ptz.vert_ps_sw1_up_rise = 0;
g_ptz.vert_ps_sw2_up_fall = 0; g_ptz.vert_ps_sw2_up_fall = 0;