收藏 分享(赏)

空调控制电路.docx

上传人:HR专家 文档编号:12011806 上传时间:2021-07-24 格式:DOCX 页数:21 大小:214.84KB
下载 相关 举报
空调控制电路.docx_第1页
第1页 / 共21页
空调控制电路.docx_第2页
第2页 / 共21页
空调控制电路.docx_第3页
第3页 / 共21页
空调控制电路.docx_第4页
第4页 / 共21页
空调控制电路.docx_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、基于AVR单片机的汽车空调控制系统摘要:AVR单片机功能强大,用AVR单片机开发各种控制系统只需很少的外部器件就可以实现强大的功能。本文介绍的就是利用Atmega16、CodeVisionAVR C开发环境、Proteust真软件开发汽车空调自动控制系统。关键字:AVR单片机、空调自动控制、CodeVisionAVR C、Proteus仿真1前言Atmega16是美国ATMEL公司的高档8位单 片机,采用Flash存储器,可以才察写10000次以上、 内部集成E2PROM、四通道PWM、集成8路10 位精度ADC、片内经过标定的RC振荡器、采用 精简指令集,具有32个通用工作寄存器,具有只 需

2、两个时钟周期的硬件乘法器,运算速度快等。 由于其集成度高、处理速度快,使得利用AVR单片机进行系统开发只需很少(甚至没有)的外 部器件即可实现强大的功能, 逐渐在各种场合得 到广泛应用,取代其它 8位单片机。利用它来开 发汽车空调控制系统, 只需热电阻、液晶显示模 块和一些继电器及其驱动芯片即可实现。2工作原理本系统可以分为五大部分:热电阻温度采 集、运行状态显示、继电器控制、键盘输入、风 向步进电机控制。2.1热电阻温度采集热电阻传感器以其温度特性稳定、测量精用。采用Pt1000热电阻作为温度传感器的测量电路原理图如图1所示。热电阻Rt与三个电阻接 成电桥。当温度变化时,使得运算放大器的同相

3、 输入端的电位发生变化, 经过运算放大器放大之 后输入到Atmega16单片机进行AD转换。由于单 片机采用5V电压作为ADC的参考电源,而电桥 在温度变化为0100 C时,输出电压范围为00.7V,所以确定运算放大电路的放大倍数为7,以获得最佳的测量结果。运算放大电路的电阻按以下公式确定:什8=匕=7 R4 UiR =R5R取R5 =6k,R =1k,& =860Q。输出电压变化范围大致是05V。由于ADC的转换精度为10,故当输入电压为图1 Pt1000热电阻温度测量电路5V7U ,(1023Ro Rt12)(1)度高的特点,在大型中央空调得到了广泛的应其中,N ADC数据寄存器的值,U电

4、桥电源电压,R0 Pt1000在0 C时的电阻1000G。Pt1000热电阻的阻值按以下公式计算:Rt = R0(1 +A t + B t2)(2)5V时,其采样值为1023,根据电桥平衡原理,可 得到以下公式:Rt温度为t时钳热电阻的电阻值,Q;t温度,C;R0 Pt1000在0 C时的电阻1000建。A 分度常数,A = 0.0038623139728B 分度常数,B = -0.00000065314932626用 Visual Basic.Net 根据以上公式(1)、(2)生成用N来查找温度t的程序表格,其代码如下:Private Sub Pt1000()MeCursor = Curso

