基于FPGA和PCI的高精度测速板卡的设计与实现
扫描二维码
随时随地手机看文章
摘要:经典的码盘数字测速方法有M法、T法、M/T法,但都有一定的不足。为了克服原有方法的不足,设计并实现了一种在较大速度范围都有良好精度和良好快速性的测速方法。电路采用FPGA实现,测速得到的数据通过PCI总线从设备控制器实现与控制计算机通信。从而根据实际传输的需要,简化了PCI从设备控制器,实现了PCI总线I/O普通读与猝发读数据的功能。
关键词:测速;FPGA;PCI;M/T
O 引言
增量式码盘是一种原理简单,抗干扰能力强,可靠性高,适合于长距离传输的位置与速度测量装置,已成功应用于大量的控制系统中,极大地提高了其位置控制精度。理论上,只要测得码盘输出信号的频率,即可得到被测轴的转速,并且可以得到比模拟方法更高的测量精度。本文以增量式码盘为基础,设计实现一种在较宽速度范围都有较高精度并且有良好反应速度的速度、位置测量装置。
利用增量式码盘的反馈脉冲信号测量速度的典型方法有3种:M法、T法和M/T法。其中,M法是直接计取给定采样周期内的反馈脉冲数来测量速度的,低速时会因为脉冲数少而影响测速精度;T法是通过测量两个相邻反馈脉冲的间隔时间来测量速度的,高速时则因为脉冲间隔短而导致精度不高;M/T法结合了前两种方法的优点,在大致相等的采样间隔内,计取Cm个反馈脉冲,并同时计取这Cm个反馈脉冲间隔内插入的高频时标信号数Cf,经计算得到速度测量值。M/T法虽然克服了前两种方法的缺点,但仍存在低速时采样时机不确定,精度不高等问题,这给定周期采样的数字伺服控制系统带来很大的不便,所以又出现了变M/T法等方法,以进一步改善M/T法的性能和实用性。
本文利用FPGA实现了一种改进的M/T法,克服经典M/T法的不足,其测速电路与控制器间的数据接口形式有PCI总线和双端口RAM,便于在高性能控制系统中使用。
1 总体方案
根据控制系统的实际情况,所设计的测速板具有位置测量和速度测量功能,如图1所示,由倍频辨向模块、改进M/T法测速模块、PCI从设备控制器三个部分组成。
1.1 倍频辨向
增量式码盘的典型输出是两个相位差为90°的方波信号A,B以及零位脉冲信号Z(见图2)。
A,B之间的相位关系标志被测轴的转向,即当正转时A相超前B相90°,反转时B相超前A相90°。对于每个确定的码盘,其脉冲周期T对应的码盘角位移固定为θ,故其量化误差为θ/2。如果能将A,B信号四倍频,则计数脉冲的周期将减小到T/4,量化误差下降为θ/8,从而使增量式码盘的角位移测量精度提高4倍。从图2可知,根据A,B两方波信号之间相位关系的4次变化,即可产生四倍频信号和辨向信号,这样就可以实现增量式码盘测量精度的提高。
1.2 改进的M/T测速算法
图3展示了改进M/T法的电路原理,这是实现高精度的硬件基础。图4为改进M/T法的时序图。
对图3及其时序图4的分析可以看出:本测速电路在每个反馈脉冲时锁存高频时钟的计数值,两个采样周期间的高频时标增量值Ct实际表示为T2前一个反馈脉冲上升沿到T4前一个反馈脉冲上升沿的高频时标增量,而在采样周期内每个反馈脉冲到来都对反馈脉冲计数器计数,两个采样脉冲采得反馈脉冲增量值Cm实际表示为T1~T3之间的反馈脉冲增量值,位置的反馈脉冲增量值则是在Cm的基础上考虑方向得到的,那么结合32位浮点运算,这种测速方法就解决了采样时机不确定的缺点。
根据上述分析,通过差分处理就可得到当前实际采样间隔内的反馈脉冲增量值Cm和高频时标增量值Ct:
这样得到的速度是当前实际采样间隔内的平均速度:
式中:KR为反馈信号脉冲当量;fo为高频时标频率。
在实际采样点T2处,高频时标信号fo的边沿不能总与反馈脉冲信号plus的边沿保持一致,因而会产生±1个高频时标当量的计数误差,从而影响这种测速算法的测速精度。因此高精度数字测速算法的测速相对误差为:
动态位置算法不仅关注已经发生的反馈脉冲数量,也关注反馈脉冲的发生时刻,其硬件基础是依据图3所示逻辑电路的。根据当前有效采样周期的定周期采样点和实际采样点之间的时间差:
并根据改进的M/T法得到被测对象的平均速度vn,由vn和△Tn相乘就可以计算出时间差△T(n)中所包含的动态位置信息,因此由当前有效采样周期内的增量式高精度动态位置信息可以得出位置量:
可根据这种方法完成测位置的功能。
2 各个模块VHDL实现
根据图1的总体设计方案,使用VHDL语言设计实现如下几个模块。
2.1 倍频辨向模块
为便于使用VHDL语言描述,对图2的码盘信号作如下分析:
(1)当码盘正转时,在一个周期T内,A,B两相信号共有4次相对变化:00→1O→11→01。这样,根据前一次和当前的信号,就可以判断方向,并产生四倍频脉冲。
(2)同理当码盘反转时,也根据A,B两相信号的4次相对变化:00→01→11→10,可以判断方向,并产生四倍频脉冲信号。
(3)当线路受到干扰或出现故障时,则可能出现其他状态转换过程,此时不产生脉冲。
根据上述分析就可以设计出测速辨向模块,当判断正转时,把方向输出置‘1’,反向时置‘O’。
2.2 改进M/T法测速模块
如图3所示可以看出,本部分的VHDL设计分成两个模块:计数器模块与锁存器模块。
其中,计数器模块分为两种:高频时标计数器和反馈脉冲计数器。高频时标计数器在每个高频时标的上升沿都做+1计数,在每个反馈脉冲的上升沿对计数值锁存。反馈脉冲计数器,需要两个输出:反馈脉冲计数值Cm、位置反馈脉冲计数值。其中,Cm的增量值用于速度的计算,所以在每一个反馈脉冲到来时,计数器都+1;的计数值用于位置的计算,所以它是在Cm的基础上考虑了码盘方向得到的计数值,在正转时反馈脉冲计数器+1,反转时-1,当零位脉冲Z有效时,对其置0。然后分别输出Cm,,由此就可以得到反馈脉冲计数器模块。
在每个采样周期的上升沿还要锁存Cm,Ct的增量值和与Ct的差值,由于都做了差分处理,所以这三个锁存器使用双字就能满足设计要求,而锁存器在零位信号Z后不进行差分处理,若采用36 000刻增量式码盘,并进行10 000倍频,位置范围为±720°,那么需要的最大计数值为:
(36 000×10 000×720×2)/360=1 440 000 000
可见,双字锁存器也能满足设计要求。
综上所述,本设计设置了4个双字信号锁存器Cm,,Ct,,同时还需要对其控制输出,所以在PCI从设备控制器中为I/O分配4个双字的地址空间。然后根据PCI总线给出的地址信号PCI_AD[3:2]和数据输出使能信号DATA_EN对这4个双字寄存器寻址输出。
2.3 PCI接口控制器
PCI的时序规则和PCI的总线协议由PCI接口控制器实现,同时它还负责传递地址和数据输出使能信号给测速模块,实现I/O口的基本读与猝发读数据功能。
从设备控制器包括2个部分:奇偶校验模块和PCI从设备状态机。
2.3.1 奇偶校验模块
PCI的奇偶校验提供了一种机制来决定一件作业。该作业判断主设备是否成功地寻址相应的从设备,且数据是否正确地在它们之间传输。通过该模块完成数据传输过程中PCI_AD和PCI_CBE的偶校验。偶校验的输出信号在地址和数据周期有效,其产生的规则是使偶校验输出、PCI_ CBE、PCI_AD各位的‘1’的个数为偶数。那么采用把PCI_AD与PCI_CBE各位异或的方法,就可以实现偶校验的功能。
2.3.2 PCI从设备状态机
PCI从设备控制器是PCI接口设计的核心模块,按功能来说,它要产生奇偶校验和数据的使能信号,并根据PCI_AD和PCI_CBE产生读地址,完成主从设备的握手信号,并且实现从设备状态机在各个状态之间的转换。
由于本设计只需要完成I/0读操作,本状态机设计配置空间的功能放在了从设备控制器来完成,同时删去了PCI操作中对存储器空间、配置空间的操作,结合PCI总线的传输时序,如图5给出了其基本结构。
(1)空闲状态为PCI从设备的初始状态,在没有任何操作的时候,PCI从设备将始终保持这个状态;
(2)每次数据传输时首先传出地址和命令字,根据地址和命令字确定是不是对本设备的访问,并确定访问的首地址;从设备则从命令字中识别该访问是读操作还是写操作;
(3)读访问只有在信号IRDY,TRDY,DEVSEL都为低状态时才能进行;
(4)猝发传输需要通过地址递增逻辑来实现地址的自动递加;其地址递增的周期为数据周期和最后传输周期总和,在等待周期暂停递增;
(5)主从设备中任一方没有准备好,操作中都需要能够引起等待状态插入的活动;
(6)读操作还有一个中间准备过程。
那么完成本状态机需要6个状态:idle表示空闲状态;addr表示地址周期;turnad表示读转换周期;data表示数据传输周期;lasttra表示最后传输周期;wait表示等待周期;在各个状态到来时还要对中间信号、输出信号和本地信号执行相应的操作:
(1)idle,addr,turnad周期对PCI_TFRDYn和PCIDEVSELn置高电平;addr周期依据地址信号确定是否选中本机,识别是否为读操作;addr周期输出PCI_AD[3:2]对寄存器进行寻址,实现读操作。
(2)data,lasttra周期对PCI_TRDYn和PCI_DEVSELn置低电平;data,lasttra周期置DATA_EN有效并输出。
(3)addr,data,lasttra周期置奇偶校验有效。
(4)等待周期置PCI_TRDYn和PCI_DEVSELn低电平。
根据对PCI总线传输时序的分析,影响各个状态相互转化的因素是:帧同步信号PCI_FRAMEn、主设备准备好信号PCI_IRDYn、读识别信号READn。其中,READn用来标识状态addr产生的中间识别信号。
3 测试平台与仿真测试
这种改进M/T数字测速及位置检测算法的硬件采用Xilinx公司的FPGA XC3S400。使用36 000刻的增量式码盘,速度环采样周期T设定为1 ms,高频时标信号的频率为40 MHz,结合PC运算的数字测速算法可以在速度O.001~150(°)/s的范围内获得±2.5×10-5 s的测速精度。与此同时,高精度动态位置检测算法可以使位置反馈的动态测量分辨率提高到10-2~10-6个脉冲当量。
对编写好的VHDL程序采用ISE进行综合,并编写测试平台,用ModelSim对其进行仿真测试。图6为PCI控制器的仿真图,图中state表示状态机在内部转换的过程,状态1表示空闲状态,状态2表示地址周期,状态4表示读转换周期,状态8表示最后传输周期,状态9表示猝发读写周期。
该I/O读操作,将地址为1的寄存器读出。这里设定I/O地址为0X200~0X20F这4个双字空间,那么在地址周期中地址0X204的2~3位寻址于寄存器的第一个双字,其后紧跟的是读的转换周期,猝发读写周期和最后一位读写周期。可以看出,这两个周期都对这个寄存器进行了读操作。
4 结语
本文介绍了使用FPGA设计和实现基于PCI总线传输的改进型M/T法测速电路,它克服了经典测速方法的几个缺点,在较大速度范围内都具有良好的精度。同时使用FPGA设计和实现了PCI从设备控制器,使得测速电路的设计与PCI总线的设计成为一个整体,节省了板上器件,也使得整个设计信号在FPGA内部流动,具有更加良好的抗干扰能力和稳定性。