课 堂 教 案 教师:刘杨 科目:汽车单片机技术 题目 第一章 汽车单片机原理 第六节 课型 专业基础课 教法 面授 教具 班级 板书 汽检 课时 2 教学目的目标 熟悉汽车单片机程序设计原理 教学熟悉汽车单片机程序设计原理器 重点 教学难点 教学内容与程序 一、 课前提问 二、 引题,新课引入 三、 课后小结 四、 作业布置 汽车单片机程序设计 作业 教材 P53—12-16
教 案 附 页
第六节 汽车单片机程序设计原理
一、汇编语言程序设计 1.汇编语言程序设计步骤
(1)分析问题,确定算法:这是程序设计中最重要的一步。设计人员必须认真、仔细地考虑系统需要解决的各种问题以及将来系统功能的进一步扩展,明确知道程序要解决的问题和接收、处理、发送的数据范围以及使用什么样的算法。
(2)画流程图:流程图是用各种图形、符号、有向线段来直观地表示程序执行的步骤和顺序。它可使人们通过流程图的基本线索,对全局有完整的了解。
(3)分配存储单元:确定程序存储区和数据存储区的起始地址和区域大小。
(4)编写源程序代码:根据流程图用汇编语言指令实现流程图的每一个步骤,从而编写出汇编语言的源程序。
(5)调试、测试程序:调试是利用仿真器等开发工具,采用单步、设断点、连续运行等方法排除程序中的错误,完善程序的功能。 2.源程序的汇编 ① 手工汇编
手工汇编是通过手工方式查指令编码表,逐个把助记符指令“翻译”成机器码的过程。 ② 机器汇编
机器汇编是在机器上使用汇编程序自动地进行源程序的汇编,最后得到机器码表示的目标程序。 3.伪指令
伪指令是PC机将源程序汇编成目标程序所需要的指令,而不是单片机的指令,相对单片机指令而言称其为伪指令。伪指令用于告诉汇编程序如何进行汇编的指令,它既不控制单片机的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。
伪指令主要用来指定程序或数据的起始位置,给出一些连续存放数据的地址或为中间运算结果保留一部分存储空间以及表示源程序结束等等。不同版本的汇编语言,伪指令的符号和含义可能有所不同,但基本用法是相似的。下面介绍几种常用的伪指令。 (1)设置目标程序起始地址伪指令ORG 格式:ORG 16位地址 (2)结束汇编伪指令END 格式:END
(3) 赋值伪指令EQU 格式:标号: EQU 项。
项可以是常数、地址标号或表达式。例如: TAB1: EQU 1000H TAB2: EQU 2000H
汇编后TAB1、TAB2分别具有值1000H、2000H。用EQU伪指令对某标号赋值后,该标号的值在整个程序中不能再改变。 (4)定义字节伪指令DB 格式:标号:DB 项或项表。
把项或项表中的数据存入程序存储器从标号开始的连续地址单元中。例如: ORG 2000H
TAB1:DB 10H,23H,„„ ;TAB1是标号;10H,23H,„„ 是数据 汇编后:(2000H)=10H,(2001H)=23H,„„ (5)定义字伪指令DW 格式:标号:DW 项或项表
DW伪指令与DB相似,但用于定义字的内容。汇编时,机器自动按高8位在先,低8位在后的格式排列。
(6)预留存储区伪指令DS 格式:标号:DS 表达式
功能是从标号指定单元开始,定义一个大小为表达式的值的存储区,以备后用。例如: ORG 3000H DS 19H
DB 10H,11H,„„
汇编后从3000H开始,预留19H个字节的内存单元,即3000H~3018H,然后从3019H开始,按照下一条定义字节伪指令DB开始赋值,即(3009H)=10H,(300AH)=11H,„„ (7)位地址定义伪指令BIT 格式:标号: BIT 位地址
功能是将位地址赋予BIT前面的标号,经赋值后可用该标号代替BIT后面的位地址。 4.基本结构程序
汇编语言程序主要由顺序结构程序、分支结构程序和循环结构程序 (1)顺序结构程序
顺序程序是最基本的程序。它是按照指令排列的先后顺序依次执行,每条指令都必须执行,且只执行一遍。顺序程序设计一般比较单一、简单,常常作为复杂程序的一部分。 (2)分支程序
在程序设计过程中,有时要根据不同情况执行不同功能的程序段,这种根据程序要求而改变程序执行顺序的设计,称为分支程序设计。分支程序分为无条件分支程序和条件分支程序两类。无条件分支程序中含有LJMP、AJMP等无条件转移指令,执行这类指令,程序将无条件转移;条件分支程序中含有判零、比较、位控制等条件转移指令。 (3)循环程序
在程序中包含重复执行的程序段称为循环程序。循环程序简洁,占用内存少,运行效率高。循环程序常见的两种结构:一是先执行,后判断,这种结构至少要执行1次;另一种是先判断,后执行,这种结构可以1次也不执行。 循环程序通常由3部分组成:
初始化:赋循环次数初值、地址指针初值等。 循环处理:完成主要任务的程序段。
循环控制:修改循环次数、地址指针等,控制循环是否结束。 二、空燃比反馈修正控制原理程序
发动机起动后的基本喷油时间控制主要由发动机转速和负荷量(进气量)决定。为了使发动机在不同工况下,都处于最佳状态,还有以下主要的修正控制。其中空燃比反馈修正控制是利用氧传感器信号来修正喷油脉冲宽度。
为了使发动机尾气排放达到环保要求,发动机的排气管上都装有三元催化转换器。三元催化转换器作用时,必须是混合气在理论空燃比(14.7:1)附近,才能使一氧化碳CO、碳氢化合物HC的氧化作用和含氮氧化物NOX的还原作用同时进行,转化为无害的CO2、H2O、O2、N2。因此,必须十分精确控制喷油量。但是,单靠空气流量传感器计测的空气质量信号是达不到高精度的喷油控制,必须借助安装在排气管中的氧传感器送来的反馈信号,对基本喷油时间进行修正,才能实现高精度的喷油控制。这是一种典型的闭环反馈控制。
氧传感器动态电压信号xxH值与设计目标值yyH比较,有以下3种情况需要处理:
xxH值 > yyH:表示喷油过浓,需要调用减小喷油子程序,执行后返回转移循环监测; xxH值 < yyH:表示喷油过稀,需要调用增大喷油子程序,执行后返回转移循环监测 xxH值 = yyH:表示喷油在理想空燃比附近,保持不变,转移循环监测
利用“比较不相等转移指令CJNE”和“位条件转移指令JC”实现三分支判断。发动机整体控制是一个很大的程序,空燃比反馈修正控制程序只是其中一个程序段或子程序(有不同的设计方法),为了
简便,设定这是一个相对程序。
从程序流程图可以看出,这是一个3分支结构程序,左分支程序保持喷油量不变,中间分支程序调用增大喷油子程序,右分支程序调用减小喷油子程序。子程序增大或减小1个变量的喷油时间参数后,要返回转移循环监测氧传感器不断传来的动态电压信号值xxH,看是否达到目标值。发动机在全部运行过程中,空燃比反馈修正控制程序一直在不断的循环监测氧传感器信号和修正喷油时间,使尾气排放达到环保要求。 空燃比反馈修正控制程序如下:
标号 地址 源程序 注释
LOOP:1954H MOV R1,#xxH ;氧传感器动态信号xxH送R1 1956H CJNE R1,#yyH,N2 ;R1内xxH≠yyH,转移N2
(rel1=02H) xxH=yyH,不转移,顺接N1
N1:1959H SJMP LOOP(rel2=F9H);转移LOOP循环监测
N2:195BH JC N3(rel3= ) ;xxH < yyH,CY=1,转移N4, xxH > yyH,CY=0,顺接N3
N3:195DH LCALL L1 ;调用减小喷油子程序L1 1960H SJMP LOOP(rel4= ) ;执行减小喷油后返回,
转移循环监测
N4:1962H LCALL L2 ;调用增大喷油子程序L2 1965H SJMP LOOP(rel5= ) ;执行增大喷油后返回,
转移循环监测
程序中的地址偏移量rel计算如下:
第2条指令的rel1 =195BH-(1956H+3)= 02H
第3条指令的rel2 =100H-∣1954H-(1959H+2)∣=100H-07H = F9H 其它rel值由读者计算。
三、步进电机怠速阀控制原理程序 1. 怠速控制原理
怠速就是汽车发动后温度上升到正常温度,发动机处于空挡时稳定的最低转速。此时混合气燃烧所做的功,只是用以克服发动机的内部阻力。
在使用汽车时,发动机怠速运转的时间约占30%,怠速转速的高低直接影响燃油消耗和排放尾气。怠速过高,耗油量增加;怠速过低,发动机转速不稳,容易熄火。
怠速一般在800转/分,由于设计和制造工艺不同,不同的辆车,怠速略有不同,应以其标明怠速数值为准。
怠速控制均采用发动机转速反馈闭环控制方式 ,即发动机转速传感器将发动机的实际转速和目标转速进行比较,根据比较的差值确定使发动机达到目标值的控制量,并通过执行机构对发动机怠速转速进行校正。
转子的正转或反转运动经阀杆(丝杆)转换成向前或向后的直线伸缩运动,阀杆每旋转1圈,伸缩1个螺距;控制阀与阀杆相连,为凸圆锥状;阀座为凹圆锥状。控制阀向阀座推进,通气横截面减小,反之,通气横截面增大,从而达到控制怠速通气量的目的。 2. 怠速控制用步进电机
目前应用怠速控制的步进电机多为永磁式,由发动机电控单元控制。目前应用怠速控制的步进电机多为永磁式,由发动机电控单元控制。图1-37为某种怠速控制阀所用步进电机定子与转子结构和相互作用示意图。定子由两个圆形爪极式铁芯相叠而组成,每个爪极式铁芯内有2个线圈,共有4个线圈;每个爪极式铁芯有16个爪极,两个铁芯错开相叠,形成32个爪极。转子是圆形永久磁铁,
磁极方向与转子半径方向一致,共有16个(8对)磁极,图中只画出2个(1对)磁极。 步进电机转动一圈需要32步,步距角为11.25°。步进电机的工作范围为0~125步。 步进电机转动的基本原理是:按A→B→C→D→A相序依次通电,转子正转(图中为顺时针);按A→D→C→B→A相序依次通电,转子反转。线圈通电时间的长短决定转速,通电时间长,转速慢,通电时间短,转速快。
3. 怠速阀的控制过程 (1)暖机控制
怠速控制阀的初始状态是全开,步进电机的步数为0 ,通气截面积最大,发动机起动后,怠速比较高,是快速暖机过程。快速暖机过程的怠速一般控制在1200转/分,称暖机高怠速。当发动机的温度增高到设定目标值,发动机怠速稳定在800转/分,称正常低怠速。 从暖机高怠速1200转/分到正常低怠速800转/分的控制模式
有多种,较先进的控制模式是建立温度与怠速的对应数列,存在单片机的程序存储器内,监测到多高的温度,就调取对应的怠速值。为初学理解方便,减小程序长度,暂设两级数值: 目标温度≥实测温度,按暖机高怠速1200转/分控制, 允许±20转/分; 目标温度<实测温度,按正常低怠速800转/分控制, 允许±20转/分。
单片机始终将发动机转速与目标值比较,如果高于目标值,就控制步进电动机正转,减小通气截面积,降低发动机转速;如果低于目标值,就控制步进电动机反转,增大通气截面积,增加发动机转速。
由于怠速控制阀在初始是全开状态,发动机在此状态的设计转速要高于1200转/分,所以在发动机起动后的暖机控制开始,单片机控制步进电机从0步开始,只可能是正转,减小通气截面积,降低发动机转速至1200转/分。步进电机每转动1步,单片机就累加正转步数1次;如果反转,单片机就减少正转步数1次。
发动机受各种因素影响,怠速会有一定的波动。怠速与目标转速的误差,允许在±20转/分以内,超过±20转/分,单片机就。 (2)正常怠速控制
发动机正常运行时,按正常低怠速800转/分控制, 允许±20转/分。 (3)发动机关闭后控制
关闭发动机后,发动机ECU(不断电)控制步进电动机反转到怠速阀恢复到初始全开状态,为了下次起动做好准备。
单片机控制步进电动机从初始全开状态,到正常怠速状态,再恢复到初始全开状态,其间的步数变化都被记忆下来;发动机关闭后,从初始全开状态正转多少步,就转反多少步,正好回到初始全开状态。
4. 步进电机的控制
控制步进电动机正、反转有多种方法,基本原理是通过对P1口输入控制字(也称控制码),依次对每一相线圈供电。由于怠速控制常用4相步进电动机,所以可用循环移位指令来实现。
把控制字传送给累加器A, A再把内容传输到P1口。 P1口的低4位P1.0、P1.1、P1.2、P1.3分别控制步进电动机的A相、B相、C相、D相线圈。P1口的高4位不用。表1-12是P1口控制步进电动机正转和反转的循环移位控制字。正转用左移循环指令,反转用右移循环指令。
发动机运行期间,步进电动机要不时的正转或反转稳定怠速,如果正转,则正转步数增加;如果反转,则正转步数减少。每转一步,正转步数都要存入内存30单元。步进电动机每次停止转动的最后控制字都要存入内存31单元,下次转动就从上次最后控制字的左移或右移后的新控制字开始,这样就保证转子转动的连续和平稳。例如上次停转最后控制字是44H,下次转动,如果反转,就右移1位,新控制字就是22H;如果正转,就左移1位,新控制字就是88H 。 5.怠速控制阀步进电机控制程序
怠速控制程序是发动机电控单元主控程序下的一个子程序。设单片机内存RAM有关单元所要储存的
数据和来源如下:
30H:存步进电动机的正转步数; 31H:存驱动步进电动机的控制字;
32H:存缸温实测值,由温度传感器传来; 33H:存缸温目标值,由程序存储器传来; 34H:存怠速实测值,由转速传感器传来; 35H:存正常低怠速目标上限值(820转/分),由程序存储器传来; 36H:存正常低怠速目标下限值(780转/分),由程序存储器传来; 37H:存暖机高怠速目标上限值(1220转/分),由程序存储器传来; 38H:存暖机高怠速目标下限值(1180转/分),由程序存储器传来; 3AH: 临时存怠速目标上限值 ; 3BH: 临时存怠速目标下限值 00H(位地址):存发动机运行和关闭数据: (00H)=0,发动机关闭; (00H)=1,发动机运行; 信号由发动机点火开关传来。
怠速步进电机控制程序流程图中有5个判断框。
第1个判断框是“有发动机关闭信号吗?” ,判断是否停机。 第2个判断框是“步数=0吗?”,步数=0就停机,否则转移驱动步进电机反转至停机。 第3个判断框是“缸温达到目标值吗?”,没达到转移“按暖机高怠速处理”,达到“按正常低怠速处理”。处理的过程是把高怠速或低怠速目标值的上、下限值,赋给下一步作为判断依据。 第4个判断框是“怠速≥目标上限值吗”,如果大于或等于,就转移驱动步进电机正转1步,减小怠速;如果小于,则顺接怠速下限值判断。 第5个判断框是“怠速<目标下限值吗”,如果小于,就转移驱动步进电机反转1步,增大怠速;如果大于,说明至此已判出:目标上限值>实测值≥目标下限值,怠速在正常范围内,可以保持不变,转移继续查发动机关闭信号,开始下一循环监控。
步进电机的转速是由每一相的通电延时长短决定,因此,必须有延时子程序。由于步进电机每一相的通电延时是20ms(或10ms),比较短,所以不需要用定时器,利用空操作指令和判断转移指令所占的机器周期,经多次循环就可达到延时目的。设单片机的晶振是12MHz,一个机器周期是1μs,3个空操作指令和1个判断转移指令共占5个机器周期,即占5μs 。经C8H = 200次循环,延时为1ms;再经14H = 20次大循环,总延时就是20ms 。