5、rs.WaitCursortxtTab.Clear()Dim U As Integer = 9 电桥电源电压热电阻0度时的电阻值Dim Pt1000_R0 As Integer = 1000Dim n As IntegerDim sngT As SingleDim sngRt As SingletxtTab.AppendText(const float Pt1000Tab口= &Chr(13) & Chr(10)For n = 0 To 1023sngRt = (10000 * n + 7161000 * U) / (7161 * U-10 * n)sngT = (-const_A + Sqr

6、t(const_A A 2 - 4 * const_B* (1 - sngRt / Pt1000_R0) / (2 * const_B)If n 1023 ThentxtTab.AppendText(Format(Abs(sngT), 0.0)& , /* & n & */)ElsetxtTab.AppendText(Format(Abs(sngT), 0.0)& /* & n & */ & Chr(13) & Chr(10) &;)End IfIf n Mod5 = 0 ThentxtTab.AppendText(Chr(13) & Chr(10)End IfNexttxtTab.Selec

7、tAll()txtTab.Copy()MeCursor = Cursors.DefaultEnd Sub生成的程序常数表格(1024个值)部分如下:const float Pt1000Tab口=63.4, /* 696 */63.5, /* 697 */99.3, /* 1022 */99.4/* 1023 */);2.2 运行状态显示本系统采用一块16X4的字符型液晶模块, 这种类型的LCD应用很广泛,其控制驱动主芯片 为HD44780及其扩展驱动芯片 HD44100 (或兼容 芯片),少量阻、容元件,结构件等装配在PCB板上而成。字符型液晶显示模块目前在国际上已 经规范化,无论显示屏规格如

8、何变化,其电特性和接口形式都是统一的。因此只要设计出一种型号的接口电路,在指令设置上稍加改动即可使用 各种规格的字符型?晶显示模块。odeVisionAVR 集成开发环境集成这种类型LCD的函数,可方便实现LCD的读写,其部分函数及功能简单介绍如 下,更详细的资料可查阅各种文献。函数原型: void lcd_init(unsigned char lcd_columns)功能:初始化LCD模块,清屏并把显示坐标设定在 0歹U0 行。LCD模块的列必须指定(例如:16)。这时不 显示光标。在使用其它高级 LCD函数前,必须先 调用此函数。函数原型:void lcd_clear(void)功能:清屏

9、并把显示坐标设定在0歹U0行。函数原型: void lcd_gotoxy(unsigned char x, unsigned char y) 功能:设定显示坐标在x歹Uy行。歹U、行。函数原型:void lcd_putchar(char c) 功能:在当前坐标显示字符 c o 函数原型: void lcd_puts(char *str) 功能:在当前坐标显示 SRAM中的字符串str o 函数原型:void lcd_putsf(char flash *str)功能:在当前坐标显示FLASH中的字符串str。在对LCD进行写入显示数据之前,需要对它 进行初始化,设定显示参数。0.0, /* 0

10、*/ 0.1, /* 1 */0.2, /* 2 */0.2,#include 键盘的行由PD0、PD1、PD2 (使能内部上拉电阻)控制,而列则由 PC3、PC4、PC5控制,/*使用PORTB连接LCD模块*/#asm.equ _lcd_port=0x18 ;PORTB #endasm void main(void) 定义字符数组 uchar arr5;初始化,指定列数为16 lcd_init(16);设定显示坐标为(0,1) lcd_gotoxy(0,1);/*在(0,1)显示字符串,注意:此字符串存储在Flash只读 存储器中*/lcd_putsf(Run Mode:);/*调用“浮点

11、数转换成字符串”函数, 函数原型: void ftoa(float n, unsigned char decimals, char *str) data为浮点数*/ftoa(data,1,arr);设定显示坐标为(0,2) lcd_gotoxy(0,2);显示RAM中字符串数组arr的内容 lcd_puts(arr);while(1); 2.3 继电器控制Atmega16输出缓冲器具有对称的驱动特性, 可以输出和吸收大电流,直接驱动LED,但是仍然不能直接驱动更大电流的器件,如继电器, 所以必须接入较大功率的驱动器。常用的驱动方 法有74系列功率集成电路驱动、MOC系列光耦 合过零触发双向晶闸

12、管驱动、固态继电器驱动 等。本系统采用ULN2003芯片来驱动继电器。 其内部结构如图2所示。ULN2003是达林顿阵列,是专门用来驱动继 电器的芯片,甚至在芯片内部做了一个消线圈图2 ULN2003内部结构图反电动势的二极管。ULN2003的输出端允许通过IC 电流200mA ,饱和压降 VCE约1V左右, 耐压BVCEO约为36V。采用集电极开路输出, 输出电流大,故可以直接驱动继电器或固体继电 器(SSR)等外接控制器件,也可直接驱动低压灯 泡,共可以驱动7路,减少了电路板的连线数量, 成本较低,广泛应用于各种工控板,其驱动原理如图3所示。COMMON N *OINPUT_t 7 ”明开

13、II? CVS!II II I14 * * OGND图3驱动原理压缩机离合器继电器采用RS触发器和 ULN2003 一起控制,这样做的好处是:当单片机 受到外界干扰而不断复位或看门狗超时复位时, 保证压缩机始终处于开启或关闭状态,有助于延长压缩机的寿命。2.4 键盘输入本系统采用3X3矩阵式键盘。通过键盘可以 控制系统工作方式(关闭、送风、制冷) 、风向 步进电机(水平送风、倾斜送风、扫风) 、温度 设定等。如图4所示。采用程序扫描的方式识别键码,其工作过程如下:(1)判断键盘中有无键按下。 通过以下代码实现:PORTC&=0x20;认为是抖动。通过以下代码实现:delay();if(PIND

14、&0x07)!=0x07) / (3)判断键码。以下是识别为“Key2-3”(第2行第3列)的程序代码,其它按健类似。江 二 g,PAA-ADC!PM0口 UPM ADC4 PW-fADS:3 PWADC2 PAiADCa WDMXTJUJQURESETif(PIND&0x07)!=0x07) 首先置PC5为“0”,再判断PD0、PD1、PD2是否都为“1”。如果全为“ 1”,则表明第3列无键按下,否则有键按下,进入消除抖动程序;再置 PC4为“ 0”,再判断PD0、PD1、PD2是否都为“1”。如果全为“ 1”,则表明第2列无键按下,否则有键按下,进入消除抖动程序;再置 PC3 为0,再判断

15、PD0、PD1、PD2是否者B为“1”。如果全为“ 1”,则表明第1列无键按下,否则有键按下,进入消除抖动程 序。FDLrTXDPG7g5C2: POLTTOSCI 二二一二 如磔F 二三 ggc PCirSD* POirSCL图4 3X 3矩阵式键盘(2),消除抖动。当发现有键按下时,延时- 段时间再判断键盘状态,若仍有键保持按下状态,则可以确定有键按下,否则if(PIND&0x07)=0x05) / Key 2-3/ uchar key_num=K23;/等待按键释放while(PIND&0x07)=0x05);判断换气风机是否在运行 if(ventilator_state=1) vent

