M12-05P/app/user/MotorCtrl.c

265 lines
5.3 KiB
C
Raw Normal View History

2024-01-05 16:19:49 +08:00
#include "MotorCtrl.h"
#include "hwCtrl.h"
#include "PINdef.h"
#include "appTask.h"
//#include "pfdl.h"
2024-07-27 19:55:12 +08:00
volatile uint8_t MotorState[6],MotorStateReal[6];
2024-05-23 20:07:39 +08:00
uint16_t current1;
uint8_t OC1flag;
2024-07-27 00:45:26 +08:00
uint16_t OC_Count1=0;
uint8_t act_step[6];
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-07-27 00:45:26 +08:00
act_step[motorid] = 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-07-27 19:55:12 +08:00
void MotorCtrl1(void)//10ms
2024-01-05 16:19:49 +08:00
{
switch (MotorState[0])
{
case ACT_NOACT:
MotorStateReal[MOTOR1] = ACT_NOACT;
MotorStateReal[MOTOR2] = ACT_NOACT;
2024-07-27 19:55:12 +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
2024-07-27 00:45:26 +08:00
switch (act_step[0])
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-07-27 00:45:26 +08:00
act_step[0] = 1;
2024-07-27 19:55:12 +08:00
OC1flag = 0;
OC_Count1 = 0;
2024-05-23 20:07:39 +08:00
break;
case 1:
if (OC1flag == 1)
{
2024-05-23 22:22:05 +08:00
OC1flag = 0;
2024-07-27 00:45:26 +08:00
OC_Count1 = 0;
2024-05-23 20:07:39 +08:00
MotorStateReal[MOTOR1] = ACT_NOACT;
2024-07-27 19:55:12 +08:00
MotorStateReal[MOTOR2] = ACT_NOACT;
2024-07-27 00:45:26 +08:00
act_step[0] = 2;
2024-05-23 20:07:39 +08:00
}
break;
case 2:
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
2024-07-27 00:45:26 +08:00
switch (act_step[0])
2024-01-06 17:05:59 +08:00
{
2024-05-23 20:07:39 +08:00
case 0:
2024-07-27 19:55:12 +08:00
MotorStateReal[MOTOR1] = ACT_XH;
MotorStateReal[MOTOR2] = ACT_NOACT;
2024-07-27 00:45:26 +08:00
act_step[0] = 1;
2024-07-27 19:55:12 +08:00
OC1flag = 0;
OC_Count1 = 0;
2024-05-23 20:07:39 +08:00
break;
case 1:
if (OC1flag == 1)
{
2024-05-23 22:22:05 +08:00
OC1flag = 0;
2024-07-27 00:45:26 +08:00
OC_Count1 = 0;
2024-05-23 20:07:39 +08:00
MotorStateReal[MOTOR2] = ACT_NOACT;
2024-07-27 19:55:12 +08:00
MotorStateReal[MOTOR1] = ACT_NOACT;
2024-07-27 00:45:26 +08:00
act_step[0] = 2;
2024-05-23 20:07:39 +08:00
}
break;
case 2:
2024-07-27 19:55:12 +08:00
2024-05-23 20:07:39 +08:00
break;
case 3:
break;
default:
break;
2024-01-05 16:19:49 +08:00
}
break;
default:
break;
}
2024-07-27 19:55:12 +08:00
}
2024-07-27 00:45:26 +08:00
2024-07-27 19:55:12 +08:00
void MotorCtrl2(void)//10ms
{
2024-07-27 00:45:26 +08:00
switch (MotorState[1])
{
case ACT_NOACT:
/* code */
break;
case ACT_XQ:
switch (act_step[1])
{
case 0:
MotorStateReal[MOTOR1] = ACT_XH;
MotorStateReal[MOTOR2] = ACT_NOACT;
2024-07-27 19:55:12 +08:00
OC1flag = 0;
OC_Count1 = 0;
2024-07-27 00:45:26 +08:00
act_step[1] = 1;
break;
case 1:
if (OC1flag == 1)
{
OC1flag = 0;
OC_Count1 = 0;
MotorStateReal[MOTOR1] = ACT_NOACT;
MotorStateReal[MOTOR2] = ACT_XQ;
act_step[1] = 2;
}
break;
case 2:
if (OC1flag == 1)
{
OC1flag = 0;
OC_Count1 = 0;
MotorStateReal[MOTOR1] = ACT_NOACT;
MotorStateReal[MOTOR2] = ACT_NOACT;
act_step[1] = 3;
}
break;
case 3:
break;
default:
break;
}
break;
case ACT_XH:
switch (act_step[1])
{
case 0:
MotorStateReal[MOTOR2] = ACT_XH;
MotorStateReal[MOTOR1] = ACT_NOACT;
2024-07-27 19:55:12 +08:00
OC1flag = 0;
OC_Count1 = 0;
2024-07-27 00:45:26 +08:00
act_step[1] = 1;
break;
case 1:
if (OC1flag == 1)
{
OC1flag = 0;
OC_Count1 = 0;
MotorStateReal[MOTOR2] = ACT_NOACT;
MotorStateReal[MOTOR1] = ACT_NOACT;
act_step[1] = 2;
}
break;
case 2:
break;
case 3:
break;
default:
break;
}
2024-07-27 19:55:12 +08:00
break;
2024-07-27 00:45:26 +08:00
default:
break;
}
2024-07-27 19:55:12 +08:00
}
void MotorCtrl(void)//10ms
{
if (MotorState[1] == ACT_NOACT)
{
MotorCtrl1();
}
else
{
MotorCtrl2();
}
2024-01-05 16:19:49 +08:00
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)
{
2024-07-27 19:55:12 +08:00
return 50U;
2024-05-25 13:58:01 +08:00
}
else
{
return 110U;
2024-05-25 13:58:01 +08:00
}
//return 50U;
}
2024-01-05 16:19:49 +08:00
2024-05-23 20:07:39 +08:00
void CurrentDetecte(void)
{
2024-07-27 00:45:26 +08:00
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