3软件设计及实现
根据硬件架构,分别对DSP和FPGA进行软件功能分析和具体编程实现。
FPGA部分使用Xilinx公司的ISE10.1开发软件,采用Verilog语言,接受从接口管脚输入的编码器信号,相应地实现对海德汉高精度增量式编码器输出并经细分盒细分后的TTL脉冲计数和参考信号生成,或者是与绝对式编码器的Endat2.2通信。DSP部分开发软件采用TI公司的CCS5.2,使用C语言进行编程。DSP完成对信号最终的位置合成处理,在这里,首先要定义编码器的相关参数,如:编码器总刻度数、分辨率、带参考码道的增量式编码器的参考点数,还要考虑增量信号进入FPGA前的细分数(取决于IBV600),以及FPGA对TTL计数是否进行四倍频等。使用时,根据具体编码器类型进行参数修改。
软件实现了对高精度海德汉增量式编码器和绝对式编码器的位置值的读取。下面将分别进行介绍。
3.1测量增量式编码器位置值
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)。
3.2 测量绝对式编码器的位置值
模块参考海德汉公司提供的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是对应的绝对式编码器位数。
3.3 数据输出
模块通过RS422异步串行接口与上位机进行通信,串行接口通过DSP的SCI口实现,设计的模块同时需要上位机发送的同步采样频率信号,将其与DSP相连,作为中断信号启动ISR功能。同时,该信号管脚通过跳针把该外同步时钟分给FPGA。这样,保证两者的时钟源是统一的,然后DSP访问FPGA的双口就能实现正确读取所需数据。过程时序示意图如图5所示:
图5整体过程时序示意图
如上图所示,在t_1时,FPGA即启动与编码器的通信,在t_2时,FPGA把增量式编码器脉冲计数或者绝对式编码器信息存入双口,在t_3时,外同步时钟上升沿启动DSP中断程序,读取已经存储在FPGA双口中的数据并合成位置值,合成量纲后通过RS422接口把绝对位置值传递给主控机箱。这样,主控得到的数据是上一帧的数据,即有一帧的延迟,时钟频率越大,延迟越小。因此,对采样频率有一定要求,不能太低。
4实验及数据分析
模块设计好以后,需搭建平台检测是否实现功能。实验平台如图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附加信息的测量和处理。
评论
查看更多