16、ilator_state=0;关闭换气风机 stop_ventilator();/ 在 LCD 上的(12,3)显示 “ OFF ” lcd_gotoxy(12,3);lcd_putsf(OFF); else ventilator_state=1; 开启换气风机 start_ventilator();/在 LCD 上的(12,3)显示 “ Run” lcd_gotoxy(12,3);lcd_putsf(Run); return;/识别完毕,返回主程序 2.5 风向步进电机控制Atmega16的定时器能够输出PWM,编程简单,精度高。编程让定时器2工作于相位可调模 式,产生高精度的PWM波形输出

17、,调节占空比, 以达到控制步进电机不同转角的目的。初始化设置如下:ASSR=0x00;/* 相位可调PWM模式,比较匹配时清零OC2,计数为0xff时置位OC2 */TCCR2=0x64;TCNT2=0x00;高开发效率、降低投资,在没有硬件的情况下让 开发人员能像Pspice仿真模拟/数字电路那样仿 真MCU及外围电路。OCR2=0x00;使能匹配中断TIMSK=0x80;PawdProteus提供的可调电阻是 “十级可调”而不是“无级可调”,所以本系统采用三个可调电阻模拟Pt1000热电阻,以实现“粗调”、“中调”、“细图5相位可调PWM模式的时序图图6水平送风模式下的PWM波形图6倾斜送

