摘 要:电子风扇可以通过按需分配的方式工作,有效提高发动机冷却系统的效率,及时降低发动机温度。文章根据以 S9S08DZ60 单片机为基础开发的电子风扇控制器的工作需求,分析了各个功能所需要的程序,确定了相应寄存器的配置,设计出了各个底层控制程序及总体框架程序。包括传感器信号采集程序、开关量信号输入程序及 CAN 总线通讯程序等在内的一系列软件程序,从而控制单片机的正常运行,以实现对电子风扇的控制,并且满足实际应用要求。
张世强; 苏士斌; 郭兴; 马晓龙; 纪少波; 程勇, 汽车实用技术 发表时间:2021-08-25
关键词:电子风扇;软件开发;程序设计;寄存器配置
前言
冷却系统是保证汽车发动机在正常温度下工作的重要部分,主要包括水泵、散热器、冷却风扇、节温器等部件;其中冷却风扇可以保证汽车在低速行驶或发动机温度过高时及时散热,维持正常工作温度。电子风扇是冷却风扇的一种,能够起到很好的节能作用,并且由于其独立运行、调节能力平滑等优势得到了大量应用,国内外有很多学者对其进行了研究。相对来说,国外研究起步较早,早在 20 世纪 80 年代就已有学者在专利中提到电子风扇,之后,在八十年代末期, Roger Clemente[1]提出将电子风扇装在载货汽车上。在国内,上世纪 90 年代才开始对电子风扇的相关研究。其中,张鹏飞 [2]对电子风扇的标定匹配问题开展研究,使用 CATIA 建立了电子风扇的三维结构模型,并且在电子风扇的匹配设计过程中,提出了一种根据风扇结构参数计算其散热性能的可行方法。
一般来说,电子风扇控制器需要硬件与软件相互配合,二者相辅相成,硬件用以支持电子风扇控制器的运行,软件用以控制硬件,保证电子风扇控制器各个模块协调有序地工作。周碧[3]介绍了一种以 AT89C52 单片机为控制核心的车用发动机电控冷却系统的设计,并据此绘制出了系统电路图,设计出了可行的硬件和电路。完成电子风扇控制系统的硬件设计之后,还需要设计相应的软件代码,软件代码包括总体框架程序和各功能模块的底层驱动程序,前者用于管理整个控制过程,后者通过配置微处理器的寄存器,令其按照设定的工作模式工作。两种程序都是通过 Freescale 单片机专用单片机编译环境 CodeWarrior[4]实现的。下面对两种程序的设计进行详细介绍。
1 功能分析
目前电子风扇控制系统具有采集传感器信号、输入开关量信号、PWM 输出控制、风扇状态诊断等功能[5-6],实现以上功能,需要合理设计电路等硬件,并进行相关的测试与优化[7],还需要软件代码对相关模块进行控制。因此需要针对各个模块设计程序,主要包括晶振配置程序、传感器信号采集及处理程序、PWM 输出控制程序、风扇状态诊断程序、开关量信号读入程序、CAN 总线通讯程序、状态显示程序等程序;此外,电子风扇控制器工作时需要处理多个任务,为了各个任务能够有序执行,基于多任务时间规划机制,设计了系统总体框架程序。
2 程序代码设计
2.1 系统总体框架程序
多任务时间规划机制是根据处理任务的重要性不同,将不同任务分配以不同的优先级,并按照优先级高低依次执行程序;当较高优先级的程序执行完毕时,便降至最低优先级,并根据各程序执行所需要的时间,将各程序的优先级及时恢复,从而保证程序工作持续进行。
程序中的实时时钟模块保证了优先级恢复的正常进行:通过该模块配置最小时间片段,各个程序段依据其运行所需要的时间间隔,结合当前的时间片段,经过累加得到一个变量,当该变量达到一定值时,将程序段优先级的恢复,进入下一次的运行。
系统总体框架程序实现了系统中各个程序的有序进行,下面对各底层驱动程序模块进行介绍。
2.2 晶振配置程序
控制器是基于 S9S08DZ60 单片机设计的,该单片机中含有多功能时钟发生器(MCG)模块,模块中包含 1 个锁频环(FLL)和一个锁相环(PLL),并且可以选择其中任一个作为单片机的系统时钟,也可选用外部参考时钟作为 MCU 系统时钟。在单片机的时钟源配置中,主要用到了 MCGSC、 MCGC1、MCGC2 及 MCGC3 这 4 个特殊功能寄存器,本系统中时钟配置步骤如下:
单片机复位会使时钟模块处于 FEI 模式,因此首先需要通过寄存器配置将 FEI 模式转换为 FBE 模式;这个步骤中需要完成外部振荡器的配置,选择外部参考时钟为系统时钟源等。将 FBE 模式转为 BLPE 模式,进而转为 PBE 模式,在这个步骤中需要选择 PLL 模式。之后,将 PBE 模式转为 PEE 模式,完成时钟频率的设置。
2.3 传感器信号采集及处理程序
传感器信号是控制器通过模数转换模块实现的,使用模数转换模块时,首先应配置工作模式,即配置采样精度、采样速度、采样模式及采样通道,该过程涉及到 ADCCFG、 ADCSC1、ADCSC2、APCTL1、APCTL2 及 APCTL3 等特殊功能寄存器。通过寄存器配置设定数模转换单元采用低功耗模式,转换精度为 12 位,以总线频率作为时钟,模数转化速度为总线频率的一半;通过配置,在使能数据转换完成后进入中断功能,配置用到的引脚为模数转换功能,屏蔽 IO 功能。
完成上述配置,便可控制单片机模数转换功能,采集后续数据时,可通过 ADCSC1 指定采样通道,并启动单次采样工作模式,采集相应通道的数据,完成采集后进入模数转换中断函数,并将采样结果暂存,置位相关变量,告知有新的数据到来。
采集完成后,需要通过标度变换将采集到的数字量转化为对应的物理量,此处通过查表实现。在此,建立不同的数组,用来存储数字量与实际温度值的对应关系,模数转换完成后,对数组中的数据进行查表及线性插值处理,得到对应的物理量。针对不同温度区间数据的使用频率,设置不同的温度步长,不常用的温度区间采取较大的步长,常用的温度区间则采用较小的步长,这可以减少数组的规模,提高查表速度以及插值的精度。
2.4 PWM 输出控制程序
PWM 输出是通过单片机的定时器脉冲宽度调节器实现的,该模块支持边缘对齐及中央对齐 PWM 模式,此处选择边缘对齐模式。该定时器脉冲宽度调节器包含TPM0和TPM1 两个模块,其中 TPM1 模块在此用于边缘对齐 PWM 输出, TPM0 模块用于其他功能。在 PWM 输出功能中,需涉及到 TPMnSC、TPMnMOD、TPMnCxSC、TPMnCNT 及 TPMnCxV 等特殊功能寄存器,通过配置这些寄存器,控制 TPM1 定时器溢出中断使能、采用非中央对齐 PEM 输出功能、功能模块的时钟总线为总线速率时钟、总线速率时钟二分频后得到 TPM1 的时钟源。然后设定计数终点,即 TPM1 定时器的模值,定时器在达到该值后计入溢出中断,该寄存器的值可指定PWM信号的频率。TPM2C0SC寄存器可设置及改变TPM1 模块中第 0 通道的功能模式,在此设置为普通 IO 口,TPM1 模块其他通道的初始化也如此设置。最后,将 TPM1 计数寄存器清 0,计数寄存器复位。
上述特殊寄存器设置完成后,才可进入正常工作模式,现以 TPM1 的第 0 通道为例,对 PWM 信号输出的代码进行说明。
首先需要根据 PWM 输出占空比,对 TPM2C0SC 进行初始化设置。当占空比为 0%时,需要 PWM 输出引脚保持输出低电平,此时将该引脚设置为普通 IO 口,然后通过代码控制引脚输出低电平。当 PWM 输出占空比不为 0%时,则需将该通道设置为边缘对齐 PWM 模式,此时使配置 TPM2 -C0SC 寄存器,并设置 PWM 相应的输出电平模式,从而使该通道为边缘对齐 PWM 模式。然后根据该模式中当前的时钟频率、TPM1 的模值以及当前占空比计算出对应的计数值,并赋值给通道值寄存器 TPM2C0V,当 TPM1 的计数值与 TPM2C0V 的值相等时,便控制相应的引脚动作,实现 PWM 信号的输出。图 1 为通过 TPM1 模块发出的不同占空比的 PWM 信号。
2.5 风扇状态诊断程序
该程序主要读取风扇故障状态及风扇转速,研究的电子风扇内部具有故障诊断功能,当电子风扇出现温度、压力过高等故障时,相应的引脚便输出高电平,可据此判断电子风扇是否有故障。该电平信号是在控制器给电子风扇发出的 PWM 信号为低电平时输出,且 PWM 信号的占空比是实时变化的,即 PWM 信号为低电平的情况也是一直在变化的,因此便需要一个模块来捕捉风扇电平信号,此处采用 TPM0 模块的输出比较功能来捕捉 PWM 信号为低的时刻。
首先,需要对 TPM0 模块进行初始化配置,包括时钟源、时钟频率以及计数寄存器等,其配置过程与上文中 TPM1 模块相似,每次通过 TPM1 进行 PWM 占空比配置时,同步对 TPM0 进行配置,实现输出比较功能。这需要通过对通道状态控制寄存器进行配置,该寄存器允许中断使能,将引脚功能配置为输出比较模式。为了能够准确捕捉风扇状态电平,将输出比较的中断时刻设定在 PWM 信号低电平的中间位置,这里通过对通道值寄存器的配置实现,此时信号的状态稳定,更容易获取准确的状态。图 2 为不同占空比下,读取风扇状态电平的时刻示意图,其中黄线是输出的 PWM 信号,绿色线表征另外一根引脚的反转时刻,以便观察中断时刻。由以下三个图可知,在这三种占空比状态下,都可以在 PWM 信号的低电平位置出现中断,这也是读取风扇状态电平的最佳时刻。
其次,要获取风扇的转速信息,了解风扇运转状态,但是电子风扇在实际应用中,转速信号难以直接测量,因此需要用其他参数来间接获取,而风扇转速与 PWM 信号的占空比又是一一对应的,因此可以通过确定两者之间的关系,依据 PWM 占空比来获取电子风扇的转速。在不用电压下, PWM 占空比与风扇转速的对应曲线如图 3 所示。由图可知,工作电压在 24 V 以上时,工作电压对风扇转速的影响不大;当占空比不变时,随着工作电压的下降,对应的风扇转速也随之降低。
2.6 开关量信号读入程序
开关量信号读入包括风扇故障状态、启动开关信号及驾驶员发来的反转控制信号三部分,在上文中已经介绍风扇故障状态信号的读取,其他两个开关量信号的读取方法与之相同。在读取前需要对单片机的 IO 口初始化配置,并且需要指定 IO 口的方向,这一功能通过 PTnDD 特殊功能寄存器实现;而后通过 PTAD_PTAD3 的状态来确定 PA3 引脚电平的高低,其值为 1 时 PA3 收到的是高电平,反之为低电平。该方法可获取各开关输入信号的状态。
2.7 CAN 总线通讯程序
该程序包含了 CAN 模块的初始化、CAN 数据的发送和接收等过程,实现该程序的功能需要利用 Freescale 单片机的局域网通信控制器 MSCAN,MSCAN 具有监听模式、MSCAN 睡眠模式、MSCAN 初始化模式、MSCAN 关机模式及环回自测模式五个工作模式,使用时首先需要进行初始化,配置工作模式、传送波特率、数据帧类型及中断功能。在正常使用过程中,主要使用发送和接收两个功能,接收时可以采用查询方式或中断方式,在此采用中断方式以提高程序的运行效率。
在 CAN 模块的初始化中,首先判断 CAN 模块是否启动,若未启动,则直接开始系统初始化;若已启动,则在 MSCAN 没有等待发送数据帧的前提下,设置模块进入初始化状态,在模块进入初始化状态后,再向下运行后面的程序。CAN 模块进入初始化状态后,需要对 CAN 通讯的波特率进行配置,这里通过 CANBTR0 和 CANBTR1 两个特殊功能寄存器实现。前者用来配置 CAN 计时参数,包括同步跳转宽度和波特率的预分频值;后者根据传输速率的高低,设定数据传输时的样本数量,可选择 1 个或者 3 个。且该寄存器也可以设定每个位时间的时钟周期数和采样点的位置。
此外,在数据接收过程中,需要对不需要接收的数据进行过滤,这一过程可通过配置标识符掩码寄存器 CANIDMRn、接收寄存器 CANIDARn 及标识符验收控制寄存器 CANIDAC 实现。其中,掩码寄存器用于配置需要比较的位,接收寄存器则代表比较的地址值。针对不同标识符需要应用不同的寄存器,扩展标识符需要应用四个接收和掩码寄存器,标准标识符只应用前两个寄存器,即 CANIDAR0/1 和 CANIDMR0/1。
当上述寄存器配置完成后,通过判断 CANCTL0 和 CANCTL1 寄存器中的标志位,回到正常工作模式,且与总线时钟进行同步,开始进行数据的收发。为了提高系统的执行效率,将数据的接收配置为中断模式,这里通过 CANRIER 寄存器中的 RXFIE 位进行配置。
上述过程完成了 CAN 模块的初始化,之后便可进行数据的发送和接收。首先,需要将发送过程封装为一个函数,以便进行数据的发送操作,该函数需判断发送的数据类型及个数是否正确,且在发送过程中,还需通过发送器标志寄存器来确定当前为空的发送缓冲器。确定好发送缓冲器后,再通过选择寄存器来选定该缓冲器进行数据发送。
发送的 CAN 报文包含标识符和数据两部分,在发送时,标识符需装载在 CANTIDRn 寄存器中,单片机的 CAN 模块具备 CANTIDR0~CANTIDR3 共计 4 组标识符寄存器,用于满足标准帧和扩展帧的标识符加载的需要。对于扩展帧而言,标识符由 29 位组成,4 组标识符寄存器中还有 3 位特殊的标志位(SRR、IDE 及 RTR)。在进行标识符加载时,需要通过移位或者与或处理等将地址标识符及 3 位特殊的标志位加载到 CANTIDRn 的 4 组寄存器中。
同理,发送的数据也需要通过数据段寄存器 CANTDSRn 加载相应的数据实现。此外,在发送数据前还需要通过寄存器 CANTDLR 指定发送的数据帧中的字节数量;通过 CANTTBPR 指定数据帧的优先级;通过 CANTFLG 指定前述确定的发送缓冲器;最终由 CAN 模块自动实现数据的发送。
对于 CAN 数据的接收,需要采用中断模式,一旦接收的数据通过了接收滤波器的校验,即可触发 CAN 模块的中断,并进入中断函数中。在进入 CAN 中断函数中后,首先需要判断接收的 CAN 数据的类型是否正确,进而确定当前数据帧中的数据字节数量;由于标识符寄存器中 3 个特殊标志位的存在,需要对接收的标识符寄存器通过变换,得到真正的地址标识符;最后需要将 CAN 数据帧的各字节数据依次取出,完成整个数据接收过程。
2.8 状态显示程序
状态显示是通过数码管完成的,在此采用 16 通道等电流数码管驱动芯片 MBI5024。状态显示程序包括底层驱动程序和显示内容控制程序两个方面。
显示装置使用了 2 位数码管,共 16 个码段,MBI5024 底层驱动程序包含对数码管各码段的控制引脚的规划。 MBI5024 通过串行通讯传递显示信息,在此需要两个字节数据,即 16 位数据来控制 16 个码段,图 16 为 2 位数码管各码段与控制字节的对应关系,在工作时,发送的第一个字节数对应右边的数码管,用于控制 a->h 各码段的数据;发送的第 2 个字节是左边的数码管,即 A->H 的数据。确定好数码管的各码段与字节数据之间的关系后,便建立了数码管显示内容的真值表,将真值存入数组中,在使用时根据需要显示的内容查表便可确定需要发出的字节数据的内容。
显示程序包括四部分,分别是总体控制程序、数字显示控制程序、特殊字符显示控制程序以及 MBI5024 通讯程序,通过这四部分,可以控制数码管显示各种信息,包括控制器当前工作状态、传感器测试信号、风扇点击的故障状态等信息。其中总体控制程序可根据控制器当前的状态确定显示内容,显示内容包括数字和特殊字符,数字和特殊字符的显示控制分别由各自的显示控制程序实现,此外,还需要控制器将数据发送到 MBI5024,即需要通讯程序,将数字显示及特殊字符显示程序确定的字节内容向外发送,并且可在通讯程序中通过优化的发送机制实现发送速度的调整。
3 实车测试
在设计完成后,需要检测其功能是否完善,各个模块能否有序协调的工作,是否满足使用要求。因此,将总体框架程序、各底层驱动程序与电子风扇控制器硬件相结合,在实验场对电子风扇控制器进行实车测试,对电磁离合器风扇及电子风扇系统的油耗进行了对比分析,对其使用效果进行相关评价,实验结果表明采用电子风扇后,在各测试工况下都具有明显的节油效果。
实验在空车、中载和重载三种不同载荷下进行,装有电磁离合器风扇的车辆和同种装有电子风扇的车辆分别在各种载荷下采取不同速度测试四到五次,记录各自的油耗进行对比,如图 5。
实验结果可知,不同载荷下节油率稍有变化,但整体电子风扇能够起到很好的节油作用,设计出的软件可以很好地控制各个硬件模块有序协调地进行,具有很好的实用性。
4 结论
(1)本文分析了电子风扇控制系统在工作时的功能需求,提出了相应的软件代码设计方案。
(2)基于 Freescale 单片机专用编译环境 CodeWarrior 对各功能模块的底层驱动程序进行设计,包括晶振配置程序、传感器信号采集及处理程序、PWM 输出控制程序、风扇状态诊断程序、开关量信号读入程序、CAN 总线通讯程序、状态显示程序等,能够控制电子风扇控制系统有序工作。
(3)进行了总体框架的的设计,设计了多任务时间规划机制实现了上述多种功能的协调工作。