From d9df2548c5d05800ba22eb48bf129183af28a512 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: Wed, 15 Oct 2025 11:26:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E9=80=81=E5=8A=9F=E8=83=BD=E6=AD=A3?= =?UTF-8?q?=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- APP/Device/Device_speed/servoMotor_recv.c | 2 +- APP/Device/Device_speed/speed_to_servoMotor.c | 29 ++++++--- BSP/Driver/servoMotor/motorCommu.c | 4 +- BSP/Driver/servoMotor/servoMotor.c | 60 +++++++++++++++---- BSP/Driver/servoMotor/servoMotor.h | 2 +- PROJECT/OS2.ewp | 4 +- 6 files changed, 73 insertions(+), 28 deletions(-) diff --git a/APP/Device/Device_speed/servoMotor_recv.c b/APP/Device/Device_speed/servoMotor_recv.c index e932d05..a266302 100644 --- a/APP/Device/Device_speed/servoMotor_recv.c +++ b/APP/Device/Device_speed/servoMotor_recv.c @@ -78,7 +78,7 @@ static void creat_task_servo_recv_task(void) (INT8U ) TASK_RECV_VERT_SERVO_PRIO, (INT16U ) TASK_RECV_VERT_SERVO_PRIO, (OS_STK *)&task_recv_vert_servo_stk[0], - (INT32U ) task_recv_vert_servo_stk, + (INT32U ) TASK_RECV_HORI_SERVO_STK_SIZE, (void *) 0, (INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR)); #if (OS_TASK_NAME_EN > 0) diff --git a/APP/Device/Device_speed/speed_to_servoMotor.c b/APP/Device/Device_speed/speed_to_servoMotor.c index 5453241..49fe127 100644 --- a/APP/Device/Device_speed/speed_to_servoMotor.c +++ b/APP/Device/Device_speed/speed_to_servoMotor.c @@ -105,6 +105,9 @@ void servoSendData(uint8_t motor,uint8_t *data, uint8_t dataLen, uint8_t priorit //保存数据到链表节点 ptr = OSMemGet(g_memPtr, &err); + if (ptr == NULL) { + return; + } ptr->length = dataLen; memcpy(ptr->data, data, dataLen); @@ -176,8 +179,8 @@ static void ptz_hori_servo_task() // 高优先级链表中数据先发送 if (g_servoMotorLinkList.horiMotor.LinkListHead_H != NULL) { //发送数据 - - + CommuTransData(H_MOTOR, g_servoMotorLinkList.horiMotor.LinkListHead_H->data + , g_servoMotorLinkList.horiMotor.LinkListHead_H->length); g_servoMotorLinkList.horiMotor.linkListNum = highPriority; continue; @@ -186,8 +189,8 @@ static void ptz_hori_servo_task() // 高优先级链表中无数据时,发送低优先级中的数据 if (g_servoMotorLinkList.horiMotor.LinkListHead_L != NULL) { //发送数据 - - + CommuTransData(H_MOTOR, g_servoMotorLinkList.horiMotor.LinkListHead_L->data + , g_servoMotorLinkList.horiMotor.LinkListHead_L->length); g_servoMotorLinkList.horiMotor.linkListNum = lowPriority; } @@ -214,17 +217,17 @@ static void ptz_vert_servo_task() // 高优先级链表中数据先发送 if (g_servoMotorLinkList.vertMotor.LinkListHead_H != NULL) { g_servoMotorLinkList.vertMotor.linkListNum = highPriority; + CommuTransData(V_MOTOR, g_servoMotorLinkList.vertMotor.LinkListHead_H->data + , g_servoMotorLinkList.vertMotor.LinkListHead_H->length); - - continue; } - + // 高优先级链表中无数据时,发送低优先级中的数据 if (g_servoMotorLinkList.vertMotor.LinkListHead_L != NULL) { g_servoMotorLinkList.vertMotor.linkListNum = highPriority; - - + CommuTransData(V_MOTOR, g_servoMotorLinkList.vertMotor.LinkListHead_L->data + , g_servoMotorLinkList.vertMotor.LinkListHead_L->length); } else { @@ -324,6 +327,14 @@ void init_speed_module(void) creat_task_hori_servo_task(); creat_task_vert_servo_task(); + + + 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); } diff --git a/BSP/Driver/servoMotor/motorCommu.c b/BSP/Driver/servoMotor/motorCommu.c index 3677bcb..ccc61c4 100644 --- a/BSP/Driver/servoMotor/motorCommu.c +++ b/BSP/Driver/servoMotor/motorCommu.c @@ -339,7 +339,7 @@ void USART2_IRQHandler(void) { pCommuDeal->pDmaRsvBuffSelect = DMA_RSVBUFF_SELECT2; dma_channel_disable(g_MotorDmaBuff[H_MOTOR].dmaNo, g_MotorDmaBuff[H_MOTOR].dmaRxch);//лûҪȽDMA - dmaStruct.memory0_addr = (uint32_t)(pCommuDeal->pDmaRsvBuff2); + dmaStruct.memory0_addr = (uint32_t)(pCommuDeal->pDmaRsvBuff2); dma_single_data_mode_init(g_MotorDmaBuff[H_MOTOR].dmaNo, g_MotorDmaBuff[H_MOTOR].dmaRxch, &dmaStruct); dma_channel_enable(g_MotorDmaBuff[H_MOTOR].dmaNo, g_MotorDmaBuff[H_MOTOR].dmaRxch); } @@ -556,7 +556,7 @@ bool CommuTransData(uint8_t motorNo, uint8_t* buffer, int32_t len) pCommuDeal->dmaTranFlag = DMA_TRANS_BUSY; CommuDmaTra(motorNo, buffer, len); return true; - } + } return false; } diff --git a/BSP/Driver/servoMotor/servoMotor.c b/BSP/Driver/servoMotor/servoMotor.c index ef7ee7a..20cf02c 100644 --- a/BSP/Driver/servoMotor/servoMotor.c +++ b/BSP/Driver/servoMotor/servoMotor.c @@ -80,6 +80,40 @@ bool MotorReplyForWrite(uint8_t motorNo, uint8_t* userBuff, uint8_t len) return true; } +/* +ӻַ Ĵַ Ĵַ ݸλ ݵλ crcУλ crcУλ + 01H 06H 02H 00H 00H 01H 49H B2H +*/ +/** +* @brief ŷٶģʽдĴ +* @param motorNoдֱˮƽ +* @param regAddrҪдļĴ +* @param dataҪĴд +* @param frameBuff: ͵ +* @return дframeBuffij +*/ +uint8_t WriteMotorOneReg_buffer(uint8_t motorNo, uint16_t regAddr, uint16_t data, uint8_t *frameBuff) +{ + uint16_t crc; + if ( motorNo == H_MOTOR ) + { + frameBuff[0] = H_MOTOR_ADDR;//ڲһһģʽˮƽֱӻַ0x01̨Ҳչ + } + else + { + frameBuff[0] = V_MOTOR_ADDR; + } + frameBuff[1] = WRITE_ONE_REG; + frameBuff[2] = regAddr >> WRITE_ONE_REG_BUFFNUM; + frameBuff[3] = regAddr & 0xff; + frameBuff[4] = data >> WRITE_ONE_REG_BUFFNUM; + frameBuff[5] = data & 0xff; + crc = ModbusCRC16(frameBuff, WRITE_ONE_REG_BUFFNUM - 2); + frameBuff[6] = crc & 0xff; + frameBuff[7] = crc >> WRITE_ONE_REG_BUFFNUM; + + return 8; +} /** * @brief ŷʼ @@ -94,22 +128,22 @@ void servoMotorInit(void) V_MOTOR_OPEN; CommuDrvInit();//ŷRS485ͨѶʼ - OSTimeDlyHMSM(0u, 0u, 0u, 500u);//ȴӲʼɹ - WriteMotorOneReg(H_MOTOR, H02_CONTR_MODE_SELEC, 0);//H0200,ѡٶģʽ - OSTimeDlyHMSM(0u, 0u, 0u, 5u); + // OSTimeDlyHMSM(0u, 0u, 0u, 500u);//ȴӲʼɹ + // WriteMotorOneReg(H_MOTOR, H02_CONTR_MODE_SELEC, 0);//H0200,ѡٶģʽ + // OSTimeDlyHMSM(0u, 0u, 0u, 5u); - WriteMotorOneReg(H_MOTOR, H04_DO1_FUNC_SELEC, 19); - OSTimeDlyHMSM(0u, 0u, 0u, 5u); + // WriteMotorOneReg(H_MOTOR, H04_DO1_FUNC_SELEC, 19); + // OSTimeDlyHMSM(0u, 0u, 0u, 5u); - WriteMotorOneReg(H_MOTOR, H06_SPEED_COMMU_SET_VALUE, 100);//ٶΪ100rpm - OSTimeDlyHMSM(0u, 0u, 0u, 5u); + // WriteMotorOneReg(H_MOTOR, H06_SPEED_COMMU_SET_VALUE, 100);//ٶΪ100rpm + // OSTimeDlyHMSM(0u, 0u, 0u, 5u); - WriteMotorOneReg(H_MOTOR, H06_SPEED_UP_SLOPE_VALUE, 3000);//ٶ3000 - OSTimeDlyHMSM(0u, 0u, 0u, 5u); + // WriteMotorOneReg(H_MOTOR, H06_SPEED_UP_SLOPE_VALUE, 3000);//ٶ3000 + // OSTimeDlyHMSM(0u, 0u, 0u, 5u); - WriteMotorOneReg(H_MOTOR, H06_SPEED_DOWN_SLOPE_VALUE, 2000);//ٶ2000 - OSTimeDlyHMSM(0u, 0u, 0u, 5u); + // WriteMotorOneReg(H_MOTOR, H06_SPEED_DOWN_SLOPE_VALUE, 2000);//ٶ2000 + // OSTimeDlyHMSM(0u, 0u, 0u, 5u); - WriteMotorOneReg(H_MOTOR, H03_DI1_LOGICAL_SELEC, 1);//ֻˮƽ - OSTimeDlyHMSM(0u, 0u, 0u, 5u); + // WriteMotorOneReg(H_MOTOR, H03_DI1_LOGICAL_SELEC, 1);//ֻˮƽ + // OSTimeDlyHMSM(0u, 0u, 0u, 5u); } \ No newline at end of file diff --git a/BSP/Driver/servoMotor/servoMotor.h b/BSP/Driver/servoMotor/servoMotor.h index e77d6cb..a4d70e7 100644 --- a/BSP/Driver/servoMotor/servoMotor.h +++ b/BSP/Driver/servoMotor/servoMotor.h @@ -78,6 +78,6 @@ bool MotorReplyForWrite(uint8_t motorNo, uint8_t* userBuff, uint8_t len); * @return */ void servoMotorInit(void); - +uint8_t WriteMotorOneReg_buffer(uint8_t motorNo, uint16_t regAddr, uint16_t data, uint8_t *frameBuff); #endif \ No newline at end of file diff --git a/PROJECT/OS2.ewp b/PROJECT/OS2.ewp index 571960f..a2f27a5 100644 --- a/PROJECT/OS2.ewp +++ b/PROJECT/OS2.ewp @@ -741,7 +741,7 @@ - 1 + 56 inputOutputBased @@ -826,7 +826,7 @@