发送功能正常
This commit is contained in:
parent
3e88c8cd50
commit
d9df2548c5
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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 写入frameBuff的长度
|
||||
*/
|
||||
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);
|
||||
}
|
|
@ -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
|
|
@ -741,7 +741,7 @@
|
|||
<data>
|
||||
<extensions></extensions>
|
||||
<cmdline></cmdline>
|
||||
<hasPrio>1</hasPrio>
|
||||
<hasPrio>56</hasPrio>
|
||||
<buildSequence>inputOutputBased</buildSequence>
|
||||
</data>
|
||||
</settings>
|
||||
|
@ -826,7 +826,7 @@
|
|||
</option>
|
||||
<option>
|
||||
<name>IlinkIcfFile</name>
|
||||
<state>D:\CompanyCode\newPro\servoMotor_xr\BSP\IAR\GD32F450xE.icf</state>
|
||||
<state>D:\psx\Pan-Tilt\1.software\HY\new_ptz\servoMotor\BSP\IAR\GD32F450xE.icf</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkIcfFileSlave</name>
|
||||
|
|
Loading…
Reference in New Issue