18、风卞M式下的PWM波形调”,更真实反映热电阻阻值的细微变化。图7换气风机、压缩机、蒸发器风机处于工作状态fTEXtT:28, 1 Set:25Run Plode: CoolBlow (lode!riodelUentilator: Runpp pppll ppZRg 寸竺 NlO M 6QOQQQQQQ UJ 比比图8 LCD显示结果3仿真Proteus是目前最好的模拟单片机及外围器件的仿真软件,可以仿真51系列、AVR, PIC等常用的 MCU及其外围电路,如LED、LCD、RAM、ROM、键盘、马达、继电器、 AD/DA、部分SPI器件、部分I 2c(TWI )器件、74系列、COMS 40

19、00系列芯片等。利用Proteus可以大大提4.结语本系统采用AVR单片机实现汽车空调的自动控制(双位控制),具有电路结构简单、分立元件少、系统界面友好、操作简单等优点,能满足一般精度要求的公交车空调的自动控制。参考文献1 ATMEL 公司的 ATmega16产品文档(http:/ )2刘济CodeVisionAVR C库函数介绍3王幸之 钟爱琴 王雷 王闪AT89系列单片机原理与接口技术北京航空航天大学出版社2004附:电路原理图和程序源代码/*Project : 汽车空调控制系统Version : 1Date : 2005-12-13Author : BennyBlog : http:/C

20、ompany : 509Chip type : ATmega16L Program type : ApplicationClock frequency : 8.000000 MHz Memory model : SmallExternal SRAM size : 0 Data Stack size : 256*/*#include #include #include Pt1000Tab.h#include inc.h #asm. equ _lcd_port =0x18 ; PORTB#endasm#include bit boolean ;uchar ventilator_state ;uch

21、ar fan ;uchar blow ;uchar run_mode ;uchar temp ;uchar setting_value ;interrupt TIM2_COMPvoid timer2_comp_isr ( void )/产生pwM制步进电机if (fan =1)OCR2=64;else if (fan =2)OCR2=128;#define FIRST_ADC_INpUT 0 / 第一通道#define LAST_ADC_INpUT 1 / 最后一通道 ,最大值为 7, 共8个通道 unsigned int adc_data LAST_ADC_INpU- FTIRST_ADC_

22、INpU+T1;#define ADC_VREF_TYPE 0x40/ ADC 中断服务程序/ 自动扫描模拟量输入端口,interrupt ADC_INT void adc_isr ( void )register static unsigned char input_index =0;/ 读取转换结果adc_data input_index = ADCW;/ 选择转换通道if (+input_index ( LAST_ADC_INPU-FTIRST_ADC_INPU)Tinput_index =0;ADMU=X(FIRST_ADC_INPU|TADC_VREF_TY)P+Einput_ind

23、ex ;启动AD转换ADCSR|=A0x40;void main ( void )float current_temp ; / 保存当前温度/ Port A 初始化/ Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In/ State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORT=A0x00;DDR=A0x00;/ Port B 初始化/ Func7=In Func6=In Func5=In Func4=In

24、Func3=In Func2=In Func1=In Func0=In/ State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORT=B0x00;DDR=B0x00;/ Port C 初始化/ Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In/ State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORT=C0x38;

25、DDR=C0x38;/ Port D 初始化/ Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In/ State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORT=D0x1f;DDR=D0xF8;/用T2产生PWM制风向步进电机/ Timer/Counter 2 initialization/ Clock source: System Clock/ Clock value: Timer 2 Stopped/ Mo

26、de: Normal top=FFh/ OC2 output: DisconnectedASSR=0x00;TCCR=20x64;TCNT2=0x00;OCR=20x00;/ Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x80;/ Analog Comparator initialization/ Analog Comparator: Off/ Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80;SFIOR=0x00;/ ADC initializa

27、tion/ ADC Clock frequency: 125.000 kHz/ ADC Voltage Reference: AVCC pin/ ADC Auto Trigger Source: Free Running ADMU=XFIRST_ADC_INPU| TADC_VREF_TY;PE ADCSR=A0xEE;SFIOR&=0x1F;/ LCD module 初始化 lcd_init ( 16);/ 开启全局中断#asm(sei)dis_character ();setting_value =25;run_mode=0;ventilator_state =0;lcd_gotoxy (

28、 12, 3);lcd_putsf ( OFF);while ( 1)scan_key (); / 扫描键盘blow_mode (); / 设定送风方式display (); / 显示状态参数if ( run_mode=2)current_temp =Pt1000Tab adc_data 0;if ( current_temp setting_value )stop_compressor ();/lcd_gotoxy(10,1);/lcd_putsf(Blast);elsestart_compressor();/lcd_gotoxy(10,1);/lcd_putsf(Cool);void st

