客车空调控制系统doc.docx
《客车空调控制系统doc.docx》由会员分享,可在线阅读,更多相关《客车空调控制系统doc.docx(38页珍藏版)》请在冰豆网上搜索。
客车空调控制系统doc
客车空调系统
● 空调系统的组成
空调系统主要由压缩机、冷凝器、蒸发器、膨胀阀、干燥储液器及管路等组成
●空调制冷原理
1) 用户按操作程序启动汽车空调系统之后,压缩机在发动机带动下开始工作,驱使制冷剂(R134a,一种环保型制冷剂,不会破坏臭氧层、无毒性、无刺激、不燃烧、无腐蚀性)在密封的空调系统中循环流动,压缩机将气态制冷剂压缩成高温高压的制冷剂气体后排出压缩机。
2) 高温高压制冷剂气体经管路流入冷凝器后,在冷凝器内散热、降温,冷凝成高温高压的液态制冷剂流出。
3) 高温高压液态制冷剂经管路进入干燥储液器内,经过干燥、过滤后流进膨胀阀。
4) 高温高压液态制冷剂经膨胀阀节流,状态发生急剧变化,变成低温低压的液态制冷剂。
5) 低温低压液态制冷剂立即进入蒸发器内,在蒸发器内吸收流经蒸发器的空气热量,使空气温度降低,吹出冷风,产生制冷效果,制冷剂本身因吸收了热量而蒸发成低温低压的气态制冷剂。
6) 低温低压的气态制冷剂经管路被压缩机吸入,进行压缩,进入下一个循环,只要压缩机连续工作,制冷剂就在空调系统中连续循环,产生制冷效果;压缩机停止工作,空调系统内制冷剂随之停止流动,不产生制冷效果。
●电路控制原理系统框架
二.控制面板部分
1.硬件部分
a.电源电路
工作原理:
R/Y端口为24V电源输入一路经自恢复保险PT3二极管D8限流电阻R38稳压二极管V1输出稳定12V电源为开关电路供电,另一路经继电器KA6输出24v给驱动电路供电,经二极管D12限流电阻R39到三端稳压器LM7805的输入端经稳压后为中央处理器(MCU)和EEROM提供5v电压。
b.开关机电路
工作原理:
(1)当K7按下时基集成电路NE555P的6脚(阀值)电压高于6v,3脚(输出)就输出低电平0v到电源电路三极管Q2的基极,Q2截止继电器失去供电而断开供电实现关机
(2)当K1按下时基集成电路NE555P的2脚(触发)电压接地0v,3脚(输出)就输出高电平12-0.8=11.2v到电源电路三极管Q2的基极,Q2导通继电器恢复供电而接通供电实现关机
c.驱动电路
d.中央处理器(MCU)
工作原理:
当中央处理器:
供电5v,复位电路,时钟电路这3个条件成立中央处理器就能正常工作。
e.显示及按键电路
2.软件部分
●软件控制流程图
●软件组成
1.头文件(STC12C5410AD.H,define_i/o.h,main.h)
2.按键检测与处理(按键检测端口与显示LED端口公用)
3.故障处理子程序
4.温度检测,理子程序
5.显示子程序
6.强冷子程序
7.工作时间记录子程序
8.抗干扰处理(看门狗:
当系统非正常进入死循环不能每隔一段时间把看门狗清零计时器溢出把系统复位。
形象一点就是必须在狗饿之前喂一次狗(清零)要不然狗会以为你乱了(程序跑飞)就会叫醒你(系统复位进入正常)
●功能要求
功能说明:
1、ON键。
按ON键,接通控制面板电源,数字显示回风传感器感应温度值。
2、温度设定与改变(接通控制面板电源后可操作)
2.1、缺省温度设定为24℃。
温度设定值范围在16~27℃改变。
2.2、按下△一次,温度设定值升高1℃,显示2秒钟。
2.3、按下▽一次,温度设定值降低1℃,显示2秒钟。
2.4、温度设定值显示2秒钟后,转换显示车内温度值,车内温度显示范围为12~60℃(精度为0.5℃)。
车内温度低于12℃显示LO,车内温度高于60℃显示HI。
3、制冷键控制功能。
3.1、制冷键只有在蒸发风机工作的情况下才能接通。
3.2、在初始状态下,按制冷键一次,制冷指示灯亮,"制冷"输出为正,允许最大感性负载1A。
3.3、在初始状态下,按制冷键两次,制冷指示灯熄灭,"制冷"输出为零。
3.4、再次启动时,恢复初始状态。
4、新风键控制功能。
4.1、按新风键一次(车内温度≤27℃),新风指示灯亮,"新风控制"输出为正。
4.2、按新风键两次,新风指示灯熄灭,"新风控制"输出为零。
5、压缩机启停控制功能。
5.1、左右除霜传感器感应温度≥3.5℃时,制冷输出为正;左右除霜传感器感应温度≤2℃,制冷输出为零。
5.2、车内温度超过设定值0.5℃时,制冷输出为正;车内温度低于设定值1.5℃时,制冷输出为零。
6、风速键调节风量功能。
6.1、在初始状态下,按动风速键一次,蒸发风机启动,风量为低速,允许最大感性负载1A,低速指示灯亮。
6.2、在初始状态下,按动风速键两次,蒸发风机启动,风量为中速,允许最大感性负载1A,中速指示灯亮。
6.3、在初始状态下,按动风速键三次,蒸发风机启动,风量为高速,允许最大感性负载1A,高速指示灯亮。
6.4、连续按动风速键,风量按照:
低→中→高→低循环。
6.5、再次启动时,恢复初始状态。
6.6、在通风状态下,通风输出(13#)线一直输出高电位,允许最大感性负载1A(主要驱动空调无电瓶发电机供电继电器),注意:
在风速转换过程中,此输出不得跳动,保持平稳,只有在按OFF键后才失电。
7、控制面板总负载不超过3A。
8、OFF键。
按动OFF键,关闭控制面板电源。
9、其他功能。
9.1、在空调系统出现高低压故障时,按制冷键一次,制冷输出(4#)仍为高电位(通过电器盒继电器禁止压缩机启动),用发光二极管闪动显示Er1,闪动频率为1HZ(1秒钟1次)。
9.2、温度传感器短路,用发光二极管闪动显示Er2,闪动频率1HZ(1秒钟1次)。
9.3、温度传感器断路,用发光二极管闪动显示Er3,闪动频率1HZ(1秒钟1次)。
10、强冷功能。
按ON键,接通控制面板电源,按动风速键,启动蒸发风机,将制冷键按下5秒钟,启动压缩机和冷凝风机(只有在蒸发风机工作的情况下,才具备此功能)。
并当转换风速和新风状态时,强冷功能不应消失。
11、同时按"△▽"键显示空调使用时间。
单位为10小时。
●控制源程序
#include"STC12C5410AD.H"
#include"define_io.h"
#include"main.h"
unsignedcharKeyFlag;
constunsignedintTempTable[]={
//0123456789
14230,13600,13010,12450,11910,11400,10920,10460,10020,9596,
//10111213141516171819
9197,8817,8454,8108,7779,7467,7164,6877,6603,6342,
//2025
6092,5854,5626,5408,5199,5000,4811,4630,4456,4291,
//30
4132,3980,3835,3695,3562,3434,3311,3193,3081,2972,
//40
2869,2769,2673,2581,2493,2409,2327,2249,2174,2102,
//50
2032,1965,1901,1839,1780,1722,1667,1614,1563,1514,
//60
1466,1421,1376,1334,1293
};
voiddelay(unsignedintn)
{
unsignedinti;
for(i=0;i{
;
}
}
/*
voidLdelay(unsignedcharn)
{
unsignedchari,j,k;
for(i=0;i{
for(j=0;j<0xff;j++)
{
for(k=0;k<0xff;k++)
{WDT_CONTR=0x38;}
}
}
}
*/
voidtrans_led_data(unsignedcharDAT)
{
unsignedcharData[17]={
//012345678910111213141516
//0123456789HILo无Er
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x89,0xf9,0xc7,0xa3,0xff,0x86,0xaf
};
unsignedchari,j;
i=Data[DAT]&dp;
CY=0;
for(j=0;j<8;j++)
{
i<<=1;
LED_DATA=CY;
LED_CLK=0;
LED_CLK=1;
}
}
voidshow_temp()
{
unsignedchara,b,c;
if(!
set_time)
{
if(temp_num>59)//温度超过60度
{
a=14;//不显示
c=10;//显示字母"H"
b=11;//显示字母"I"
//flag=0;//不显示点"."
}
elseif(temp_num<=12)//温度低于12度
{
c=12;//显示字母“L”
b=13;//显示"O"
a=14;//不显示
//flag=0;//不显示点"."
}
else
{
a=temp_dot;
b=temp_num%10;
c=temp_num/10;
//flag=1;//显示点"."
//---------------------------
if(a==5)
{
a=0;
}
else
{
a=5;
if(b)
{
b-=1;
}
else
{
c-=1;
b=9;
}
}
//---------------------------
}
}
else
{
a=0;
b=set_temp%10;
c=set_temp/10;
//flag=1;//显示点"."
}
LED3_ON=0;
dp=0xff;
trans_led_data(c);
LED1_ON=1;
delay(1000);
LED1_ON=0;
dp=0x7f;
trans_led_data(b);
LED2_ON=1;
delay(1000);
LED2_ON=0;
dp=0xff;
trans_led_data(a);
LED3_ON=1;
delay(1000);
WDT_CONTR=0x3c;//喂狗
}
voidshow_error(unsignedcharnum)
{
unsignedchari;
i=num;
LED3_ON=0;
trans_led_data(15);//E
LED1_ON=1;
delay(1000);
LED1_ON=0;
trans_led_data(16);//r
LED2_ON=1;
delay(1000);
LED2_ON=0;
trans_led_data(i);
LED3_ON=1;
delay(1000);
WDT_CONTR=0x3c;//喂狗
}
voidshow_temp_err()//显示温度或错误标志
{
if(((!
error_flag)||((error_flag==1)&&(!
SW_N_FLAG))||(set_time)))//当无错时(error_flag=0)或错为1(欠压,error_flag=1),并且制冷键没按下时,温度调节时也显示温度,显示温度
{
show_temp();
}
else//当错为2(温感器短路)或3(温感器开路)时,或错为1(Er1)且制冷键按下显示Err
{
if(flag)
show_error(error_flag);
else
{
LED1_ON=0;
LED2_ON=0;
LED3_ON=0;
}
}
}
voidmake_cool(void)//制冷动作程序
{
//if(!
SW_N_ERR_TIME)//有欠压故障后,制冷键按下0.5S后起作用
if(!
ERR_ACT_DELAY)
{
if(!
make_cool_flag)//如果没有开强冷功能
{
if(error_flag>1)//如果出现温感器开路或短路故障,不能开制冷功能
{
CON4=OFF;
SW_N_FLAG=0;//关了制冷便不管是否欠压都不显示出错信息
}
else//没有出现温感器开路或短路故障
{
if(con4_flag)//如果制冷按下
{
if((temp_w_num>=4)&&(temp_s_num>=4)&&(temp_num>set_temp))//4
{
CON4=ON;
if(error_flag==1)//出现欠压故障时:
SW_N_FLAG=1;//欠压时开了制冷标志
}
else
{
if((temp_w_num<=2)||(temp_s_num<=2)||(temp_num<(set_temp-1)))//2
{
CON4=OFF;//关制冷
SW_N_FLAG=0;//关了制冷便不管是否欠压都不显示出错信息
}
}
}
else//如果制冷关掉
{
CON4=OFF;//关制冷
SW_N_FLAG=0;//关了制冷便不管是否欠压都不显示出错信息
}
}
}
else//强冷功能
{
if(error_flag>1)//如果出现温感器开路或短路故障,不能开制冷功能
{
CON4=OFF;
SW_N_FLAG=0;//关了制冷便不管是否欠压都不显示出错信息
}
else
{
if(con4_flag)//如果制冷按下
{
CON4=ON;
if(error_flag==1)//出现欠压故障时:
SW_N_FLAG=1;//欠压时开了制冷标志
}
else//如果制冷关掉
{
CON4=OFF;//关制冷
SW_N_FLAG=0;//关了制冷便不管是否欠压都不显示出错信息
}
}
}
}
}
voidshow_time()
{
unsignedchara,b;
a=clock_time%10;
b=clock_time/10;
LED1_ON=0;
LED3_ON=0;
dp=0xff;
trans_led_data(b);
LED2_ON=1;
delay(1000);
LED2_ON=0;
dp=0xff;
trans_led_data(a);
LED3_ON=1;
delay(1000);
WDT_CONTR=0x3c;//喂狗
}
voidled_clear()//清LED显示
{
LED1_ON=0;
LED2_ON=0;
LED3_ON=0;
dp=0xff;
trans_led_data(14);
}
unsignedcharcheck_key()
{
unsignedchari,j;
i=0x7f;
for(j=0;j<8;j++)
{
i<<=1;
LED_DATA=CY;
LED_CLK=0;
LED_CLK=1;
if(!
KEY_INPUT)
{
delay(200);
if(!
KEY_INPUT)
{
break;
}
}
}
returnj;
}
voidactive_key()
{
bitTempBit=0;
unsignedchari,j,k;
//check_err();
led_clear();//清LED显示
j=check_key();
k=j;
switch(j)
{
case1:
//制冷键
if(((temp_w_num>=4)&&(temp_s_num>=4)&&(temp_num>set_temp))||(con4_flag))
{
if(error_flag<2)//温度传感器没有出现短路或断路故障时,制冷键才起作用
{
if(mec_flag)//如果风速键按过后制冷键才起作用
{
//if(error_flag==1)//欠压故障出现
//SW_N_ERR_TIME=5;
KeyFlag=1;
con4_flag=~con4_flag;//制冷控制
make_cool();
}
}
make_cool_flag=0;//强冷标志清0,不用强冷
}
make_cool_time=5;//制冷键按下后,5S计时装载,如果5S后依然按下,则为强冷
show_clock_flag=0;
set_time=0;
break;
case0:
//风速键
if(((CON3)&&(CON1)&&(CON2))||(!
CON1))
{
CON3=ON;
CON1=OFF;
}
else
if(!
CON3)
{
CON3=OFF;
CON2=ON;
}
else
if(!
CON2)
{
CON2=OFF;
CON1=ON;
}
mec_flag=1;
set_time=0;
show_clock_flag=0;
break;
case2:
//-
DEC_FLAG=1;//-键按下标志置1
set_time_delay=10;//设定温度-键按下后持续时间
break;
case3:
//+
ADD_FLAG=1;//+键按下标志置1
set_time_delay=10;//设定温度+键按下后持续时间
break;
case5:
//新风键
CON5=~CON5;
set_time=0;
show_clock_flag=0;
break;
default:
show_clock_flag=0;
break;
}
while(!
KEY_INPUT)//按键按下没松开时执行的程序
{
WDT_CONTR=0x3c;//喂狗
led_clear();//清LED显示
if((show_clock_flag)&&(!
show_clock_delay))//如果+-两键同时按下,并且延时后
show_time();//显示开机总时间
else
show_temp_err();//显示温度或故障信息
led_clear();//清LED显示
if(mec_flag)//强冷功能,制冷键按下5秒才起作用
{
if(error_flag<2)//温度传感器没有出现短路或断路故障时,制冷才起作用
{
if((k==1)&&(!
make_cool_time))
{
//con4_flag=1;
//CON4=ON;
if((!
TempBit)&&(!
KeyFlag))
{
make_cool_flag=1;//强冷标志置1,开强冷功能
TempBit=1;
con4_flag=~con4_flag;//制冷控制
make_cool();
}
make_cool();
}
}
}
if(!
clock_flag)//如果+-键没有同时按下,不需显示时间
{
if(!
set_time_delay)//如果设定温度+-键按下过了1秒
{
if(k==2)
{
if(set_temp>16)
set_temp--;
set_time=4;//按键放开后继续显示的时间
set_time_delay=3;//延时后再减
}
if(k==3)
{
if(set_temp<28)
set_temp++;
set_time=4;//按键放开后继续显示的时间
set_time_delay=3;//延时后再加
}
key_flag=1;
}
}
if((k==2)||(k==3))//检测是否+-两键同时按下程序
{
led_clear();//清LED显示
i=0x7f;
for(j=0;j<8;j++)
{
i<<=1;
LED