📄 fan.c
字号:
/**************** (c) 2005 佛山菱电 *****************************************
PROJECT : AUX VRV
COMPILER : AVR GCC/ICC
MODULE : fan.c
VERSION : 1.0.0
DATE : 2006/01/18
AUTHOR : 朱坤
MODIFICATIONS :
******************************************************************************/
#include "fan.h"
#include "ports.h"
#include "main.h"
#include "adc.h"
#include "timer.h"
#include "led.h"
u8 FanStatus; /* 风机模式 */
u8 ClrHotCnt; /* 吹余热计时(2分钟) */
u8 AutoCnt; /* 自动模式检测延时 20s */
u8 AutoAckTm; /* 模式确认延时 3s On 20mS */
u8 FrostCnt; /* 防冻保护计时(2分钟) */
#ifdef EnSWING
#if (NJTYPE==0)||(NJTYPE==1)||(NJTYPE==2)||(NJTYPE==3)||(NJTYPE==4)
u8 FanRunDly; /* 5s on 20mS */
#endif
#endif
#ifdef ChigoXG2
u8 ZhiReFJTm; /* 制热时,内机达到设定温度停机后,延时30秒停内风机*/
#endif
#ifdef EnPGFENGJI
u16 TrigTime; /* 触发时间 */
u16 PG_Bak; /* 反馈时间 */
u8 PGFanStatus; /* */
u8 PG_FBCount;
u16 PG_Bak2;
u16 TrigStart; /* 过零时间 */
//u8 TrigDlyTime;
//u8 PG_OC;
u8 PGErrCnt; /* PG 风机错误检测计时 */
u8 EHeatDlyCnt; /* PG 风机启动延时 */
/*****************************************************************************/
#if 0
const u16 Tab_PGNFB[]={0x186C,
0x14DC, /* L:5.340mS */
0x1234, /* M:4.660mS */
0x0974, /* H:2.420mS */
0x186C,
0x186C, /* E:6.250mS P:1.420mS */
0x186C,
0x058C};
#endif
/*-----------------------------------------------------------------------------
; 序号 高风 R52 中风 R40 低风 R48
; 0 27 1330 1.2K 1250 1.2K 1100 1.2K
; 1 58 1280 3K 1200 3K 1050 3K
; 2 86 1230 5.1K 1150 5.1K 1000 5.1K
; 3 114 1180 8.2K 1100 8.2K 950 8.2K
; 4 139 1130 12K 1050 12K 900 12K
; 5 170 1080 20K 1000 20K 850 20K
; 6 199 1030 36K 950 36K 800 36K
; 7 227 980 82K 900 82K 750 82K
-----------------------------------------------------------------------------*/
#if 0
const u16 Tab_PGSpeedH[]={ 0x3ABD, /* 0 1330r/m 15037(3ABD) 缺省 */
0x3D09, /* 1 1280r/m 15625(3D07) */
0x3F84, /* 2 1230r/m 16260(3F84) */
0x4235, /* 3 1180r/m 16949(4235) */
0x4523, /* 4 1130r/m 17699(4523) */
0x4856, /* 5 1080r/m 18518(4856) */
0x4BD9, /* 6 1030r/m 19417(4BD9) */
0x4FB8}; /* 7 0980r/m 20408(4FB8) */
const u16 Tab_PGSpeedM[]={ 0x3E80, /* 0 1250r/m 16000(3E80) 缺省 */
0x411A, /* 1 1200r/m 16666(411A) */
0x43EF, /* 2 1150r/m 17391(43EF) */
0x4706, /* 3 1100r/m 18182(4706) */
0x4A68, /* 4 1050r/m 19048(4A68) */
0x4E20, /* 5 1000r/m 20000(4E20) */
0x523D, /* 6 0950r/m 21053(523D) */
0x56CE}; /* 7 0900r/m 22222(56CE) */
const u16 Tab_PGSpeedL[]={ 0x4706, /* 0 1100r/m 18182(4706) 缺省 */
0x4A68, /* 1 1050r/m 19048(4A68) */
0x4E20, /* 2 1000r/m 20000(4E20) */
0x523D, /* 3 0950r/m 21053(523D) */
0x56CE, /* 4 0900r/m 22222(56CE) */
0x5BE9, /* 5 0850r/m 23529(5BE9) */
0x61A8, /* 6 0800r/m 25000(61A8) */
0x682B}; /* 7 0750r/m 26667(682B) */
#endif
/*---------------------------------------------------------------------------*/
//const u16 Tab_PGSpeed[]={ 0x523D, /* A 0950r/m 21053(523D) */
// 0x523D, /* L 0950r/m 21053(523D) */
// 0x4914, /* M 1070r/m 18691(4904) */
// 0x42E6, /* H 1170r/m 17094(42C6) */
// 0x523D, //0x5BE6, /* E 0850r/m 23529(5BE9) */
// 0x523D, //0x5BE6, /* E 0850r/m 23529(5BE9) */
// 0x3EB0, /* P 1250r/m 16000(3E80) */
// 0x3EB0}; /* P 1250r/m 16000(3E80) */
const u16 Tab_PGSpeed[]={ 0x523D, /* A 0950r/m 21053(523D) */
0x523D, /* L 0950r/m 21053(523D) */
0x4A68, /* M 1050r/m 19048(4A68) */
0x4523, /* H 1130r/m 17699(4523) */
0x523D, //0x5BE6, /* E 0850r/m 23529(5BE9) */
0x523D, //0x5BE6, /* E 0850r/m 23529(5BE9) */
0x4523, /* P 1250r/m 16000(3E80) */
0x4523}; /* P 1250r/m 16000(3E80) */
#endif
void WorkStu_Sub(void)
{
if (ValBit(OutDevStu[0],fOutDeforst)){ /* 化霜 */
DefstCnt = 0x0B4; /* 化霜期间及化霜后3分钟内不检测传感器故障 */
}
#ifdef LEDDISP
if (ValBit(OutDevStu[0],fRunEnable)){
DispDlyCnt = 0; /* 模式确认延时 */
}
#endif
if ((Errorflg | Errorflg2) != 0){
ClrHotCnt = 0; /* 故障关机不吹余热 */
SysSetPow = 0; /* 不进行功率检测 */
SetBit(RunMode,fErrSt);
ClrBit(RunMode,fSysOn); /* 故障关机 */
} else {
ClrBit(RunMode,fErrSt);
}
if (RunMode == (u8)((1<<fSysOn)|(1<<fSysOnOff)|MODEHEAT)){
/* 制热模式 */
HeatModeSub();
} else {
ClrBit(Sysflag2,fOverHeat); /* 1: 超温保护 */
ClrBit(Sysflag2,fProtColdLow);
SetBit(Sysflag2,fProtColdFan); /* 要求防冷风 */
if (RunMode == (u8)((1<<fSysOn)|(1<<fSysOnOff)|MODEAUTO)){
/* 自动模式 */
ClrBit(Sysflag2,fProtFrost); /* 1: 防冻保护 */
FrostCnt = 0; /* 清除防冻计时 */
ClrHotCnt = 0; /* 吹余热计时(2分钟) */
FanSet(FANEC | (1<<fFanCtrlBit));
if (!ValBit(Sysflag2,fMAuto)) {
SetBit(Sysflag2,fMAuto);
AutoCnt = AUTOCNTSET; /* 20s */
} else if (AutoCnt == 0){
AutoAckTm = AUTOACKSET; /* 模式确认延时 3s On 20mS */
//SetupTp = (u8)(0x80+24); /* 设定温度强制为 24 */
if (AmbientTp >= AUTOCOOL){
RunMode = (u8)( (RunMode & ~MODEMASK)|MODECOOL);
} else if (AmbientTp <= AUTOHEAT){
RunMode = (u8)((RunMode & ~MODEMASK)|MODEHEAT);
} else {
RunMode = (u8)((RunMode & ~MODEMASK)|MODEDRY);
}
IfDisHeat();
}
} else if (RunMode == (u8)((1<<fSysOn)|(1<<fSysOnOff)|MODECOOL)){
/* 制冷模式 */
CoolModeSub();
} else if (RunMode == (u8)((1<<fSysOn)|(1<<fSysOnOff)|MODEDRY)){
/* 除湿模式 */
DryModeSub();
} else if (RunMode == (u8)((1<<fSysOn)|(1<<fSysOnOff)|MODEFAN)){
/* 通风模式 */
ClrBit(Sysflag2,fProtFrost);
FrostCnt = 0; /* 清除防冻计时 */
ClrHotCnt = 0; /* 吹余热计时 */
#if ((NJTYPE == 0)||(NJTYPE == 1)||(NJTYPE == 3))
Fan_Setup(AmbientTp,SetupTp); /* 设定风 */
#elif (NJTYPE == 2)||(NJTYPE == 4)||(NJTYPE == 5)
Fan_Setup((u8)(AmbientTp-2),SetupTp); /* 设定风 */
#endif
} else {
/* 关机时清除自动检测到的模式 */
//ClrAutoMode();
ClrBit(Sysflag2,fProtFrost); /* 1: 室内换热器防结霜保护 */
FrostCnt = 0; /* 清除防冻计时 */
/* 吹余热计时(2分钟)到或内盘管温度<41℃, 关内风机,否则,低风*/
if ((ClrHotCnt == 0) /* 吹余热计时(2分钟) */
//#ifndef ChigoXG3
||((TubeMidTp < 0x0A9) && ((RunMode & MODEMASK) == MODEHEAT))
//#endif
||(!ValBit(FanStatus,fFanCtrlBit))){
ClrBit(FanStatus,fFanCtrlBit); /* 1:内风机运行标志 */
} else {
FanSet(FANLO|(1<<fFanCtrlBit));
}
}
}
}
void Fan_Setup(u8 tr, u8 ts)
{
if (ValBit(SlpTmFlag,fSleep)||
((u8)(FanStatus & FANMASK_S) == FANEC_S)){
FanSet(FANEC|(1<<fFanCtrlBit));
} else if (/*ValBit(Sysflag,fContinue) ||*/
((FanStatus & FANMASK_S) == FANPO_S)){
FanSet(FANPO|(1<<fFanCtrlBit));
} else if ((u8)(FanStatus & FANMASK_S) == FANLO_S) {
FanSet(FANLO|(1<<fFanCtrlBit));
} else if ((u8)(FanStatus & FANMASK_S) == FANHI_S){
FanSet(FANHI|(1<<fFanCtrlBit));
} else if ((u8)(FanStatus & FANMASK_S) == FANMI_S){
FanSet(FANMI|(1<<fFanCtrlBit));
} else { /* 自动风 */
if (ValBit(Sysflag,fContinue)||(tr > (u8)(ts + 2))){
FanSet(FANHI|(1<<fFanCtrlBit));
} else if (tr < ts) {
FanSet(FANLO|(1<<fFanCtrlBit));
} else if (tr == ts){
if ((FanStatus & FANMASK) != FANLO){
FanSet( FANMI| (1<<fFanCtrlBit));
} else {
FanSet(FANLO|(1<<fFanCtrlBit));
}
} else if (tr == (u8)(ts + 1)){
FanSet(FANMI|(1<<fFanCtrlBit));
} else /*if (tr == (u8)(ts + 2))*/{
if ((FanStatus & FANMASK) != FANHI){
FanSet(FANMI|(1<<fFanCtrlBit));
} else {
FanSet(FANHI|(1<<fFanCtrlBit));
}
}
}
}
void FanSet(u8 FanSp)
{
FanStatus = (u8)((FanStatus & ~FANMASK)| FanSp);
}
void CoolModeSub(void)
{
#ifdef ChigoXG3
ClrHotCnt = 0x1E; /* 吹余热计时(2分钟) */
#else
ClrHotCnt = 0; /* 吹余热计时(2分钟) */
#endif
if ((AutoAckTm != 0)||
ValBit(OutDevStu[0],fRunEnable)){ /* 外机允许时 */
/*当盘管中点温度≤0℃且持续1分钟时进入防结霜保护,
停压缩机,室内风机吹高风,当盘管中点温度≥7℃退出保护 */
if (TubeMidTp > FrostTMIN) FrostCnt = 0;
if (FrostCnt >= FrostCntMAX) SetBit(Sysflag2,fProtFrost);
if (TubeMidTp >= FrostTMAX) ClrBit(Sysflag2,fProtFrost);
if (ValBit(Sysflag2,fProtFrost)){
FanSet(FANHI|(1<<fFanCtrlBit)); /* 高风 */
} else {
#if ((NJTYPE == 0)||(NJTYPE == 1)||(NJTYPE == 3))
Fan_Setup(AmbientTp,SetupTp); /* 设定风 */
#elif (NJTYPE == 2)||(NJTYPE == 4)||(NJTYPE == 5)
Fan_Setup((u8)(AmbientTp-2),SetupTp); /* 设定风 */
#endif
}
} else {
ClrBit(FanStatus,fFanCtrlBit); /* 1:内风机运行标志 */
}
}
void DryModeSub(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -