第一次合并后,水平电机收发测试通过(垂直没有测试)

This commit is contained in:
REASEARCHER\18383 2025-10-16 11:44:18 +08:00
parent d5ee07278f
commit c30d8e8981
5 changed files with 55 additions and 13 deletions

View File

@ -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);
}
}

View File

@ -23,7 +23,7 @@ static void ptz_recv_hori_servo_task()
OSSemPend(g_horiMotorMutex, 0, &err);
if ( MotorReplyForWrite(H_MOTOR) == true )
{
OSSemPost(g_horiSpeedMutex);
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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;