📄 fan.c
字号:
{
#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 {
FanSet(FANLO|(1<<fFanCtrlBit)); /* 低风 */
}
} else {
ClrBit(FanStatus,fFanCtrlBit); /* 1:内风机运行标志 */
}
}
void HeatModeSub(void)
{
ClrBit(Sysflag2,fProtFrost); /* 防冻标志 */
FrostCnt = 0; /* 清除防冻计时 */
//#ifdef ChigoXG3
// ClrHotCnt = 0x1E; /* 吹余热计时(2分钟) */
//#else
ClrHotCnt = 0x78; /* 吹余热计时(2分钟) */
//#endif
#ifdef ChigoXG2
if (ValBit(Sysflag,fPower)){ /* 压缩机开机标志 */
ZhiReFJTm = 30; /* 制热温度到达设定温度,30秒后停内风机 */
}
if ((ZhiReFJTm == 0) && /* 制热温度到达设定温度,30秒后停内风机 */
(!ValBit(Sysflag2,fOverHeat))){ /* 1: 过热保护 */
ClrBit(FanStatus,fFanCtrlBit);
} else {
#endif
if ((AutoAckTm != 0) ||
ValBit(OutDevStu[0],fRunEnable)){ /* 外机允许时 */
/* 内盘管中点温度≥35℃,设定风速 */
if (TubeMidTp >= COOLFANSET){ /* 35 */
ClrBit(Sysflag2,fProtColdLow);
ClrBit(Sysflag2,fProtColdFan);
if (TubeMidTp >= OVERMAXHEAT){ /* >= 57 */
SetBit(Sysflag2,fOverHeat);
} else if (TubeMidTp <= OVERMINHEAT){ /* <= 54 */
ClrBit(Sysflag2,fOverHeat);
}
if ValBit(Sysflag2,fOverHeat){
#if (NJTYPE == 3)||(NJTYPE == 4)
if ((u8)(FanStatus & FANMASK) != FANPO)
#endif
FanSet(FANHI|(1<<fFanCtrlBit)); /* 高风 */
} else {
#if ((NJTYPE == 0)||(NJTYPE == 1)||(NJTYPE == 3))
Fan_Setup(SetupTp,TempOffset); /* 设定风 */
#elif (NJTYPE == 2)||(NJTYPE == 4)||(NJTYPE == 5)
Fan_Setup((u8)(SetupTp-2),TempOffset);
#endif
}
} else {
ClrBit(Sysflag2,fOverHeat); /* 1: 超温保护 */
if (ValBit(Sysflag2,fProtColdFan)){
if (TubeMidTp > COOLFANLOW){ /* 29 */
ClrBit(Sysflag2,fProtColdFan);
SetBit(Sysflag2,fProtColdLow);
FanSet(FANEC|(1<<fFanCtrlBit));
} else {
ClrBit(Sysflag2,fProtColdLow);
//SetBit(Sysflag2,fProtColdFan);
ClrBit(FanStatus,fFanCtrlBit);
}
} else {
if (TubeMidTp <= COOLFANSTP){ /* 20/25 */
ClrBit(Sysflag2,fProtColdLow);
SetBit(Sysflag2,fProtColdFan);
ClrBit(FanStatus,fFanCtrlBit);
} else if ((TubeMidTp <= COOLFANLOW) /* 28 */
|| (ValBit(Sysflag2,fProtColdLow))){
//ClrBit(Sysflag2,fProtColdFan);
SetBit(Sysflag2,fProtColdLow);
FanSet(FANEC|(1<<fFanCtrlBit));
} else {
//ClrBit(Sysflag2,fProtColdFan);
ClrBit(Sysflag2,fProtColdLow);
#if ((NJTYPE == 0)||(NJTYPE == 1)||(NJTYPE == 3))
Fan_Setup(SetupTp,TempOffset); /* 设定风 */
#elif (NJTYPE == 2)||(NJTYPE == 4)||(NJTYPE == 5)
Fan_Setup((u8)(SetupTp-2),TempOffset); /* 设定风 */
#endif
}
}
}
} else {
ClrBit(FanStatus,fFanCtrlBit); /* 1:内风机运行 */
}
#ifdef ChigoXG2
}
#endif
}
void FanCont_Sub(void)
{
#ifdef EnSWING
#if (NJTYPE==0)||(NJTYPE==1)||(NJTYPE==2)||(NJTYPE==3)||(NJTYPE==4)
if ((!ValBit(Sysflag,fResetBj)) &&
(ValBit(Sysflag1,fStepMotor))){ /* 1: 步进电机驱动风门 */
FanRunDly = 0x0FA; /* 5s */
}
#endif
#endif
#ifndef EnPGFENGJI
if (ValBit(OutDevStu[0],fOutDeforst)|| /* 化霜时,关内风机 */
(!ValBit(FanStatus,fFanCtrlBit)) /* 1:内风机运行标志 */
#ifdef EnSWING
#if (NJTYPE==0)||(NJTYPE==1)||(NJTYPE==2)||(NJTYPE==3)||(NJTYPE==4)
||((FanRunDly != 0) && (ValBit(Sysflag1,fStepMotor))) /* 扫风延时 */
#endif
#endif
|| ((u8)(FanStatus & FANMASK) == FANAUTO)){
ClrBit(pFanLo,pbFanLo);
ClrBit(pFanMi,pbFanMi);
ClrBit(pFanHi,pbFanHi); /* 关内风机 */
} else if (((u8)(FanStatus & FANMASK) == FANLO)
||((u8)(FanStatus & FANMASK) == FANEC)){
ClrBit(pFanMi,pbFanMi);
ClrBit(pFanHi,pbFanHi); /* 低风 */
SetBit(pFanLo,pbFanLo);
} else if ((u8)(FanStatus & FANMASK) == FANMI){
ClrBit(pFanLo,pbFanLo);
ClrBit(pFanHi,pbFanHi); /* 中风 */
SetBit(pFanMi,pbFanMi);
} else {
ClrBit(pFanLo,pbFanLo);
ClrBit(pFanMi,pbFanMi);
SetBit(pFanHi,pbFanHi); /* 高风 */
}
}
#else /* EnPGFENGJI */
if (ValBit(OutDevStu[0],fOutDeforst)|| /* 化霜时,关内风机 */
(!ValBit(FanStatus,fFanCtrlBit)) /* 1:内风机运行标志 */
#ifdef EnSWING
#if (NJTYPE==0)||(NJTYPE==1)||(NJTYPE==2)||(NJTYPE==3)||(NJTYPE==4)
||((FanRunDly != 0) && (ValBit(Sysflag1,fStepMotor))) /* 扫风延时 */
#endif
#endif
||((u8)(FanStatus & FANMASK) == FANAUTO)){
SetBit(pPGFan,pbPGFan); /* 关内风机 */
PGErrCnt = 0; /* 清除故障检测计时 */
TrigTime = (u16)0x1800;
ClrBit(PGFanStatus,fPGCtlBit); /* */
} else {
SetBit(PGFanStatus,fPGCtlBit); /* */
/* 风机运行风速 */
if (ValBit(PGFanStatus,fPGEnAdjust)){
ClrBit(PGFanStatus,fPGEnAdjust);
//if (PG_OC-- == 0){
//PG_OC = 2;
//if (ValBit(PGFanStatus,fPGFeedEn)){
/* 有反馈时,自动调整触发时间 */
if (PG_Bak > (u16)(Tab_PGSpeed[(u8)((FanStatus & FANMASK) >> 4)] + 0x20)){
if (TrigTime > 0x320) TrigTime -= 0x20;
} else if (PG_Bak < (u16)(Tab_PGSpeed[(u8)((FanStatus & FANMASK) >> 4)] - 0x20)){
if (TrigTime < 0x1DE0) TrigTime += 0x20;
}
//} else {
// /* 无反馈时,按照设定触发时间操作 */
// if (TrigTime > Tab_PGNFB[(u8)((FanStatus & FANMASK) >> 4)]){
// TrigTime--;
// } else if (TrigTime < Tab_PGNFB[(u8)((FanStatus & FANMASK) >> 4)]){
// TrigTime++;
// }
//}
//}
}
}
}
void PG_Init(void)
{
TrigTime = (u16)0x1800;
PG_FBCount = PGERRCNTMAX; /* 初始值 */
PG_Bak = (u16)0x0FFFF;
EHeatDlyCnt = 3; /* 3秒 */
//PGErrCnt = 0;
//SetBit(pPGFan,pbPGFan); /* 关内风机 */
/* TCCR1A: COM1A1 COM1A0 COM1B1 COM1B0 FOC1A FOC1B WGM11 WGM10 */
TCCR1A = 0x00; /* Normal */
/* TCCR1B: ICNC1 ICES1 - - WGM13 WGM12 CS12 CS11 CS10 */
TCCR1B = 0x02; /* 1:8 */
//TIFR = 0x0FF;
TIMSK |= (u8)(1 << OCIE1A);
}
/* PG 风机定时: 计时频率:1MHz */
#ifdef AVRGCC
SIGNAL(SIG_OUTPUT_COMPARE1A)
#else
#pragma interrupt_handler PGTIMA_Int:iv_TIMER1_COMPA
void PGTIMA_Int(void)
#endif
{
if (PG_FBCount < 255) PG_FBCount++;
if (ValBit(PGFanStatus,fPGCtlBit)){
/* 风机运行风速 */
if (ValBit(pPGZero,pbPGZero) || ValBit(pPGZero,pbPGZero)){
if (ValBit(PGFanStatus,fPGTrig)){
//if (TrigDlyTime != 0){
// TrigDlyTime--;
// ClrBit(pPGFan,pbPGFan);
//} else {
SetBit(pPGFan,pbPGFan);
//}
} else {
if ((u16)(TCNT1 - TrigStart) >= TrigTime){
SetBit(PGFanStatus,fPGTrig);
//TrigDlyTime = 0x02;
ClrBit(pPGFan,pbPGFan);
}
}
} else {
ClrBit(PGFanStatus,fPGTrig); /* PG风机 */
#ifdef TESTPRG
SetBit(PGFanStatus,fPGZero); /* 1: 有过零标志 */
#endif
TrigStart = (u16)(TCNT1);
SetBit(pPGFan,pbPGFan); /* 准备触发 */
}
if (ValBit(pPGFeed,pbPGFeed) || ValBit(pPGFeed,pbPGFeed)){
SetBit(PGFanStatus,fPGFeed);
} else if (ValBit(PGFanStatus,fPGFeed)){
ClrBit(PGFanStatus,fPGFeed);
SetBit(PGFanStatus,fPGFeedEn); /* 允许 PG 反馈 */
SetBit(PGFanStatus,fPGEnAdjust);
PG_Bak = PG_Bak2;
PG_Bak2 = (u16)(TCNT1);
if (PG_FBCount >= PGERRCNTMAX){
PG_Bak = (u16)0x0FFFF;
EHeatDlyCnt = 3; /* 风机速度没起来之前,关电热 */
} else {
PG_Bak = (u16)(PG_Bak2 - PG_Bak);
PGErrCnt = 0; /* 清除故障检测计时 */
}
PG_FBCount = 0;
}
}
/* PG 导通脉冲宽度 1mS */
//if (TrigDlyTime != 0) TrigDlyTime--;
OCR1A += (u16)256; /* 0.256mS */
}
#endif /* EnPGFENGJI */
/*** (c) 2005 佛山菱电 **************************** END OF FILE *************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -