Compare commits
6 Commits
servoMotor
...
master
Author | SHA1 | Date |
---|---|---|
|
fdd19f00a9 | |
|
42f0144389 | |
|
4b086aae75 | |
|
b84ffa3e9b | |
|
1dcd7bbe76 | |
|
79b49fcc0b |
|
@ -181,6 +181,9 @@
|
||||||
#define TASK_HORI_PID_PRIO 20u
|
#define TASK_HORI_PID_PRIO 20u
|
||||||
#define TASK_HORI_PID_STK_SIZE 150u
|
#define TASK_HORI_PID_STK_SIZE 150u
|
||||||
|
|
||||||
|
#define TASK_VERT_PID_PRIO 21u
|
||||||
|
#define TASK_VERT_PID_STK_SIZE 150u
|
||||||
|
|
||||||
#define TASK_VERT_DIRECTOR_SPEED_PWM_PRIO 21u
|
#define TASK_VERT_DIRECTOR_SPEED_PWM_PRIO 21u
|
||||||
#define TASK_VERT_DIRECTOR_SPEED_PWM_STK_SIZE 150u
|
#define TASK_VERT_DIRECTOR_SPEED_PWM_STK_SIZE 150u
|
||||||
/***************/
|
/***************/
|
||||||
|
@ -210,8 +213,8 @@
|
||||||
#define TASK_HORI_SELF_CHECK_PRIO 32u
|
#define TASK_HORI_SELF_CHECK_PRIO 32u
|
||||||
#define TASK_HORI_SELF_CHECK_STK_SIZE 180u
|
#define TASK_HORI_SELF_CHECK_STK_SIZE 180u
|
||||||
|
|
||||||
#define TASK_VERT_PID_PRIO 34u
|
// #define TASK_VERT_PID_PRIO 34u
|
||||||
#define TASK_VERT_PID_STK_SIZE 150u
|
// #define TASK_VERT_PID_STK_SIZE 150u
|
||||||
|
|
||||||
#define TASK_FAULT_DETECT_PRIO 35u
|
#define TASK_FAULT_DETECT_PRIO 35u
|
||||||
#define TASK_FAULT_DETECT_STK_SIZE 180u
|
#define TASK_FAULT_DETECT_STK_SIZE 180u
|
||||||
|
|
|
@ -537,7 +537,7 @@
|
||||||
#define PTZ_HORI_MOTOR_DIRECTION 1
|
#define PTZ_HORI_MOTOR_DIRECTION 1
|
||||||
///水平电机加速度时间常数 单位ms (0-->>1000rpm)
|
///水平电机加速度时间常数 单位ms (0-->>1000rpm)
|
||||||
#define PTZ_HORI_MOTOR_AccelerationTimeConstant 3000
|
#define PTZ_HORI_MOTOR_AccelerationTimeConstant 3000
|
||||||
///水平电机加速度时间常数 单位ms (1000-->>0rpm)
|
///水平电机减速度时间常数 单位ms (1000-->>0rpm)
|
||||||
#define PTZ_HORI_MOTOR_DecelerationTimeConstant 2000
|
#define PTZ_HORI_MOTOR_DecelerationTimeConstant 2000
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -48,6 +48,8 @@ void ptz_hori_stop(unsigned short int time);
|
||||||
void ptz_vert_start(char direction, float speed);
|
void ptz_vert_start(char direction, float speed);
|
||||||
void ptz_vert_stop(unsigned short int time);
|
void ptz_vert_stop(unsigned short int time);
|
||||||
|
|
||||||
|
void set_speed_to_servoMotor(uint8_t motorType, float speed);
|
||||||
|
|
||||||
void init_rotate_monitor_module(void);
|
void init_rotate_monitor_module(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -120,8 +120,9 @@ static bool MotorReplyForWrite(uint8_t motorNo)
|
||||||
* @return false:读取返回错误
|
* @return false:读取返回错误
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static bool MotorReplyForRead(uint8_t motorNo, int16_t* speed)
|
static bool MotorReplyForRead(uint8_t motorNo)
|
||||||
{
|
{
|
||||||
|
int16_t speed = 0;
|
||||||
static uint8_t motorReplybuff[READ_ONE_REG_FRAME_NUM];
|
static uint8_t motorReplybuff[READ_ONE_REG_FRAME_NUM];
|
||||||
if (motorNo == horiMotorType )
|
if (motorNo == horiMotorType )
|
||||||
{
|
{
|
||||||
|
@ -138,8 +139,12 @@ static bool MotorReplyForRead(uint8_t motorNo, int16_t* speed)
|
||||||
if ( motorReplybuff[0] != H_MOTOR_ADDR )return false;//从机地址不对
|
if ( motorReplybuff[0] != H_MOTOR_ADDR )return false;//从机地址不对
|
||||||
if ( motorReplybuff[1] != READ_ONE_REG )return false;//功能码不对
|
if ( motorReplybuff[1] != READ_ONE_REG )return false;//功能码不对
|
||||||
if ( motorReplybuff[2] != 0x02 )return false;//返回数据的长度不对
|
if ( motorReplybuff[2] != 0x02 )return false;//返回数据的长度不对
|
||||||
*speed = motorReplybuff[3];
|
speed = ((motorReplybuff[3]) << 8 ) | motorReplybuff[4];
|
||||||
*speed = ( (*speed) << 8 ) | motorReplybuff[4];
|
if (speed < 0)
|
||||||
|
{
|
||||||
|
speed = -speed;
|
||||||
|
}
|
||||||
|
g_ptz.hori_speed_actual = (float)speed / PTZ_HORI_RATIO;
|
||||||
servoLinkListMemPut(horiMotorType);
|
servoLinkListMemPut(horiMotorType);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -160,8 +165,12 @@ static bool MotorReplyForRead(uint8_t motorNo, int16_t* speed)
|
||||||
if ( motorReplybuff[0] != H_MOTOR_ADDR )return false;//从机地址不对
|
if ( motorReplybuff[0] != H_MOTOR_ADDR )return false;//从机地址不对
|
||||||
if ( motorReplybuff[1] != READ_ONE_REG )return false;//功能码不对
|
if ( motorReplybuff[1] != READ_ONE_REG )return false;//功能码不对
|
||||||
if ( motorReplybuff[2] != 0x02 )return false;//返回数据的长度不对
|
if ( motorReplybuff[2] != 0x02 )return false;//返回数据的长度不对
|
||||||
*speed = motorReplybuff[3];
|
speed = ((motorReplybuff[3]) << 8 ) | motorReplybuff[4];
|
||||||
*speed = ( (*speed) << 8 ) | motorReplybuff[4];
|
if (speed < 0)
|
||||||
|
{
|
||||||
|
speed = -speed;
|
||||||
|
}
|
||||||
|
g_ptz.hori_speed_actual = (float)speed / PTZ_HORI_RATIO;
|
||||||
servoLinkListMemPut(horiMotorType);
|
servoLinkListMemPut(horiMotorType);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -186,8 +195,12 @@ static bool MotorReplyForRead(uint8_t motorNo, int16_t* speed)
|
||||||
if ( motorReplybuff[0] != V_MOTOR_ADDR )return false;//从机地址不对
|
if ( motorReplybuff[0] != V_MOTOR_ADDR )return false;//从机地址不对
|
||||||
if ( motorReplybuff[1] != READ_ONE_REG )return false;//功能码不对
|
if ( motorReplybuff[1] != READ_ONE_REG )return false;//功能码不对
|
||||||
if ( motorReplybuff[2] != 0x02 )return false;//返回数据的长度不对
|
if ( motorReplybuff[2] != 0x02 )return false;//返回数据的长度不对
|
||||||
*speed = motorReplybuff[3];
|
speed = ((motorReplybuff[3]) << 8 ) | motorReplybuff[4];
|
||||||
*speed = ( (*speed) << 8 ) | motorReplybuff[4];
|
if (speed < 0)
|
||||||
|
{
|
||||||
|
speed = -speed;
|
||||||
|
}
|
||||||
|
g_ptz.vert_speed_actual = (float)speed / PTZ_VERT_RATIO;
|
||||||
servoLinkListMemPut(vertMotorType);
|
servoLinkListMemPut(vertMotorType);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -208,8 +221,12 @@ static bool MotorReplyForRead(uint8_t motorNo, int16_t* speed)
|
||||||
if ( motorReplybuff[0] != V_MOTOR_ADDR )return false;//从机地址不对
|
if ( motorReplybuff[0] != V_MOTOR_ADDR )return false;//从机地址不对
|
||||||
if ( motorReplybuff[1] != READ_ONE_REG )return false;//功能码不对
|
if ( motorReplybuff[1] != READ_ONE_REG )return false;//功能码不对
|
||||||
if ( motorReplybuff[2] != 0x02 )return false;//返回数据的长度不对
|
if ( motorReplybuff[2] != 0x02 )return false;//返回数据的长度不对
|
||||||
*speed = motorReplybuff[3];
|
speed = ((motorReplybuff[3]) << 8 ) | motorReplybuff[4];
|
||||||
*speed = ( (*speed) << 8 ) | motorReplybuff[4];
|
if (speed < 0)
|
||||||
|
{
|
||||||
|
speed = -speed;
|
||||||
|
}
|
||||||
|
g_ptz.vert_speed_actual = (float)speed / PTZ_VERT_RATIO;
|
||||||
servoLinkListMemPut(vertMotorType);
|
servoLinkListMemPut(vertMotorType);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -232,16 +249,16 @@ static bool MotorReplyForRead(uint8_t motorNo, int16_t* speed)
|
||||||
static void ptz_recv_hori_servo_task()
|
static void ptz_recv_hori_servo_task()
|
||||||
{
|
{
|
||||||
CPU_INT08U err;
|
CPU_INT08U err;
|
||||||
static int16_t s_horiMotorSpeed;
|
|
||||||
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, &s_horiMotorSpeed) ) == false)
|
|
||||||
{
|
{
|
||||||
H_MOTOR_STOP;
|
continue;
|
||||||
}
|
}
|
||||||
|
stopTimeOut(H_MOTOR);
|
||||||
//释放信号量,通知能发送一次
|
//释放信号量,通知能发送一次
|
||||||
OSSemPost(g_horiSpeedMutex);
|
OSSemPost(g_horiSpeedMutex);
|
||||||
|
// OSMutexPost(g_horiSpeedMutex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -254,15 +271,15 @@ static void ptz_recv_hori_servo_task()
|
||||||
static void ptz_recv_vert_servo_task()
|
static void ptz_recv_vert_servo_task()
|
||||||
{
|
{
|
||||||
CPU_INT08U err;
|
CPU_INT08U err;
|
||||||
static int16_t s_vertMotorSpeed;
|
|
||||||
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, &s_vertMotorSpeed) ) == false)
|
|
||||||
{
|
{
|
||||||
V_MOTOR_STOP;
|
continue;
|
||||||
}
|
}
|
||||||
|
stopTimeOut(V_MOTOR);
|
||||||
//释放信号量,通知能发送一次
|
//释放信号量,通知能发送一次
|
||||||
|
// OSMutexPost(g_vertSpeedMutex);
|
||||||
OSSemPost(g_vertSpeedMutex);
|
OSSemPost(g_vertSpeedMutex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -317,10 +334,10 @@ static void creat_task_servo_recv_task(void)
|
||||||
void Init_ServoMotorRecv(void)
|
void Init_ServoMotorRecv(void)
|
||||||
{
|
{
|
||||||
CPU_INT08U err;
|
CPU_INT08U err;
|
||||||
g_horiMotorMutex = OSSemCreate(1);
|
g_horiMotorMutex = OSSemCreate(0);
|
||||||
g_vertMotorMutex = OSSemCreate(1);
|
g_vertMotorMutex = OSSemCreate(0);
|
||||||
OSSemPend(g_horiMotorMutex, 1, &err);
|
// OSSemPend(g_horiMotorMutex, 1, &err);
|
||||||
OSSemPend(g_vertMotorMutex, 1, &err);
|
// OSSemPend(g_vertMotorMutex, 1, &err);
|
||||||
|
|
||||||
creat_task_servo_recv_task();
|
creat_task_servo_recv_task();
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,6 +61,15 @@ void ptz_send_speed(char dev, char speed)
|
||||||
*/
|
*/
|
||||||
void servoLinkListMemPut(uint8_t motorType)
|
void servoLinkListMemPut(uint8_t motorType)
|
||||||
{
|
{
|
||||||
|
static BSP_OS_SEM servoLinkListMemPutMutex;
|
||||||
|
static uint8_t flag = 1;
|
||||||
|
if (flag == 1) {
|
||||||
|
BSP_OS_SemCreate(&servoLinkListMemPutMutex, 1, "servoLinkListMemPutMutex");
|
||||||
|
flag = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
BSP_OS_SemWait(&servoLinkListMemPutMutex, 0);
|
||||||
|
|
||||||
//水平电机
|
//水平电机
|
||||||
if (motorType == horiMotorType) {
|
if (motorType == horiMotorType) {
|
||||||
//当前发送完成的数据为高优先级链表中的数据
|
//当前发送完成的数据为高优先级链表中的数据
|
||||||
|
@ -76,7 +85,7 @@ void servoLinkListMemPut(uint8_t motorType)
|
||||||
g_servoMotorLinkList.horiMotor.LinkListTail_H = NULL;
|
g_servoMotorLinkList.horiMotor.LinkListTail_H = NULL;
|
||||||
}
|
}
|
||||||
g_servoMotorLinkList.horiMotor.linkListNum--;
|
g_servoMotorLinkList.horiMotor.linkListNum--;
|
||||||
OSMemPut(g_memPtr, (uint8_t *)ptr);
|
OSMemPut(g_memPtr, ptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//当前发送完成的数据为低优先级链表中的数据
|
//当前发送完成的数据为低优先级链表中的数据
|
||||||
|
@ -92,7 +101,7 @@ void servoLinkListMemPut(uint8_t motorType)
|
||||||
g_servoMotorLinkList.horiMotor.LinkListTail_L = NULL;
|
g_servoMotorLinkList.horiMotor.LinkListTail_L = NULL;
|
||||||
}
|
}
|
||||||
g_servoMotorLinkList.horiMotor.linkListNum--;
|
g_servoMotorLinkList.horiMotor.linkListNum--;
|
||||||
OSMemPut(g_memPtr, (uint8_t *)ptr);
|
OSMemPut(g_memPtr, ptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// g_servoMotorLinkList.horiMotor.linkListNum--;
|
// g_servoMotorLinkList.horiMotor.linkListNum--;
|
||||||
|
@ -110,7 +119,7 @@ void servoLinkListMemPut(uint8_t motorType)
|
||||||
g_servoMotorLinkList.vertMotor.LinkListTail_H = NULL;
|
g_servoMotorLinkList.vertMotor.LinkListTail_H = NULL;
|
||||||
}
|
}
|
||||||
g_servoMotorLinkList.vertMotor.linkListNum--;
|
g_servoMotorLinkList.vertMotor.linkListNum--;
|
||||||
OSMemPut(g_memPtr, (uint8_t *)ptr);
|
OSMemPut(g_memPtr, ptr);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -126,14 +135,14 @@ void servoLinkListMemPut(uint8_t motorType)
|
||||||
g_servoMotorLinkList.vertMotor.LinkListTail_L = NULL;
|
g_servoMotorLinkList.vertMotor.LinkListTail_L = NULL;
|
||||||
}
|
}
|
||||||
g_servoMotorLinkList.vertMotor.linkListNum--;
|
g_servoMotorLinkList.vertMotor.linkListNum--;
|
||||||
OSMemPut(g_memPtr, (uint8_t *)ptr);
|
OSMemPut(g_memPtr, ptr);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// g_servoMotorLinkList.vertMotor.linkListNum--;
|
// g_servoMotorLinkList.vertMotor.linkListNum--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BSP_OS_SemPost(&servoLinkListMemPutMutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -149,6 +158,15 @@ void servoLinkListMemPut(uint8_t motorType)
|
||||||
*/
|
*/
|
||||||
bool servoSendData(uint8_t motor,uint8_t *data, uint8_t dataLen, uint8_t priority)
|
bool servoSendData(uint8_t motor,uint8_t *data, uint8_t dataLen, uint8_t priority)
|
||||||
{
|
{
|
||||||
|
static BSP_OS_SEM servoSendDataMutex;
|
||||||
|
static uint8_t flag = 1;
|
||||||
|
if (flag == 1) {
|
||||||
|
BSP_OS_SemCreate(&servoSendDataMutex, 1, "servoLinkListMemPutMutex");
|
||||||
|
flag = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
BSP_OS_SemWait(&servoSendDataMutex, 0);
|
||||||
|
|
||||||
if ((motor != horiMotorType) && (motor!= vertMotorType)) {
|
if ((motor != horiMotorType) && (motor!= vertMotorType)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -172,13 +190,22 @@ bool servoSendData(uint8_t motor,uint8_t *data, uint8_t dataLen, uint8_t priorit
|
||||||
}
|
}
|
||||||
ptr->length = dataLen;
|
ptr->length = dataLen;
|
||||||
memcpy(ptr->data, data, dataLen);
|
memcpy(ptr->data, data, dataLen);
|
||||||
|
ptr->next = NULL;
|
||||||
|
|
||||||
//将节点添加进入链表中
|
//将节点添加进入链表中
|
||||||
if (motor == horiMotorType) {
|
if (motor == horiMotorType) {
|
||||||
if (g_servoMotorLinkList.horiMotor.linkListNum > sendDataBufNumber) {
|
if (priority == highPriority) {
|
||||||
|
if (g_servoMotorLinkList.horiMotor.linkListNum >= sendDataBufNumber - 1) {
|
||||||
OSMemPut(g_memPtr, ptr);
|
OSMemPut(g_memPtr, ptr);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (g_servoMotorLinkList.horiMotor.linkListNum >= sendDataBufNumber - 2) {
|
||||||
|
OSMemPut(g_memPtr, ptr);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (priority == highPriority) {
|
if (priority == highPriority) {
|
||||||
if (g_servoMotorLinkList.horiMotor.LinkListTail_H == NULL) {
|
if (g_servoMotorLinkList.horiMotor.LinkListTail_H == NULL) {
|
||||||
|
@ -193,7 +220,6 @@ bool servoSendData(uint8_t motor,uint8_t *data, uint8_t dataLen, uint8_t priorit
|
||||||
g_servoMotorLinkList.horiMotor.LinkListHead_H
|
g_servoMotorLinkList.horiMotor.LinkListHead_H
|
||||||
= g_servoMotorLinkList.horiMotor.LinkListTail_H;
|
= g_servoMotorLinkList.horiMotor.LinkListTail_H;
|
||||||
}
|
}
|
||||||
g_servoMotorLinkList.horiMotor.linkListNum++;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (g_servoMotorLinkList.horiMotor.LinkListTail_L == NULL) {
|
if (g_servoMotorLinkList.horiMotor.LinkListTail_L == NULL) {
|
||||||
|
@ -208,17 +234,25 @@ bool servoSendData(uint8_t motor,uint8_t *data, uint8_t dataLen, uint8_t priorit
|
||||||
g_servoMotorLinkList.horiMotor.LinkListHead_L
|
g_servoMotorLinkList.horiMotor.LinkListHead_L
|
||||||
= g_servoMotorLinkList.horiMotor.LinkListTail_L;
|
= g_servoMotorLinkList.horiMotor.LinkListTail_L;
|
||||||
}
|
}
|
||||||
g_servoMotorLinkList.horiMotor.linkListNum++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_servoMotorLinkList.horiMotor.linkListNum++;
|
||||||
//释放信号量,通知能发送一次
|
//释放信号量,通知能发送一次
|
||||||
OSSemPost(g_horiSpeedSem);
|
OSSemPost(g_horiSpeedSem);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (g_servoMotorLinkList.vertMotor.linkListNum > sendDataBufNumber) {
|
if (priority == highPriority) {
|
||||||
|
if (g_servoMotorLinkList.vertMotor.linkListNum >= sendDataBufNumber - 1) {
|
||||||
OSMemPut(g_memPtr, ptr);
|
OSMemPut(g_memPtr, ptr);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (g_servoMotorLinkList.vertMotor.linkListNum >= sendDataBufNumber - 2) {
|
||||||
|
OSMemPut(g_memPtr, ptr);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (priority == highPriority) {
|
if (priority == highPriority) {
|
||||||
if (g_servoMotorLinkList.vertMotor.LinkListTail_H == NULL) {
|
if (g_servoMotorLinkList.vertMotor.LinkListTail_H == NULL) {
|
||||||
|
@ -233,7 +267,6 @@ bool servoSendData(uint8_t motor,uint8_t *data, uint8_t dataLen, uint8_t priorit
|
||||||
g_servoMotorLinkList.vertMotor.LinkListHead_H
|
g_servoMotorLinkList.vertMotor.LinkListHead_H
|
||||||
= g_servoMotorLinkList.vertMotor.LinkListTail_H;
|
= g_servoMotorLinkList.vertMotor.LinkListTail_H;
|
||||||
}
|
}
|
||||||
g_servoMotorLinkList.vertMotor.linkListNum++;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (g_servoMotorLinkList.vertMotor.LinkListTail_L == NULL) {
|
if (g_servoMotorLinkList.vertMotor.LinkListTail_L == NULL) {
|
||||||
|
@ -248,12 +281,13 @@ bool servoSendData(uint8_t motor,uint8_t *data, uint8_t dataLen, uint8_t priorit
|
||||||
g_servoMotorLinkList.vertMotor.LinkListHead_L
|
g_servoMotorLinkList.vertMotor.LinkListHead_L
|
||||||
= g_servoMotorLinkList.vertMotor.LinkListTail_L;
|
= g_servoMotorLinkList.vertMotor.LinkListTail_L;
|
||||||
}
|
}
|
||||||
g_servoMotorLinkList.vertMotor.linkListNum++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_servoMotorLinkList.vertMotor.linkListNum++;
|
||||||
//释放信号量,通知能发送一次
|
//释放信号量,通知能发送一次
|
||||||
OSSemPost(g_vertSpeedSem);
|
OSSemPost(g_vertSpeedSem);
|
||||||
}
|
}
|
||||||
|
BSP_OS_SemPost(&servoSendDataMutex);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,6 +302,7 @@ static void ptz_hori_servo_task()
|
||||||
// if(g_ptz.hori_start_stop_set == PTZ_HORI_STOP)
|
// if(g_ptz.hori_start_stop_set == PTZ_HORI_STOP)
|
||||||
// {
|
// {
|
||||||
// }
|
// }
|
||||||
|
// OSMutexPend(g_horiSpeedMutex, 0, &err);
|
||||||
OSSemPend(g_horiSpeedMutex, 0, &err);
|
OSSemPend(g_horiSpeedMutex, 0, &err);
|
||||||
OSSemPend(g_horiSpeedSem, 0, &err);
|
OSSemPend(g_horiSpeedSem, 0, &err);
|
||||||
|
|
||||||
|
@ -281,7 +316,6 @@ static void ptz_hori_servo_task()
|
||||||
startTimeOut(horiMotorType);
|
startTimeOut(horiMotorType);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 高优先级链表中无数据时,发送低优先级中的数据
|
// 高优先级链表中无数据时,发送低优先级中的数据
|
||||||
if (g_servoMotorLinkList.horiMotor.LinkListHead_L != NULL) {
|
if (g_servoMotorLinkList.horiMotor.LinkListHead_L != NULL) {
|
||||||
//发送数据
|
//发送数据
|
||||||
|
@ -294,6 +328,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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -330,7 +365,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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -390,12 +425,14 @@ static void creat_task_vert_servo_task(void)
|
||||||
void horiServoTimeOut()
|
void horiServoTimeOut()
|
||||||
{
|
{
|
||||||
servoLinkListMemPut(horiMotorType);
|
servoLinkListMemPut(horiMotorType);
|
||||||
|
// OSMutexPost(g_horiSpeedMutex);
|
||||||
OSSemPost(g_horiSpeedMutex);
|
OSSemPost(g_horiSpeedMutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
void vertServoTimeOut()
|
void vertServoTimeOut()
|
||||||
{
|
{
|
||||||
servoLinkListMemPut(vertMotorType);
|
servoLinkListMemPut(vertMotorType);
|
||||||
|
// OSMutexPost(g_vertSpeedMutex);
|
||||||
OSSemPost(g_vertSpeedMutex);
|
OSSemPost(g_vertSpeedMutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -404,7 +441,7 @@ BSP_OS_TMR vertServoSoftWareTim;
|
||||||
void servoCommSoftWareTimInit()
|
void servoCommSoftWareTimInit()
|
||||||
{
|
{
|
||||||
CPU_INT08U ServoSoftWareTimErr;
|
CPU_INT08U ServoSoftWareTimErr;
|
||||||
horiServoSoftWareTim = OSTmrCreate(100
|
horiServoSoftWareTim = OSTmrCreate(5
|
||||||
, 100//1*200ms
|
, 100//1*200ms
|
||||||
, OS_TMR_OPT_ONE_SHOT
|
, OS_TMR_OPT_ONE_SHOT
|
||||||
, (OS_TMR_CALLBACK)horiServoTimeOut
|
, (OS_TMR_CALLBACK)horiServoTimeOut
|
||||||
|
@ -418,7 +455,7 @@ void servoCommSoftWareTimInit()
|
||||||
pdebug(DEBUG_LEVEL_FATAL,"create horiServoSoftWareTim failed...\n\r");
|
pdebug(DEBUG_LEVEL_FATAL,"create horiServoSoftWareTim failed...\n\r");
|
||||||
}
|
}
|
||||||
|
|
||||||
vertServoSoftWareTim = OSTmrCreate(100
|
vertServoSoftWareTim = OSTmrCreate(5
|
||||||
, 100
|
, 100
|
||||||
, OS_TMR_OPT_ONE_SHOT
|
, OS_TMR_OPT_ONE_SHOT
|
||||||
, (OS_TMR_CALLBACK)vertServoTimeOut
|
, (OS_TMR_CALLBACK)vertServoTimeOut
|
||||||
|
@ -443,6 +480,15 @@ void servoCommSoftWareTimInit()
|
||||||
*/
|
*/
|
||||||
void stopTimeOut(uint8_t motorType)
|
void stopTimeOut(uint8_t motorType)
|
||||||
{
|
{
|
||||||
|
static BSP_OS_SEM stopTimeOutMutex;
|
||||||
|
static uint8_t flag = 1;
|
||||||
|
if (flag == 1) {
|
||||||
|
BSP_OS_SemCreate(&stopTimeOutMutex, 1, "servoLinkListMemPutMutex");
|
||||||
|
flag = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
BSP_OS_SemWait(&stopTimeOutMutex, 0);
|
||||||
|
|
||||||
if (motorType == horiMotorType) {
|
if (motorType == horiMotorType) {
|
||||||
CPU_INT08U err;
|
CPU_INT08U err;
|
||||||
OSTmrStop(horiServoSoftWareTim, OS_TMR_OPT_NONE, (void *)0, &err);
|
OSTmrStop(horiServoSoftWareTim, OS_TMR_OPT_NONE, (void *)0, &err);
|
||||||
|
@ -457,6 +503,8 @@ void stopTimeOut(uint8_t motorType)
|
||||||
pdebug(DEBUG_LEVEL_FATAL,"start vertServoSoftWareTim failed...\n\r");
|
pdebug(DEBUG_LEVEL_FATAL,"start vertServoSoftWareTim failed...\n\r");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BSP_OS_SemPost(&stopTimeOutMutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -469,6 +517,15 @@ void stopTimeOut(uint8_t motorType)
|
||||||
*/
|
*/
|
||||||
void startTimeOut(uint8_t motorType)
|
void startTimeOut(uint8_t motorType)
|
||||||
{
|
{
|
||||||
|
static BSP_OS_SEM startTimeOutMutex;
|
||||||
|
static uint8_t flag = 1;
|
||||||
|
if (flag == 1) {
|
||||||
|
BSP_OS_SemCreate(&startTimeOutMutex, 1, "servoLinkListMemPutMutex");
|
||||||
|
flag = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
BSP_OS_SemWait(&startTimeOutMutex, 0);
|
||||||
|
|
||||||
if (motorType == horiMotorType) {
|
if (motorType == horiMotorType) {
|
||||||
CPU_INT08U err;
|
CPU_INT08U err;
|
||||||
OSTmrStart(horiServoSoftWareTim, &err);
|
OSTmrStart(horiServoSoftWareTim, &err);
|
||||||
|
@ -483,19 +540,23 @@ void startTimeOut(uint8_t motorType)
|
||||||
pdebug(DEBUG_LEVEL_FATAL,"start vertServoSoftWareTim failed...\n\r");
|
pdebug(DEBUG_LEVEL_FATAL,"start vertServoSoftWareTim failed...\n\r");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
BSP_OS_SemPost(&startTimeOutMutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_speed_module(void)
|
void init_speed_module(void)
|
||||||
{
|
{
|
||||||
|
CPU_INT08U err;
|
||||||
|
|
||||||
g_horiSpeedSem = OSSemCreate(0);
|
g_horiSpeedSem = OSSemCreate(0);
|
||||||
g_vertSpeedSem = OSSemCreate(0);
|
g_vertSpeedSem = OSSemCreate(0);
|
||||||
|
// g_horiSpeedMutex = OSMutexCreate(TASK_HORI_PID_PRIO, &err);
|
||||||
|
// g_vertSpeedMutex = OSMutexCreate(22, &err);
|
||||||
g_horiSpeedMutex = OSSemCreate(1);
|
g_horiSpeedMutex = OSSemCreate(1);
|
||||||
g_vertSpeedMutex = OSSemCreate(1);
|
g_vertSpeedMutex = OSSemCreate(1);
|
||||||
|
|
||||||
OSSemPost(g_horiSpeedMutex);
|
// OSSemPost(g_horiSpeedMutex);
|
||||||
OSSemPost(g_vertSpeedMutex);
|
// OSSemPost(g_vertSpeedMutex);
|
||||||
|
|
||||||
CPU_INT08U err;
|
|
||||||
g_memPtr = OSMemCreate(memBuffer, sendDataBufNumber * 2, linkListNodeLen, &err);
|
g_memPtr = OSMemCreate(memBuffer, sendDataBufNumber * 2, linkListNodeLen, &err);
|
||||||
if (err != OS_ERR_NONE) {
|
if (err != OS_ERR_NONE) {
|
||||||
pdebug(DEBUG_LEVEL_FATAL, "Failed to create the motor memory pool\n\r");
|
pdebug(DEBUG_LEVEL_FATAL, "Failed to create the motor memory pool\n\r");
|
||||||
|
@ -526,30 +587,20 @@ void init_speed_module(void)
|
||||||
|
|
||||||
OSTimeDlyHMSM(0u, 0u, 0u, 500u);//等待硬件初始化成功
|
OSTimeDlyHMSM(0u, 0u, 0u, 500u);//等待硬件初始化成功
|
||||||
|
|
||||||
for( uint8_t i = 0; i < 2; i++)
|
|
||||||
{
|
|
||||||
servoSendData(i, WriteMotorOneReg(i, H02_CONTR_MODE_SELEC, 0),
|
servoSendData(horiMotorType, WriteMotorOneReg(horiMotorType, H02_CONTR_MODE_SELEC, 0),
|
||||||
|
WRITE_ONE_REG_FRAME_NUM, lowPriority);//切换为速度控制模式
|
||||||
|
servoSendData(vertMotorType, WriteMotorOneReg(vertMotorType, H02_CONTR_MODE_SELEC, 0),
|
||||||
WRITE_ONE_REG_FRAME_NUM, lowPriority);//切换为速度控制模式
|
WRITE_ONE_REG_FRAME_NUM, lowPriority);//切换为速度控制模式
|
||||||
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
|
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
|
||||||
|
|
||||||
servoSendData(i, WriteMotorOneReg(i, H06_SPEED_UP_SLOPE_VALUE, 3000)
|
servoSendData(horiMotorType, WriteMotorOneReg(horiMotorType, H06_SPEED_COMMU_SET_VALUE, 0)
|
||||||
, WRITE_ONE_REG_FRAME_NUM, lowPriority);//设置加速时间常数
|
, WRITE_ONE_REG_FRAME_NUM, lowPriority);
|
||||||
|
servoSendData(vertMotorType, WriteMotorOneReg(vertMotorType, H06_SPEED_COMMU_SET_VALUE, 0)
|
||||||
|
, WRITE_ONE_REG_FRAME_NUM, lowPriority);
|
||||||
|
|
||||||
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
|
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
|
||||||
|
|
||||||
servoSendData(i, WriteMotorOneReg(i, H06_SPEED_DOWN_SLOPE_VALUE, 2000)
|
|
||||||
, WRITE_ONE_REG_FRAME_NUM, lowPriority);//设置减速时间常数
|
|
||||||
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
|
|
||||||
|
|
||||||
servoSendData(i, WriteMotorOneReg(i, H06_SPEED_COMMU_SET_VALUE, 60)
|
|
||||||
, WRITE_ONE_REG_FRAME_NUM, lowPriority);//设置电机转速为60r/min
|
|
||||||
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
|
|
||||||
|
|
||||||
servoSendData(i, WriteMotorOneReg(i, H03_DI1_LOGICAL_SELEC, 1)
|
|
||||||
, WRITE_ONE_REG_FRAME_NUM, lowPriority);//电机运行使能
|
|
||||||
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "device_adc_collect.h"
|
#include "device_adc_collect.h"
|
||||||
|
|
||||||
|
#include "rotate_servo.h"
|
||||||
|
#include "speed_to_servoMotor.h"
|
||||||
|
|
||||||
// ADC_Phase_current H_ADC_Collect;
|
// ADC_Phase_current H_ADC_Collect;
|
||||||
// ADC_Phase_current V_ADC_Collect;
|
// ADC_Phase_current V_ADC_Collect;
|
||||||
|
@ -488,20 +490,23 @@ static char ptz_data_collect_task()
|
||||||
int i=0,j=0;
|
int i=0,j=0;
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
|
// if(g_ptz.hori_start_stop_set == PTZ_HORI_START)
|
||||||
|
// {//电机处于启动状态
|
||||||
|
// // H_ADC2_Phase_current();
|
||||||
if(g_ptz.hori_start_stop_set == PTZ_HORI_START)
|
// }
|
||||||
{//电机处于启动状态
|
// if(g_ptz.vert_start_stop_set == PTZ_VERT_START)
|
||||||
// H_ADC2_Phase_current();
|
// {//电机处于启动状态
|
||||||
}
|
// // V_ADC0_Phase_current();
|
||||||
if(g_ptz.vert_start_stop_set == PTZ_VERT_START)
|
// }
|
||||||
{//电机处于启动状态
|
|
||||||
// V_ADC0_Phase_current();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(j >= 100)
|
if(j >= 100)
|
||||||
{
|
{
|
||||||
|
//读取水平电机实时速度
|
||||||
|
servoSendData(horiMotorType, ReadMotorOneReg(horiMotorType, READ_MOTOR_SPEED_NOW)
|
||||||
|
, READ_ONE_REG_FRAME_NUM, lowPriority);
|
||||||
|
//读取俯仰电机实时速度
|
||||||
|
servoSendData(vertMotorType, ReadMotorOneReg(vertMotorType, READ_MOTOR_SPEED_NOW)
|
||||||
|
, READ_ONE_REG_FRAME_NUM, lowPriority);
|
||||||
j=0;
|
j=0;
|
||||||
//云台不自检关闭,打开采集任务
|
//云台不自检关闭,打开采集任务
|
||||||
#ifndef PTZ_NO_SELF_CHECK
|
#ifndef PTZ_NO_SELF_CHECK
|
||||||
|
|
|
@ -18,100 +18,6 @@
|
||||||
/// LH于2022-05-25
|
/// LH于2022-05-25
|
||||||
void EXTI_IRQ_init()
|
void EXTI_IRQ_init()
|
||||||
{
|
{
|
||||||
#ifdef L6235D
|
|
||||||
/*HALL中断,水平——PD13-H1,PD14-H2,PD15-H3,,垂直PC6-H1,PC7-H2,PC8-H3*/
|
|
||||||
nvic_irq_enable(EXTI10_15_IRQn, 3U, 3U);//水平,一个中断函数,中断线10-15
|
|
||||||
nvic_irq_enable(EXTI5_9_IRQn, 3U, 2U);//垂直,一个中断函数,中断线5-9
|
|
||||||
|
|
||||||
//对应引脚配置外部中断线
|
|
||||||
syscfg_exti_line_config(EXTI_SOURCE_GPIOD, EXTI_SOURCE_PIN13);
|
|
||||||
syscfg_exti_line_config(EXTI_SOURCE_GPIOD, EXTI_SOURCE_PIN14);
|
|
||||||
syscfg_exti_line_config(EXTI_SOURCE_GPIOD, EXTI_SOURCE_PIN15);
|
|
||||||
syscfg_exti_line_config(EXTI_SOURCE_GPIOC, EXTI_SOURCE_PIN6);
|
|
||||||
syscfg_exti_line_config(EXTI_SOURCE_GPIOC, EXTI_SOURCE_PIN7);
|
|
||||||
syscfg_exti_line_config(EXTI_SOURCE_GPIOC, EXTI_SOURCE_PIN8);
|
|
||||||
|
|
||||||
//外部中断线初始化
|
|
||||||
exti_init(EXTI_6, EXTI_INTERRUPT, EXTI_TRIG_RISING);//上升沿中断
|
|
||||||
exti_init(EXTI_7, EXTI_INTERRUPT, EXTI_TRIG_RISING);
|
|
||||||
exti_init(EXTI_8, EXTI_INTERRUPT, EXTI_TRIG_RISING);
|
|
||||||
exti_init(EXTI_13, EXTI_INTERRUPT, EXTI_TRIG_RISING);
|
|
||||||
exti_init(EXTI_14, EXTI_INTERRUPT, EXTI_TRIG_RISING);
|
|
||||||
exti_init(EXTI_15, EXTI_INTERRUPT, EXTI_TRIG_RISING);
|
|
||||||
//清除标志位
|
|
||||||
exti_interrupt_flag_clear(EXTI_6);
|
|
||||||
exti_interrupt_flag_clear(EXTI_7);
|
|
||||||
exti_interrupt_flag_clear(EXTI_8);
|
|
||||||
exti_interrupt_flag_clear(EXTI_13);
|
|
||||||
exti_interrupt_flag_clear(EXTI_14);
|
|
||||||
exti_interrupt_flag_clear(EXTI_15);
|
|
||||||
|
|
||||||
BSP_IntVectSet(39,EXTI5_9_IRQHandler);
|
|
||||||
BSP_IntEn(39);
|
|
||||||
|
|
||||||
BSP_IntVectSet(56,EXTI10_15_IRQHandler);
|
|
||||||
BSP_IntEn(56);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef Full_bridge //MOS+栅极驱动
|
|
||||||
rcu_periph_clock_enable(RCU_SYSCFG);
|
|
||||||
|
|
||||||
//配置引脚时钟
|
|
||||||
rcu_periph_clock_enable(RCU_GPIOE);
|
|
||||||
|
|
||||||
//水平——PE10-H1,PE11-H2,PE12-H3,,垂直PE13-H1,PE14-H2,PE15-H3
|
|
||||||
//设置引脚为输入模式
|
|
||||||
gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_10);
|
|
||||||
gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
|
|
||||||
gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_12);
|
|
||||||
|
|
||||||
gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_13);
|
|
||||||
gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_14);
|
|
||||||
gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_15);
|
|
||||||
|
|
||||||
/*HALL中断,水平——PE10-H1,PE11-H2,PE12-H3,,垂直PE13-H1,PE14-H2,PE15-H3*/
|
|
||||||
//对应引脚配置外部中断线
|
|
||||||
syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN10);
|
|
||||||
syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN11);
|
|
||||||
syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN12);
|
|
||||||
|
|
||||||
syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN13);
|
|
||||||
syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN14);
|
|
||||||
syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN15);
|
|
||||||
|
|
||||||
|
|
||||||
//外部中断线初始化
|
|
||||||
exti_init(EXTI_10, EXTI_INTERRUPT, EXTI_TRIG_RISING);//上升沿中断
|
|
||||||
exti_init(EXTI_11, EXTI_INTERRUPT, EXTI_TRIG_RISING);
|
|
||||||
exti_init(EXTI_12, EXTI_INTERRUPT, EXTI_TRIG_RISING);
|
|
||||||
|
|
||||||
exti_init(EXTI_13, EXTI_INTERRUPT, EXTI_TRIG_RISING);//上升沿中断
|
|
||||||
exti_init(EXTI_14, EXTI_INTERRUPT, EXTI_TRIG_RISING);
|
|
||||||
exti_init(EXTI_15, EXTI_INTERRUPT, EXTI_TRIG_RISING);
|
|
||||||
|
|
||||||
exti_interrupt_enable(EXTI_10);
|
|
||||||
exti_interrupt_enable(EXTI_11);
|
|
||||||
exti_interrupt_enable(EXTI_12);
|
|
||||||
|
|
||||||
exti_interrupt_enable(EXTI_13);
|
|
||||||
exti_interrupt_enable(EXTI_14);
|
|
||||||
exti_interrupt_enable(EXTI_15);
|
|
||||||
|
|
||||||
|
|
||||||
//清除标志位
|
|
||||||
exti_interrupt_flag_clear(EXTI_10);
|
|
||||||
exti_interrupt_flag_clear(EXTI_11);
|
|
||||||
exti_interrupt_flag_clear(EXTI_12);
|
|
||||||
|
|
||||||
exti_interrupt_flag_clear(EXTI_13);
|
|
||||||
exti_interrupt_flag_clear(EXTI_14);
|
|
||||||
exti_interrupt_flag_clear(EXTI_15);
|
|
||||||
|
|
||||||
nvic_irq_enable(EXTI10_15_IRQn, 2U, 2U);//,一个中断函数,中断线10-15
|
|
||||||
|
|
||||||
BSP_IntVectSet(56,EXTI10_15_IRQHandler);
|
|
||||||
BSP_IntEn(56);
|
|
||||||
|
|
||||||
/*光电开关中断PE7-SW1,PE8-SW2,PE9-SW3*/
|
/*光电开关中断PE7-SW1,PE8-SW2,PE9-SW3*/
|
||||||
syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN7);
|
syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN7);
|
||||||
syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN8);
|
syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN8);
|
||||||
|
@ -142,47 +48,6 @@ void EXTI_IRQ_init()
|
||||||
|
|
||||||
BSP_IntVectSet(39,EXTI5_9_IRQHandler);
|
BSP_IntVectSet(39,EXTI5_9_IRQHandler);
|
||||||
BSP_IntEn(39);
|
BSP_IntEn(39);
|
||||||
|
|
||||||
#else
|
|
||||||
/*光电开关中断PB0-SW1,PB1-SW2,PB2-SW3*/
|
|
||||||
nvic_irq_enable(EXTI0_IRQn, 2U, 0U);//垂直光电开关SW1
|
|
||||||
nvic_irq_enable(EXTI1_IRQn, 2U, 1U);//垂直光电开关SW2
|
|
||||||
nvic_irq_enable(EXTI2_IRQn, 2U, 2U);//水平光电开关SW3
|
|
||||||
|
|
||||||
syscfg_exti_line_config(EXTI_SOURCE_GPIOB, EXTI_SOURCE_PIN0);
|
|
||||||
syscfg_exti_line_config(EXTI_SOURCE_GPIOB, EXTI_SOURCE_PIN1);
|
|
||||||
syscfg_exti_line_config(EXTI_SOURCE_GPIOB, EXTI_SOURCE_PIN2);
|
|
||||||
|
|
||||||
//垂直光电开关SW1
|
|
||||||
#ifdef PTZ_SW1_DOWN_FALL_UPDATE
|
|
||||||
exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING);//下降沿中断
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef PTZ_SW1_UP_RISE_UPDATE
|
|
||||||
exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_BOTH);//边沿中断
|
|
||||||
#endif
|
|
||||||
//垂直光电开关SW2
|
|
||||||
exti_init(EXTI_1, EXTI_INTERRUPT, EXTI_TRIG_FALLING);//下降沿中断
|
|
||||||
//水平光电开关SW3
|
|
||||||
#ifdef PTZ_SW3_LEFT_RISE_UPDATE
|
|
||||||
exti_init(EXTI_2, EXTI_INTERRUPT, EXTI_TRIG_BOTH);//边沿中断
|
|
||||||
#else
|
|
||||||
exti_init(EXTI_2, EXTI_INTERRUPT, EXTI_TRIG_FALLING);//下降沿中断
|
|
||||||
#endif
|
|
||||||
//清除标志位
|
|
||||||
exti_interrupt_flag_clear(EXTI_0);
|
|
||||||
exti_interrupt_flag_clear(EXTI_1);
|
|
||||||
exti_interrupt_flag_clear(EXTI_2);
|
|
||||||
|
|
||||||
BSP_IntVectSet(22,EXTI0_IRQHandler);
|
|
||||||
BSP_IntEn(22);
|
|
||||||
|
|
||||||
BSP_IntVectSet(23,EXTI1_IRQHandler);
|
|
||||||
BSP_IntEn(23);
|
|
||||||
|
|
||||||
BSP_IntVectSet(24,EXTI2_IRQHandler);
|
|
||||||
BSP_IntEn(24);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -594,6 +459,194 @@ void ptz_SW_IRQHandler(exti_line_enum sw_linex)
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef PTZ_SERVO_MOTOR
|
||||||
|
#ifdef PTZ_NO_SELF_CHECK
|
||||||
|
if(g_ptz.Voltage > SWITCH_IRQ_V)
|
||||||
|
{
|
||||||
|
switch(sw_linex)
|
||||||
|
{
|
||||||
|
case EXTI_7://垂直光电开关SW1
|
||||||
|
#ifdef PTZ_PHOTOELECTRIC_SWITCH
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
if(g_ptz.vert_direction_actual == PTZ_VERT_DIR_UP)
|
||||||
|
{
|
||||||
|
if(PS_VERT_SW1_READ == PS_HIGH)
|
||||||
|
{
|
||||||
|
g_ptz.vert_ps_sw1_up_rise ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(g_ptz.vert_direction_actual == PTZ_VERT_DIR_DOWN)
|
||||||
|
{
|
||||||
|
if(PS_VERT_SW1_READ == PS_LOW)
|
||||||
|
{
|
||||||
|
g_ptz.vert_ps_sw1_down_fall ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXTI_8://垂直光电开关SW2
|
||||||
|
#ifdef PTZ_PHOTOELECTRIC_SWITCH
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
if(g_ptz.vert_direction_actual == PTZ_VERT_DIR_UP)
|
||||||
|
{
|
||||||
|
if(PS_VERT_SW2_READ == PS_LOW)
|
||||||
|
{
|
||||||
|
g_ptz.vert_ps_sw2_up_fall ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(g_ptz.vert_direction_actual == PTZ_VERT_DIR_DOWN)
|
||||||
|
{
|
||||||
|
if(PS_VERT_SW2_READ == PS_HIGH)
|
||||||
|
{
|
||||||
|
g_ptz.vert_ps_sw2_down_rise ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXTI_9://水平光电开关SW3
|
||||||
|
#ifdef PTZ_PHOTOELECTRIC_SWITCH
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
if(PS_HORI_SW3_READ == PS_LOW)
|
||||||
|
{
|
||||||
|
if(g_ptz.hori_direction_actual == PTZ_HORI_DIR_RIGHT)
|
||||||
|
{
|
||||||
|
g_ptz.hori_ps_sw3_right_fall ++;
|
||||||
|
}
|
||||||
|
if(g_ptz.hori_direction_actual == PTZ_HORI_DIR_LEFT)
|
||||||
|
{
|
||||||
|
g_ptz.hori_ps_sw3_left_fall ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(PS_HORI_SW3_READ == PS_HIGH)//PS_HIGH
|
||||||
|
{
|
||||||
|
if(g_ptz.hori_direction_actual == PTZ_HORI_DIR_RIGHT)
|
||||||
|
{
|
||||||
|
g_ptz.hori_ps_sw3_right_rise ++;
|
||||||
|
}
|
||||||
|
if(g_ptz.hori_direction_actual == PTZ_HORI_DIR_LEFT)
|
||||||
|
{
|
||||||
|
g_ptz.hori_ps_sw3_left_rise ++;
|
||||||
|
// term_printf(" hori_ps_sw3_left_rise \r\n");//中断不能使用串口打印,会占用较长时间
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
|
||||||
|
switch(sw_linex)
|
||||||
|
{
|
||||||
|
case EXTI_7://垂直光电开关SW1
|
||||||
|
#ifdef PTZ_PHOTOELECTRIC_SWITCH
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
if(g_ptz.vert_direction_actual == PTZ_VERT_DIR_UP)
|
||||||
|
{
|
||||||
|
if(PS_VERT_SW1_READ == PS_HIGH)
|
||||||
|
{
|
||||||
|
g_ptz.vert_ps_sw1_up_rise ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(g_ptz.vert_direction_actual == PTZ_VERT_DIR_DOWN)
|
||||||
|
{
|
||||||
|
if(PS_VERT_SW1_READ == PS_LOW)
|
||||||
|
{
|
||||||
|
g_ptz.vert_ps_sw1_down_fall ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXTI_8://垂直光电开关SW2
|
||||||
|
#ifdef PTZ_PHOTOELECTRIC_SWITCH
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
if(g_ptz.vert_direction_actual == PTZ_VERT_DIR_UP)
|
||||||
|
{
|
||||||
|
if(PS_VERT_SW2_READ == PS_LOW)
|
||||||
|
{
|
||||||
|
g_ptz.vert_ps_sw2_up_fall ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(g_ptz.vert_direction_actual == PTZ_VERT_DIR_DOWN)
|
||||||
|
{
|
||||||
|
if(PS_VERT_SW2_READ == PS_HIGH)
|
||||||
|
{
|
||||||
|
g_ptz.vert_ps_sw2_down_rise ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXTI_9://水平光电开关SW3
|
||||||
|
#ifdef PTZ_PHOTOELECTRIC_SWITCH
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
if(PS_HORI_SW3_READ == PS_LOW)
|
||||||
|
{
|
||||||
|
if(g_ptz.hori_direction_actual == PTZ_HORI_DIR_RIGHT)
|
||||||
|
{
|
||||||
|
g_ptz.hori_ps_sw3_right_fall ++;
|
||||||
|
}
|
||||||
|
if(g_ptz.hori_direction_actual == PTZ_HORI_DIR_LEFT)
|
||||||
|
{
|
||||||
|
g_ptz.hori_ps_sw3_left_fall ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(PS_HORI_SW3_READ == PS_HIGH)
|
||||||
|
{
|
||||||
|
if(g_ptz.hori_direction_actual == PTZ_HORI_DIR_RIGHT)
|
||||||
|
{
|
||||||
|
g_ptz.hori_ps_sw3_right_rise ++;
|
||||||
|
}
|
||||||
|
if(g_ptz.hori_direction_actual == PTZ_HORI_DIR_LEFT)
|
||||||
|
{
|
||||||
|
g_ptz.hori_ps_sw3_left_rise ++;
|
||||||
|
// term_printf(" hori_ps_sw3_left_rise \r\n");//中断不能使用串口打印,会占用较长时间
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @brief 水平HALL中断处理函数
|
/// @brief 水平HALL中断处理函数
|
||||||
|
|
|
@ -51,6 +51,11 @@
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//
|
||||||
|
#ifdef PTZ_MEDIUM_WORM_SERVO_MOTOR_24V
|
||||||
|
#define SWITCH_IRQ_V 20
|
||||||
|
#endif
|
||||||
|
|
||||||
void ptz_SW_IRQHandler(exti_line_enum sw_linex);
|
void ptz_SW_IRQHandler(exti_line_enum sw_linex);
|
||||||
void ptz_H_HALL_IRQHandler(exti_line_enum hall_linex);
|
void ptz_H_HALL_IRQHandler(exti_line_enum hall_linex);
|
||||||
void ptz_V_HALL_IRQHandler(exti_line_enum hall_linex);
|
void ptz_V_HALL_IRQHandler(exti_line_enum hall_linex);
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include "gd32f4xx_gpio.h"
|
#include "gd32f4xx_gpio.h"
|
||||||
#include <includes.h>
|
#include <includes.h>
|
||||||
#include "device_wdog.h"
|
#include "device_wdog.h"
|
||||||
|
|
||||||
/// 引脚初始化
|
/// 引脚初始化
|
||||||
///
|
///
|
||||||
/// @param none
|
/// @param none
|
||||||
|
@ -47,7 +48,6 @@ static void task_feeddog ()
|
||||||
OSTimeDlyHMSM(0u,0u,0u,20u);
|
OSTimeDlyHMSM(0u,0u,0u,20u);
|
||||||
//翻转电平喂狗
|
//翻转电平喂狗
|
||||||
gpio_bit_toggle(GPIOE, GPIO_PIN_5);
|
gpio_bit_toggle(GPIOE, GPIO_PIN_5);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,11 +17,13 @@
|
||||||
#include "service_error_count.h"
|
#include "service_error_count.h"
|
||||||
|
|
||||||
#include "rotate_servo.h"
|
#include "rotate_servo.h"
|
||||||
|
#include "speed_to_servoMotor.h"
|
||||||
|
|
||||||
char error_conut_state;
|
char error_conut_state;
|
||||||
#define COUNT_STATE 1
|
#define COUNT_STATE 1
|
||||||
|
|
||||||
#define ERROR_COUNT_SPEED 1.5
|
#define ERROR_COUNT_SPEED 1.5
|
||||||
|
//#define ERROR_COUNT_SPEED 3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,8 +57,10 @@ static void ptz_hori_error_count_task()
|
||||||
case COUNT_STATE:
|
case COUNT_STATE:
|
||||||
g_ptz.hori_as5047d.as5047d_state = 0;//数据不可正常使用
|
g_ptz.hori_as5047d.as5047d_state = 0;//数据不可正常使用
|
||||||
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
|
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
|
||||||
|
// set_speed_to_servoMotor(horiMotorType, ERROR_COUNT_SPEED);
|
||||||
// data = ptz_hori_choice_microstep(ERROR_COUNT_SPEED);
|
// data = ptz_hori_choice_microstep(ERROR_COUNT_SPEED);
|
||||||
// g_ptz.hori_tmc2160 = data;
|
// g_ptz.hori_tmc2160 = data;
|
||||||
|
|
||||||
if(g_ptz.hori_ps_sw3_state == PS_COVER)//如果水平光电开关被挡住
|
if(g_ptz.hori_ps_sw3_state == PS_COVER)//如果水平光电开关被挡住
|
||||||
{
|
{
|
||||||
ptz_hori_start(PTZ_HORI_DIR_LEFT, ERROR_COUNT_SPEED);
|
ptz_hori_start(PTZ_HORI_DIR_LEFT, ERROR_COUNT_SPEED);
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "service_error_count.h"
|
#include "service_error_count.h"
|
||||||
|
|
||||||
#include "rotate_servo.h"
|
#include "rotate_servo.h"
|
||||||
|
#include "speed_to_servoMotor.h"
|
||||||
|
|
||||||
#ifdef PTZ_BLDC_MOTOR
|
#ifdef PTZ_BLDC_MOTOR
|
||||||
/// 云台全范围自检
|
/// 云台全范围自检
|
||||||
|
@ -809,6 +810,7 @@ static unsigned char ptz_hori_complete_self_check_task()
|
||||||
{
|
{
|
||||||
//首先让云台水平向右转动
|
//首先让云台水平向右转动
|
||||||
case PTZ_HORI_SELF_CHECK_COMPLETE_STEP:
|
case PTZ_HORI_SELF_CHECK_COMPLETE_STEP:
|
||||||
|
set_speed_to_servoMotor(horiMotorType, PTZ_HORI_SELF_CHECK_SPEED);
|
||||||
if(g_ptz.hori_ps_sw3_state == PS_COVER)//如果水平光电开关被挡住
|
if(g_ptz.hori_ps_sw3_state == PS_COVER)//如果水平光电开关被挡住
|
||||||
{
|
{
|
||||||
ptz_hori_start(PTZ_HORI_DIR_LEFT, PTZ_HORI_SELF_CHECK_SPEED);
|
ptz_hori_start(PTZ_HORI_DIR_LEFT, PTZ_HORI_SELF_CHECK_SPEED);
|
||||||
|
@ -885,6 +887,7 @@ static unsigned char ptz_hori_simplify_self_check_task()
|
||||||
switch(g_ptz.hori_self_check)
|
switch(g_ptz.hori_self_check)
|
||||||
{
|
{
|
||||||
case PTZ_HORI_SELF_CHECK_SIMPLIFY_STEP:
|
case PTZ_HORI_SELF_CHECK_SIMPLIFY_STEP:
|
||||||
|
set_speed_to_servoMotor(horiMotorType, PTZ_HORI_SELF_CHECK_SPEED);
|
||||||
if(g_ptz.hori_ps_sw3_state == PS_COVER)//如果水平光电开关被挡住
|
if(g_ptz.hori_ps_sw3_state == PS_COVER)//如果水平光电开关被挡住
|
||||||
{
|
{
|
||||||
ptz_hori_start(PTZ_HORI_DIR_LEFT, PTZ_HORI_SELF_CHECK_SPEED);
|
ptz_hori_start(PTZ_HORI_DIR_LEFT, PTZ_HORI_SELF_CHECK_SPEED);
|
||||||
|
@ -953,6 +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);
|
||||||
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;
|
||||||
|
@ -1016,6 +1020,7 @@ static unsigned char ptz_vert_complete_self_check_task()
|
||||||
g_ptz.vert_ps_sw1_up_rise = 0;
|
g_ptz.vert_ps_sw1_up_rise = 0;
|
||||||
OSTimeDlyHMSM(0u, 0u, 0u, 300u);
|
OSTimeDlyHMSM(0u, 0u, 0u, 300u);
|
||||||
ptz_vert_stop(PTZ_VERT_STOP_TIME);
|
ptz_vert_stop(PTZ_VERT_STOP_TIME);
|
||||||
|
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
|
||||||
ptz_vert_start(PTZ_VERT_DIR_UP, PTZ_VERT_SELF_CHECK_SPEED);
|
ptz_vert_start(PTZ_VERT_DIR_UP, PTZ_VERT_SELF_CHECK_SPEED);
|
||||||
g_ptz.vert_self_check++;
|
g_ptz.vert_self_check++;
|
||||||
}
|
}
|
||||||
|
@ -1075,6 +1080,7 @@ static unsigned char ptz_vert_simplify_self_check_task()
|
||||||
switch(g_ptz.vert_self_check)
|
switch(g_ptz.vert_self_check)
|
||||||
{
|
{
|
||||||
case PTZ_VERT_SELF_CHECK_SIMPLIFY_STEP:
|
case PTZ_VERT_SELF_CHECK_SIMPLIFY_STEP:
|
||||||
|
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;
|
||||||
|
@ -1143,6 +1149,7 @@ static unsigned char ptz_vert_simplify_self_check_task()
|
||||||
g_ptz.vert_ps_sw2_down_rise = 0;
|
g_ptz.vert_ps_sw2_down_rise = 0;
|
||||||
OSTimeDlyHMSM(0u, 0u, 0u, 300u);
|
OSTimeDlyHMSM(0u, 0u, 0u, 300u);
|
||||||
ptz_vert_stop(PTZ_VERT_STOP_TIME);
|
ptz_vert_stop(PTZ_VERT_STOP_TIME);
|
||||||
|
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
|
||||||
ptz_vert_start(PTZ_VERT_DIR_UP, PTZ_VERT_SELF_CHECK_SPEED);
|
ptz_vert_start(PTZ_VERT_DIR_UP, PTZ_VERT_SELF_CHECK_SPEED);
|
||||||
g_ptz.vert_self_check++;
|
g_ptz.vert_self_check++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -233,7 +233,7 @@ float ptz_Voltage_collect_adc1_task()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* 间接测量,11倍分压/放大 */
|
/* 间接测量,11倍分压/放大 */
|
||||||
adc1_v[adc1_v_num] = (float)value_V / 4096.0 * 3.381 * 12.55;
|
adc1_v[adc1_v_num] = (float)value_V / 4096.0 * 3.3 * 11;
|
||||||
|
|
||||||
adc1_v_num++;
|
adc1_v_num++;
|
||||||
if(adc1_v_num >= LB_V_TIMES)
|
if(adc1_v_num >= LB_V_TIMES)
|
||||||
|
@ -283,7 +283,7 @@ float ptz_Current_collect_adc1_task()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* 间接测量 */
|
/* 间接测量 */
|
||||||
adc1_i[adc1_i_num] = ((float)value_I / 4096.0 * 3.381) * 10;
|
adc1_i[adc1_i_num] = ((float)value_I / 4096.0 * 3.3) * 10;
|
||||||
|
|
||||||
adc1_i_num++;
|
adc1_i_num++;
|
||||||
if(adc1_i_num >= LB_I_TIMES)
|
if(adc1_i_num >= LB_I_TIMES)
|
||||||
|
|
|
@ -208,7 +208,14 @@ static void DmaCofig(void)
|
||||||
dma_circulation_disable(g_MotorDmaBuff[i].dmaNo, g_MotorDmaBuff[i].dmaTxch);
|
dma_circulation_disable(g_MotorDmaBuff[i].dmaNo, g_MotorDmaBuff[i].dmaTxch);
|
||||||
dma_channel_subperipheral_select(g_MotorDmaBuff[i].dmaNo, g_MotorDmaBuff[i].dmaTxch, g_MotorDmaBuff[i].dmaPeriph);
|
dma_channel_subperipheral_select(g_MotorDmaBuff[i].dmaNo, g_MotorDmaBuff[i].dmaTxch, g_MotorDmaBuff[i].dmaPeriph);
|
||||||
//dma中断配置
|
//dma中断配置
|
||||||
nvic_irq_enable(g_MotorDmaBuff[i].dmaTxIrq, 4, 3);
|
if( i == H_MOTOR )
|
||||||
|
{
|
||||||
|
nvic_irq_enable(g_MotorDmaBuff[H_MOTOR].dmaTxIrq, 2, 2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nvic_irq_enable(g_MotorDmaBuff[V_MOTOR].dmaTxIrq, 2, 1);
|
||||||
|
}
|
||||||
dma_interrupt_enable(g_MotorDmaBuff[i].dmaNo, g_MotorDmaBuff[i].dmaTxch, DMA_CHXCTL_FTFIE);//dma发送完成中断
|
dma_interrupt_enable(g_MotorDmaBuff[i].dmaNo, g_MotorDmaBuff[i].dmaTxch, DMA_CHXCTL_FTFIE);//dma发送完成中断
|
||||||
|
|
||||||
|
|
||||||
|
@ -229,7 +236,14 @@ static void DmaCofig(void)
|
||||||
dma_circulation_enable(g_MotorDmaBuff[i].dmaNo, g_MotorDmaBuff[i].dmaRxch);//循环模式
|
dma_circulation_enable(g_MotorDmaBuff[i].dmaNo, g_MotorDmaBuff[i].dmaRxch);//循环模式
|
||||||
dma_channel_subperipheral_select(g_MotorDmaBuff[i].dmaNo, g_MotorDmaBuff[i].dmaRxch, g_MotorDmaBuff[i].dmaPeriph);
|
dma_channel_subperipheral_select(g_MotorDmaBuff[i].dmaNo, g_MotorDmaBuff[i].dmaRxch, g_MotorDmaBuff[i].dmaPeriph);
|
||||||
//中断配置
|
//中断配置
|
||||||
nvic_irq_enable(g_MotorDmaBuff[i].dmaRxIrq, 4, 2);
|
if ( i == H_MOTOR )
|
||||||
|
{
|
||||||
|
nvic_irq_enable(g_MotorDmaBuff[H_MOTOR].dmaRxIrq, 1, 2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nvic_irq_enable(g_MotorDmaBuff[V_MOTOR].dmaRxIrq, 1, 1);
|
||||||
|
}
|
||||||
dma_interrupt_enable(g_MotorDmaBuff[i].dmaNo, g_MotorDmaBuff[i].dmaRxch, DMA_CHXCTL_FTFIE);
|
dma_interrupt_enable(g_MotorDmaBuff[i].dmaNo, g_MotorDmaBuff[i].dmaRxch, DMA_CHXCTL_FTFIE);
|
||||||
dma_channel_enable(g_MotorDmaBuff[i].dmaNo, g_MotorDmaBuff[i].dmaRxch);
|
dma_channel_enable(g_MotorDmaBuff[i].dmaNo, g_MotorDmaBuff[i].dmaRxch);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,9 +30,9 @@
|
||||||
* @param data:要向寄存器写入的数据
|
* @param data:要向寄存器写入的数据
|
||||||
* @return 返回数组地址
|
* @return 返回数组地址
|
||||||
*/
|
*/
|
||||||
static uint8_t g_HwriteOneRegBuff[WRITE_ONE_REG_FRAME_NUM];
|
uint8_t g_HwriteOneRegBuff[WRITE_ONE_REG_FRAME_NUM];
|
||||||
static uint8_t g_VwriteOneRegBuff[WRITE_ONE_REG_FRAME_NUM];
|
uint8_t g_VwriteOneRegBuff[WRITE_ONE_REG_FRAME_NUM];
|
||||||
uint8_t* WriteMotorOneReg(uint8_t motorNo, uint16_t regAddr, uint16_t data)
|
uint8_t* WriteMotorOneReg(uint8_t motorNo, uint16_t regAddr, int16_t data)
|
||||||
{
|
{
|
||||||
static uint8_t g_writeOneRegBuff[WRITE_ONE_REG_FRAME_NUM];
|
static uint8_t g_writeOneRegBuff[WRITE_ONE_REG_FRAME_NUM];
|
||||||
uint16_t crc;
|
uint16_t crc;
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
*/
|
*/
|
||||||
/*基本控制参数H02*/
|
/*基本控制参数H02*/
|
||||||
#define H02_CONTR_MODE_SELEC 0X0200//(Control mode selection)控制模式选择0:速度模式,1:位置模式,2:转矩模式
|
#define H02_CONTR_MODE_SELEC 0X0200//(Control mode selection)控制模式选择0:速度模式,1:位置模式,2:转矩模式
|
||||||
|
#define H02_MOTOR_DIR_SELEC 0X0202//电机旋转方向选择
|
||||||
/*DI/DO参数H03~H04*/
|
/*DI/DO参数H03~H04*/
|
||||||
#define H03_DI1_FUNC_SELEC 0X0302//DI1端子功能选择,一个 DI 功能选项只能关联一个 DI 端子,不可重复分配
|
#define H03_DI1_FUNC_SELEC 0X0302//DI1端子功能选择,一个 DI 功能选项只能关联一个 DI 端子,不可重复分配
|
||||||
#define H03_DI1_LOGICAL_SELEC 0X0303//DI1端子逻辑选择
|
#define H03_DI1_LOGICAL_SELEC 0X0303//DI1端子逻辑选择
|
||||||
|
@ -68,7 +68,7 @@
|
||||||
* @param data:要向寄存器写入的数据
|
* @param data:要向寄存器写入的数据
|
||||||
* @return false:写失败,当前DMA正在发送数据
|
* @return false:写失败,当前DMA正在发送数据
|
||||||
*/
|
*/
|
||||||
uint8_t* WriteMotorOneReg(uint8_t motorNo, uint16_t regAddr, uint16_t data);
|
uint8_t* WriteMotorOneReg(uint8_t motorNo, uint16_t regAddr, int16_t data);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -60,6 +60,10 @@ void NMI_Handler(void)
|
||||||
void HardFault_Handler(void)
|
void HardFault_Handler(void)
|
||||||
{
|
{
|
||||||
term_printf("****************** HardFault_Handler ********************/\r\n\r\n");
|
term_printf("****************** HardFault_Handler ********************/\r\n\r\n");
|
||||||
|
|
||||||
|
|
||||||
|
beep_enable();
|
||||||
|
|
||||||
/* if Hard Fault exception occurs, go to infinite loop */
|
/* if Hard Fault exception occurs, go to infinite loop */
|
||||||
while(1){
|
while(1){
|
||||||
}
|
}
|
||||||
|
|
|
@ -826,7 +826,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>IlinkIcfFile</name>
|
<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>
|
||||||
<option>
|
<option>
|
||||||
<name>IlinkIcfFileSlave</name>
|
<name>IlinkIcfFileSlave</name>
|
||||||
|
|
Loading…
Reference in New Issue