初版代码

This commit is contained in:
sunbeam 2024-07-27 00:45:26 +08:00
parent 86991acfd8
commit 9fa365cee6
3 changed files with 123 additions and 18 deletions

File diff suppressed because one or more lines are too long

View File

@ -10,7 +10,8 @@
uint8_t MotorState[6],MotorStateReal[6]; uint8_t MotorState[6],MotorStateReal[6];
uint16_t current1; uint16_t current1;
uint8_t OC1flag; uint8_t OC1flag;
uint8_t act_step; uint16_t OC_Count1=0;
uint8_t act_step[6];
void MotorValueInit(void) void MotorValueInit(void)
{ {
@ -28,7 +29,7 @@ void setMotorState(uint8_t motorid,uint8_t act)
if (act <= ACT_XH && motorid < 6) if (act <= ACT_XH && motorid < 6)
{ {
MotorState[motorid] = act; MotorState[motorid] = act;
act_step = 0; act_step[motorid] = 0;
} }
} }
@ -59,20 +60,21 @@ void MotorCtrl(void)//10ms
OC1flag = 0; OC1flag = 0;
break; break;
case ACT_XQ://先1再2 case ACT_XQ://先1再2
switch (act_step) switch (act_step[0])
{ {
case 0: case 0:
MotorStateReal[MOTOR1] = ACT_XQ; MotorStateReal[MOTOR1] = ACT_XQ;
MotorStateReal[MOTOR2] = ACT_NOACT; MotorStateReal[MOTOR2] = ACT_NOACT;
act_step = 1; act_step[0] = 1;
break; break;
case 1: case 1:
if (OC1flag == 1) if (OC1flag == 1)
{ {
OC1flag = 0; OC1flag = 0;
OC_Count1 = 0;
MotorStateReal[MOTOR1] = ACT_NOACT; MotorStateReal[MOTOR1] = ACT_NOACT;
MotorStateReal[MOTOR2] = ACT_XQ; MotorStateReal[MOTOR2] = ACT_XQ;
act_step = 2; act_step[0] = 2;
} }
break; break;
@ -80,9 +82,10 @@ void MotorCtrl(void)//10ms
if (OC1flag == 1) if (OC1flag == 1)
{ {
OC1flag = 0; OC1flag = 0;
OC_Count1 = 0;
MotorStateReal[MOTOR1] = ACT_NOACT; MotorStateReal[MOTOR1] = ACT_NOACT;
MotorStateReal[MOTOR2] = ACT_NOACT; MotorStateReal[MOTOR2] = ACT_NOACT;
act_step = 3; act_step[0] = 3;
} }
break; break;
@ -95,20 +98,21 @@ void MotorCtrl(void)//10ms
break; break;
case ACT_XH://先2再1 case ACT_XH://先2再1
switch (act_step) switch (act_step[0])
{ {
case 0: case 0:
MotorStateReal[MOTOR2] = ACT_XH; MotorStateReal[MOTOR2] = ACT_XH;
MotorStateReal[MOTOR1] = ACT_NOACT; MotorStateReal[MOTOR1] = ACT_NOACT;
act_step = 1; act_step[0] = 1;
break; break;
case 1: case 1:
if (OC1flag == 1) if (OC1flag == 1)
{ {
OC1flag = 0; OC1flag = 0;
OC_Count1 = 0;
MotorStateReal[MOTOR2] = ACT_NOACT; MotorStateReal[MOTOR2] = ACT_NOACT;
MotorStateReal[MOTOR1] = ACT_XH; MotorStateReal[MOTOR1] = ACT_XH;
act_step = 2; act_step[0] = 2;
} }
break; break;
@ -116,9 +120,10 @@ void MotorCtrl(void)//10ms
if (OC1flag == 1) if (OC1flag == 1)
{ {
OC1flag = 0; OC1flag = 0;
OC_Count1 = 0;
MotorStateReal[MOTOR1] = ACT_NOACT; MotorStateReal[MOTOR1] = ACT_NOACT;
MotorStateReal[MOTOR2] = ACT_NOACT; MotorStateReal[MOTOR2] = ACT_NOACT;
act_step = 3; act_step[0] = 3;
} }
break; break;
@ -134,6 +139,74 @@ void MotorCtrl(void)//10ms
default: default:
break; break;
} }
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;
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;
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;
}
default:
break;
}
MOTOR1Ctrl(MotorStateReal[MOTOR1]); MOTOR1Ctrl(MotorStateReal[MOTOR1]);
MOTOR2Ctrl(MotorStateReal[MOTOR2]); MOTOR2Ctrl(MotorStateReal[MOTOR2]);
@ -144,7 +217,7 @@ uint16_t getOC_th(void)
{ {
if (MotorStateReal[MOTOR1] != ACT_NOACT) if (MotorStateReal[MOTOR1] != ACT_NOACT)
{ {
return 100U; return 60U;
} }
else else
{ {
@ -157,7 +230,7 @@ uint16_t getOC_th(void)
void CurrentDetecte(void) void CurrentDetecte(void)
{ {
static uint16_t OC_Count1=0;
uint16_t OC_th; uint16_t OC_th;
current1 = getAdval(ADCH_RLY1); current1 = getAdval(ADCH_RLY1);
OC_th = getOC_th(); OC_th = getOC_th();

View File

@ -64,20 +64,21 @@ void keyLogicRelease(uint8_t keyno)
} }
} }
#define KEY_DELAY_TIME 40 #define KEY_DELAY_TIME 60
void keyScan(void)//5ms void keyScan(void)//5ms
{ {
static uint16_t keydelay[9]={0,0,0,0,0,0,0,0,0}; static uint16_t keydelay[9]={0,0,0,0,0,0,0,0,0};
static uint8_t keyflag[9]={0,0,0,0,0,0,0,0,0}; static uint8_t keyflag[9]={0,0,0,0,0,0,0,0,0};
static uint8_t keep_count[9]={0,0,0,0,0,0,0,0,0}; static uint8_t keep_count[9]={0,0,0,0,0,0,0,0,0};
static uint8_t KeyShort2Counter1,KeyShort2Counter2;
uint8_t keyval,i; uint8_t keyval,i;
keyval = GetIOState(SIGID_KEY1); keyval = GetIOState(SIGID_KEY1);
if (keyval == 1 && keyflag[KEY1] == 0) if (keyval == 1 && keyflag[KEY1] == 0)
{ {
keydelay[KEY1]++; keydelay[KEY1]++;
if (keydelay[KEY1] > KEY_DELAY_TIME)//30ms if (keydelay[KEY1] > KEY_DELAY_TIME)//300ms
{ {
keyflag[KEY1] = 1; keyflag[KEY1] = 1;
keydelay[KEY1] = KEY_DELAY_TIME; keydelay[KEY1] = KEY_DELAY_TIME;
@ -90,6 +91,18 @@ void keyScan(void)//5ms
{ {
keyLogicRelease(KEY1); keyLogicRelease(KEY1);
} }
if (keydelay[KEY1] > 0 && keydelay[KEY1] < KEY_DELAY_TIME)
{
if (KeyShort2Counter1 == 0)//第一次按下
{
KeyShort2Counter1 = 100;
}
else
{
setMotorState(1,ACT_XQ);
}
}
keyflag[KEY1] = 0; keyflag[KEY1] = 0;
keydelay[KEY1] = 0; keydelay[KEY1] = 0;
} }
@ -112,9 +125,30 @@ void keyScan(void)//5ms
{ {
keyLogicRelease(KEY2); keyLogicRelease(KEY2);
} }
if (keydelay[KEY2] > 0 && keydelay[KEY2] < KEY_DELAY_TIME)
{
if (KeyShort2Counter2 == 0)//第一次按下
{
KeyShort2Counter2 = 100;
}
else
{
setMotorState(1,ACT_XH);
}
}
keyflag[KEY2] = 0; keyflag[KEY2] = 0;
keydelay[KEY2] = 0; keydelay[KEY2] = 0;
} }
if (KeyShort2Counter1 > 0)
{
KeyShort2Counter1--;
}
if (KeyShort2Counter2 > 0)
{
KeyShort2Counter2--;
}
} }