汽车喷油嘴清洗机的智能化设计(共19页).doc
精选优质文档-倾情为你奉上汽车喷油嘴清洗机的智能化设计摘要 本文介绍的汽车喷油嘴清洗机主要由单片机AT89S52芯片来控制.该产品的设计可以大大减小喷油嘴清洗机的体积,还有洗完鸣警设定,意外报警等功能,这一切都可以实现喷油嘴清洗机的智能化,同时大大减少机器成本。本产品通过程序设定,以软件代替硬件。可以通过油面,油温传感器等实现温度,油量的测量与控制;还可以通过对清洗时间,清洗压力的程序设定,使该喷油嘴清洗机能适用于任何汽车车型。第一章 引 言 4第二章 汽车喷油嘴清洗机的工作原理与技术要求 42.1 “电喷汽车喷油嘴清洗机”的工作原理 42.2 “电喷汽车喷油嘴清洗机”的工作过程及技术要求: 5第三章 系统方案及电路设计 53.1 系统方案 53.2 PWM波调速原理 63.3 调宽脉冲输出子程序模块 7第四章 主要器件介绍 84.1 AT89S51单片机的功能点 84.2 光电耦合器 9第五章 硬件设计 9第六章 程序设计 106.1 主程序设计 106.2 变量定义及初始化模块 116.3 完整代码 12第七章 调试应用 127.1 安全注意事项 127.2 功能调试 13谢辞 13参考文献 14附页 15第一章 引 言改革开放以来,随着中国经济实力的增强及百姓收入的增多,小汽车越来越多地进入了家庭,随之而来的是维修保养问题。 喷油嘴是电喷发动机关键部件之一,它工作状况的好坏将直接影响发动机的性能。然而不少车主根本不重视发动机喷油嘴的清洗,或者认为发动机喷油嘴要隔很长时间才需进行清洗,殊不知喷油嘴堵塞会严重影响汽车性能! 喷油嘴堵塞的原因是发动机内积碳沉积在喷油嘴上或者燃油中的杂质等堵住了喷油嘴通路。汽车行驶一段时间后,燃油系统就会形成一定的沉积物。燃油系统沉积物有很大危害,如沉积物会堵塞喷油嘴的针阀、阀孔,影响电子喷射系统精密部件的工作性能, 导致动力性能下降;沉积物会在进气阀形成积碳,致使其关闭不严,导致发动机怠速不稳、油耗增大并伴随尾气排放恶化;沉积物会在活塞顶和气缸盖等部位形成坚硬的积碳,由于积碳的热容量高而导热性差,容易引起发动机爆震等故障,此外还会缩短三元催化器的寿命。因此喷油嘴工作的好坏,对每台发动机的功率发挥起着根本性作用。过去这类保养通常要交汽修厂进行,费用昂贵。现市场上出现的已经出现“电喷汽车喷油嘴清洗机” ,但这些电喷汽车喷油嘴清洗机都有如下缺陷:a.该机型大都是体积过大,运输,使用等都不方便,从而加大成本。b.机子开关机不能实现自动化,清洗时间,清洗温度也只能人工模糊控制,易使清洗机与电动机受损,且不易适合流水线工作。c .并不具有如油面,油温过高过低等的报警警示功能。d.一种电喷汽车喷油嘴清洗机只能适用一种机型e.现机型造价过高,不易进行家用推广。本文介绍的汽车喷油嘴清洗机主要由单片机AT89S51芯片来控制,从而实现其智能化.该产品的设计可以大大减小喷油嘴清洗机的体积,以软件代替硬件;可以通过油面,油温传感器等实现温度,油量的测量与控制;还可以设定清洗时间,洗完鸣警设定等等。这一切都可以实现喷油嘴清洗机的智能化,同时大大减少机器成本。本产品也可通过程序设定,使该喷油嘴清洗机能适用于任何汽车车型。第二章 汽车喷油嘴清洗机的工作原理与技术要求2.1“电喷汽车喷油嘴清洗机”的工作原理:结合专用的燃油系统清洗剂,不需拆装发动机,只需用接头与发动机供油管及回油管连接,在发动机正常运转状况下,让清洗混合液进入燃油供给系统,在30 分钟内即可溶解发动机供油管、喷油嘴针阀和燃烧室各组件的积碳、油泥、胶质及漆类污染物,经由循环燃烧分解过程,从汽车排放系统排出,恢复该车的性能,使其启动顺畅,怠速平稳,加油轻快,增加动力,达到省油及降低空气污染的效果。 2.2“电喷汽车喷油嘴清洗机”的工作过程及技术要求:a. 按启动/停止键,两位数码管显示器显示“00”。b. 按时间+、时间-键选择工作时间,每次累加(减)1分钟,时间的选择范围为0060分钟。c. 选好时间,延时5秒后继电器吸合工作,汽油泵运行在额定电压12V状态,数码管同时显示剩余的工作时间。汽油泵的额定功率为70W,额定电压为12V。d. 按压力+、压力-键通过改变直流电机上的电压(即改变汽油泵转速)调整清洗压力,电压调整范围为712V。e. 当剩余工作时间小于4分钟时,蜂鸣器开始鸣叫。直到定时结束,继电器释放,汽油泵停止工作,蜂鸣器停止鸣叫,数码管显示“00”。f. 5分钟内无任何操作则自动断电,数码管无显示。g.保护措施:油面过低保护: 为防止无油损坏汽油泵,油面过低时,传感器开关闭合,汽油泵自动断电,数码管g段显示“-” 并闪烁。油温过高保护: 为防止油温过高起火,温度过高时,温度继电器开关闭合,汽油泵自动断电,数码管g段显示“-”但不闪烁。第三章 系统方案及电路设计3.1系统方案图3-1为“电喷汽车喷油嘴清洗机”的系统构成方框图,由单片机控制器、按键输入、数码管显示、电机PWM驱动电路、输出控制等电路组成。图3-1系统构成方框图单片机AT89S51是整个系统的核心,负责控制检测输入,输出显示,电机调速。这里使用了Atmel公司新型的AT89S51单片机。按键输入电路负责对清洗过程一系列工作参数进行设定输入。数码管显示器在工作过程中显示剩余的工作时间。电机调速利用了单片机内部的定时器,配合软件产生出脉宽调制波(PWM),再通过功率场效应管去驱动低压直流电机,具有效率高、能耗低、转速连续可调等特点。 输出控制电路在油温过高或油面过低的情况下,切断高压汽油泵电机的供电,防止发生事故。 “电喷汽车喷油嘴清洗机” 的工作电源取自汽车上的12V蓄电池,经降压稳压后得到5V的稳定工作电压。3.2 PWM波调速原理 大家可能做过这样的小实验,一台额定电压为12V的直流小电机,使用一台可调稳压电源供电。当电压为12V时,电机转得很快;降低到9V时转速慢了很多;当降到6V时转速更慢了。因为电压降低后,电机获得的输入功率小了,当然转速就慢了。但单片机输出的是数字脉冲信号,如何控制电机调速?这里,我们就设法控制单片机输出脉冲的宽度(即控制脉冲的占空比),使电机得到的平均输入功率发生变化,就能控制电机调速了。图3-2中,输出的为50%的脉冲波,其电压平均值(如图中虚线所示为6V,这样电机的速度就降低了。而图3-3中,输出的为接近100%的脉冲波,其电压平均值约为12V,这时电机的转速就接近额定转速。图3-2 输出的为50%的脉冲波图3-3 输出的为100%的脉冲波3.3 PWM脉冲驱动电机的实现过程 图3-4为PWM脉冲驱动电机的实现电路。AT89S51单片机的P3.6脚输出占空比为60100%的调宽脉冲,经光电隔离后驱动功率场效应管,这样,电机上获得的调宽脉冲波的占空比也为60100%,幅度接近12V。由于电机具有机械惯性的特点,因此运行时不会产生抖动。图3-5为输出60%脉冲时电机得到的直流电压平均值。图3-6为输出100%脉冲时电机得到的直流电压平均值。图3-5输出60%脉冲时电机得到的直流电压平均值图3-4为PWM脉冲驱动电机的实现电路图3-6输出100%脉冲时电机得到的直流电压平均值3.4 调宽脉冲输出子程序模块 为控制大批量生产的成本,使用了低价位的AT89S51单片机,但AT89S51内部没有集成PWM部件。这里我们利用了内部定时器,与软件配合产生出调宽脉冲波。void pwm_out(void)if(out_flag) /如果输出标志有效if(pwm_val<=(push_val+30) out=ON;/ 输出有效else out=OFF; /输出关闭if(pwm_val>=50) pwm_val=0;else out=OFF;第四章 主要器件介绍4.1 AT89S51单片机的功能特点是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。 主要功能特性: · 兼容MCS-51指令系统· 32个双向I/O口· 2个16位可编程定时/计数器· 全双工UART串行中断口线· 2个外部中断源· 中断唤醒省电模式· 看门狗(WDT)电路· 灵活的ISP字节和分页编程· 4k可反复擦写(>1000次)ISP Flash ROM· 4.5-5.5V工作电压· 时钟频率0-33MHz· 双数据寄存器指针· 低功耗空闲和省电模式· 3级加密位· 软件设置空闲和省电功能· 128x8bit内部RAM2. AT89S51引脚外形图4-1AT89S51引脚排列4.2 光电耦合器构造及其工作原理光电耦合器是把发光器件与光敏接收器件集成在一起(或用一根光导纤维把两部分连接起来)以实现信号传输作用的器件.通常发光器件采用发光管(LED),光敏接收器件则采用光敏管等.当信号加在光电耦合器的输入端时,发光管发光,光敏管受光线照射而导通,输出相应的信号,实现了光电的传输和转换.其主要特点是以光为媒介实现信号的传输,使输入与输出间在电气上完全隔离.如图4-2所示。 如图4-2光电耦合器第五章 硬件电路设计 “电喷汽车喷油嘴清洗机”电路原理见图5-1。共设有5个输入按键、一个油面传感器和一个油温传感器。两位数码管显示器用于显示输入时间、指示剩余工作时间及报警状态显示。蜂鸣器作报警提醒, 继电器用于控制汽油泵电机的通断。图5-1 电喷汽车喷油嘴清洗机电路图 按启动/停止键,两位数码管显示器显示“00” ,“电喷汽车喷油嘴清洗机”处于待机状态。此时按时间+、时间-键就能选择工作时间,时间的选择范围为0060分钟。选好时间,再延时5秒P3.6输出低电平,继电器吸合工作,汽油泵运行在额定电压12V状态,数码管同时显示剩余的工作时间。按压力+、压力-键即使P3.6输出的脉冲占空比发生变化,即改变汽油泵转速来调整清洗压力。当剩余工作时间小于4分钟时,蜂鸣器开始鸣叫。定时结束时,继电器释放,汽油泵停止工作,蜂鸣器停止鸣叫,数码管显示“00”。若5分钟内无任何操作则数码管熄灭,自动关机。在作业过程中,若油面过低时,油面传感器开关(Soil)闭合(实验时由开关代替),此信号经P1.5送入CPU,经运算处理,P3.7输出高电平,汽油泵自动断电,数码管g段显示“-” 并闪烁;若油温过高时,温度继电器开关(Stem)闭合(实验时由开关代替),经P1.6送入CPU,P3.7输出高电平,汽油泵也自动断电,数码管g段显示“-”但不闪烁。PCB板如5-2所示 图5-2 电喷汽车喷油嘴清洗机PCB板图第六章 程序设计6.1 主程序设计 主程序的工作过程为:先进行初始化工作,然后判断是否启动?若启动则读取键值信号或传感器输入信号,进行对应处理。否则进入工作状态。流程图如6-1初始化启动否有按键输入否根据键值散转油温高时间+时间-压力+压力-油面低处理关机处理正常工作延时5S已延时5S否图6-1 主程序状态流程6.2 变量定义及初始化模块程序设计时需设立一系列的变量、标志,具体如下:uint deda; /1ms计时单元uchar sec; /计时秒char set_min;/设定分uchar min_5m;/5分钟计数器uchar val;/中间变量uchar pwm_val; /调宽脉冲变量值char push_val;/压力变化值sfr WDT=0xa6;/定义看门狗定时器sbit pushdec_key=P14; /压力-键sbit pushinc_key=P13; /压力+键sbit timedec_key=P12; /时间-键sbit timeinc_key=P11; /时间+键sbit buzz=P35; /驱动蜂鸣器端sbit out=P36;/调宽脉冲输出端sbit relay=P37; /驱动继电器端uchar dis_sel;/显示内容散转标志bit over_5m;/5分钟溢出标志bit flag_5m;/5分钟标志bit flag_5s;/5秒钟标志bit start;/启动标志bit dis_flag; /显示标志bit key_flag;/按下键标志bit buzz_sound;/蜂鸣器声响标志bit y;/中间变量bit out_flag;/pwm输出标志/*初始化*/void init()/push_val=20;IT0=1;IE=0x8b;/set_min=0;buzz=OFF;/relay=OFF;key_flag=0;/out=OFF;out_flag=0;reset() /*定时器T0初始化*/void init_timer0()TMOD=0x11;TH0=-(1150/256); /1ms初值TL0=-(1150%256);TR0=0;ET0=1;EA=1;/*定时器T1初始化*/*定时器T1初始化*/void init_timer1()TH1=-(5000/256); /5ms初值TL1=-(5000%256);TR1=1;ET1=1;EA=1;6.3 完整代码见附页第七章 调试应用7.1 安全注意事项7.11 实际应用时安全注意事项 本试验是在试验室完成,暂时没有应用到实际. 7.12 实验室调试注意事项1.电源检测.12V电压经稳压变成5V,插芯片前必先检测电源.2.单片机先不接,先检测光电耦合使用是否正常.3.单片机,光电耦合等芯片不可接反,进入整机调试.7.2 功能调试通电前应检查焊接质量,确认无短路、假焊等故障并将程序写入单片机AT89S51中。 设备的功能统调: a. 按启动/停止键,两位数码管显示器显示“00”。b. 按时间+、时间-键选择工作时间,每次累加(减)1分钟,时间的选择范围为0060分钟。c. 选好时间,延时5秒后继电器吸合工作,数码管同时显示剩余的工作时间。d. 按压力+、压力-键通过改变直流电机上的电压(即改变汽油泵转速)调整清洗压力,数码管有显示.e. 当剩余工作时间小于4分钟时,蜂鸣器开始鸣叫。直到定时结束,继电器释放,蜂鸣器停止鸣叫,数码管显示“00”。f. 5分钟内无任何操作则自动断电,数码管无显示。g.保护措施:油面过低保护: 为防止无油损坏汽油泵,油面过低时,传感器开关闭合,数码管g段显示“-” 并闪烁。油温过高保护: 为防止油温过高起火,温度过高时,温度继电器开关闭合,数码管g段显示“-”但不闪烁。完整代码#include <AT89X51.H>/11.0592MHz,看门狗工作#define uchar unsigned char#define uint unsigned int#define ON 0#define OFF 1;#define reset() WDT=0x1e;WDT=0xe1;/看门狗复位宏定义uchar code DATA_7SEG10=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f;/*09的数码管段码*/uint deda;/=0; /1ms计时单元uchar sec;/=0; /计时秒char set_min;/=0; /设定分uchar min_5m;/=0; /5分钟计数器uchar val;/=0; /中间变量uchar pwm_val; /调宽脉冲变量值char push_val;/=20; /压力变化值sfr WDT=0xa6;/定义看门狗定时器sbit pushdec_key=P14; /压力-键sbit pushinc_key=P13; /压力+键sbit timedec_key=P12; /时间-键sbit timeinc_key=P11; /时间+键sbit buzz=P35; /驱动蜂鸣器端sbit out=P36;/调宽脉冲输出端sbit relay=P37; /驱动继电器端uchar dis_sel;/=0; /显示内容散转标志bit over_5m;/=0; /5分钟溢出标志bit flag_5m;/=0; /5分钟标志bit flag_5s;/=0; /5秒钟标志bit start;/=0; /启动标志bit dis_flag; /显示标志bit key_flag;/=0; /按下键标志bit buzz_sound;/=1; /蜂鸣器声响标志bit y;/=0; /中间变量bit out_flag; /pwm输出标志/*函数声明列表*/void time_conv(void);/ 时间计算子函数void pwm_out(void);/ 调宽脉冲输出子函数void push_dis(void); /显示压力子函数void oil_dis(void); /显示缺油子函数void normal_dis(void) ;/显示正常工作子函数void other_dis(void); /显示(缺油、超温)子函数void temp_dis(void); /显示超温子函数void oil_low(void); /缺油处理子函数void temp_over(void); /超温处理子函数void other(void); /(缺油、超温)处理子函数void buzz_control(void); /控制蜂鸣器子函数void delay(uint k); /延时子函数void init(void); /初始化子函数void init_timer0(void);/定时器0初始化子函数void init_timer1(void);/定时器1初始化子函数void key(void) ; /按键/感应开关处理子函数void close(void); /关机子函数void time_inc(void); /时间+子函数void time_dec(void); /时间-子函数void push_inc(void); /压力+子函数void push_dec(void); /压力-子函数void normal_work(void); /正常工作子函数/*/*初始化*/void init()/push_val=20;IT0=1;IE=0x8b;reset() /*定时器T0初始化*/void init_timer0()TMOD=0x11;TH0=-(1150/256);TL0=-(1150%256);TR0=0;ET0=1;EA=1;/*定时器T1初始化*/*定时器T1初始化*/void init_timer1()TH1=-(5000/256);TL1=-(5000%256);TR1=1;ET1=1;EA=1;/*延时子函数*/void delay(uint k)uint i,j;for(i=0;i<k;i+)for(j=0;j<60;j+) reset()/*外中断0服务子函数*/void int0_serve(void) interrupt 0 using 1delay(20);if(P3_2=0)start=!start;while(P3_2=0)delay(20);if(P3_2=1)break;/*/*1mS定时中断服务子函数*/void timer0(void) interrupt 1 using 2TH0=-(1150/256);TL0=-(1150%256);deda+;pwm_val+;pwm_out();time_conv();/*调宽脉冲输出子函数*/void pwm_out(void)if(out_flag)if(pwm_val<=(push_val+30) out=ON;else out=OFF;if(pwm_val>=50) pwm_val=0;else out=OFF;/*时间计算子函数*/void time_conv(void)if(deda>=1000)sec+;deda=0;if(deda=500)buzz_sound=!buzz_sound;if(sec>=60)set_min-;sec=0;if(flag_5m)min_5m+;if(min_5m>=5)over_5m=1;min_5m=0;if(set_min<=0)set_min=0;/*/* T1 5ms定时中断服务子函数(显示用)*/void timer1(void) interrupt 3 using 3TH1=-(5000/256);TL1=-(5000%256);if(start) switch (dis_sel)case 0:normal_dis();break;case 1:oil_dis();break; case 2:temp_dis();break; case 3:other_dis();break;case 4:push_dis();break; default:break;else P2=0x00;P3=0xff;reset()/*压力调整显示子函数*/void push_dis(void)if(dis_flag) P2=DATA_7SEG(push_val)/10;P3_0=0;P3_1=0;P3_3=1;P3_4=1;dis_flag=0;else P2=DATA_7SEG(push_val)%10;P3_0=1;P3_1=1;P3_3=0;P3_4=0;dis_flag=1;/*正常工作显示子函数*/void normal_dis(void) if(dis_flag) P2=DATA_7SEGset_min/10;P3_0=0;P3_1=0;P3_3=1;P3_4=1;dis_flag=0;else P2=DATA_7SEGset_min%10;P3_0=1;P3_1=1;P3_3=0;P3_4=0;dis_flag=1;/*缺油显示子函数*/void oil_dis(void) if(buzz_sound) if(dis_flag)P2=0x40;P3_0=0;P3_1=0;P3_3=1;P3_4=1;dis_flag=0;else P2=0x40;P3_0=1;P3_1=1;P3_3=0;P3_4=0;dis_flag=1;else P3_0=1;P3_1=1;P3_3=1;P3_4=1;/*超温显示子函数*/void temp_dis(void) if(dis_flag)P2=0x40;P3_0=0;P3_1=0;P3_3=1;P3_4=1;dis_flag=0;else P2=0x40;P3_0=1;P3_1=1;P3_3=0;P3_4=0;dis_flag=1;/*超温、缺油同时发生显示子函数*/void other_dis(void) if(deda<250)|(deda>500)&&(deda<750) if(dis_flag)P2=0x40;P3_0=0;P3_1=0;P3_3=1;P3_4=1;dis_flag=0;else P2=0x40;P3_0=1;P3_1=1;P3_3=0;P3_4=0;dis_flag=1;else P3_0=1;P3_1=1;P3_3=1;P3_4=1;/*按键感应开关处理子函数*/void key(void) delay(10);while(P1!=0xff)switch (P1)case 0xfd:time_inc(); break;case 0xfb:time_dec(); break;case 0xf7:push_inc(); break;case 0xef:push_dec(); break;case 0xdf:oil_low(); break;case 0xbf:temp_over(); break;case 0x9f:other(); break;default:break;delay(500);if(set_min>=4)key_flag=1;TR0=1;/*主函数*/void main(void) init();init_timer0(); /定时器T0初始化init_timer1(); /定时器T1初始化while(1) /无限循环 /*-*/if(start)if(P1!=0xff)key();else normal_work();else close(); /*正常工作子函数*/void normal_work() dis_sel=0;if(key_flag)&&(!flag_5s)relay=OFF;buzz=OFF;delay(6000);flag_5s=1;if(flag_5s) y=0;buzz_control();dis_sel=0;if(set_min)out_flag=0;buzz=OFF;flag_5m=1;flag_5s=0;key_flag=0;delay(1000);relay=OFF;else relay=ON;delay(1000);out_flag=1;if(over_5m)over_5m=0;flag_5m=0;start=0;min_5m=0;out=OFF;relay=OFF;reset()/*超温、缺油同时发生处理子函数*/void other(void)delay(10);if(P1=0x9f)while(1)dis_sel=3; buzz=OFF;relay=OFF; out_flag=0;if(!start)break;else dis_sel=0;/*超温发生处理子函数*/void temp_over(void)delay(10);if(P1=0xbf)while(1)dis_sel=2;relay=OFF;buzz=OFF;out_flag=0;if(!start)break;else dis_sel=0;/*缺油发生处理子函数*/void oil_low(void)delay(10);if(P1=0xdf)while(1)dis_sel=1;relay=OFF;out_flag=0;buzz=OFF;if(!start)break;else dis_sel=0;/*关机处理子函数*/ void close(void)P2=0xff;P3=0xff;relay=OFF;buzz=OFF;P1=0xff;out_flag=0;reset()dis_sel=0;set_min=0;key_flag=0;flag_5s=0;out=OFF;push_val=20;/*控制蜂鸣器子函数*/void buzz_control(void)if(set_min>0)&&(set_min<4)buzz=buzz_sound;else buzz=OFF;/*时间增加子函数*/void time_inc(void) if(!timeinc_key)set_min+;if(set_min>=60)set_min=60;dis_sel=0;/*时间减少子函数*/void time_dec(void) if(!timedec_key)set_min-;if(set_min<=0)set_min=0;dis_sel=0;/*压力增加子函数*/void push_inc(void)while(!y)dis_sel=4;delay(2500);y=1;if(!pushinc_key)push_val=push_val+;if(push_val>=20)push_val=20;/*压力减少子函数*