毕业论文——基于AVR单片机的汽车空调控制系统.doc

上传人:滴答 文档编号:1278941 上传时间:2019-01-26 格式:DOC 页数:22 大小:402.50KB
下载 相关 举报
毕业论文——基于AVR单片机的汽车空调控制系统.doc_第1页
第1页 / 共22页
毕业论文——基于AVR单片机的汽车空调控制系统.doc_第2页
第2页 / 共22页
毕业论文——基于AVR单片机的汽车空调控制系统.doc_第3页
第3页 / 共22页
毕业论文——基于AVR单片机的汽车空调控制系统.doc_第4页
第4页 / 共22页
毕业论文——基于AVR单片机的汽车空调控制系统.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、 基于 AVR 单片机的汽车 空调控制 系统 摘要 : AVR单片机 功能强大 , 用 AVR单片机开发各种控制系统只需很少的外部 器件就可以实现强大的功能。本文介绍的就是利用 Atmega16、 CodeVisionAVR C开发环境、 Proteus仿真 软件开发 汽车空调 自动 控制 系统。 关键字 : AVR单片机、 空调 自动 控制 、 CodeVisionAVR C、 Proteus仿真 1 前言 Atmega16是美国 ATMEL公司的高档 8位单片机 , 采用 Flash存储器,可以擦写 10000次以上、内部集成 PROME2 、 四通道 PWM、 集成 8路 10位精度 A

2、DC、 片内经过标定的 RC振荡器 、 采用精简指令 集, 具有 32个通用工作寄存器 , 具有 只需两个时钟周期的硬件乘法器 , 运算速度快等 。由于其 集成度高、 处理 速度快 , 使得利用 AVR单片机进行系统开发只需很少(甚至没有)的外部器件 即可实现强大的功能, 逐渐 在各种场合 得到广泛应用,取代其它 8位单片机 。 利用它来开发汽车空调控制系统 ,只需 热电阻、 液晶显示模块和一些继电器及其驱动芯片即可实现。 2 工作原理 本系统可以分为 五 大部分: 热电阻温度采集、运行状态显示、 继电器控制、键盘输入 、 风向步进电机控制 。 2.1 热电阻温度采集 热电阻传感器以其温度 特

3、性稳定、测量精 图 1 Pt1000热电阻温度测量电路 度 高 的特点,在大型中央空调得到了广泛的应用 。 采用 Pt1000热电阻作为温度传感器的测量电路原理图 如图 1 所示。 热电阻 Rt与三个电阻接成电桥 。当温度变化时, 使得运算放大器的同相输入端的 电位发生变化,经过运算放大器 放大之后输入到 Atmega16单片机进行 AD转换。由于 单片机采用 5V电压作为 ADC的参考电源, 而电桥在温度变化为 0 100 C时,输出电压范围为0 0.7V, 所以确定运算放大电路的放大倍数为7,以 获 得最佳的测量结果。 运算放大电路的电阻按以下公式确定: 71 045 iuuRR 456

