⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fan.c

📁 一个很好的完整的空调控制器程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/**************** (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 + -