客车空调控制系统_汽车自动空调控制系统

2020-02-27 其他范文 下载本文

客车空调控制系统由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“汽车自动空调控制系统”。

客车空调系统

● 空调系统的组成空调系统主要由压缩机、冷凝器、蒸发器、膨胀阀、干燥储液器及管路等组成 ● 空调制冷原理

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”

unsigned char KeyFlag;const unsigned int TempTable[] = { //0 14230,13600,13010,12450,11910,11400,10920,10460,10020,9596, //10 11 9197,8817,8454,8108,7779,7467,7164,6877,6603,6342, //20 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 };

void delay(unsigned int n){ unsigned int i;for(i = 0;i

;} } /* void Ldelay(unsigned char n){ unsigned char i,j,k;for(i = 0;i

for(j = 0;j

{

for(k = 0;k

{WDT_CONTR = 0x38;}

} } } */

void trans_led_data(unsigned char DAT){

unsigned char Data[17] = {

//0 1

//0 1

H

I

L

o

E

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x89,0xf9,0xc7,0xa3,0xff,0x86,0xaf };unsigned char i,j;i = Data[DAT] & dp;CY = 0;for(j = 0;j

r {

i

LED_DATA = CY;

LED_CLK = 0;

LED_CLK = 1;} } void show_temp(){ unsigned char a,b,c;

if(!set_time){

if(temp_num > 59)//温度超过60度

{

a = 14;//不显示

c = 10;//显示字母“H”

b = 11;//显示字母“I” //

flag = 0;//不显示点“.”

}

else if(temp_num

{

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;//喂狗 }

void show_error(unsigned char num){ unsigned char i;

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;//喂狗 }

void show_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;

}

} }

void make_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

{

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;//关了制冷便不管是否欠压都不显示出错信息

}

} } }

void show_time(){ unsigned char a,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;//喂狗 }

void led_clear()//清LED显示 { LED1_ON = 0;LED2_ON = 0;LED3_ON = 0;

dp = 0xff;

trans_led_data(14);}

unsigned char check_key(){ unsigned char i,j;i = 0x7f;for(j = 0;j

i

LED_DATA = CY;

LED_CLK = 0;

LED_CLK = 1;

if(!KEY_INPUT)

{

delay(200);

if(!KEY_INPUT)

{

break;

}

} } return j;} void active_key(){ bit TempBit = 0;unsigned char i,j,k;

//check_err();led_clear();//清LED显示

j = check_key();

k = j;

switch(j){

case 1: //制冷键

if(((temp_w_num >= 4)&&(temp_s_num >= 4)&&(temp_num>set_temp))||(con4_flag))

{

if(error_flag

{

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;

case 0: //风速键

}

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;case 2: // ADC_G_DATA);Rwt =(ADC_W_DATA * R)/(UvccADC_S_DATA);

for(i = 1;i

active_key();

if(LED_INIT_FLAG)//刚开机等到HI显示过去,显示稳定后再显示,去除开机时显示“HI”现象

show_temp_err();//显示温度或故障信息

j = TempTable[i + 1];

k = TempTable[i];

TtemNUM1 =(j / 2)+(k / 2);

if((Rgt j))

{

temp_num = i;

if(Rgt

temp_dot = 5;

else

temp_dot = 0;

}

if((Rwt j))

temp_w_num = i;

if((Rst j))

temp_s_num = i;} }

void check_err()//检测故障程序 {

if((ADC_G_DATA >5000)||(ADC_W_DATA > 5000)||(ADC_S_DATA > 5000))障 5000

{

if(ERR_ACT_FLAG!=3)

{

ERR_ACT_DELAY = 5;

ERR_ACT_FLAG = 3;//出错

}

if(!ERR_ACT_DELAY)

error_flag = 3;//出错标志置3,将显示“Er3”

}

else

{

if((ADC_G_DATA

{ //

error_flag = 2;//出错标志置2,将显示“Er2”

if(ERR_ACT_FLAG!=2)

{

ERR_ACT_FLAG = 2;//出错

ERR_ACT_DELAY = 5;

}

if(!ERR_ACT_DELAY)

error_flag = 2;

}

else

{

if((SW_N)&&(!CON4))//高低压故障

{ //

error_flag = 1;//出错标志置1,将显示“Er1”

if(ERR_ACT_FLAG!=1)

{

ERR_ACT_FLAG = 1;//出错

ERR_ACT_DELAY = 5;

}

if(!ERR_ACT_DELAY)

error_flag = 1;

}

//温度传感器开路故//温度传感器短路故

else

{

if(!SW_N)

{

//

error_flag = 0;//没有故障

if(ERR_ACT_FLAG!=0)

{

ERR_ACT_FLAG = 0;//没错

ERR_ACT_DELAY = 5;

}

if(!ERR_ACT_DELAY)

error_flag = 0;

}

}

}

} }

unsigned long int ADC_active(void){ unsigned char i;unsigned long int adc_num,adc_num1,adc_num2;adc_num2 = 0;for(i = 0;i

ADC_DATA = 0;//清空ADC数据

ADC_CONTR |= 0x08;//启动ADC转换

while(!(ADC_CONTR & 0x10));//等待ADC转换完成 00010000,ADC_FLAG,ADC转换完成标志位,完成后为1;// {WDT_CONTR = 0x38;} //喂狗}

ADC_CONTR &= 0xe7;//清0 ADC_FLAG,ADC_START 位,停止ADC转换

adc_num1 = ADC_DATA;

adc_num2 = adc_num2 + adc_num1;//保存AD转换结果

} if(LED_INIT_FLAG)//刚开机等到HI显示过去,显示稳定后再显示,去除开机时显示“HI”现象

{

show_temp_err();//显示温度或故障信息

} adc_num = adc_num2 / 8;return adc_num;}

void ADC_control(void){ unsigned long int adc_mid_data;

//-------------ADC----------------------

ADC_CONTR |= 0x80;//开ADC电源

delay(30);

//------------通道0--------------------ADC_CONTR = 0xe0;//1,11,00,000 转换速度(11)210, ADC通道(000)0 delay(3);adc_mid_data = ADC_active();ADC_G_DATA =(adc_mid_data*Uvcc)/256;//----------

//------------通道1--------------------ADC_CONTR = 0xe1;//1,11,00,001 转换速度(11)210, ADC通道(001)1 delay(3);adc_mid_data = ADC_active();ADC_W_DATA =(adc_mid_data*Uvcc)/256;//----------//------------通道2--------------------ADC_CONTR = 0xe2;//1,11,00,010 转换速度(11)210, ADC通道(010)2 delay(3);adc_mid_data = ADC_active();ADC_S_DATA =(adc_mid_data*Uvcc)/256;//----------ADC_CONTR &= 0x7f;//关ADC电源 }

main(){ unsigned char i;

//--I/O口功能设置---P1M0 = 0x87;P1M1 = 0x78;

P2M0 = 0x8c;P2M1 = 0x70;

P3M0 = 0xdf;P3M1 = 0x20;

led_clear();//清LED显示 //---------------------

P1 = 0x78;//CON1~5断开

P2 = 0x40;P3 = 0x00;CON4 = OFF;LED_INIT_FLAG=0;//用于开机延时片刻,消除“HI”显示

mec_flag = 0;//风速键按下指示标志

set_temp = 20;set_time = 0;

DEC_FLAG = 0;//-键按下标志清0 ADD_FLAG = 0;//+键按下标志清0 set_time_delay = 0;make_cool_time = 0;show_clock_delay = 0;//+-键同时被按下后,到显示出时间需要的延时清0 con4_flag = 0;make_cool_flag = 0;//强冷标志清0,不用强冷

error_flag = 0;SW_N_FLAG = 0;ERR_ACT_DELAY=0;ERR_ACT_FLAG = 0;SW_N_ERR_TIME = 0;show_clock_flag = 0;//显示时钟标志

key_flag = 0;//--定时器设置---TMOD = 0x10;TH1 = 0x7d;//0.1s TL1 = 0xcb;EA = 1;ET1 = 1;TR1 = 1;

KeyFlag = 0;count = 0;sec_count = 0;min_count = 0;hou_count = 0;clock_time = 0;//---------------------

WDT_CONTR = 0x3c;//看门狗设置

while(1){

if(!LED_INIT_FLAG)//刚开机等到HI显示过去,显示稳定后再显示,去除开机时显示“HI”现象

{

for(i = 0;i

{

led_clear();//清LED显示

ADC_control();

check_temp_num();

check_err();//检测故障程序

}

}

LED_INIT_FLAG = 1;

ADC_control();//AD测温

check_err();//检测故障程序

if(!count)//每秒测一次温度

{

ADC_control();

check_temp_num();

check_err();//检测故障程序

show_temp_err();//显示温度或故障信息

}

active_key();

make_cool();

show_temp_err();//显示温度或故障信息

WDT_CONTR = 0x3c;//喂狗

} }

void it_timer1(void)interrupt 3 { TH1 = 0x7d;TL1 = 0xcb;

WDT_CONTR = 0x3c;

if(count == 0)

flag = 0;if(count == 5)

flag = 1;

if(set_time_delay)

set_time_delay--;

if(ERR_ACT_DELAY)

ERR_ACT_DELAY--;// if(SW_N_ERR_TIME)// SW_N_ERR_TIME--;

if(count >= 10)

//

} {

count = 0;sec_count ++;

if(set_time)set_time--;if(show_clock_delay)//+-键同时被按下后,到显示出时间需要的延时

show_clock_delay--;

if(make_cool_time)

make_cool_time--;

if(sec_count == 60){

sec_count = 0;

min_count ++;

if(min_count ==60)

{

min_count = 0;

hou_count ++;

if(hou_count == 10)

{

hou_count = 0;

clock_time += 10;

}

}

} delay_num--;} else count ++;

《客车空调控制系统.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
客车空调控制系统
点击下载文档
相关专题 汽车自动空调控制系统 控制系统 客车 空调 汽车自动空调控制系统 控制系统 客车 空调
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文