2024-01-05 16:19:49 +08:00
|
|
|
|
|
|
|
|
|
#include "MotorCtrl.h"
|
|
|
|
|
|
|
|
|
|
#include "hwCtrl.h"
|
|
|
|
|
#include "PINdef.h"
|
|
|
|
|
#include "appTask.h"
|
|
|
|
|
//#include "pfdl.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t MotorState[6],MotorStateReal[6];
|
2024-05-23 20:07:39 +08:00
|
|
|
|
uint16_t current1;
|
|
|
|
|
uint8_t OC1flag;
|
|
|
|
|
uint8_t act_step;
|
2024-01-05 16:19:49 +08:00
|
|
|
|
|
|
|
|
|
void MotorValueInit(void)
|
|
|
|
|
{
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
for (i = 0; i < 6; i++)
|
|
|
|
|
{
|
|
|
|
|
MotorState[i] = ACT_NOACT;
|
|
|
|
|
MotorStateReal[i] = ACT_NOACT;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void setMotorState(uint8_t motorid,uint8_t act)
|
|
|
|
|
{
|
|
|
|
|
if (act <= ACT_XH && motorid < 6)
|
|
|
|
|
{
|
|
|
|
|
MotorState[motorid] = act;
|
2024-05-23 20:07:39 +08:00
|
|
|
|
act_step = 0;
|
2024-01-05 16:19:49 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-01-11 16:29:14 +08:00
|
|
|
|
/*
|
|
|
|
|
20240106
|
2024-05-23 20:07:39 +08:00
|
|
|
|
正转时:第一个电机M1正转6秒后,M2电机正转,M1最大运行时间15秒
|
|
|
|
|
反转时:第一个电机M2反转8秒后,M1电机反转,M2最大运行时间17秒。
|
2024-01-11 16:29:14 +08:00
|
|
|
|
20240111
|
2024-05-23 20:07:39 +08:00
|
|
|
|
正转时:第一个电机M1正转2秒后,M2电机正转,M1最大运行时间15秒
|
|
|
|
|
反转时:第一个电机M2反转5秒后,M1电机反转,M2最大运行时间17秒。
|
2024-01-11 16:29:14 +08:00
|
|
|
|
*/
|
2024-01-05 16:19:49 +08:00
|
|
|
|
|
2024-01-11 16:29:14 +08:00
|
|
|
|
#define MOTOR_DELAY_TIME_8S (500)
|
|
|
|
|
#define MOTOR_DELAY_TIME_6S (200)
|
2024-01-06 17:05:59 +08:00
|
|
|
|
#define MOTOR_DELAY_TIME_15S (1500)
|
|
|
|
|
#define MOTOR_DELAY_TIME_17S (1700)
|
2024-01-05 16:19:49 +08:00
|
|
|
|
void MotorCtrl(void)//10ms
|
|
|
|
|
{
|
|
|
|
|
static uint16_t MotorRunCount;
|
|
|
|
|
switch (MotorState[0])
|
|
|
|
|
{
|
|
|
|
|
case ACT_NOACT:
|
|
|
|
|
MotorRunCount = 0;
|
|
|
|
|
MotorStateReal[MOTOR1] = ACT_NOACT;
|
|
|
|
|
MotorStateReal[MOTOR2] = ACT_NOACT;
|
2024-05-23 22:22:05 +08:00
|
|
|
|
OC1flag = 0;
|
2024-01-05 16:19:49 +08:00
|
|
|
|
break;
|
2024-05-23 20:07:39 +08:00
|
|
|
|
case ACT_XQ://先1再2
|
|
|
|
|
switch (act_step)
|
2024-01-06 17:05:59 +08:00
|
|
|
|
{
|
2024-05-23 20:07:39 +08:00
|
|
|
|
case 0:
|
2024-01-06 17:05:59 +08:00
|
|
|
|
MotorStateReal[MOTOR1] = ACT_XQ;
|
2024-05-23 22:22:05 +08:00
|
|
|
|
MotorStateReal[MOTOR2] = ACT_NOACT;
|
2024-05-23 20:07:39 +08:00
|
|
|
|
act_step = 1;
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
|
|
|
|
if (OC1flag == 1)
|
|
|
|
|
{
|
2024-05-23 22:22:05 +08:00
|
|
|
|
OC1flag = 0;
|
2024-05-23 20:07:39 +08:00
|
|
|
|
MotorStateReal[MOTOR1] = ACT_NOACT;
|
|
|
|
|
MotorStateReal[MOTOR2] = ACT_XQ;
|
|
|
|
|
act_step = 2;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
|
if (OC1flag == 1)
|
|
|
|
|
{
|
2024-05-23 22:22:05 +08:00
|
|
|
|
OC1flag = 0;
|
2024-05-23 20:07:39 +08:00
|
|
|
|
MotorStateReal[MOTOR1] = ACT_NOACT;
|
|
|
|
|
MotorStateReal[MOTOR2] = ACT_NOACT;
|
|
|
|
|
act_step = 3;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 3:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
break;
|
2024-01-05 16:19:49 +08:00
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
2024-05-23 20:07:39 +08:00
|
|
|
|
case ACT_XH://先2再1
|
|
|
|
|
switch (act_step)
|
2024-01-06 17:05:59 +08:00
|
|
|
|
{
|
2024-05-23 20:07:39 +08:00
|
|
|
|
case 0:
|
2024-01-06 17:05:59 +08:00
|
|
|
|
MotorStateReal[MOTOR2] = ACT_XH;
|
2024-05-23 22:22:05 +08:00
|
|
|
|
MotorStateReal[MOTOR1] = ACT_NOACT;
|
2024-05-23 20:07:39 +08:00
|
|
|
|
act_step = 1;
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
|
|
|
|
if (OC1flag == 1)
|
|
|
|
|
{
|
2024-05-23 22:22:05 +08:00
|
|
|
|
OC1flag = 0;
|
2024-05-23 20:07:39 +08:00
|
|
|
|
MotorStateReal[MOTOR2] = ACT_NOACT;
|
|
|
|
|
MotorStateReal[MOTOR1] = ACT_XH;
|
|
|
|
|
act_step = 2;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
|
if (OC1flag == 1)
|
|
|
|
|
{
|
2024-05-23 22:22:05 +08:00
|
|
|
|
OC1flag = 0;
|
2024-05-23 20:07:39 +08:00
|
|
|
|
MotorStateReal[MOTOR1] = ACT_NOACT;
|
|
|
|
|
MotorStateReal[MOTOR2] = ACT_NOACT;
|
|
|
|
|
act_step = 3;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 3:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
break;
|
2024-01-05 16:19:49 +08:00
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MOTOR1Ctrl(MotorStateReal[MOTOR1]);
|
|
|
|
|
MOTOR2Ctrl(MotorStateReal[MOTOR2]);
|
2024-05-23 22:22:05 +08:00
|
|
|
|
//MOTOR1Ctrl(MotorState[MOTOR1]);
|
2024-01-05 16:19:49 +08:00
|
|
|
|
}
|
|
|
|
|
|
2024-05-25 13:58:01 +08:00
|
|
|
|
uint16_t getOC_th(void)
|
|
|
|
|
{
|
|
|
|
|
if (MotorStateReal[MOTOR1] != ACT_NOACT)
|
|
|
|
|
{
|
|
|
|
|
return 70U;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return 60U;
|
|
|
|
|
}
|
|
|
|
|
//return 50U;
|
|
|
|
|
|
|
|
|
|
}
|
2024-01-05 16:19:49 +08:00
|
|
|
|
|
2024-05-23 20:07:39 +08:00
|
|
|
|
void CurrentDetecte(void)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
static uint16_t OC_Count1=0;
|
2024-05-25 13:58:01 +08:00
|
|
|
|
uint16_t OC_th;
|
2024-05-23 20:07:39 +08:00
|
|
|
|
current1 = getAdval(ADCH_RLY1);
|
2024-05-25 13:58:01 +08:00
|
|
|
|
OC_th = getOC_th();
|
|
|
|
|
if (current1 > OC_th && OC1flag == 0)
|
2024-05-23 20:07:39 +08:00
|
|
|
|
{
|
|
|
|
|
OC_Count1++;
|
|
|
|
|
if (OC_Count1 >= 200)
|
|
|
|
|
{
|
|
|
|
|
OC_Count1 = 0;
|
|
|
|
|
OC1flag = 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
OC_Count1 = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
2024-01-05 16:19:49 +08:00
|
|
|
|
|
|
|
|
|
|