FPGA/ASIC技术
在现代工业控制系统中,对电机的控制是其重要组成部分。编码器作为电机角位移的检测装置,为系统提供重要反馈信号。本文介绍了一个适合嵌入式系统的基于DSP和FPGA的海德汉光电编码器信号处理通用模块,能够测量和处理海德汉公司的高精度增量式编码器信号和采用EnDat2.2双向数字接口的绝对式编码器信号。经使用者的简单操作,模块适用于不同位数、不同类型的海德汉编码器。该模块通过实验、调试与测试,能有效快速工作,目前已应用于实验用转台中。
随着科学技术的飞速发展,自动控制系统在各领域中的应用越来越多,特别是计算机自动控制系统已成为现代科学技术、军事工程和现代工业等领域不可缺少的部分。因而,自动控制元件如作为动力装置的各种电动机、发电机和作为信号变换的各种控制电机在各种控制系统中得到广泛的应用。要对被控对象进行控制,不仅需要控制器和执行机构,还需要反馈装置。因此,编码器作为电机的角度、速度、方向的检测装置,也得到了广泛的应用。编码器又有旋转变压器、霍尔传感器和光电编码器。其中,光电编码器精度高,抗干扰能力强,接口简单,使用方便,因而获得了最广泛的应用[1]。
光电编码器按编码方式又主要有增量式编码器和绝对式编码器两大类,前者具有分辨率高、价格较低、接口简单等优点,然而在当今工业中,无掉电记忆功能又对其应用构成了很大局限;后者结构紧凑、体积小、接口数字化、抗干扰能力强、具有掉电记忆功能,在应用中也越来越受重视[2]。
当前市场上,德国海德汉公司的产品种类繁多,具有很好的品质保证,被广泛应用于机床、自动化领域,尤其在半导体和电子制造业等领域。海德汉光电编码器占有很大市场份额,而与之相配套的解码设备不适合嵌入式系统应用。本文针对实验用转台使用的海德汉编码器设计出了增量式和绝对式的通用数据处理模块。该模块具有信号处理速度快、精度高、数据准确、应用灵活广泛、使用和调试方便、成本低廉等优点,能很好满足使用需求。
增量式编码器是经过光栅将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小。其光栅由周期性刻线组成,通过计算自某点开始的增量数(测量步距数)获得位置信息。本模块要测量的高精度海德汉增量式编码器的光栅上还有刻有距离编码参考点的轨道,加快参考点回零[3]。下图1为某带距离编码的圆光栅。
图1带距离编码参考点的圆光栅(ERA4480)
这些参考点彼此相距数学算法确定的距离。已过三个参考点的两个脉冲后,后续电子设备就能找到绝对参考点。
绝对式编码器利用自然二进制、循环二进制( 格雷码) 或PRC码对码盘上的物理刻线进行光电转换,将连接轴的转动角度量转换成相应的电脉冲序列并以数字量输出,其每一个位置对应一个确定的唯一的数字编码,因而具有掉电记忆功能[4]。
有时,通过位置编码器获得位置值的数字驱动系统和反馈环还需要编码器提供一些附加值。为使系统具有更高可靠性,编码器还需具有错误检测和诊断功能。海德汉公司的Endat2.2数据接口是一种适用于编码器的双向数据接口,可传输绝对式或增量式编码器的位置值,也能传输或更新保存在编码器中的信息或保存新信息。由于采用串行数据传输方式它只需要4条线。数据传输保持与后续电子设备时钟信号同步。传输的数据类型(位置值、参数或诊断信息等)通过后续电子设备发至编码器的模式指令选择[5]。
本模块采用了DSP和FPGA结合的工作方式。DSP主要用于数字信号处理领域,非常适合高密度、重复运算及大数据容量的信号处理。FPGA/CPLD器件一方面可实现硬件上的并行工作,非常适用于实时测控和高速应用领域,另一方面物理机制和纯硬件电路一样,十分可靠,尤其是抗强电磁干扰。两者结合,可实现宽带信号处理,速度快且可靠性好[6]。
根据方案功能需求,设计模块结构图如图2所示:
图2硬件结构图
图中,模块连接器为标准的DB15连接器,通过管脚配置,能相应地与增量式编码器和采用EnDat2.2接口的绝对式编码器进行信号交流。模块的收发单元支持的是RS-485形式,差分信号和单端信号通过接口芯片进行转换。为了提高对高精度增量式编码器数据测量精度,需在同一个增量编码器上安装4个读数头,各自测量增量式编码器数据,再合成得到位置值。这样,板卡上读取编码器信号的接口设置有4个。
FPGA芯片选用赛灵思公司Spartan-3AN系列的XC3S700An,logic cells为10476。
实现:①对增量信号的计数和参考信号的采集,在进行计数达到参考码道的数据后,进行增量信号的清零;②对Endat2.2绝对式编码器位置信号的采集;③在外同步时钟上升沿到来前,保存计数处理,把数据存储在双口RAM中,等待DSP读取。
本模块选用的DSP芯片为TI公司的TMS320F28335,主频可达150MHz。TMS320F28335增加了浮点运算单元,在保持了原有DSP芯片优点如强大控制和信号处理能力、C语言编程效率等优点的同时,节省了代码执行时间和存储空间[7]。F28335通过GPIO端口与XC3S700An连接有4路地址线和16根数据线,可以接受16种编码器信号。模块中DSP部分开辟参数存储区,在中断信号到来的时候读取FPGA中数据,完成数据合成,通过SCI串口把数据发送给主控机箱,电器形式为RS422。
模块板卡由5V电源供电。
根据硬件架构,分别对DSP和FPGA进行软件功能分析和具体编程实现。
FPGA部分使用Xilinx公司的ISE10.1开发软件,采用Verilog语言,接受从接口管脚输入的编码器信号,相应地实现对海德汉高精度增量式编码器输出并经细分盒细分后的TTL脉冲计数和参考信号生成,或者是与绝对式编码器的Endat2.2通信。DSP部分开发软件采用TI公司的CCS5.2,使用C语言进行编程。DSP完成对信号最终的位置合成处理,在这里,首先要定义编码器的相关参数,如:编码器总刻度数、分辨率、带参考码道的增量式编码器的参考点数,还要考虑增量信号进入FPGA前的细分数(取决于IBV600),以及FPGA对TTL计数是否进行四倍频等。使用时,根据具体编码器类型进行参数修改。
软件实现了对高精度海德汉增量式编码器和绝对式编码器的位置值的读取。下面将分别进行介绍。
3.1.1 相关部分的FPGA设计
增量式编码器是一旋转式光电编码器,根据轴所转过的角度,输出一系列脉冲。一般来说编码器输出有三相信号:A、B、Z。A、B两相信号是相位相差90°的正交方波脉冲串,每个脉冲代表被测对象旋转了一定的角度,A、B之间的相位关系则反映了被测对象的旋转方向,即当A相超前B相,转动方向为正转;当B相超前A相,转动方向为反转。Z信号是一个代表参考码道的脉冲信号,可用于调零、对位。对象每旋转一定角度时,A、B两者的脉冲发生变化,根据AB相位变化方向和脉冲个数来计算角位移[8]。当AB相位变化为00 10 11 01 00时,为输出正转计数脉冲,脉冲计数P加1;当AB相位变化为00 01 11 10 00时,为输出反转计数脉冲,脉冲计数P减1。相位变化几次计数操作几次。需要指出的是,相位的状态变化只有严格按照上面8中方式改变时,FPGA才进行计数操作。在Verilog编程时,可以把前一个AB相电平状态和后一个AB相电平状态组成一个散转地址向量,然后把这个向量作为条件语句,进行计数操作。比如,当AB从00变为10时,向量就为0010,P=P+1。相反,若AB从10变为00,这个向量就为1000,P=P-1。下面为FPGA读取TTL数据并组成散转地址向量的Verilog代码:
always @(posedgeinClk)
begin
regUa1a2State <= {inIncUa1,inIncUa2};//读取AB向量
if(regUa1a2State!=regAllState[1:0]) //状态变化
begin
regAllState<= {regAllState[1:0],regUa1a2State};//组成新的散转地址向量
regPulseStateChanged<= 1;
end
elsebegin
regPulseStateChanged<= 0;
end
end
另外,增量式编码器不具有断电记忆功能,每次启动时都需确定零位。以前,只有一个零位参考点时,有时需转360°Z相位出现脉冲才能确定零位。高精度海德汉编码器参考点码道有若干个距离编码参考点,任一参考点经过读数头时,Z相位输出脉冲。此时,需要把之前的脉冲计数P保存下来(记为Q),P清零。这样,每次Z相位输出脉冲时,P的数值就为上次经过参考点后的脉冲数,这是DSP确定零位和当前参考点的重要依据。
FPGA测得4个读数头的4组信息,写入双口,等待DSP读取。每组写入双口的数据有两个:①上一次过参考码道时的计数增量计数RefPulseCnt(Q值),②增量计数PulseCnt(P值)。
3.1.2 相关部分的DSP设计
DSP程序中先生成增量式编码器参考码道的参考角度,也就是每个距离编码参考点所对应的脉冲数以及角度。又因为每两个参考点间脉冲数(即Q值)是不同且唯一的,可以根据读取的FPGA双口中的Q值确定最近经过的参考点,然后“查表”可以得到该参考点的角度。同时,DSP读取P值再乘以分辨率得到已当前参考点后的角度,合成后两者相加可以确定相应读数头测得的位置值。分辨率为360°/刻度值总刻度数*进入FPGA前细分数*4(本模块FPGA对TTL计数的处理实质就是对AB路信号进行了4倍频)所有读数头过完零以后,输入到DSP的4路读数头信号相对参考码道的零点而言,都有一个绝对位置。一般来说,安装读数头时,要参考测量的单个读数头的位置值对4个读数头的位置要进行调整,通常,相邻两个读数头之间相差90度最好。以任何一个读数头为基准,其他3个读数头的绝对位置相对基准读数头而言的位置差为90°,180°,270°。为了简化,以电路板输入端口的1作为基准量。合成位置量为A=(A1+A2+A3+A4-90-180-270)/4=(A1+A2+A3+A4-540°)/4,由于有安装系统误差,且要求合成位置值要大于0,计算时可以用520°替代540°。其范围为(e,e+359.999999),e为误差,这个时候要对360做求模处理,最后得到的合成值的工作范围就为(0,359.9999999)。
模块参考海德汉公司提供的endat2.2相关技术手册[5] [9],设置好参数:根据编码器位数和模式命令设置传输的数据位数ct_tx_oem_value、ct_rx_oem_value;需要传送的附加信息个数ai_count;传输时钟频率参数freq_oem_value;恢复时间III ( tST)的设置参数freq_tst_value等。测量EnDat2.2的子文件根据参数转换状态机,进行相应操作。另外,程序带有电缆传输延迟测量模块pdm。然后,按照下图4的格式根据自己对信息的需求设置向编码器传输的信号d_in。在系统时钟上升沿到来后立即通过start_trans信号控制开始与编码器通信。接收编码器数据,读出相应d_out信号数据,得到代表位置值的数据写入双口。
图4endat2.2输入数据“d_in”
上图中,Mode bits为6位模式指令,最基本的编码器发送位置值模式为000111。模式指令和其他参数的含义都可以在技术手册中查到。
DSP从FPGA双口RAM中读取绝对式信号数据,取有效位数后再乘以该绝对式编码器的分辨率即得到位置信息。分辨率为360°/2^N,N是对应的绝对式编码器位数。
模块通过RS422异步串行接口与上位机进行通信,串行接口通过DSP的SCI口实现,设计的模块同时需要上位机发送的同步采样频率信号,将其与DSP相连,作为中断信号启动ISR功能。同时,该信号管脚通过跳针把该外同步时钟分给FPGA。这样,保证两者的时钟源是统一的,然后DSP访问FPGA的双口就能实现正确读取所需数据。过程时序示意图如图5所示:
图5整体过程时序示意图
如上图所示,在t_1时,FPGA即启动与编码器的通信,在t_2时,FPGA把增量式编码器脉冲计数或者绝对式编码器信息存入双口,在t_3时,外同步时钟上升沿启动DSP中断程序,读取已经存储在FPGA双口中的数据并合成位置值,合成量纲后通过RS422接口把绝对位置值传递给主控机箱。这样,主控得到的数据是上一帧的数据,即有一帧的延迟,时钟频率越大,延迟越小。因此,对采样频率有一定要求,不能太低。
模块设计好以后,需搭建平台检测是否实现功能。实验平台如图6所示:
图6实验平台
如图6所示:打开电源控制开关,然后从PC机把DSP和FPGA程序分别通过仿真器加载到F28335和XC3S700AN芯片中,打开主控机箱。最后,点击CCS上的运行键,拨动编码器,可在CCS软件界面右上方的变量观察窗口观察编码器位置值。界面如下图7所示:
图7实验时,观察位置值的CCS界面
本实验中,所使用的编码器为23位海德汉绝对式编码器ECN1023,外同步时钟源为500HZ。FPGA内部频率为10MHz,向Endat2.2输入的频率为64MHz的32分频。观察到该界面中位置值为359.8117303848267度。在实验中通过real-time与自动刷新功能还观察到,界面上数据的变化与编码器的转动几乎同步,编码器停止转动后,数据小数点后前3位之前的数据非常稳定,第3、4、5位数据比较稳定。由此可见,本模块满足了一定的测量速度和测量精度,能够很好工作。
通过实验对本模块的性能有了一定了解后,还需对精度进行检测。通过模块与标准检测仪同时测量一台海德汉绝对式编码器,360度测量正反相各测24组值。结果,正测RMS值为0.67角秒,极差为1.9角秒;反测RMS值为0.76角秒,极差为2.2角秒。两组误差曲线图如下图8所示:
图8正反转检测两组误差数据曲线
从图中观察到,从0到23的24组数据皆是从0度到36度变化时测量得到的。如图所示,两组误差曲线基本重合,可在最大误差点加个修正值减小误差。
编码器应用广泛。本文详细介绍了一个测量各类海德汉编码器的数据的通用且实用的模块。该模块基于Xilinx FPGA平台和TI DSP平台,使用和调试方便,使用者可快速掌握;通过了实验和精度的检测,实现了设计目的,工作可靠;模块小巧,可以与上位机通信,可以很好的被结合到嵌入式系统中。目前,本模块已用于实验转台用的增量式和绝对式编码器数据的处理,拟结合到实验室驱动控制机箱中,正进一步开发它对海德汉绝对式编码器Endat2.2附加信息的测量和处理。
全部0条评论
快来发表一下你的评论吧 !