基于硬件角产生器的齿轮角度和转速测量设计
2022-12-03尚国庆陶青平刘满丽
尚国庆,陶青平,刘满丽
(中国电子科技集团公司第五十八研究所,江苏无锡 214035)
1 引言
引擎控制系统的控制器在测量转速的同时,还必须在精确的齿轮角度产生如怠速控制、点火正时控制[1]和燃料喷射等信号,因此对角度测量的分辨率要求越来越高。目前的测速器件主要有光电数字脉冲编码器[2-5]、霍尔传感器[6-9]、电容式传感器[10]以及测速发电机[11-13]。测量的方法有定时测角法(M 法)、定角测时法(T 法)和频率/周期法(M/T 法)[14]。M 法通过测量一定时间内的脉冲个数来获得速度值,适合高转速情况,缺点是角度分辨率低;T 法通过测量相邻2 个脉冲的时间间隔得到速度信息,适合低速情况,高速时误差大;M/T 法通过同时测量编码器的脉冲数和在此期间的高频脉冲数,兼顾了高速和低速情况,但是软件实现相对复杂,而且无法直接获得角度信息。所以传统方法无法在实现宽范围转速测量的同时实现高分辨率角度的测量。针对上述问题,本文介绍了一种RM57L843 处理器硬件角产生器(HWAG)模块在齿轮角度和转速测量中的设计与应用,HWAG 模块使用时间插入算法,实现高分辨率角度测量,结合高端定时器N2HET 的定时器功能,获得转速信息。相对于传统方法,该方法软件复杂度低,在测量转速的同时可实现高分辨率的角度控制。
2 奇点与编码器
编码器分为绝对式与增量式2 类。绝对式编码器具有固定零点,输出代码是轴角的单值函数,缺点是制造工艺复杂,不易小型化[15]。增量式编码器易于小型化,响应速度快,结构简单,缺点是没有固定零点。本设计采用增量式编码器,为了解决增量式编码器没有固定零点的缺点,需要进行如下改进:对于每圈N 个脉冲的增量式编码器,将其中连续的3 个光栅改造为1 个扩展光栅。改进后的编码器每圈产生的脉冲数量是(N-2)个,并且扩展光栅的脉冲周期是正常光栅周期的3 倍。例如,设计中应用齿轮的齿数是60,光栅产生的脉冲信号如图1 所示。每个普通齿轮产生的脉冲表示6°,其中扩展光栅产生的脉冲定义为奇点,并将奇点信号后的第一个齿轮边沿信号定义为零点。HWAG 模块可以在奇点期间产生硬件中断,在此中断后的下一个脉冲边沿就是零点。编码器的光栅数量一般与待测齿轮的齿数相同,即每个光栅产生的脉冲周期与实际的被测齿轮脉冲信号同步,编码器的零点与齿轮的零度角一致。
图1 60 齿脉冲与奇点信号
3 HWAG 运行原理
3.1 HWAG 模块简介
HWAG 模块带有可编程的输入滤波器,外部信号经过滤波后,根据时间插入算法,将脉冲信号划分为K个角度增量信号,同时通过硬件接口向N2HET 模块提供角度增量信息。HWAG 模块具有以下特点:可编程的K 值;在第一个奇点同步后自动同步检查;直接与N2HET 连接;可编程的齿轮活动边沿;开始位同步于齿轮边沿;可选择齿轮输入引脚。
3.2 角滴答时钟产生算法
一般引擎系统中普遍使用的齿轮齿数是60,每个齿的角度分辨率是6°,无法满足发动机在精准的角度产生燃料喷射和点燃火花塞等控制要求,因此需要提高系统的角度分辨率。角滴答时钟产生器是HWAG模块的核心,PCNT(n)表示当前脉冲的周期值,PCNT(n-1)表示前一个脉冲的周期值。基于前一个齿轮周期PCNT(n-1),使用时间插入算法来产生角滴答时钟,该算法基于设置的系数K 来划分上一个齿轮周期。齿轮周期是2 个活动边沿之间的周期,HWAG 全局控制寄存器2(HWAGCR2),并定义了输入信号是下降沿还是上升沿,角滴答时钟产生器的原理如图2 所示。
图2 角滴答时钟产生器的原理
时间插入算法由5 个主要关联的计数器组成。齿计数器TCNT 是一个8 位计数器,记录当前的齿轮数。每当捕获脉冲边沿信号,TCNT 计数器递增,直至到达齿轮寄存器(HWAGTHVL)中的值,并在下一个齿轮输入的活动边沿到达时复位TCNT 数值。HWAGTHVL 中的值表示奇点所在的齿轮,由于在奇点期间脉冲周期是普通齿轮的3 倍,为了保证在下一圈期间角滴答时钟不发生突变,在下一圈的第一个齿脉冲期间依然使用奇点前一个齿轮周期的值作为PCNT(n-1)中的值。
周期计数器PCNT 计算2 个齿轮间的周期PCNT(n),计算的时钟是HWAG 模块的工作时钟VCLK2。这个活动边沿(下降或上升)由HWAGCR2 寄存器中的TED 位选择。齿轮输入的一个活动边沿到达时,PCNT的值被保存在HWAG 前一个齿轮周期值寄存器(HWAPCNT1)中。
步进计数器SCNT 按照系数K 步长计数到前一个周期值PCNT(n-1),这个周期值保存在HWAPCNT1寄存器中。当SCNT 超过PCNT(n-1)时产生一个角滴答时钟,并且SCNT 重置为SCNT 和PCNT(n-1)之间的差值。SCNT 的周期结果是PCNT(n-1)/K,这样就产生了角滴答时钟,每个角滴答时钟表示一个角度增量,将原齿轮的角度分辨率提高到K 倍。
滴答时钟计数器TCKC 是一个递减计数器,初始值是系数K。角度计数器ACNT 用于累加产生的角滴答时钟,因为齿轮速度的变化造成角度计数器行为的不连续。在减速过程中,如果TCKC 在新的齿边沿出现前计数到0,则SCNT 和PCNT(n-1)不再产生角滴答时钟信号,ACNT 将暂停计数直到出现新的齿边沿。在加速过程中,如果TCKC 在新的齿边沿(该系统中齿轮输入的上升沿)出现时未计数到0,剩余的滴答时钟计数值加到ACNT 中。这样设计的目的是在齿轮非匀速运行时,每个齿轮产生的角滴答时钟数是确定值K 个。
3.3 硬件滤波
齿轮的输入来自模拟部分,其对外部噪声敏感,因此需要滤除信号中的毛刺。在输入信号被内核使用前,HWAG 对其进行数字滤波。经过n 个角滴答时钟后,滤波器使输入信号生效。因为滴答计数器是递减计数器,计数器的余值(1-X)需要被设置。滤波寄存器中的计算值取每个齿角滴答时钟计数值K。齿轮输入类似一个带有截止频率的低通滤波器。一个齿轮在下降沿、活动沿输入的窗口滤波器如图3 所示。滤波寄存器值为步宽[K(1-X)],当滴答计数器的值到达这个滤波寄存器值时,齿轮输入接触阻塞。
图3 齿轮输入下降沿、活动沿的窗口滤波器
4 软件设计
该设计的软件主要分为HWAG 模块和N2HET模块2 个部分。HWAG 模块根据时间插入算法提供角度信息,需要在系统运行前对该模块进行初始配置,主要包括齿轮数量、角度分辨率系数K 等。N2HET 模块主要用于定时,该系统在4 个特定角度点输出控制信号,同时输出转速信息。
4.1 HWAG 软件设计
在系统的初始状态,齿轮的角度处于不确定状态,上电运行后首先需要确定零点位置,实现HWAG模块与齿轮角度的同步,系统的软件流程如图4 所示。首先对HWAG 进行初始化设置,齿轮信号的输入引脚是软件可选的,HWAG 引脚选择寄存器(HWAPINSEL)来执行选择功能。复位后默认选择是HET[2],该系统中的齿轮数是60,奇点占用齿数是3,因此,齿轮数量寄存器(HWATHNB)的值是57。所有HWAG 模块中断开启,HWAG 中断使能设置寄存器(HWAENASET)数值为0xFF,中断的目的是利用硬件中断条件PCNT(n)>2PCNT(n-1)实现零点位置的确认。在HWAG 当前齿轮步宽寄存器(HWASTWD)中写入角度分辨率系数K,表示将原有的齿轮角度6°划分为K份,角度分辨率提高了K 倍。该设计中的K 值由上位机软件设置,方便引擎控制系统满足不同分辨率的要求。设置全局控制寄存器(HWAGCR2)的TED 位选择齿轮边沿的上升沿作为活动边沿,设置CRI 位选择使能硬件探测准则,然后设置STRT 位启动HWAG 运行。
图4 软件流程
完成初始配置后,需要确认零点位置。在HWAG的运行过程中,当产生PCNT(n)>2PCNT(n-1)的中断条件时,设置标志Flag 值为1,表示此脉冲信号为奇点信号。在普通齿边沿信号中断中如果标志Flag 值是1,则设置当前脉冲边沿作为零度角。在此中断中,暂停HWAG 运行,暂停N2HET 运行,设置标志Flag 值是0,清除HWAG 角度值寄存器(HWAACNT)、HWAG当前齿轮周期寄存器(HWAPCNT)、HWAG 当前齿轮数量寄存器(HWATHVL)的值,清除N2HET 模块中CNT 指令数据段的值,定义当前角度值是0°。重新启动HWAG 和N2HET 模块,此时实现了HWAG 与齿轮信号的零点角度同步,同时HWAG 硬件接口向N2HET 模块提供角度增量。
4.2 N2HET 软件设计
N2HET 是TI 公司的第5 代智能定时器模块。N2HET 使用基于RISC 的专用定时器微型机来执行30 条指令,每条指令由1 个32 位的程序段、1 个32 位的控制段和1 个32 位的数据段组成。指令存储在N2HET 模块的RAM 中。HWAG 接口在每个循环分频时钟周期(LRP)[16]向N2HET 提供角度增量,表示自上一个N2HET 循环分频时钟周期开始HWAG 模块测量的角度增量。N2HET 模块软件部分的主要作用是提供定时基准和角度判断控制。
通过HET IDE 软件编写代码,编译后可以生成C代码。N2HET 指令设置参数如下:
L00 CNT {next=L01, reg=B, irq=OFF,max=0x1FFFFFF};
L01 CNT {next=L02, angle_count=ON, reg=A,irq=ON,max=60K};
L02 ACMP {next=L03, en_pin_action=ON,cond_addr=L03, pin=0, action = SET, reg=A, irq=ON,data=P0};
L03 ACMP {next=L04, en_pin_action=ON,cond_addr=L04, pin=1, action = SET, reg=A, irq=ON,data=P1};
L04 ACMP {next=L05, en_pin_action=ON,cond_addr=L05, pin=2, action = SET, reg=A, irq=ON,data=P2};
L05 ACMP {next=L06, en_pin_action=ON,cond_addr=L06, pin=3, action = SET, reg=A, irq=ON,data=P3};
L06 BR { next=L00, cond_addr=L00,event=NOCOND};
其中L00 CNT 指令工作在时间模式,每个LRP 周期,CNT 的数据段加1,为系统提供时间信息;L01 CNT指令工作在角度模式,作为N2HET 角度计数器,累加HWAG 模块提供的角度增量,保存在寄存器A 中。该系统中齿轮数是60,每个齿轮角度划分K 份,每份表示角度增量为6°/K,因此最大累加值是60K。
ACMP 指令用于执行角度比较,L02 ACMP 指令中设置的角度值是P0,P0 的值由上位机软件设置,便于引擎控制系统调校喷油角度等,当角度值到达P0时,引脚pin0 输出高电平,同时产生中断信号,其他3个点的角度点设计以此类推。4 路角度测量的初始值是7.5°、97.5°、187.5°、277.5°。BR 指令用于无条件跳转到L00 指令,在每个LRP 周期循环执行所有指令。
4.3 角度与转速计算
当角度到达待测点7.5°、97.5°、187.5°、277.5°时,分别在不同引脚拉高电平信号,通过对比输入脉冲信号的零点与各个角度对应的引脚电平信号的位置关系,可以计算出实际的角度值。同时通过N2HET 模块中的L01 CNT 指令的数据段获得对应角度经过的时间值,即可得到实际转速值。
5 测试结果
分别设置不同的角分辨率系数K,调整齿轮的转速,测量角度与转速,测试结果如表1 所示。
从表1 可以看出,设计中使用齿数为60 的齿轮,每个齿轮的角度是6°,通过HWAG 模块配置不同的K 值,可以使角度分辨率提高K 倍。测量结果与实际的角度和转速相差很小,基本在理论范围内。转速增大后,转速测量误差增大,主要是因为采样时间缩短,后续可以通过改进参考点来增加采样时间,以减小计算误差。
表1 角度与转速测量结果
6 结论
本研究介绍了以HWAG 模块为核心的高分辨率齿轮角度和转速测量系统,相对于传统软件算法,HWAG 作为硬件模块使用时间插入算法,可以将齿轮角度测量的分辨率提高K 倍。结果表明,该设计可以为引擎控制系统提供高精度的角度和转速值。对于更复杂的引擎控制系统,可以增加N2HET 软件部分的ACMP 指令数量,将目前的4 个角度控制点扩展到32个。