|
@@ -17,11 +17,14 @@
|
|
|
uint8_t g_devicebusy = 0;
|
|
|
uint16_t g_blinkLedTime = 0; /*LED闪烁频率控制时间*/
|
|
|
uint16_t g_blinkLedTgtTime = BLINK_LED_DFTT; /*LED目标闪烁频率*/
|
|
|
+uint16_t g_IBLed_count = 0;
|
|
|
uint16_t g_period1000ms = 0;
|
|
|
uint8_t g_detectTime = 0; /*状态检测时间*/
|
|
|
uint16_t g_angleRead_Interval = 5; //读取编码器角度间隔
|
|
|
uint16_t g_angleRead_Count = 0; //读取编码器角度计数
|
|
|
|
|
|
+uint16_t g_ibRead_count =0; //ibutton 油品读取计数
|
|
|
+
|
|
|
uint32_t g_poweroff_count = 0; /*外部电源停止后、每秒计数加1*/
|
|
|
|
|
|
#define STATUS_DETECTINTERVAL (10) /*10ms */
|
|
@@ -55,7 +58,6 @@ static uint8_t tmp_pwmout;
|
|
|
|
|
|
static void update_runstate()
|
|
|
{
|
|
|
-
|
|
|
switch(g_lockstatus){
|
|
|
case STATUS_INTERMEDIATE:
|
|
|
g_runstate = STATE_INTERMEDIATE;
|
|
@@ -70,14 +72,19 @@ static void update_runstate()
|
|
|
g_runstate = STATE_SAMPLE;
|
|
|
break;
|
|
|
case STATUS_UNKOWN:
|
|
|
+ g_runstate = STATE_UNKOWN;
|
|
|
+ break;
|
|
|
+ case STATUS_ENCODER_ERROR:
|
|
|
g_runstate = STATE_EXCEPTION;
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
};
|
|
|
+
|
|
|
+ if(STATUS_COVEROPEN == g_coverstatus){
|
|
|
+ g_runstate = STATE_OPENCOVER;
|
|
|
+ }
|
|
|
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
|
|
|
void Process_Init(void)
|
|
@@ -90,6 +97,7 @@ void Process_Init(void)
|
|
|
g_runstate = STATE_LOCK;
|
|
|
g_angleRead_Interval = 500;
|
|
|
g_angleRead_Count = 0;
|
|
|
+ g_ibRead_count =0;
|
|
|
|
|
|
s_angle = AngleSensor_GetAngle();
|
|
|
g_lockstatus=get_lockstatus();
|
|
@@ -131,10 +139,11 @@ void Process_RunPrd(void)
|
|
|
GREENLED_TOGGLE;
|
|
|
g_blinkLedTgtTime = 200;
|
|
|
break;
|
|
|
- case STATE_OPENCOVER:
|
|
|
+ case STATE_UNKOWN:
|
|
|
REDLED_OFF;
|
|
|
GREENLED_ON;
|
|
|
break;
|
|
|
+ case STATE_OPENCOVER:
|
|
|
case STATE_EXCEPTION:
|
|
|
default:
|
|
|
GREENLED_OFF;
|
|
@@ -142,9 +151,29 @@ void Process_RunPrd(void)
|
|
|
break;
|
|
|
|
|
|
};
|
|
|
-
|
|
|
|
|
|
-
|
|
|
+ if(g_ibRead_count >= 1000){
|
|
|
+ g_ibRead_count = 0;
|
|
|
+
|
|
|
+ //在控制电机转动时, 不对ibutton 进行读取
|
|
|
+ if((MOTOR_READY == g_motorstate) || (MOTOR_STOPED == g_motorstate)){
|
|
|
+ IBRead_OilType();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if(g_IBLed_count >= 500){
|
|
|
+ g_IBLed_count = 0;
|
|
|
+ if(OIL_TYPE_NULL != IBGet_OilType()){
|
|
|
+ IB_RED_OFF;
|
|
|
+ IB_GREEN_TOGGLE;
|
|
|
+ }else{
|
|
|
+ IB_GREEN_OFF;
|
|
|
+ IB_RED_TOGGLE;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
//printADCValue();
|
|
|
//printMotorCurrent();
|
|
|
//printf(" Motor Current:%f mA \r\n", getMotorCurrent());
|
|
@@ -163,14 +192,8 @@ void Process_RunPrd(void)
|
|
|
//Storage_CountReduce();
|
|
|
|
|
|
//g_poweroff_count++;
|
|
|
+ printf(" opencover : %d \r\n", Gpio_IsOpenCover());
|
|
|
|
|
|
-// if(Gpio_IsDC24()){
|
|
|
-// printf(" DC24 Supply \r\n");
|
|
|
-//
|
|
|
-// }else{
|
|
|
-// printf(" Battery Supply \r\n");
|
|
|
-//
|
|
|
-// }
|
|
|
|
|
|
printMotorCurrent();
|
|
|
|
|
@@ -180,48 +203,8 @@ void Process_RunPrd(void)
|
|
|
//AngleSensor_PrintInfo();
|
|
|
//IB_Print();
|
|
|
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- /*
|
|
|
-
|
|
|
- //10ms
|
|
|
- if(g_detectTime >= 10){
|
|
|
- g_detectTime = 0;
|
|
|
-
|
|
|
- //锁状态
|
|
|
- _status=get_lockstatus();
|
|
|
- for(i=0; i<STATUS_LOCKALL; i++){
|
|
|
- if(_status == i){
|
|
|
- g_lockcount[i]++;
|
|
|
- if(g_lockcount[i] >= 5){
|
|
|
- g_lockstatus = i;
|
|
|
- }
|
|
|
-
|
|
|
- }else{
|
|
|
- g_lockcount[i]=0;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //上盖状态
|
|
|
- _status=Gpio_IsOpenCover()>0?STATUS_COVEROPEN:STATUS_COVERCLOSE;
|
|
|
- for(i=0; i<STATUS_COVERALL; i++){
|
|
|
- if(_status == i){
|
|
|
- g_covercount[i]++;
|
|
|
- if(g_covercount[i] >= 10){
|
|
|
- g_coverstatus = i;
|
|
|
- }
|
|
|
-
|
|
|
- }else{
|
|
|
- g_covercount[i]=0;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
- */
|
|
|
+
|
|
|
|
|
|
}
|
|
|
|
|
@@ -257,6 +240,14 @@ void Process_Timer1_CB(void)
|
|
|
g_period1000ms++;
|
|
|
}
|
|
|
|
|
|
+ if(g_ibRead_count < 0xFFFF){
|
|
|
+ g_ibRead_count++;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(g_IBLed_count < 0xFFFF){
|
|
|
+ g_IBLed_count++;
|
|
|
+ }
|
|
|
+
|
|
|
g_angleRead_Count++;
|
|
|
if(g_angleRead_Count >= g_angleRead_Interval){
|
|
|
|
|
@@ -270,110 +261,6 @@ void Process_Timer0_CB(void)
|
|
|
{
|
|
|
AngleSensor_Read();
|
|
|
|
|
|
-
|
|
|
-//s_angle = AngleSensor_GetAngle();
|
|
|
-
|
|
|
-// if(s_angle < 0){ //处理异常
|
|
|
-// if((MOTOR_READY != g_motorstate) && (MOTOR_STOPED != g_motorstate)){
|
|
|
-// Motor_Brake();
|
|
|
-// g_motorstate = MOTOR_STOPED;
|
|
|
-// g_runReady =1;
|
|
|
-// g_runTime=0;
|
|
|
-// }
|
|
|
-// }
|
|
|
-//
|
|
|
-// g_lockstatus=get_lockstatus();
|
|
|
-// g_coverstatus=Gpio_IsOpenCover()>0?STATUS_COVEROPEN:STATUS_COVERCLOSE;
|
|
|
-//
|
|
|
-
|
|
|
-// //处理开关锁
|
|
|
-// switch(g_motorstate){
|
|
|
-// case MOTOR_READY:
|
|
|
-// break;
|
|
|
-// case MOTOR_LOCKING:
|
|
|
-// if(/*(STATUS_LOCK == g_lockstatus)|| */(STATUS_UNKOWN == g_lockstatus) ||(g_runTime >= 2000)){
|
|
|
-// Motor_Brake();
|
|
|
-// g_motorstate = MOTOR_STOPED;
|
|
|
-// g_runReady =1;
|
|
|
-// g_runTime=0;
|
|
|
-// }else{
|
|
|
-// PID_Calc(&g_pid, config->lock_threshold+3, s_angle);
|
|
|
-//
|
|
|
-// if(g_pid.error > 0){
|
|
|
-// tmp_speed =(uint8_t)(g_pid.output);
|
|
|
-// tmp_speed = tmp_speed<30?30:tmp_speed;
|
|
|
-// Motor_Positive(tmp_speed);
|
|
|
-//
|
|
|
-// }else{
|
|
|
-// Motor_Brake();
|
|
|
-// g_motorstate = MOTOR_STOPED;
|
|
|
-// g_runReady =1;
|
|
|
-// g_runTime=0;
|
|
|
-// }
|
|
|
-//
|
|
|
-// }
|
|
|
-//
|
|
|
-// break;
|
|
|
-// case MOTOR_UNLOCKING:
|
|
|
-// if(/*(STATUS_UNLOCK == g_lockstatus)|| */(STATUS_UNKOWN == g_lockstatus) ||(g_runTime >= 2000)){
|
|
|
-// Motor_Brake();
|
|
|
-// g_motorstate = MOTOR_STOPED;
|
|
|
-// g_runReady =1;
|
|
|
-// g_runTime=0;
|
|
|
-// }else{
|
|
|
-// PID_Calc(&g_pid, config->unlock_threshold-3, s_angle);
|
|
|
-//
|
|
|
-// if(g_pid.error < 0){
|
|
|
-// tmp_speed =(uint8_t)(-g_pid.output);
|
|
|
-// tmp_speed = tmp_speed<30?30:tmp_speed;
|
|
|
-// Motor_Negative(tmp_speed);
|
|
|
-//
|
|
|
-// }else{
|
|
|
-// Motor_Brake();
|
|
|
-// g_motorstate = MOTOR_STOPED;
|
|
|
-// g_runReady =1;
|
|
|
-// g_runTime=0;
|
|
|
-// }
|
|
|
-//
|
|
|
-// }
|
|
|
-// break;
|
|
|
-//
|
|
|
-// case MOTOR_SAMPLEING:
|
|
|
-// if(/*(STATUS_SAMPLE == g_lockstatus)|| */(STATUS_UNKOWN == g_lockstatus) ||(g_runTime >= 2000)){
|
|
|
-// Motor_Brake();
|
|
|
-// g_motorstate = MOTOR_STOPED;
|
|
|
-// g_runReady =1;
|
|
|
-// g_runTime=0;
|
|
|
-// }else{
|
|
|
-// PID_Calc(&g_pid, g_sample_position, s_angle);
|
|
|
-//
|
|
|
-// if(g_pid.error < 0){
|
|
|
-// tmp_speed =(uint8_t)(-g_pid.output);
|
|
|
-// tmp_speed = tmp_speed<30?30:tmp_speed;
|
|
|
-// Motor_Negative(tmp_speed);
|
|
|
-//
|
|
|
-// }else{
|
|
|
-// Motor_Brake();
|
|
|
-// g_motorstate = MOTOR_STOPED;
|
|
|
-// g_runReady =1;
|
|
|
-// g_runTime=0;
|
|
|
-// }
|
|
|
-//
|
|
|
-// }
|
|
|
-// break;
|
|
|
-// case MOTOR_STOPED:
|
|
|
-// if(g_runTime >= 5000){ //5S
|
|
|
-// g_motorstate = MOTOR_READY;
|
|
|
-// }
|
|
|
-//
|
|
|
-// break;
|
|
|
-// default:
|
|
|
-// break;
|
|
|
-
|
|
|
-// };
|
|
|
-//
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
|
|
|
void Process_MotorControl(float angle)
|
|
@@ -502,7 +389,7 @@ uint8_t get_lockstatus(void)
|
|
|
static float _tmpf_max = 0;
|
|
|
uint8_t status = STATUS_UNKOWN;
|
|
|
if(s_angle<0){
|
|
|
- return status;
|
|
|
+ return STATUS_ENCODER_ERROR;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -542,7 +429,10 @@ uint8_t get_lockstatus(void)
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
+uint8_t Process_GetOilType(void)
|
|
|
+{
|
|
|
+ return IBGet_OilType();
|
|
|
+}
|
|
|
|
|
|
uint8_t Process_GetLockStatus(void)
|
|
|
{
|