From c30d8e89814a0ba2e710a02e7a24912acab48426 Mon Sep 17 00:00:00 2001 From: "REASEARCHER\\18383" <1633026436@qq.com> Date: Thu, 16 Oct 2025 11:44:18 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E6=B0=B4=E5=B9=B3=E7=94=B5=E6=9C=BA=E6=94=B6?= =?UTF-8?q?=E5=8F=91=E6=B5=8B=E8=AF=95=E9=80=9A=E8=BF=87=EF=BC=88=E5=9E=82?= =?UTF-8?q?=E7=9B=B4=E6=B2=A1=E6=9C=89=E6=B5=8B=E8=AF=95=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- APP/Device/Device_rotate/rotate_servo.c | 43 +++++++++++++++++-- APP/Device/Device_speed/servoMotor_recv.c | 2 +- APP/Device/Device_speed/speed_to_servoMotor.c | 17 +++++--- APP/Device/Device_speed/speed_to_servoMotor.h | 2 +- BSP/Driver/servoMotor/motorCommu.c | 4 +- 5 files changed, 55 insertions(+), 13 deletions(-) diff --git a/APP/Device/Device_rotate/rotate_servo.c b/APP/Device/Device_rotate/rotate_servo.c index eb4b9e5..a669652 100644 --- a/APP/Device/Device_rotate/rotate_servo.c +++ b/APP/Device/Device_rotate/rotate_servo.c @@ -1,6 +1,6 @@ #include "rotate_servo.h" - +#include "speed_to_servoMotor.h" #ifdef PTZ_MEDIUM_WORM_SERVO_MOTOR_24V @@ -79,7 +79,44 @@ void ptz_vert_stop(unsigned short int time) static void ptz_hori_rotate_monitor_task() { - + static uint8_t status; + static uint16_t speed = 100; + switch( status ) + { + case 0://切换为速度控制模式 + + servoSendData(horiMotorType, WriteMotorOneReg(H_MOTOR, H02_CONTR_MODE_SELEC, 0) + , WRITE_ONE_REG_FRAME_NUM, lowPriority); + status = 1; + + break; + + case 1://设置加速度时间常数 + servoSendData(horiMotorType, WriteMotorOneReg(H_MOTOR, H06_SPEED_UP_SLOPE_VALUE, 3000) + , WRITE_ONE_REG_FRAME_NUM, lowPriority); + status = 2; + break; + + case 2://设置减速度时间常数 + servoSendData(horiMotorType, WriteMotorOneReg(H_MOTOR, H06_SPEED_DOWN_SLOPE_VALUE, 2000) + , WRITE_ONE_REG_FRAME_NUM, lowPriority); + status = 3; + break; + + case 3://设置运行速度 + servoSendData(horiMotorType, WriteMotorOneReg(H_MOTOR, H06_SPEED_COMMU_SET_VALUE, speed) + , WRITE_ONE_REG_FRAME_NUM, lowPriority); + speed += 20; + speed %= 500; + status = 4; + break; + + case 4://保存设定的参数并运行 + servoSendData(horiMotorType, WriteMotorOneReg(H_MOTOR, H03_DI1_LOGICAL_SELEC, 1) + , WRITE_ONE_REG_FRAME_NUM, lowPriority); + status = 3; + break; + } } static void ptz_vert_rotate_monitor_task() @@ -93,7 +130,7 @@ static void ptz_hori_rotate_task() while(1) { ptz_hori_rotate_monitor_task(); - OSTimeDlyHMSM(0u, 0u, 0u, 1u); + OSTimeDlyHMSM(0u, 0u, 0u, 100u); } } diff --git a/APP/Device/Device_speed/servoMotor_recv.c b/APP/Device/Device_speed/servoMotor_recv.c index 39f3248..dbc22d7 100644 --- a/APP/Device/Device_speed/servoMotor_recv.c +++ b/APP/Device/Device_speed/servoMotor_recv.c @@ -23,7 +23,7 @@ static void ptz_recv_hori_servo_task() OSSemPend(g_horiMotorMutex, 0, &err); if ( MotorReplyForWrite(H_MOTOR) == true ) { - OSSemPost(g_horiSpeedMutex); + } diff --git a/APP/Device/Device_speed/speed_to_servoMotor.c b/APP/Device/Device_speed/speed_to_servoMotor.c index 02d6e88..c5ee4d4 100644 --- a/APP/Device/Device_speed/speed_to_servoMotor.c +++ b/APP/Device/Device_speed/speed_to_servoMotor.c @@ -59,7 +59,7 @@ void ptz_send_speed(char dev, char speed) \param[out] none \retval none */ -void servoHoriLinkListMemPut(uint8_t motorType) +void servoLinkListMemPut(uint8_t motorType) { //水平电机 if (motorType == horiMotorType) { @@ -124,6 +124,9 @@ void servoHoriLinkListMemPut(uint8_t motorType) } } } + + //释放信号量,通知能发送一次 + OSSemPost(g_horiSpeedMutex); } /*! @@ -299,7 +302,7 @@ static void ptz_vert_servo_task() g_servoMotorLinkList.vertMotor.linkListNum = highPriority; CommuTransData(V_MOTOR, g_servoMotorLinkList.vertMotor.LinkListHead_H->data , g_servoMotorLinkList.vertMotor.LinkListHead_H->length); - + continue; } @@ -313,6 +316,7 @@ static void ptz_vert_servo_task() else { pdebug(DEBUG_LEVEL_FATAL,"ptz_vert_servo_task no data...\n\r"); } + } } @@ -480,7 +484,7 @@ void init_speed_module(void) if (err != OS_ERR_NONE) { pdebug(DEBUG_LEVEL_FATAL, "Failed to create the motor memory pool\n\r"); } - + //初始化链表头尾 g_servoMotorLinkList.horiMotor.LinkListHead_H = NULL; g_servoMotorLinkList.horiMotor.LinkListHead_L = NULL; @@ -506,10 +510,9 @@ void init_speed_module(void) OSTimeDlyHMSM(0u, 0u, 0u, 500u);//等待硬件初始化成功 - uint8_t buffer[20] = {0}; - uint8_t buffer_len = 0; - buffer_len = WriteMotorOneReg_buffer(H_MOTOR, H02_CONTR_MODE_SELEC, 0, buffer); - servoSendData(horiMotorType, buffer, buffer_len, lowPriority); + +// servoSendData(horiMotorType, WriteMotorOneReg(H_MOTOR, H02_CONTR_MODE_SELEC, 0), +// WRITE_ONE_REG_FRAME_NUM, lowPriority); } diff --git a/APP/Device/Device_speed/speed_to_servoMotor.h b/APP/Device/Device_speed/speed_to_servoMotor.h index 01153c4..86dacf0 100644 --- a/APP/Device/Device_speed/speed_to_servoMotor.h +++ b/APP/Device/Device_speed/speed_to_servoMotor.h @@ -68,7 +68,7 @@ void ptz_send_speed(char dev, char speed); void init_speed_module(void); void servoSendData(uint8_t motor,uint8_t *data, uint8_t dataLen, uint8_t priority); -void servoHoriLinkListMemPut(uint8_t motorType); +void servoLinkListMemPut(uint8_t motorType); void stopTimeOut(uint8_t motorType); void startTimeOut(uint8_t motorType); diff --git a/BSP/Driver/servoMotor/motorCommu.c b/BSP/Driver/servoMotor/motorCommu.c index b110b9b..2516d0f 100644 --- a/BSP/Driver/servoMotor/motorCommu.c +++ b/BSP/Driver/servoMotor/motorCommu.c @@ -1,6 +1,6 @@ #include "motorCommu.h" #include "servoMotor_recv.h" - +#include "speed_to_servoMotor.h" /* ******************************************************************************************************** * ͨѶʼؽṹ @@ -302,6 +302,7 @@ void DMA0_Channel3_IRQHandler(void) CommuInfo_t *pCommuDeal = g_commuInfoBuff[H_MOTOR].pCommuInfo; while(usart_flag_get(g_motorCommuBuff[H_MOTOR].uartNo, USART_FLAG_TC) == RESET); // ȴڷ + servoLinkListMemPut(horiMotorType); H_COMMU_RS485_RX; //485лΪ pCommuDeal->dmaTranFlag = DMA_TRANS_IDLE; } @@ -378,6 +379,7 @@ void DMA1_Channel7_IRQHandler(void) CommuInfo_t *pCommuDeal = g_commuInfoBuff[V_MOTOR].pCommuInfo; while(usart_flag_get(g_motorCommuBuff[V_MOTOR].uartNo, USART_FLAG_TC) == RESET); // ȴڷ + servoLinkListMemPut(vertMotorType); V_COMMU_RS485_RX; //485лΪ pCommuDeal->dmaTranFlag = DMA_TRANS_IDLE;