29、art_compressor ( void )/StartPORTD|= 0x18;PORTD&=0x10;PORTD|= 0x18;void stop_compressor ( void )/StopPORTD|= 0x18;PORTD&=0x08;PORTD|= 0x18;void start_ventilator( void ) PORTD|= 0x40; / 换气风机运行void stop_ventilator ( void )PORTD&=0x40; / 换气风机停止void start_evaporator_fan ( void )PORTD|= 0x20; / 蒸发器风机运行vo

30、id stop_evaporator_fan ( void )PORTD&=0x20; / 蒸发器风机停止/* 键盘扫描 */void scan_key ( void )/*K11K12K13K21K22K23K31K32K33*/K13 K23 K33PORT&C=0x20;if ( PIND&0x07)!= 0x07)delay ();if ( PIND&0x07)!= 0x07)if ( PIND&0x07)=0x06) /Key 3-3/uchar key_num=K33;while ( PIND&0x07)=0x06); switch ( blow)case 0:blow =1;lc

31、d_gotoxy( 10, 2);lcd_putsf( Mode0);break;case 1:blow =2;lcd_gotoxy( 10, 2);lcd_putsf( Mode1);break;case 2:blow =3;lcd_gotoxy( 10, 2);lcd_putsf( Mode2);break;case 3:blow =0;lcd_gotoxy( 10, 2);lcd_putsf( Mode3);break;return ;if ( PIND&0x07)=0x05) /Key 2-3/uchar key_num=K23;while ( PIND&0x07)=0x05);if

32、( ventilator_state=1)ventilator_state=0;stop_ventilator();lcd_gotoxy( 12, 3);lcd_putsf( OFF);elseventilator_state=1;start_ventilator();lcd_gotoxy( 12, 3);lcd_putsf( Run); return ;if ( PIND&0x07)=0x03) /Key 1-3/uchar key_num=K13;while ( PIND&0x07)=0x03); switch ( run_mode) case 2: / 关闭模式stop_evaporat

33、or_fan();stop_compressor ();lcd_gotoxy( 10, 1);lcd_putsf( OFF );run_mode=0;break ;case 0:/ 送风模式start_evaporator_fan();stop_compressor ();lcd_gotoxy( 10, 1);lcd_putsf( Blast );run_mode=1;break ;case 1:/ 制冷模式start_evaporator_fan();start_compressor();lcd_gotoxy( 10, 1);lcd_putsf( Cool );run_mode=2;brea

34、k;return ;PORT|C= 0x20;/K12 K22 K32PORT&C=0x10;if ( PIND&0x07)!= 0x07)if ( PIND&0x07)=0x06) /Key 3-2/uchar key_num=K32;while ( PIND&0x07)=0x06); return ;if ( PIND&0x07)=0x05) /Key 2-2/uchar key_num=K22;while ( PIND&0x07)=0x05);if ( setting_value =28)setting_value=28;else setting_value+; return ;PORT

35、|C= 0x10;/K11 K21 K31PORT&C=0x08;if ( PIND&0x07)!= 0x07)delay ();if ( PIND&0x07)!= 0x07)if ( PIND&0x07)=0x06) /Key 3-1/uchar key_num=K31;while ( PIND&0x07)=0x06); return ;if ( PIND&0x07)=0x05) /Key 2-1/uchar key_num=K21;while ( PIND&0x07)=0x05); return ;if ( PIND&0x07)=0x03) /Key 1-1/uchar key_num=K