4、/RRR 取 8 6 0,1,6 645 RkRkR 。 输出电压变化范围大致是 0 5V。 由于 ADC的转换精度为 10,故当输入电压为5V时,其 采样值为 1023,根据电桥平衡原理,可得到以下 公式: )21(1 0 2 375 0 tt RR RUNV ( 1) 其中, N ADC数据寄存器的值, U 电桥电源电压, 0R Pt1000在 0 C时的电阻 1000 。 Pt1000 热电阻 的阻值按以下公式计算: : )1( 20 tBtARRt ( 2) Rt 温度为 t 时铂热电阻的电阻值, ; t 温度, ; 0R Pt1000在 0 C时的电阻 1000 。 A 分度常数 ,

5、 A 0.0038623139728 B 分度常数 , B -0.00000065314932626 用 Visual Basic.Net根据以上公式( 1)、( 2)生成用 N来查找温度 t的程序表格,其代码如下: Private Sub Pt1000() Me.Cursor = Cursors.WaitCursor txtTab.Clear() Dim U As Integer = 9 电桥电源电压 热电阻 0度时的电阻值 Dim Pt1000_R0 As Integer = 1000 Dim n As Integer Dim sngT As Single Dim sngRt As Sin

6、gle txtTab.AppendText(“const float Pt1000Tab=“ PORTB #endasm void main(void) /定义字符数组 uchar arr5; /初始化 ,指定列数为 16 lcd_init(16); /设定显示坐标 为( 0,1) lcd_gotoxy(0,1); /*在( 0,1)显示字符串 ,注意:此字符串存储在 Flash只读存储器中 */ lcd_putsf(“Run Mode:“); /*调用 “浮点数转换成字符串”函数, 函数原型: void ftoa(float n, unsigned char decimals, char *

7、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 系列光耦合过零触发双向晶闸管驱动、固态继电器 驱动等。 本系统采用 ULN2003 芯片来驱动继电器。其内部结构如图 2

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

9、好处是: 当 单片机受到外界干扰而 不断复位或看门狗超时复位时,保证压缩机始终处于开启或关闭状态, 有助于延长压缩机的寿命。 2.4 键盘输入 本系统采用 3 3矩阵式 键盘。通过键盘 可以控制系统工作方式(关闭、送风、制冷)、风向步进电机 (水平送风、倾斜送风、扫风) 、 温度设定等 。 键盘的 行由 PD0、 PD1、 PD2(使能内部上拉电阻) 控制, 而列则由 PC3、 PC4、 PC5控制 ,如图 4所示。 采用程序扫描的方式 识别键码,其工作过程如下: (1) 判断键盘中有无键按下。 通过以下代码实现: PORTC if(PIND if(PIND / 等待按键 释放 while(P

10、IND /判断换气风机是否在运行 if(ventilator_state=1) ventilator_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 风向步进电机控制 Atmega

11、16 的定时器能够输出 PWM, 编程简单,精度高。 编程让 定时器 2 工作于 相位可调模式,产生高精度的 PWM 波形输出,调节占空比,以达到控制步进电机 不同转角的目的 。 初始化设置如下: ASSR=0x00; /* 相位可调 PWM 模式,比较匹配时清零 OC2,计数为 0xff 时置位 OC2 */ TCCR2=0x64; TCNT2=0x00; OCR2=0x00; TIMSK=0x80; /使能匹配 中断 图 5 相位 可调 PWM 模式的时序图 图 6 水平送风模式下的 PWM波形 图 6 倾斜送风模式下的 PWM波形 3 仿真 Proteus 是目前最好的模拟单片机 及 外

12、围器件的 仿真软件, 可以仿真 51 系列、 AVR, PIC等常用的 MCU 及其外围电路 ,如 LED、 LCD、RAM、 ROM、 键盘 、 马达 、 继电器、 AD/DA、部分 SPI 器件 、 部分 )TWI(CI2 器件 、 74 系列、 COMS 4000系 列芯片 等。 利用 Proteus可以大大提高开发效率、降低 投资, 在没有硬件的情况下让开发 人员 能像 Pspice仿真模拟 /数字电路那样仿真 MCU及外围电路。 Proteus提供的可调电阻是“十级可调”而不是“无级可调” ,所以 本系统 采用三个可调电阻模拟 Pt1000热电阻 ,以实现“粗调”、“ 中 调” 、

13、“ 细调 ” ,更真实反映热电阻阻值的细微变化 。 图 7 换气风机、压缩机 、蒸发器风机处于工作状态 图 8 LCD显示结果 4. 结语 本系统 采用 AVR单片机实现汽车空调的自动控制(双位控制),具有电路结构简单、分立 元件少 、系统界面友好、操作简单等优点,能满足一般精度要求的 公交车空调的自动控制。 参考文献 1 ATMEL公司的 ATmega16产品文档 ( http:/ 2 刘汧 CodeVisionAVR C库函数介绍 3 王幸之 钟爱琴 王雷 王闪 AT89系列 单片机原理与接口技术 北京航空航天大学出版社 2004 附:电路原理图和程序源代码 /* Project : 汽车

14、空调控制系统 Version : 1 Date : 2005-12-13 Author : Benny Blog : http:/ Company : 509 Chip type : ATmega16L Program type : Application Clock frequency : 8.000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256 */ #include #include #include “Pt1000Tab.h“ #include “inc.h“ #asm .equ _lc

15、d_port=0x18 ;PORTB #endasm #include bit boolean; uchar ventilator_state; uchar fan; uchar blow; uchar run_mode; uchar temp; uchar setting_value; interrupt TIM2_COMP void timer2_comp_isr(void) /产生 PWM,控制步进电机 if (fan=1) OCR2=64; else if(fan=2) OCR2=128; #define FIRST_ADC_INPUT 0 /第一通道 #define LAST_ADC

16、_INPUT 1 /最后一通道 ,最大值为 7,共 8 个通道 unsigned int adc_dataLAST_ADC_INPUT-FIRST_ADC_INPUT+1; #define ADC_VREF_TYPE 0x40 / ADC 中断服务程序 / 自动扫描模拟量输入端口, interrupt ADC_INT void adc_isr(void) register static unsigned char input_index=0; / 读取转换结果 adc_datainput_index=ADCW; / 选择转换通道 if (+input_index (LAST_ADC_INPUT

17、-FIRST_ADC_INPUT) input_index=0; ADMUX=(FIRST_ADC_INPUT|ADC_VREF_TYPE)+input_index; /启动 AD 转换 ADCSRA|=0x40; 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

18、=T State0=T PORTA=0x00; DDRA=0x00; / Port B 初始化 / 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 PORTB=0x00; DDRB=0x00; / Port C 初始化 / Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Fun

19、c0=In / State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x38; DDRC=0x38; / 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 PORTD=0x1f; DDRD=0xF8; /用 T2产生 PWM,控

20、制风向步进电机 / Timer/Counter 2 initialization / Clock source: System Clock / Clock value: Timer 2 Stopped / Mode: Normal top=FFh / OC2 output: Disconnected ASSR=0x00; TCCR2=0x64; TCNT2=0x00; OCR2=0x00; / Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x80; / Analog Comparator initialization / Anal

21、og Comparator: Off / Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; / ADC initialization / ADC Clock frequency: 125.000 kHz / ADC Voltage Reference: AVCC pin / ADC Auto Trigger Source: Free Running ADMUX=FIRST_ADC_INPUT|ADC_VREF_TYPE; ADCSRA=0xEE; SFIOR / LCD module 初

22、始化 lcd_init(16); / 开启全局中断 #asm(“sei“) dis_character(); setting_value=25; run_mode=0; ventilator_state=0; lcd_gotoxy(12,3); lcd_putsf(“OFF“); while (1) scan_key(); /扫描键盘 blow_mode(); /设定送风方式 display(); /显示状态参数 if(run_mode=2) current_temp=Pt1000Tabadc_data0; if (current_tempsetting_value) stop_compres

23、sor(); /lcd_gotoxy(10,1); /lcd_putsf(“Blast“); else start_compressor(); /lcd_gotoxy(10,1); /lcd_putsf(“Cool“); void start_compressor(void) /Start PORTD|=0x18; PORTD PORTD|=0x18; void stop_compressor(void) /Stop PORTD|=0x18; PORTD PORTD|=0x18; void start_ventilator(void) PORTD|=0x40;/换气风机运行 void stop_ventilator(void) PORTD/换气风机停止 void start_evaporator_fan(void) PORTD|=0x20;/蒸发器风机运行 void stop_evaporator_fan(void) PORTD/蒸发器风机停止 /*-键盘扫描 -*/ void scan_key(void) /* K11 K12 K13 K21 K22 K23 K31 K32 K33 */

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 表格模板

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。