基于工控机的方波发生器的实现潘海阳,刘惠聪,吕永健(空军工程大学工程学院,陕西西安710038)卡模拟发动机转速信号连续变化,介绍了该卡产生方波的工作原理、软件的开发方法以及驱动程序,使用结果满足测试需求,表明该方法有效可行。
某型飞机的发动机工作状态控制系统、进气道控制系统均为电子一液压机械式控制系统以上各系统的工作状态与发动机的工作状态密不可分,而发动机转速信号1、2又是反映发动机工作状态的重要参数。为了在地面检测与发动机相交联的各电气控制系统是否正常工作,从而确保发动机正常工作,就必须模拟飞机飞行时发动机在各种工作状态下的低压涡轮转速m、高压涡轮转速2经转速传感器转变为频率正比于转速的方波信号。为了实现自动化检测,我们利用PCL-818L卡实现了基于工控机的方波发生器的功能。
―818L卡的性能及产生方波的工作原理PCL―818L是ADVANTECH公司生产的可在IBMPC/XT/AT机或兼容机上使用的多功能数据采集卡ISA槽是它与计算机的接口。它提供了包括A/D转换、D/A转换、数字输入、数字输出、以及timer/counter等5种通用的测控功能,ADVANTECH公司自行开发的160条引脚、采用0.1MmCMOS工艺的ASIC芯片是其核心器件,其包含有两个主要功能芯片,即:timei/counter电路和DMA控制器。可编程的timer/counter电路,具有3个16位通道,其中的两个通道已固定作为可编程定时器为本模块所用,另外一个可供用户使用。DMA控制器允许PCL―818L以DMA的方式把A/D转换的结果向PC机的内存传递。该卡在提供给用户尽可能大的准确性和可靠性的同时,在设计方面采用了低功耗高集成度的设计方法。PCL―818L在数据采集、过程控制、自动测试方面均有较广的运甩―818L实现方波发生器功能的是利用timer/counter电路产生可编程的方波,操作过程是GATE端加高电平,在控制寄存器和计数寄存器的初值N置入后,OUT口输出高电平,经过1个CLK脉冲周期开始减去计数如果置入计数寄存器的初值是偶数,减法计数对每个CLK脉冲减2经过N/ 2个CLK脉冲,计数值达到0值,OUT输出变为低;计数寄存器内的初值装入计数工作单元并继续减2计数,经过N/2个CLK脉冲计数值达到0值OUT输出立即变为高并重复上述过程。这样,OUT输出完全对称的方波。如果置入的初值是奇数则稍有不同。当OUT输出变为高电平瞬间,计数寄存器内的初值计数工作单元装入时减1成为偶数然后对CLK减2计数达到0值时,OUT输出不立即变为低,而是在经过一个CLK脉冲后变低。也就是说,方波高电平持续时间为GV―1)/2+1=(+1)/2个CLK脉冲。OUT从高变为低的瞬间,计数寄存器内的初值计数工作单元装入时减1成为偶数,然后对CLK减2计数,达到0值时,OUT输出立即变高。即方波的低电平持续(N―1)/2个CLK脉冲,然后重复上述过程。
:200卜07―10 1C:潘蒯(人盟-男黑吝输滨人硕拂b主栳事命於故障障诊断研畜4ed.http://ww.cnki.net 2测试系统的结构体系及要求该测试系统结构体系如,工控机控制采集卡产生程控激励采集卡进行A/D转换,并将转换后的信号传送给工控机进行处理,从而实现模拟从发动机到各控制模块的机电控制系统。
测试系统要求模拟发动机经转速传感器转变为的方波频率在0~3800Hz范围可连续变化每次频率变化量为3方波发生器功能的实现818L产生方波的原理看,对产生方波频率的范围和变化量的大小起决定性作用的是CLK脉冲。由于该卡对集成进160引脚芯片的可供用户自用的counter0计数器的CLK脉冲定为100kHz,不能满足测试需要。所以要利用其预留的外接CLK脉冲接口改变CLK脉冲频率以达到测试的要求该卡技术要求外接CLK脉冲大不超过10MHz故根据timer/counter电路的工作原理选择一个10MHz的夕H接CLK脉冲作为counter 0的基准时钟。
3.1方波频率的计算Dv2),当/(:k被选定后,事件计数频率是由先后写入counter 0的计数寄存器的数Div1、Div2决定。计算当/=3800、/=3799时counter 0应写入计数寄存器中的数,来判断可否满足通过程序控制实现方波频率变化量为一个赫兹的要求,经过计算,当/=3 800时,应写入计数寄存器中的数为2631,当/=3799时,应写入计数寄存器中的数为2 632,故可由程序控制。
3.2软件的开发虽然ADVANTECH公司采集卡附带了功能强大且丰富的驱动程序,由于采集卡的基准时钟改变了,其驱动程序无法控制采集卡发出与用户要求相符的准确的方波频率。我们编写一个通过读写采集卡的底层寄存器来实现发出准确频率的函数。
3.2.1寄存器格式表1定时/计数器允许寄存器818L有16个地址连续的寄存器,以下是与产生方波有关的寄存器的数据格式。表UBASE+ADDR+10冲D7―D2位为可忽略不计位。D1:TC1为计数器0输入脉冲源方式。TC1= 0为脉冲源来自外部时钟脉冲;TC1=1时脉冲源来之板内的100kHz时钟脉冲。由于选用外部时钟脉冲,D1位应为0.D0:TC0为定时器禁止/允许工作。TC0=0时禁止定时;TC0=1时由TRIG0控制定时,当TRIS0为高电平时成组的触发脉冲由定时器发往A/D转换器。表2(BASE+ADDR十15)中的8位数据分别控制对采集卡的计数器的选择(D7、D6)、读写操作的选择(D5、D4)、操作方式的选择(D3―D1)以及对写入计数寄存器中的数据格式的选择,D0为1时计数寄存器中的数据格式为BCD码,为0时计数寄存器中数的数据格式为16进制数。表3为SC1.SC2取值的定义。818L只将counter0提供给用户自行使用,所以D7、D6位的值都应为0.表4为RW1、RW2取值的定义。timer/counter电路的计数寄存器是16位的,要完整的将16位数写入计数寄存器,应该先写低8位,再写高8位,所以D5、D4位的值都应为1.表5为M2、M1、M0取值的定义。当模拟发动机转速时选用方波发生器模式,在程序结束时必须将M2、M1、M0赋值为0,否则counter 3.2.2驱动模块的开发该驱动模块可以满足选用外部时钟脉冲时准确频率的方波的产生。函数预留的两个软件接口是所要产生的方波的频率以及外接时钟脉冲的频率。用C语言开发的源程序如下:操作RW,1RW,0计数锁存00读/写低8位01i写高8位10先低8位,再高8位11表5选择操作方式000计数结束中断方式001可编程单稳态X10频率发生器X11方波发生器100软件触发选通101硬件触发选通freqout函数的两个形参clock、req相除计算出应写入计数寄存器中的数。计数寄存器是16位的写该寄存器是先写低8位,再写高8位。数据格式转换将应写入计数寄存器中的数分割为两个8位的二进制数。后根据数据采集卡寄存器的数据格式,控制其产生方波。
4结论从上述问题可以看出,开发商提供的驱动程序虽好,但在特定的条件下仍无法满足要求。如果不了解采集卡的硬件原理,通过访问底层寄存器的编程方法来实现测试功能是不可能从根本上解决问题的。驱动程序与寄存器编程的关系犹如“傻瓜”相机与调焦相机一样,驱动程序编程只需按一下“快门”便可。虽然灵活性差,但简捷方便在大多情况下均能满足测试要求。寄存器编程过程繁琐、需要了解采集卡硬件的工作原理只有这样才能使软件和硬件相配合使的采集卡功能完全发挥出来。