36、11;while ( PIND&0x07)=0x03); return ;PORT|C= 0x08;void blow_mode( void )switch (blow)case 0:fan =0;break ;case 1:fan =1;break ;case 2:fan =2;break ;case 3:temp +;if ( temp=5)boolean =boolean;if ( boolean =1)fan =1;elsefan =2;break ;void delay ( void )uint i ,j ;for ( i =0; i 10; i +)for (j =0; j 10;

37、 j +)void dis ( uchar channel , uchar x , uchar y ) uchar arr 5;/*根据当前采样值进行查表, Pt1000Tab 程序常数表格事先用 Visual Basic.Net 生成 , 共有 1024 个值*/ftoa ( Pt1000Tab adc_data channel , 1, arr );lcd_gotoxy (x, y);lcd_puts (arr );void display ( void )uchar setting 3;dis (0, 2, 0);itoa ( setting_value , setting );lcd_

38、gotoxy ( 12, 0);lcd_puts ( setting );void dis_character ( void )lcd_gotoxy ( 0, 0);lcd_putsf ( T: );lcd_gotoxy ( 8, 0);lcd_putsf ( Set: );lcd_gotoxy ( 0, 1);lcd_putsf ( Run Mode: );lcd_gotoxy ( 10, 1);lcd_putsf ( OFF );lcd_gotoxy ( 0, 2);lcd_putsf ( Blow Mode: );lcd_gotoxy ( 10, 2);lcd_putsf ( Mode0

39、);lcd_gotoxy ( 0, 3);lcd_putsf ( Ventilator: );/* “Pt1000tab.h ”文件内容数组的值为温度值,注释为ADCWF存器的值(采样值),与数组的索引index对应.例如:1.8, /* 22 */ ,则Pt1000Tab22 =1.8,表示当ADC惭存器的值(采样值)为22 时,对应温度为: 1.8 C查表方法: ftoa ( Pt1000Tab adc_data 0, 1, arr );功能:将通道0 的采样值 adc_data0 作为索引查表,得到对应的温度值(浮点数),再转换成字符串(保留一位小数)形式,存入 arr 字符数组中*/c

40、onst float Pt1000Tab =0.0,/* 0 */0.1 ,/* 1 */ 0.2 ,/* 2 */0.2,/* 3 */ 0.3, /* 4 */ 0.4,/* 5*/0.5,/* 6 */ 0.6, /* 7 */ 0.6,/* 8 */ 0.7, /* 9 */ 0.8, /* 10 */0.9,/* 11 */1.0,/* 12 */ 1.0,/* 13 */1.1,/* 14 */ 1.2, /* 15 */1.3,/* 16 */1.4,/* 17 */ 1.5,/* 18 */1.5,/* 19 */ 1.6, /* 20 */1.7,/* 21 */1.8 ,/

41、* 22 */ 1.9,/* 23 */1.9,/* 24 */ 2.0, /* 25 */2.1 ,/* 26 */2.2,/* 27 */ 2.3 ,/* 28 */2.3,/* 29 */ 2.4, /* 30 */2.5,/* 31 */2.6,/* 32 */ 2.7,/* 33 */2.7,/* 34 */ 2.8, /* 35 */2.9,/* 36 */3.0,/* 37 */ 3.1 ,/* 38 */3.2,/* 39 */ 3.2, /* 40 */3.3,/* 41 */3.4,/* 42 */ 3.5 ,/* 43 */3.6,/* 44 */ 3.6, /* 45 */3.7,/* 46 */3.8,/* 47 */ 3.9 ,/* 48 */4.0,/* 49 */ 4.1 , /* 50 */4.1 ,/* 51 */4.2,/* 52 */ 4.3 ,/* 53 */4.4,/* 54 */ 4.5, /* 55 */4.5,/* 56 */4.6,/* 57 */ 4.7,/* 58 */4.8,/* 59 */ 4.9

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 通信信息 > 综合/其他

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报