Files
HECO2/program/User/MyMotor.c
T
jeon a502322188 chore: HERV 통합 저장소 재초기화 커밋
손상된 .git 히스토리(missing tree)로 재초기화 후 작업트리 전체 커밋.
.claude/ 만 제외(로컬 에이전트 설정). 구 저장소 백업(.git_corrupt_backup/) 포함.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 09:32:17 +09:00

1636 lines
36 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include "Nano100Series.h"
#include "adc.h"
#include "gpio.h"
#include "pwm.h"
#include "timer.h"
#include "uart.h"
#include "sys.h"
#include "clk.h"
#include "EEPROM_Emulate.h"
#include "My_define.h"
extern volatile uint8_t Err_Code;
void Damper_Setting(uint8_t damper_num, float angle_degree); // dir = 0
uint8_t m1_seq = 0;
uint8_t m2_seq = 0;
uint8_t m3_seq = 0;
uint8_t m4_seq = 0;
uint8_t m5_seq = 0;
uint8_t m6_seq = 0;
uint8_t Step_dir[7] = {0,0,0,0,0,0,0} ;
uint16_t Current_Step_Count[7] = {0,0,0,0,0,0,0} ;
uint16_t Target_Step_Count[7] = {0,0,0,0,0,0,0} ;
uint16_t BLDC_SPEED_TABLE[100] = {//0.5V ~ 5.45
0, 603, 678, 753, 828, 903, 980, 1056, 1131, 1208 ,
1286, 1362, 1440, 1517, 1596, 1675, 1754, 1833, 1912, 1993 ,
2072, 2152, 2232, 2312, 2395, 2478, 2559, 2641, 2724, 2806 ,
2889, 2973, 3057, 3141, 3226, 3311, 3396, 3482, 3568, 3655 ,
3742, 3828, 3915, 4002, 4090, 4179, 4268, 4357, 4447, 4538 ,
4628, 4719, 4810, 4901, 4993, 5085, 5178, 5271, 5364, 5458 ,
5552, 5646, 5740, 5835, 5931, 6027, 6124, 6221, 6319, 6417 ,
6515, 6614, 6713, 6813, 6913, 7014, 7115, 7217, 7319, 7421 ,
7524, 7627, 7731, 7835, 7940, 8045, 8150, 8256, 8362, 8469 ,
8576, 8684, 8793, 8902, 9012, 9122, 9232, 9344, 9457, 9571
};
uint16_t Test_RPM_Vent_Reference[5]={0,};
uint16_t Test_RPM_Vent_Delta[5]={0,};
uint16_t Test_RPM_Air_Reference[5]={0,};
uint16_t Test_RPM_Air_Delta[5]={0,};
uint16_t RPM_Vent_Reference[5]={0,};
uint16_t RPM_Vent_Delta[5]={0,};
uint16_t RPM_Air_Reference[5]={0,};
uint16_t RPM_Air_Delta[5]={0,};
uint8_t RPM_Check_Start = 0;
uint8_t RPM_Stable_Timer = 0;
uint8_t RPM_Auto_Cal_Flag = 0;
uint8_t RPM_Auto_Cal_Status = 0;
uint8_t RPM_Auto_Cal_Start = 0;
uint16_t Rpm_Auto_Delay = 0;
uint8_t Rpm_Auto_Pos = 10;
void Step_M1_Process(uint8_t dir)
{
if(dir == 1){if(m1_seq++ >= 7)m1_seq = 0;}
else{if(m1_seq-- == 0)m1_seq = 7;}
switch(m1_seq)
{
case 0:
REG_STEP_M1_A = 1; // 1
REG_STEP_M1_B = 0; // 0
REG_STEP_M1_NA = 0;// 0
REG_STEP_M1_NB = 0;// 0
break;
case 1:
REG_STEP_M1_A = 1 ; // 1
REG_STEP_M1_B = 1 ; // 1
REG_STEP_M1_NA = 0 ;// 0
REG_STEP_M1_NB = 0 ;// 0
break;
case 2:
REG_STEP_M1_A = 0 ; // 0
REG_STEP_M1_B = 1 ; // 1
REG_STEP_M1_NA = 0 ;// 0
REG_STEP_M1_NB = 0 ;// 0
break;
case 3:
REG_STEP_M1_A = 0 ; // 0
REG_STEP_M1_B = 1 ; // 1
REG_STEP_M1_NA = 1 ;// 1
REG_STEP_M1_NB = 0 ;// 0
break;
case 4:
REG_STEP_M1_A = 0 ; // 0
REG_STEP_M1_B = 0 ; // 0
REG_STEP_M1_NA = 1 ;// 1
REG_STEP_M1_NB = 0 ;// 0
break;
case 5:
REG_STEP_M1_A = 0 ; // 0
REG_STEP_M1_B = 0 ; // 0
REG_STEP_M1_NA = 1 ;// 1
REG_STEP_M1_NB = 1 ;// 1
break;
case 6:
REG_STEP_M1_A = 0 ; // 0
REG_STEP_M1_B = 0 ; // 0
REG_STEP_M1_NA = 0 ;// 0
REG_STEP_M1_NB = 1 ;// 1
break;
case 7:
REG_STEP_M1_A = 1 ; // 1
REG_STEP_M1_B = 0 ; // 0
REG_STEP_M1_NA = 0 ;// 0
REG_STEP_M1_NB = 1 ;// 1
break;
}
}
void Step_M2_Process(uint8_t dir)
{
if(dir == 1){if(m2_seq++ >= 7)m2_seq = 0;}
else{if(m2_seq-- == 0)m2_seq = 7;}
switch(m2_seq)
{
case 0:
REG_STEP_M2_A = 1 ; // 1
REG_STEP_M2_B = 0 ; // 0
REG_STEP_M2_NA = 0 ;// 0
REG_STEP_M2_NB = 0 ;// 0
break;
case 1:
REG_STEP_M2_A = 1 ; // 1
REG_STEP_M2_B = 1 ; // 1
REG_STEP_M2_NA = 0 ;// 0
REG_STEP_M2_NB = 0 ;// 0
break;
case 2:
REG_STEP_M2_A = 0 ; // 0
REG_STEP_M2_B = 1 ; // 1
REG_STEP_M2_NA = 0 ;// 0
REG_STEP_M2_NB = 0 ;// 0
break;
case 3:
REG_STEP_M2_A = 0 ; // 0
REG_STEP_M2_B = 1 ; // 1
REG_STEP_M2_NA = 1 ;// 1
REG_STEP_M2_NB = 0 ;// 0
break;
case 4:
REG_STEP_M2_A = 0 ; // 0
REG_STEP_M2_B = 0 ; // 0
REG_STEP_M2_NA = 1 ;// 1
REG_STEP_M2_NB = 0 ;// 0
break;
case 5:
REG_STEP_M2_A = 0 ; // 0
REG_STEP_M2_B = 0 ; // 0
REG_STEP_M2_NA = 1 ;// 1
REG_STEP_M2_NB = 1 ;// 1
break;
case 6:
REG_STEP_M2_A = 0 ; // 0
REG_STEP_M2_B = 0 ; // 0
REG_STEP_M2_NA = 0 ;// 0
REG_STEP_M2_NB = 1 ;// 1
break;
case 7:
REG_STEP_M2_A = 1 ; // 1
REG_STEP_M2_B = 0 ; // 0
REG_STEP_M2_NA = 0 ;// 0
REG_STEP_M2_NB = 1 ;// 1
break;
}
}
void Step_M3_Process(uint8_t dir)
{
if(dir == 1){if(m3_seq++ >= 7)m3_seq = 0;}
else{if(m3_seq-- == 0)m3_seq = 7;}
switch(m3_seq)
{
case 0:
REG_STEP_M3_A = 1 ; // 1
REG_STEP_M3_B = 0 ; // 0
REG_STEP_M3_NA = 0 ;// 0
REG_STEP_M3_NB = 0 ;// 0
break;
case 1:
REG_STEP_M3_A = 1 ; // 1
REG_STEP_M3_B = 1 ; // 1
REG_STEP_M3_NA = 0 ;// 0
REG_STEP_M3_NB = 0 ;// 0
break;
case 2:
REG_STEP_M3_A = 0 ; // 0
REG_STEP_M3_B = 1 ; // 1
REG_STEP_M3_NA = 0 ;// 0
REG_STEP_M3_NB = 0 ;// 0
break;
case 3:
REG_STEP_M3_A = 0 ; // 0
REG_STEP_M3_B = 1 ; // 1
REG_STEP_M3_NA = 1 ;// 1
REG_STEP_M3_NB = 0 ;// 0
break;
case 4:
REG_STEP_M3_A = 0 ; // 0
REG_STEP_M3_B = 0 ; // 0
REG_STEP_M3_NA = 1 ;// 1
REG_STEP_M3_NB = 0 ;// 0
break;
case 5:
REG_STEP_M3_A = 0 ; // 0
REG_STEP_M3_B = 0 ; // 0
REG_STEP_M3_NA = 1 ;// 1
REG_STEP_M3_NB = 1 ;// 1
break;
case 6:
REG_STEP_M3_A = 0 ; // 0
REG_STEP_M3_B = 0 ; // 0
REG_STEP_M3_NA = 0 ;// 0
REG_STEP_M3_NB = 1 ;// 1
break;
case 7:
REG_STEP_M3_A = 1 ; // 1
REG_STEP_M3_B = 0 ; // 0
REG_STEP_M3_NA = 0 ;// 0
REG_STEP_M3_NB = 1 ;// 1
break;
}
}
void Step_M4_Process(uint8_t dir)
{
if(dir == 1){if(m4_seq++ >= 7)m4_seq = 0;}
else{if(m4_seq-- == 0)m4_seq = 7;}
switch(m4_seq)
{
case 0:
REG_STEP_M4_A = 1 ; // 1
REG_STEP_M4_B = 0 ; // 0
REG_STEP_M4_NA = 0 ;// 0
REG_STEP_M4_NB = 0 ;// 0
break;
case 1:
REG_STEP_M4_A = 1 ; // 1
REG_STEP_M4_B = 1 ; // 1
REG_STEP_M4_NA = 0 ;// 0
REG_STEP_M4_NB = 0 ;// 0
break;
case 2:
REG_STEP_M4_A = 0 ; // 0
REG_STEP_M4_B = 1 ; // 1
REG_STEP_M4_NA = 0 ;// 0
REG_STEP_M4_NB = 0 ;// 0
break;
case 3:
REG_STEP_M4_A = 0 ; // 0
REG_STEP_M4_B = 1 ; // 1
REG_STEP_M4_NA = 1 ;// 1
REG_STEP_M4_NB = 0 ;// 0
break;
case 4:
REG_STEP_M4_A = 0 ; // 0
REG_STEP_M4_B = 0 ; // 0
REG_STEP_M4_NA = 1 ;// 1
REG_STEP_M4_NB = 0 ;// 0
break;
case 5:
REG_STEP_M4_A = 0 ; // 0
REG_STEP_M4_B = 0 ; // 0
REG_STEP_M4_NA = 1 ;// 1
REG_STEP_M4_NB = 1 ;// 1
break;
case 6:
REG_STEP_M4_A = 0 ; // 0
REG_STEP_M4_B = 0 ; // 0
REG_STEP_M4_NA = 0 ;// 0
REG_STEP_M4_NB = 1 ;// 1
break;
case 7:
REG_STEP_M4_A = 1 ; // 1
REG_STEP_M4_B = 0 ; // 0
REG_STEP_M4_NA = 0 ;// 0
REG_STEP_M4_NB = 1 ;// 1
break;
}
}
void Step_M5_Process(uint8_t dir)
{
if(dir == 1){if(m5_seq++ >= 7)m5_seq = 0;}
else{if(m5_seq-- == 0)m5_seq = 7;}
switch(m5_seq)
{
case 0:
REG_STEP_M5_A = 1 ; // 1
REG_STEP_M5_B = 0 ; // 0
REG_STEP_M5_NA = 0 ;// 0
REG_STEP_M5_NB = 0 ;// 0
break;
case 1:
REG_STEP_M5_A = 1 ; // 1
REG_STEP_M5_B = 1 ; // 1
REG_STEP_M5_NA = 0 ;// 0
REG_STEP_M5_NB = 0 ;// 0
break;
case 2:
REG_STEP_M5_A = 0 ; // 0
REG_STEP_M5_B = 1 ; // 1
REG_STEP_M5_NA = 0 ;// 0
REG_STEP_M5_NB = 0 ;// 0
break;
case 3:
REG_STEP_M5_A = 0 ; // 0
REG_STEP_M5_B = 1 ; // 1
REG_STEP_M5_NA = 1 ;// 1
REG_STEP_M5_NB = 0 ;// 0
break;
case 4:
REG_STEP_M5_A = 0 ; // 0
REG_STEP_M5_B = 0 ; // 0
REG_STEP_M5_NA = 1 ;// 1
REG_STEP_M5_NB = 0 ;// 0
break;
case 5:
REG_STEP_M5_A = 0 ; // 0
REG_STEP_M5_B = 0 ; // 0
REG_STEP_M5_NA = 1 ;// 1
REG_STEP_M5_NB = 1 ;// 1
break;
case 6:
REG_STEP_M5_A = 0 ; // 0
REG_STEP_M5_B = 0 ; // 0
REG_STEP_M5_NA = 0 ;// 0
REG_STEP_M5_NB = 1 ;// 1
break;
case 7:
REG_STEP_M5_A = 1 ; // 1
REG_STEP_M5_B = 0 ; // 0
REG_STEP_M5_NA = 0 ;// 0
REG_STEP_M5_NB = 1 ;// 1
break;
}
}
void Step_M6_Process(uint8_t dir)
{
if(dir == 1){if(m6_seq++ >= 7)m6_seq = 0;}
else{if(m6_seq-- == 0)m6_seq = 7;}
switch(m6_seq)
{
case 0:
REG_STEP_M6_A = 1 ; // 1
REG_STEP_M6_B = 0 ; // 0
REG_STEP_M6_NA = 0 ;// 0
REG_STEP_M6_NB = 0 ;// 0
break;
case 1:
REG_STEP_M6_A = 1 ; // 1
REG_STEP_M6_B = 1 ; // 1
REG_STEP_M6_NA = 0 ;// 0
REG_STEP_M6_NB = 0 ;// 0
break;
case 2:
REG_STEP_M6_A = 0 ; // 0
REG_STEP_M6_B = 1 ; // 1
REG_STEP_M6_NA = 0 ;// 0
REG_STEP_M6_NB = 0 ;// 0
break;
case 3:
REG_STEP_M6_A = 0 ; // 0
REG_STEP_M6_B = 1 ; // 1
REG_STEP_M6_NA = 1 ;// 1
REG_STEP_M6_NB = 0 ;// 0
break;
case 4:
REG_STEP_M6_A = 0 ; // 0
REG_STEP_M6_B = 0 ; // 0
REG_STEP_M6_NA = 1 ;// 1
REG_STEP_M6_NB = 0 ;// 0
break;
case 5:
REG_STEP_M6_A = 0 ; // 0
REG_STEP_M6_B = 0 ; // 0
REG_STEP_M6_NA = 1 ;// 1
REG_STEP_M6_NB = 1 ;// 1
break;
case 6:
REG_STEP_M6_A = 0 ; // 0
REG_STEP_M6_B = 0 ; // 0
REG_STEP_M6_NA = 0 ;// 0
REG_STEP_M6_NB = 1 ;// 1
break;
case 7:
REG_STEP_M6_A = 1 ; // 1
REG_STEP_M6_B = 0 ; // 0
REG_STEP_M6_NA = 0 ;// 0
REG_STEP_M6_NB = 1 ;// 1
break;
}
}
void Step_M1_Stop(void)
{
REG_STEP_M1_A = 0 ;
REG_STEP_M1_B = 0 ;
REG_STEP_M1_NA = 0 ;
REG_STEP_M1_NB = 0 ;
}
void Step_M2_Stop(void)
{
REG_STEP_M2_A = 0 ;
REG_STEP_M2_B = 0 ;
REG_STEP_M2_NA = 0 ;
REG_STEP_M2_NB = 0 ;
}
void Step_M3_Stop(void)
{
REG_STEP_M3_A = 0 ;
REG_STEP_M3_B = 0 ;
REG_STEP_M3_NA = 0 ;
REG_STEP_M3_NB = 0 ;
}
void Step_M4_Stop(void)
{
REG_STEP_M4_A = 0 ;
REG_STEP_M4_B = 0 ;
REG_STEP_M4_NA = 0 ;
REG_STEP_M4_NB = 0 ;
}
void Step_M5_Stop(void)
{
REG_STEP_M5_A = 0 ;
REG_STEP_M5_B = 0 ;
REG_STEP_M5_NA = 0 ;
REG_STEP_M5_NB = 0 ;
}
void Step_M6_Stop(void)
{
REG_STEP_M6_A = 0 ;
REG_STEP_M6_B = 0 ;
REG_STEP_M6_NA = 0 ;
REG_STEP_M6_NB = 0 ;
}
#define MODE_OFF 10
uint8_t Pre_Damper_Mode = 0;
volatile uint8_t Step_Status = 0;
uint8_t Step_pos = 0;
void Damper_Mode(uint8_t mmm)
{
switch(mmm)
{
case MODE_VENTILATION:
Damper_Setting(DAMPER_OA, 0); // 90 = close, 0 = open
Damper_Setting(DAMPER_EA, 0); // 90 = close, 0 = open
Damper_Setting(DAMPER_BYPASS, 100); // 90 = close, 0 = open
Damper_Setting(DAMPER_SA, 0); // 90 = close, 0 = open
Damper_Setting(DAMPER_RA, 70); // 90 = close, 0 = open 3step--reverse
Damper_Setting(DAMPER_AIR, 105); // 90 = close, 0 = open
break;
case MODE_AIRCLEAN:
Damper_Setting(DAMPER_OA, 100); // 90 = close, 0 = open
Damper_Setting(DAMPER_EA, 100); // 90 = close, 0 = open
Damper_Setting(DAMPER_BYPASS, 100); // 90 = close, 0 = open
Damper_Setting(DAMPER_SA, 0); // 90 = close, 0 = open
Damper_Setting(DAMPER_RA, 140); // 90 = close, 0 = open 3step--reverse
Damper_Setting(DAMPER_AIR, 0); // 90 = close, 0 = open
break;
case MODE_BYPASS:
Damper_Setting(DAMPER_OA, 0); // 90 = close, 0 = open
Damper_Setting(DAMPER_EA, 0); // 90 = close, 0 = open
Damper_Setting(DAMPER_BYPASS, 0); // 90 = close, 0 = open
Damper_Setting(DAMPER_SA, 0); // 90 = close, 0 = open
Damper_Setting(DAMPER_RA, 140); // 90 = close, 0 = open 3step--reverse
Damper_Setting(DAMPER_AIR, 105); // 90 = close, 0 = open
break;
case MODE_OFF:
default:
Damper_Setting(DAMPER_OA, 100); // 90 = close, 0 = open
Damper_Setting(DAMPER_EA, 100); // 90 = close, 0 = open
Damper_Setting(DAMPER_BYPASS, 100); // 90 = close, 0 = open
Damper_Setting(DAMPER_SA, 100); // 90 = close, 0 = open
Damper_Setting(DAMPER_RA, 0); // 90 = close, 0 = open 3step--reverse
Damper_Setting(DAMPER_AIR, 105); // 90 = close, 0 = open
break;
}
if(Pre_Damper_Mode != mmm)
{
Step_Status = 0;
if(Pre_Damper_Mode == MODE_VENTILATION)
{
Step_pos = 2;
}
else if(mmm == MODE_OFF)
{
Step_pos = 2;
}
else
{
Step_pos = 0;
}
}
Pre_Damper_Mode = mmm;
}
// step x = angle*85 / 7.5
// angle 90 -> x = 1020
uint8_t Step_motor_init(void) // Rev = 0 ,
{
uint16_t i;
for(i=0; i<7; i++)
{
Step_dir[i] = 0;
Current_Step_Count[i] = 1020;
Target_Step_Count[i] = 1020;
}
for(i=0; i<1077; i++){Step_M5_Process(1);Step_M6_Process(0);delay_us(2000);} //
for(i=0; i<400; i++){Step_M5_Process(1);delay_us(1500);} // EBSN
Step_M5_Stop();
Step_M6_Stop();
for(i=0; i<1077; i++){Step_M1_Process(0);Step_M2_Process(0);delay_us(1500);}
Step_M1_Stop();
Step_M2_Stop();
for(i=0; i<1077; i++){Step_M3_Process(0);Step_M4_Process(0);delay_us(1500);}
Step_M3_Stop();
Step_M4_Stop();
Damper_Mode(MODE_OFF);
for(i=0; i<7; i++)
{
Current_Step_Count[i] = Target_Step_Count[i];
}
return 0;
}
void Damper_Setting(uint8_t damper_num, float angle_degree) // dir = 0
{
Target_Step_Count[damper_num] = (uint16_t)(angle_degree * 85 / 7.5);
}
#define StepInterval_Fast 1
#define StepInterval_Slow 5
uint8_t Step_Interval1 = StepInterval_Slow;
uint8_t Step_Interval2 = StepInterval_Slow;
uint8_t Step_Interval3 = StepInterval_Slow;
uint8_t Step_Interval4 = StepInterval_Slow;
uint8_t Step_Interval5 = StepInterval_Slow;
uint8_t Step_Interval6 = StepInterval_Slow;
uint16_t StartFlag1 = 0;
uint16_t StartFlag2 = 0;
uint16_t StartFlag3 = 0;
uint16_t StartFlag4 = 0;
uint16_t StartFlag5 = 0;
uint16_t StartFlag6 = 0;
void Step_process(void)
{
// 1ms process
switch(Step_pos)
{
case 0:
if(Step_Interval1)
{
Step_Interval1 -- ;
}
else
{
if(Current_Step_Count[1] > Target_Step_Count[1])
{
Step_M1_Process(1);
Step_Interval1 = 3;
Current_Step_Count[1]--;
Step_Status &= ~1;
}
else if(Current_Step_Count[1] < Target_Step_Count[1])
{
Step_M1_Process(0);
Step_Interval1 = 3;
Current_Step_Count[1]++;
Step_Status &= ~1;
}
else
{
Step_M1_Stop();
Step_Status |= 1;
StartFlag1 = 0;
Step_Interval1 = 0;
}
}
if(Step_Interval2)
{
Step_Interval2 -- ;
}
else
{
if(Current_Step_Count[2] > Target_Step_Count[2])
{
Step_M2_Process(1);
if(StartFlag2 < 400)Step_Interval2 = StepInterval_Slow;
else Step_Interval2 = StepInterval_Fast;
StartFlag2++;
Current_Step_Count[2]--;
Step_Status &= ~2;
}
else if(Current_Step_Count[2] < Target_Step_Count[2])
{
Step_M2_Process(0);
if(StartFlag2 < 400)Step_Interval2 = StepInterval_Slow;
else Step_Interval2 = StepInterval_Fast;
StartFlag2++;
Current_Step_Count[2]++;
Step_Status &= ~2;
}
else
{
Step_M2_Stop();
Step_Status |= 2;
StartFlag2 = 0;
Step_Interval2 = 0;
}
}
if((Step_Status & 0x03) == 0x03)Step_pos++;
break;
case 1:
if(Step_Interval3)
{
Step_Interval3 -- ;
}
else
{
if(Current_Step_Count[3] > Target_Step_Count[3])
{
Step_M3_Process(1);
if(StartFlag3 < 511)Step_Interval3 = StepInterval_Slow;
else Step_Interval3 = StepInterval_Fast;
StartFlag3++;
Current_Step_Count[3]--;
Step_Status &= ~4;
}
else if(Current_Step_Count[3] < Target_Step_Count[3])
{
Step_M3_Process(0);
if(StartFlag3 < 511)Step_Interval3 = StepInterval_Slow;
else Step_Interval3 = StepInterval_Fast;
StartFlag3++;
Current_Step_Count[3]++;
Step_Status &= ~4;
}
else
{
Step_M3_Stop();
Step_Status |= 4;
StartFlag3 = 0;
Step_Interval3 = 0;
}
}
if(Step_Interval4)
{
Step_Interval4 -- ;
}
else
{
if(Current_Step_Count[4] > Target_Step_Count[4])
{
Step_M4_Process(1);
if(StartFlag4 < 511)Step_Interval4 = StepInterval_Slow;
else Step_Interval4 = StepInterval_Fast;
StartFlag4++;
Current_Step_Count[4]--;
Step_Status &= ~8;
}
else if(Current_Step_Count[4] < Target_Step_Count[4])
{
Step_M4_Process(0);
if(StartFlag4 < 511)Step_Interval4 = StepInterval_Slow;
else Step_Interval4 = StepInterval_Fast;
StartFlag4++;
Current_Step_Count[4]++;
Step_Status &= ~8;
}
else
{
Step_M4_Stop();
Step_Status |= 8;
StartFlag4 = 0;
Step_Interval4 = 0;
}
}
if((Step_Status & 0x0C) == 0x0C)Step_pos++;
break;
case 2:
if(Step_Interval5)// RA is 3 Dan
{
Step_Interval5 -- ;
}
else
{
if(Current_Step_Count[5] > Target_Step_Count[5]) // RA is 3 Dan
{
Step_M5_Process(1);
Step_Interval5 = 3;
Current_Step_Count[5]--;
Step_Status &= ~0x10;
}
else if(Current_Step_Count[5] < Target_Step_Count[5])
{
Step_M5_Process(0);
Step_Interval5 = 3;
Current_Step_Count[5]++;
Step_Status &= ~0x10;
}
else
{
Step_M5_Stop();
Step_Status |= 0x10;
Step_Interval5 = 0;
}
}
if(Step_Interval6)
{
Step_Interval6 -- ;
}
else
{
if(Current_Step_Count[6] > Target_Step_Count[6])
{
Step_M6_Process(1);
if(StartFlag6 < 511)Step_Interval6 = StepInterval_Slow;
else Step_Interval6 = StepInterval_Fast;
StartFlag6++;
Current_Step_Count[6]--;
Step_Status &= ~0x20;
}
else if(Current_Step_Count[6] < Target_Step_Count[6])
{
Step_M6_Process(0);
if(StartFlag6 < 511)Step_Interval6 = StepInterval_Slow;
else Step_Interval6 = StepInterval_Fast;
StartFlag6++;
Current_Step_Count[6]++;
Step_Status &= ~0x20;
}
else
{
Step_M6_Stop();
Step_Status |= 0x20;
StartFlag6 = 0;
Step_Interval6 = 0;
}
}
if((Step_Status & 0x30) == 0x30)Step_pos = 0;
break;
default:
Step_pos=0;
break;
}
}
uint8_t s_FAN1_VEN_1_DAN;
uint8_t s_FAN1_VEN_2_DAN;
uint8_t s_FAN1_VEN_3_DAN;
uint8_t s_FAN1_VEN_4_DAN;
uint8_t s_FAN1_AIR_1_DAN;
uint8_t s_FAN1_AIR_2_DAN;
uint8_t s_FAN1_AIR_3_DAN;
uint8_t s_FAN1_AIR_4_DAN;
uint8_t s_FAN1_BYPASS_1_DAN;
uint8_t s_FAN1_BYPASS_2_DAN;
uint8_t s_FAN1_BYPASS_3_DAN;
uint8_t s_FAN1_BYPASS_4_DAN;
uint8_t s_FAN2_VEN_1_DAN;
uint8_t s_FAN2_VEN_2_DAN;
uint8_t s_FAN2_VEN_3_DAN;
uint8_t s_FAN2_VEN_4_DAN;
uint8_t s_FAN2_AIR_1_DAN;
uint8_t s_FAN2_AIR_2_DAN;
uint8_t s_FAN2_AIR_3_DAN;
uint8_t s_FAN2_AIR_4_DAN;
uint8_t s_FAN2_BYPASS_1_DAN;
uint8_t s_FAN2_BYPASS_2_DAN;
uint8_t s_FAN2_BYPASS_3_DAN;
uint8_t s_FAN2_BYPASS_4_DAN;
extern int16_t Volum1_value, Volum2_value;
extern uint8_t Rommcon_Version;
uint8_t Fan1_Speed = 0, Fan2_Speed = 0;
uint8_t Target_Fan1_Speed = 0, Target_Fan2_Speed = 0;
uint8_t Pre_Run_Mode = 100;
uint16_t Auto_Time = 0;
uint16_t Damper_wait_time = 0;
volatile uint8_t Vsp_Mode[5] = {0,};
volatile uint8_t Pre_Vsp_Mode = 0;
float Pre_Fan1_pwm = 0;
float Pre_Fan2_pwm = 0;
uint8_t Motor_Off_Count;
void PWM_out_process(void)
{
float Fan1_pwm = 0, Fan2_pwm = 0;
if((Fan_Mode != 0)||(RJ_Vsp_Mode == RX_DATA_MODE_VSP))
{
BLDC_PW = 0; // ON
Motor_Off_Count = 0;
}
else if((Fan_Mode == 0) && (Fan1_Speed == 0) && (Fan2_Speed == 0))
{
Motor_Off_Count++;
if(Motor_Off_Count >= 5)
{
BLDC_PW = 1; // OFF
Motor_Off_Count = 5;
}
}
Fan1_pwm = (float)(BLDC_SPEED_TABLE[Fan1_Speed] + BLDC_SPEED_TABLE[Fan1_Speed]*Volum1_value/1000);
// if(Fan1_Speed > 50) Fan1_pwm -= (float)((BLDC_SPEED_TABLE[Fan1_Speed]-BLDC_SPEED_TABLE[50])*Volum1_value/10000);
// else if(Fan1_Speed < 50)Fan1_pwm += (float)((BLDC_SPEED_TABLE[50]-BLDC_SPEED_TABLE[Fan1_Speed])*Volum1_value/10000);
Fan2_pwm = (float)(BLDC_SPEED_TABLE[Fan2_Speed] + BLDC_SPEED_TABLE[Fan2_Speed]*Volum2_value/1000);
// if(Fan2_Speed > 50) Fan2_pwm += (float)((BLDC_SPEED_TABLE[Fan2_Speed]-BLDC_SPEED_TABLE[50])*Volum2_value/100);
// else if(Fan2_Speed < 50)Fan2_pwm -= (float)((BLDC_SPEED_TABLE[50]-BLDC_SPEED_TABLE[Fan2_Speed])*Volum2_value/100);
if(Fan1_pwm > 10000)Fan1_pwm = 10000;if(Fan1_pwm < 0)Fan1_pwm = 0;
if(Fan2_pwm > 10000)Fan2_pwm = 10000;if(Fan2_pwm < 0)Fan2_pwm = 0;
Fan1_pwm = 10000 - Fan1_pwm;
Fan2_pwm = 10000 - Fan2_pwm;
if(Pre_Fan1_pwm != Fan1_pwm)BLDC1_Duty_Change((uint32_t)Fan1_pwm);
if(Pre_Fan2_pwm != Fan2_pwm)BLDC2_Duty_Change((uint32_t)Fan2_pwm);
Pre_Fan1_pwm = Fan1_pwm;
Pre_Fan2_pwm = Fan2_pwm;
}
extern uint8_t Vsp_Select;
uint8_t Pre_Auto_Mode = 0;
uint8_t Pre_Auto_Fan_Mode = 0;
uint16_t Auto_Mode_Timer = 0;
void Fan_Speed_process(void) // 100ms
{
uint8_t i = 0;
if((Fan_Mode == 0)&&(Run_Mode == MODE_VENTILATION)&&(RJ_Vsp_Mode != RX_DATA_MODE_VSP)&&(Vsp_Mode[1] != 0x10))
{
Power_off_process(0);
for(i=1; i<7; i++)Diffuser_Power[i] = 0; //////diffuser off
Target_Fan1_Speed = 0;
Target_Fan2_Speed = 0;
if(Fan1_Speed > Target_Fan1_Speed)Fan1_Speed--;
if(Fan2_Speed > Target_Fan2_Speed)Fan2_Speed--;
PWM_out_process();
if((Fan1_Speed == 0) && (Fan2_Speed == 0))
{
Damper_Mode(MODE_OFF);
Diffuser_Damper_process(MODE_OFF);
}
return;
}
//if(Vsp_Mode == VSP_SETTING_MODE)
if((Vsp_Mode[1] == 0x10)||(RJ_Vsp_Mode == RX_DATA_MODE_VSP))
{
Pre_Vsp_Mode = Vsp_Mode[1];
if((Vsp_Select >= 0x10)&&(Vsp_Select <= 0x20))
{
Target_Fan1_Speed = 0;
Target_Fan2_Speed = 0;
Damper_Mode(MODE_OFF);
goto PASS1;
}
if(Vsp_Select <= 4)//vent
{
Damper_Mode(MODE_VENTILATION);
Target_Fan1_Speed = Test_Fan1_Speed;
Target_Fan2_Speed = Test_Fan2_Speed;
}
else if(Vsp_Select <= 5) // bypass
{
Damper_Mode(MODE_BYPASS);
Target_Fan1_Speed = Test_Fan1_Speed;
Target_Fan2_Speed = Test_Fan2_Speed;
}
else if(Vsp_Select <= 9) //air
{
Damper_Mode(MODE_AIRCLEAN);
Target_Fan1_Speed = Test_Fan1_Speed;
Target_Fan2_Speed = Test_Fan2_Speed;
}
else if(Vsp_Select == 0x25)
{
Filter_Rpm_Auto_Cal_Process();
}
goto PASS1;
}
RPM_Auto_Cal_Start = 0;
if(Run_Mode == MODE_VENTILATION)
{
if((Pre_Run_Mode != MODE_VENTILATION)||(Power_On == 0))
{
Power_On = 1;
for(i=1; i<7; i++)Diffuser_Power[i] = 1; //////diffuser on
Target_Fan1_Speed = 0; // off
Target_Fan2_Speed = 0; // off
Damper_wait_time = 5; //0.5sec
}
else
{
if((Fan1_Speed != 0)||(Fan2_Speed != 0))
{
if(Damper_wait_time == 5)goto PASS1;
}
Damper_Mode(MODE_VENTILATION);
if(Step_Status != 0x3F)goto PASS1;
if(Damper_wait_time == 1)
{
//if(Target_Fan1_Speed == 0)Target_Fan1_Speed = s_FAN1_VEN_1_DAN; // default
//if(Target_Fan2_Speed == 0)Target_Fan2_Speed = s_FAN2_VEN_1_DAN; // default
}
if(Damper_wait_time)Damper_wait_time--;
else
{
;
}
}
}
else if(Run_Mode == MODE_AUTO)
{
if((Pre_Run_Mode != MODE_AUTO)||(Power_On == 0))
{
Power_On = 1;
for(i=1; i<7; i++)Diffuser_Power[i] = 1; //////diffuser on
Target_Fan1_Speed = 0; // off
Target_Fan2_Speed = 0; // off
Damper_wait_time = 5; //0.5sec
}
else
{
if((Fan1_Speed != 0)||(Fan2_Speed != 0))
{
if(Damper_wait_time == 5)goto PASS1;
}
Damper_Mode(MODE_VENTILATION);
if(Step_Status != 0x3F)goto PASS1;
if(Damper_wait_time == 1)
{
//if(Target_Fan1_Speed == 0)Target_Fan1_Speed = s_FAN1_VEN_1_DAN; // default
//if(Target_Fan2_Speed == 0)Target_Fan2_Speed = s_FAN2_VEN_1_DAN; // default
}
if(Damper_wait_time)Damper_wait_time--;
else
{
;
}
}
}
else if(Run_Mode == MODE_BYPASS)
{
if((Pre_Run_Mode != MODE_BYPASS)||(Power_On == 0))
{
Power_On = 1;
for(i=1; i<7; i++)Diffuser_Power[i] = 1; //////diffuser on
Target_Fan1_Speed = 0; // off
Target_Fan2_Speed = 0; // off
Damper_wait_time = 5; //0.5sec
}
else
{
if((Fan1_Speed != 0)||(Fan2_Speed != 0))
{
if(Damper_wait_time == 5)goto PASS1;
}
Damper_Mode(MODE_BYPASS);
if(Step_Status != 0x3F)goto PASS1;
if(Damper_wait_time == 1)
{
// if(Target_Fan1_Speed == 0)Target_Fan1_Speed = s_FAN1_VEN_1_DAN; // default
// if(Target_Fan2_Speed == 0)Target_Fan2_Speed = s_FAN2_VEN_1_DAN; // default
}
if(Damper_wait_time)Damper_wait_time--;
else
{
;
}
}
}
else if(Run_Mode == MODE_AIRCLEAN)
{
if((Pre_Run_Mode != MODE_AIRCLEAN)||(Power_On == 0))
{
Power_On = 1;
for(i=1; i<7; i++)Diffuser_Power[i] = 1; //////diffuser on
Target_Fan1_Speed = 0; // off
Target_Fan2_Speed = 0; // off
Damper_wait_time = 5; //0.5sec
}
else
{
if((Fan1_Speed != 0)||(Fan2_Speed != 0))
{
if(Damper_wait_time == 5)goto PASS1;
}
Damper_Mode(MODE_AIRCLEAN);
if(Step_Status != 0x3F)goto PASS1;
if(Damper_wait_time == 1)
{
// if(Target_Fan1_Speed == 0)Target_Fan1_Speed = s_FAN1_VEN_1_DAN; // default
// if(Target_Fan2_Speed == 0)Target_Fan2_Speed = 0; // default
}
if(Damper_wait_time)Damper_wait_time--;
else
{
;
}
}
}
else if(Run_Mode == MODE_FAN_TEST)
{
if(Vsp_Select <= 4) // vent
{
Damper_Mode(MODE_VENTILATION);
}
else if(Vsp_Select == 5)//bypass
{
Damper_Mode(MODE_BYPASS);
}
else // air 6,7,8
{
Damper_Mode(MODE_AIRCLEAN);
}
Target_Fan1_Speed = Test_Fan1_Speed;
Target_Fan2_Speed = Test_Fan2_Speed;
}
PASS1:
if((Vsp_Mode[1] == 0x10)||(RJ_Vsp_Mode == RX_DATA_MODE_VSP))
{
;
}
else
{
Diffuser_Damper_process(Run_Mode);
}
if(Fan1_Speed > Target_Fan1_Speed)Fan1_Speed--;
else if(Fan1_Speed < Target_Fan1_Speed)Fan1_Speed++;
if(Fan2_Speed > Target_Fan2_Speed)Fan2_Speed--;
else if(Fan2_Speed < Target_Fan2_Speed)Fan2_Speed++;
PWM_out_process();
Pre_Run_Mode = Run_Mode;
}
extern float Float_Aeverage_calculator(float val, float * array_val);
float rpm1_buff[20]={0,};
float rpm2_buff[20]={0,};
extern volatile uint32_t Bldc1_signal, Bldc2_signal;
uint32_t urpm1=0, urpm2=0;
void Bldc_check(void)
{
float rpm1=0, rpm2=0;
rpm1 = (float)Bldc1_signal;
rpm2 = (float)Bldc2_signal;
Bldc1_signal = Bldc2_signal = 0;
rpm1 = rpm1*60/12;
rpm2 = rpm2*60/12;
urpm1 = (uint32_t)Float_Aeverage_calculator(rpm1, rpm1_buff);
urpm2 = (uint32_t)Float_Aeverage_calculator(rpm2, rpm2_buff);
Filter_RPM_Check();
}
extern uint32_t urpm1, urpm2;
uint8_t Fan1_ErrCount = 0, Fan2_ErrCount = 0;
void Fan_Error_Check(void)
{
if(Run_Mode == MODE_FAN_TEST)return;
if(Power_On == 0)return;
if((Fan1_Speed >= s_FAN1_VEN_1_DAN) && (urpm1 == 0))
{
if(Fan1_ErrCount++ > 100){Fan1_ErrCount = 0; Err_Code |= ERROR_SA_FAN;Power_off_process(1);}
}
else if((Fan1_Speed >= s_FAN1_VEN_1_DAN) && (urpm1 != 0))
{
Fan1_ErrCount = 0;
Err_Code &= ~ERROR_SA_FAN;
}
if((Fan2_Speed >= s_FAN2_VEN_1_DAN) && (urpm2 == 0))
{
if(Fan2_ErrCount++ > 100){Fan2_ErrCount = 0; Err_Code |= ERROR_EA_FAN;Power_off_process(1);}
}
else if((Fan2_Speed >= s_FAN2_VEN_1_DAN) && (urpm2 != 0))
{
Fan2_ErrCount = 0;
Err_Code &= ~ERROR_EA_FAN;
}
}
void Fan_Speed_Setting(uint8_t r_mode, uint8_t f_speed) // Run_Mode, fanspeed
{
if(r_mode == MODE_VENTILATION)
{
switch(f_speed)
{
case 1:
Target_Fan1_Speed = s_FAN1_VEN_1_DAN;
Target_Fan2_Speed = s_FAN2_VEN_1_DAN;
break;
case 2:
Target_Fan1_Speed = s_FAN1_VEN_2_DAN;
Target_Fan2_Speed = s_FAN2_VEN_2_DAN;
break;
case 3:
Target_Fan1_Speed = s_FAN1_VEN_3_DAN;
Target_Fan2_Speed = s_FAN2_VEN_3_DAN;
break;
case 4:
Target_Fan1_Speed = s_FAN1_VEN_4_DAN;
Target_Fan2_Speed = s_FAN2_VEN_4_DAN;
break;
default:
Target_Fan1_Speed = 0;
Target_Fan2_Speed = 0;
break;
}
}
else if(r_mode == MODE_AUTO)
{
if(Auto_Mode == MODE_VENTILATION+1)
{
switch(f_speed)
{
case 1:
Target_Fan1_Speed = s_FAN1_VEN_1_DAN;
Target_Fan2_Speed = s_FAN2_VEN_1_DAN;
break;
case 2:
Target_Fan1_Speed = s_FAN1_VEN_2_DAN;
Target_Fan2_Speed = s_FAN2_VEN_2_DAN;
break;
case 3:
Target_Fan1_Speed = s_FAN1_VEN_3_DAN;
Target_Fan2_Speed = s_FAN2_VEN_3_DAN;
break;
case 4:
Target_Fan1_Speed = s_FAN1_VEN_4_DAN;
Target_Fan2_Speed = s_FAN2_VEN_4_DAN;
break;
default:
Target_Fan1_Speed = 0;
Target_Fan2_Speed = 0;
break;
}
}
else if(Auto_Mode == MODE_AIRCLEAN+1)
{
switch(f_speed)
{
case 1:
Target_Fan1_Speed = s_FAN1_AIR_1_DAN;
Target_Fan2_Speed = 0;//s2 400 // s_FAN2_AIR_1_DAN;
break;
case 2:
Target_Fan1_Speed = s_FAN1_AIR_2_DAN;
Target_Fan2_Speed = 0;//s2 400 / s_FAN2_AIR_2_DAN;
break;
case 3:
Target_Fan1_Speed = s_FAN1_AIR_3_DAN;
Target_Fan2_Speed = 0;//s2 400 / s_FAN2_AIR_3_DAN;
break;
case 4:
Target_Fan1_Speed = s_FAN1_AIR_4_DAN;
Target_Fan2_Speed = 0;//s2 400 / s_FAN2_AIR_3_DAN;
break;
default:
Target_Fan1_Speed = 0;
Target_Fan2_Speed = 0;
break;
}
}
else // AUTO MODE NONE
{
switch(f_speed)
{
case 1:
Target_Fan1_Speed = s_FAN1_VEN_1_DAN;
Target_Fan2_Speed = s_FAN2_VEN_1_DAN;
break;
case 2:
Target_Fan1_Speed = s_FAN1_VEN_2_DAN;
Target_Fan2_Speed = s_FAN2_VEN_2_DAN;
break;
case 3:
Target_Fan1_Speed = s_FAN1_VEN_3_DAN;
Target_Fan2_Speed = s_FAN2_VEN_3_DAN;
break;
case 4:
Target_Fan1_Speed = s_FAN1_VEN_4_DAN;
Target_Fan2_Speed = s_FAN2_VEN_4_DAN;
break;
default:
Target_Fan1_Speed = 0;
Target_Fan2_Speed = 0;
break;
}
}
}
else if(r_mode == MODE_AIRCLEAN)
{
switch(f_speed)
{
case 1:
Target_Fan1_Speed = s_FAN1_AIR_1_DAN;
Target_Fan2_Speed = 0;//s2 400 // s_FAN2_AIR_1_DAN;
break;
case 2:
Target_Fan1_Speed = s_FAN1_AIR_2_DAN;
Target_Fan2_Speed = 0;//s2 400 / s_FAN2_AIR_2_DAN;
break;
case 3:
Target_Fan1_Speed = s_FAN1_AIR_3_DAN;
Target_Fan2_Speed = 0;//s2 400 / s_FAN2_AIR_3_DAN;
break;
case 4:
Target_Fan1_Speed = s_FAN1_AIR_4_DAN;
Target_Fan2_Speed = 0;//s2 400 / s_FAN2_AIR_3_DAN;
break;
default:
Target_Fan1_Speed = 0;
Target_Fan2_Speed = 0;
break;
}
}
else if(r_mode == MODE_BYPASS)
{
switch(f_speed)
{
case 1:
Target_Fan1_Speed = s_FAN1_BYPASS_1_DAN; ;
Target_Fan2_Speed = s_FAN2_BYPASS_1_DAN;
break;
case 2:
Target_Fan1_Speed = s_FAN1_BYPASS_2_DAN;
Target_Fan2_Speed = s_FAN2_BYPASS_2_DAN;
break;
case 3:
Target_Fan1_Speed = s_FAN1_BYPASS_3_DAN;
Target_Fan2_Speed = s_FAN2_BYPASS_3_DAN;
break;
case 4:
Target_Fan1_Speed = s_FAN1_BYPASS_4_DAN;
Target_Fan2_Speed = s_FAN2_BYPASS_4_DAN;
break;
default:
Target_Fan1_Speed = 0;
Target_Fan2_Speed = 0;
break;
}
}
}
void Filter_Rpm_Auto_Cal_Process(void)
{
if(RPM_Auto_Cal_Start == 0)
{
RPM_Auto_Cal_Start = 1;
Rpm_Auto_Pos = 0;
}
RPM_Auto_Cal_Status = 1;
switch(Rpm_Auto_Pos)
{
case 0:
Damper_Mode(MODE_VENTILATION);
Rpm_Auto_Delay = 50; //5sec
Rpm_Auto_Pos++;
break;
case 1:
if(Rpm_Auto_Delay){Rpm_Auto_Delay--;break;}
Target_Fan1_Speed = s_FAN1_VEN_2_DAN; ////////////////// S1400
Target_Fan2_Speed = s_FAN2_VEN_2_DAN;
Rpm_Auto_Delay = 500; //50sec
Rpm_Auto_Pos++;
break;
case 2:
if(Rpm_Auto_Delay){Rpm_Auto_Delay--;break;}
Test_RPM_Vent_Reference[1] = (uint16_t)urpm2; ////////////////// S400
Rpm_Auto_Pos++;
break;
case 3:
Target_Fan1_Speed = s_FAN1_VEN_3_DAN; ////////////////// S400
Target_Fan2_Speed = s_FAN2_VEN_3_DAN;
Rpm_Auto_Delay = 400; //50sec
Rpm_Auto_Pos++;
break;
case 4:
if(Rpm_Auto_Delay){Rpm_Auto_Delay--;break;}
Test_RPM_Vent_Reference[2] = (uint16_t)urpm2; ////////////////// S400
Target_Fan1_Speed = 0;
Target_Fan2_Speed = 0;
Rpm_Auto_Delay = 50; //5sec
Rpm_Auto_Pos++;
break;
case 5:
if(Rpm_Auto_Delay){Rpm_Auto_Delay--;break;}
Damper_Mode(MODE_OFF);
Rpm_Auto_Delay = 50; //3sec
Rpm_Auto_Pos++;
break;
case 6:
if(Rpm_Auto_Delay){Rpm_Auto_Delay--;break;}
EEP_Save_Flag = 1;
Rpm_Auto_Pos++;
break;
default:
RPM_Auto_Cal_Status = 0;
break;
}
}
void Filter_RPM_Check(void)//1sec
{
float sDelta = 0;
//if(Filter_timer_change <= 3000)return; //TEST
if((Fan1_Speed == Target_Fan1_Speed)&&(Fan_Mode >= 2))
{
if(Target_Fan1_Speed != 0)RPM_Check_Start = 1;
else RPM_Check_Start = 0;
}
else
{
RPM_Check_Start = 0;
}
if(RPM_Check_Start == 1)
{
if(RPM_Stable_Timer++ >= 60) // 1min
{
RPM_Stable_Timer = 60;
switch(Fan_Mode)
{
case 0:
break;
case 1:
break;
case 2:
sDelta = (float)urpm2 - (float)RPM_Vent_Reference[1];
if((sDelta > RPM_Vent_Delta[1])&&(RPM_Vent_Delta[1] != 0))
{
Err_Code |= ERROR_FILTER_CHANGE;
}
break;
case 3:
sDelta = (float)urpm2 - (float)RPM_Vent_Reference[2];
if((sDelta > RPM_Vent_Delta[2])&&(RPM_Vent_Delta[2] != 0))
{
Err_Code |= ERROR_FILTER_CHANGE;
}
break;
default:
break;
}
}
}
else
{
RPM_Stable_Timer = 0;
}
}
uint8_t Total_Air_Volume = 0, Pre_Total_Air_Volume = 0;
uint8_t Pre_Diffuser_mode = 0;
uint16_t Diffuser_mode_change_timer = 0;
uint8_t Diffuser_mode_type = 0;
uint16_t Get_Air_Volume_Timer = 0;
uint8_t First_Diffuser_excute_flag = 0;
uint16_t Diffuser_Damper_process(uint8_t mode)//100ms
{
if(Focus_Mode_RunTime)Focus_Mode_RunTime--;
if(Diffuser_mode_change_timer == 0)
{
Diffuser_mode_change_timer = 180;//about 24sec
if((Pre_Total_Air_Volume == 0) && (Total_Air_Volume != 0))
{
Diffuser_mode_type = 4;
}
else if((Pre_Total_Air_Volume != 0) && (Total_Air_Volume == 0))
{
Diffuser_mode_type = 3;
}
else if(Pre_Total_Air_Volume > Total_Air_Volume) //dicrease
{
Diffuser_mode_type = 3;
}
else //increase
{
Diffuser_mode_type = 4;
}
Pre_Total_Air_Volume = Total_Air_Volume;
Pre_Auto_Mode = Auto_Mode;
}
else
{
if((Pre_Diffuser_mode == mode)&&(First_Diffuser_excute_flag == 0))
{
// Fan_Speed_Setting(Run_Mode, Fan_Mode);
}
}
if(Diffuser_mode_change_timer == 180)
{
switch(Diffuser_mode_type)
{
case 1: // power on
case 4: // mode change - Air_volum increse
Diffuser_Dmp_Ang_SA[1] = Memory_Diffuser_Dmp_Ang_SA[1];
Diffuser_Dmp_Ang_RA[1] = Memory_Diffuser_Dmp_Ang_RA[1];
Diffuser_Dmp_Ang_SA[2] = Memory_Diffuser_Dmp_Ang_SA[2];
Diffuser_Dmp_Ang_RA[2] = Memory_Diffuser_Dmp_Ang_RA[2];
//Diffuser_Air_quality[1] = Memory_Diffuser_Air_quality[1];
//Diffuser_Air_quality[2] = Memory_Diffuser_Air_quality[2];
break;
case 2: // power off
case 3: // mode change - Air_volum dicrese
Fan_Speed_Setting(Run_Mode, Fan_Mode);
break;
default:
break;
}
}
else if(Diffuser_mode_change_timer == 120)
{
switch(Diffuser_mode_type)
{
case 1: // power on
case 4: // mode change - Air_volum increse
case 2: // power off
case 3: // mode change - Air_volum dicrese
Diffuser_Dmp_Ang_SA[3] = Memory_Diffuser_Dmp_Ang_SA[3];
Diffuser_Dmp_Ang_RA[3] = Memory_Diffuser_Dmp_Ang_RA[3];
Diffuser_Dmp_Ang_SA[4] = Memory_Diffuser_Dmp_Ang_SA[4];
Diffuser_Dmp_Ang_RA[4] = Memory_Diffuser_Dmp_Ang_RA[4];
//Diffuser_Air_quality[3] = Memory_Diffuser_Air_quality[3];
//Diffuser_Air_quality[4] = Memory_Diffuser_Air_quality[4];
break;
default:
break;
}
}
else if(Diffuser_mode_change_timer == 60)
{
switch(Diffuser_mode_type)
{
case 1: // power on
case 4: // mode change - Air_volum increse
Fan_Speed_Setting(Run_Mode, Fan_Mode);
break;
case 2: // power off
case 3: // mode change - Air_volum dicrese
Diffuser_Dmp_Ang_SA[1] = Memory_Diffuser_Dmp_Ang_SA[1];
Diffuser_Dmp_Ang_RA[1] = Memory_Diffuser_Dmp_Ang_RA[1];
Diffuser_Dmp_Ang_SA[2] = Memory_Diffuser_Dmp_Ang_SA[2];
Diffuser_Dmp_Ang_RA[2] = Memory_Diffuser_Dmp_Ang_RA[2];
//Diffuser_Air_quality[1] = Memory_Diffuser_Air_quality[1];
//Diffuser_Air_quality[2] = Memory_Diffuser_Air_quality[2];
break;
default:
break;
}
}
if(Diffuser_mode_change_timer)Diffuser_mode_change_timer--;
Pre_Diffuser_mode = mode;
return(Diffuser_mode_change_timer);
}