5a96a696b1
- 펌웨어(program), C# 대시보드(TestProgram), 시뮬레이터(Simulator), 프로토콜/문서(Protocol, doc) 전체를 단일 저장소로 통합 - program 폴더의 별도 git 저장소를 제거하고 통합 저장소에 흡수 - 빌드 산출물(program/build, bin/obj, *.o/.elf/.bin/.hex 등) .gitignore 처리 - 사내 Synology NAS Git 원격 연결 예정 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1636 lines
36 KiB
C
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);
|
|
|
|
}
|