产品搜索
汽车仪表校验中高精度定时技术的应用
作者:管理员    发布于:2018-04-13 14:02:52    文字:【】【】【

  汽车节能汽车仪表校验中高精度定时技术的应用112陈旭红,杨勇波‘(1.湖北汽车工业学院电气工程系,湖北十堰442002;2.武汉大学电气工程学院,湖北武汉430072)出了利用高精度定时技术解决视觉闪变的方案。在分析WindowsXP操作系统定时技术的基础上,给出了方案的具体实现。

  汽车仪表是汽车必不可少的配件之一,仪表厂家在对表进行大批量生产之前必须对表进行试制,对试制的仪表进行检验以确定其质量是试制中必不可少的一步,另外表售出后出现问题时技术人员维修时,也需对仪表进行校验。因此研制体积小,重量轻,界面友好,操作方便,便于携带的仪表校验仪必将深受广大试制人员和售后技术人员的欢迎。

  1闪变的产生为方便现场工作人员,校验仪应尽量小巧、轻便,界面友好。为此,我们定制了超微型PC机的主板、CPU,自己设计电源板、仪表信号发模块、采集模块等,同时使用了超薄液晶触摸式显示器。

  仪表校验的过程是将仪表接入校验仪预先设计的接口,然后在Windows环境下进行相应操作,由仪表信号发模块发出信号驱动仪表指针转动到指定位置。对于照明灯和报警灯灯光信号,先进行单独校验然后整体校验。校验时由于灯光信号设计时有共正、共负之分,因此在设计灯光信号通道时,为了灯光信号共正、共负接时都能使用同一通道,避免共正,共负使用两套通道,单独设计了共正共负切换端子,从而减小了板卡体积。这样当某一通道所接欲校验灯为共正时,共正、共负端子就切换到共正,否则就切换到共负。

  每种型号的仪表指示灯设计时都有共正、共负之分,这样在校验单灯时可以很正常的进行校验。但在指示灯整体校验时,由于指示灯分共正、共负两类设计时只有一个共正、共负切换端,为了让所有的指示灯都亮必须在共正、共负之间进行切换。

  由于人眼视觉暂留是1/24s,当切换频率低于25Hz时就会有视觉闪变。也就是说共正、共负之间的切换时,每次切换间隔不得大于40ms,再加上循环指令执行时间和硬件执行时间,每次切换间隔不得大于10ms.根据现场经验,当每次切换间隔大于10毫秒时将会有视觉闪变。

  为解决此视觉闪变,课题组采用了高精度定时技术。

  2WindowsXP操作系统下的定时原理及其定时技术2.1定时原理Windows操作系统下的定时都是利用微型计算机系统中以Intel8253(AT机是8254)为核心组成的系统定时逻辑。8253是一个可编程间隔定时器/计数器,通过它可以把这种通用的、多定时的元件当作一个系统软件中的I/O端口阵列来处理。所以8253解决了微型计算机系统中普遍的问题之一即在软件的控制下的高精度定时。

  253含有3个独立的计数器0、1和2,每个计数器包括2个寄存器,分别为:8位的控制寄存器,16位的计数寄存器CR和16位的输出锁存器OL,共同占用一个I/O端口地址。设置定时时,在计数器0的江反加上1.193182的信号(每个匕反信号使计数器减1),并将工作方式设成3,产生对称的方波,预置CR中时间常数为0当计数满65535时,OUT端就输出一次时钟中断信号,这样OUT端输出Windows操作系统下的定时都是利用系统的方波信号,这里方波信号指CLK信号或OUT端的输出信号。当使用OUT端输出的18.2Hz的方波时钟中断信号时,其定时的小定时间隔不能小于55ms.若想获得更小间隔的定时,则可通过修改CR中的计数值或获得CLK方波计数值然后再转换成相应时间来实现。通过这种方式可获得微秒级的定时,这对工业现场的测控设备来说已经完全够用。

  2.2关于定时误差由于实现定时功能实质上是和硬件交互,因此定时还存在一定的误差。这种误差一方面是因为硬件时钟信号的误差,不同的机器可能有极微小的差别;一方面是因为执行指令时需耗费时间引起的误差。

  2.3定时技术2.3.1SetTimer函数创建计时器定时使用计时器是简单的时间控制方法。计时器是由SetTimer函数创建的一个内存对象。他对PC机的硬件和ROMBOIS构造的计时逻辑进行了简单的扩展。使用了OUT端输出的18.2Hz的方波时钟中断信号,时间间隔为54.9ms.Windows98及以前的操作系统使用此种定时原理,因此,计数器的短时间间隔为55ms,且转换成中断次数时会产生舍入误差。WindowsNT及更高版本操作系统定时原理不同于上述原理,其定时间隔小为10ms.另外,虽然中断是实时发生的,但WMTIMER是低优先级消息,且当队列中己有一条WMTIMER消息时,若系统又要向其中放入另一条WMTIMER消息时,这2条消息会被合并为1条消息。因此,计时器对消息的处理在时间和数目上都是不确定的。

  往往不能满足实时控制环境下的应用,想实现更高精度的定时必须寻求其他技术。

  2.3.2通过对8253芯片编程实现高精度定时SetTimer函数定时局限于OUT端输出的18.2Hz的方波时钟中断信号,其频率偏低,若能修改CR中的计数则可改变OUT端输出的时钟中断信号,从而能提高定时精度。

  98及以后的操作系统中已经没有多大用处。我们可以通过对8253的T/C2计数器编写虚拟驱动程序VxD,实现1kHz以上频率的时间间隔控制。VxD运行在CPU的ring 0级,可以直接控制硬件,还可执行一些特殊指令。因此,通过编写VxD,采用中断的方式直接控制8253的计数器2,可以获得更更短的时间间隔。

  实现秒级延时及while循环可获得定时间隔。

  精度比WMTIMER消息映射高,在较短的定时中其计时误差为15ms,在较长的定时中其计时误差较低,如果定时时间太长,就好象死机一样,CPU占用率非常高,只能用于要求不高的延时程序中。实现方法与利用COleDateTime类和COleDateTimeSpan类实现定时的方法类同都是通过获得时间偏差,所不同的是该方法精度更高。

  以上两种方法都要借助于while循环,因此CPU的占有率非常高,在定时程序运行期间,电脑象死机一样。

  2.3.5多媒体定时器多媒体定时器实现定时有两种方式。其精度可函数,该函数与GetTick-Count函数类似,该函数定时精度为ms级,返回从Windows启动开始经过的毫秒数。微软公司在其多媒体Windows中提供了定时器的底层API持,利用多媒体定时器可以很地读出系统的当前时间,并且能在非常的时间间隔内完成一个事件、函数或过程的调用。不同之处在于调用timeGetTime函数之前必须将Winmm.lib和Mmsystem.h添加到工程中,否则在编译时提示timeGetTime函数未定义。由于使用该函数是通过查询的方式进行定时控制的,所以,应该建立定时循环来进行定时事件的控制。

  性能计数器(Performancecounter)实现高精度定时有两个Win32的API函数与系统定时有关。它值增加1时。其时间间隔为1/1193181.6=838ns,因此它可以达到微秒级定时。实际上,PerformanceCounter的输入频率就是CPU的时钟频率。而PerformanceCounter就是CPU的计数器嘀哒数。这两个函数是VC提供的仅供Windows95及其后续版本使用的时间函数,并要求计算机从硬件上支持定时器,如果硬件支持这两个函数,函数就返回零否则返回非零。

  2.4定时的两种类型以上所述的定时技术,可以归结为两种类型。

  一种是非周期性的定时,另一种是周期性的定时。其中多媒体定时器和SetTimer函数创建的计时器是周期性的定时技术,其他均为非周期性的定时技术。

  工业现场中,除了对某些事件进行一次性定时,大部分定时都需要重复定时。对一次性定时的事件可以使用非周期性的定时技术进行处理,而对重复定时事件则可使用周期性的定时技术进行处理。周期性定时精度高可达1ms,而非周期性定时高可达1ys.生产实践中,象类似交流采集及其他定时间隔要求较高的工作,往往需要小于一微秒的定时。

  2.5定时实现方法在现代工业应用软件中,往往要求人机交互良好、界面美观,这就要求在Windows操作系统下进行可视化编程。然而现代工业应用软件对实时性的要求同样很高,中断技术可以很好的满足实时性,在Windows操作系统下要实现硬件中断只能编写VXD,但对现场技术人员来说编写VXD具有较高难度。因此为了较好的满足实时性,借助于While的循环查询技术和高精度定时技术的配合具有很强的可行性。并且,为了满足实时性,该While循环往往是死循环,如果对该循环处理不当,CPU资源将被该While循环完全占用,整个程序就无法接受外来输入,这是用户所不允许的。为了解决该问题,可以将While循环加入线程函数中,这样既满足了实时性,同时对用户来说也没有任何损失。本文所介绍的项目就是采用这种方案实现定时控制。

  项目程序中,专门开辟一个线程用于While循环,并在While循环中使用CPU性能计数器,当时间间隔达到9ms时就输出信号使共正、共负进行切换,从而防止了视觉闪变。

  3结论本文介绍的项目在东风公司某专业厂已通过技术鉴定验收,用户对其性能非常满意。并且本文的定时技术是通用的,在工业现场具有很强的实用性和应用的广泛性。

脚注信息
版权所有 Copyright(C)2012-2013   北京三丰量具总代理|三丰量具总代理|日本三丰轮廓度仪总代理——北京三丰量仪精密工具有限公司   技术支持:三丰量具总代理