基于TMS320F28335的绝对式光电编码器驱动设计
2017-03-28李逸楠孙丽君孙凤鸣王玉敬崔建飞
李逸楠 孙丽君 孙凤鸣 王玉敬 崔建飞
摘 要:设计了光电编码器与TMS320F28335之间的接口电路,编程实现了SSI同步串行接口协议,以及实现了光电编码器格雷码位置信息的读取并转换为二进制码参与后续位置控制运算。经实验验证,通过TMS320F28335的GPIO读取的编码器位置信息准确,40 μs内可完成一次25 bit的位置信息读取,分辨力为5'16"。该系统适用于绝大部分需要监测位移、角度、速度、角速度的场合,具有读取速度快、精度高、价格低、适用范围广的优点。
关键词:TMS320F28335;光電编码器;格雷码;SSI同步串行接口
中图分类号:TP273 文献标识码:A DOI:10.15913/j.cnki.kjycx.2017.05.023
在电机控制领域,如果需要精确控制负载的位置,就必须测得负载的当前位置,然后与目标位置进行比较,根据差值确定电机的控制策略。因此,准确地检测出负载位置是一切控制手段的前提。光电编码器是测量旋转运动、角速度的传感器,可与机械测量设备一起使用,例如丝杠,测量直线运动。应用领域包括电机、机床、印刷机、木工机器、纺织机器、机器人和运送设备以及各种测量、测试和检验设备。光电编码器测得的位置信息通常通过SSI同步串行总线与控制器进行数据交换。TMS320F28335本身具有SPI同步串行总线接口,协议与SSI总线类似,但其数据宽度仅为16 bit,对于多圈数高精度的光电编码器(通常为25 bit)无法直接连接使用。本文介绍了一种基于TMS320F28335的光电编码器驱动方案,可以读取任意数据长度的光电编码器位置数据,同时具有读取速度快、精度高、价格低、适用范围广的优点。
1 简介
1.1 光电编码器简介
本系统采用了海德汉公司的EQN425绝对式光电编码器,采用SSI接口。该编码器为多圈式,读出的位置信息为25 bit,其中高12位为圈数,低13位为绝对位置,数据格式见表1.
编码器采用28.5 V直流供电,编码器通过一路差分信号接收输入的CLOCK信号,在CLOCK信号的驱动下,通过一路差分信号输出位置信息。提供了升序旋转方向切换和置零接口,可以通过编程随时切换。
1.2 TMS320F28335简介
TMS320F28335是32位高性能浮点数字信号处理器,是近年美国TI公司推出的一种新产品。该芯片具有很强的信号处理及控制功能,具有单精度浮点运算单元和高精度PWM,与定点DSP相比增加了DMA功能,可将ADC转换结果直接存入DSP的任一存储空间,有外部存储器扩展接口、看门狗和3个定时器,采集精度高,抗干扰能力强。运行频率为150 MHz。
2 硬件接口设计
光电编码器符合RS-485传输协议,采用差分信号进行传输。采用28335的GPIO55作为时钟输出,经过ISO7221CD隔离,经MAX490EESA转换为光电编码器可用的差分信号。在时钟信号驱动下,光电编码器的位置信息通过DATA+与DATA-输入MAX490EESA转换,经隔离后输入28335的GPIO56。28335的GPIO57作为升序旋转方向切换控制输出,GPIO58作为置零输出。如有需要,可以与光电编码器相应接口连接,如图1所示。
3 软件设计
首先进行GPIO55、GPIO56的初始化,代码如下:
EALLOW; //Enable EALLOW
GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 0; //配置为基本输入输出功能,光电编码器输出时钟
GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 0; //配置为基本输入输出功能,光电编码器数据输入
GpioCtrlRegs.GPBDIR.bit.GPIO55 = 1; //GOIO55方向为
输出,编码器输出时钟
GpioCtrlRegs.GPBDIR.bit.GPIO56 = 0; // GOIO56方向为输入,编码器数据输入
EDIS; //Disable EALLOW
接着对GPIO55的输出电平进行编程,模拟输出时钟时序,在下降沿之后读取GPIO56的数据,并进行数据的移位、拼接,得到光电编码器输出的格雷码。代码如下:
Uint32 m_Rec_Data_Gray = 0; // 光电编码器输出格雷码
long int m_Rec_Data_Bin = 0; // 转换之后的二进制码
void Rec_SSIData(void)
{
Uint32 in_data = 0;
int i;
GpioDataRegs.GPBSET.bit.GPIO55 = 1; //拉高
DELAY_US(0.5); //延迟0.5 μs
GpioDataRegs.GPBCLEAR.bit.GPIO55 = 1; //置低
DELAY_US(0.5); //先发出一个下降沿,通知光电编码器准备输出数据
for(i=24;i>=0;i--) // 进入正式读数循环。该型号光电编码器为25位,因此进行25次循环
//读数。如果其他光电编码器位数不同,则可以改变循环次数。
{
GpioDataRegs.GPBSET.bit.GPIO55 = 1; //56 is high can read
DELAY_US(0.5);
GpioDataRegs.GPBCLEAR.bit.GPIO55 = 1; //56 is low
in_data=GpioDataRegs.GPBDAT.bit.GPIO56; //读数
m_Rec_Data_Gray|=(in_data<
DELAY_US(0.5);
}
GpioDataRegs.GPBSET.bit.GPIO55 = 1; //56 is high, last high
m_Rec_Data_Bin = (long int)(GrayToDecimal(m_Rec_Data_Gray)); //转换
}
其中,GrayToDecimal()函数为格雷码转换为二进制数函数,代码如下:
static Uint32 GrayToDecimal(Uint32 x)
{
Uint32 y;
y = x;
while (x>>=1)
{
y^=x;
}
return y;
}
4 试验验证
将上述硬件连接完毕,代码烧录完毕,上电。采用示波器观察GPIO55与GPIO56信号波形,可以看到时钟信号与数据信号如图2所示。
在图2中,波形1为读出数据,波形2为输出时钟信号。可以看到,输出时钟脉冲周期为1.4 μs,读出25位数据用时40 μs,读出的位置数据格雷码为“1 0010 0101 1011 1011 0001 0110”,转换成二进制码为“1 1100 0110 1101 0010 0001 1101”,转换为十进制数为29 807 133.在此基础上,将光电编码器旋转一圈,读数变为29 811 229,相差4 096.该实验表明此型号光电编码器最小量化单位为360/4 096=0.088°,即分辨力为5'16"。需要注意的是,虽然此光电编码器用户手册上说明读出格雷码的低13 bit为绝对位置值,但在实际使用中它并不能达到标称的精度,相当于经过格雷码转换为二进制之后,只有低12 bit代表了实际位置值。其量化精度比标称值降低了一半。
5 结论
采用TMS320F28335作为控制核心,设计了硬件接口电路与驱动软件,可以适用于任意数据宽度的光电编码器位置信息的读取。经实验验证,光电编码器旋转一圈读数变化4 096.该系统工作稳定可靠,具有读取速度快、精度高、价格低、适用范围广的优点。
参考文献
[1]徐丹,方超,张建祥,等.电动执行机构中光电编码器脉冲波形问题的研究[J].自动化应用,2011(12):67-69.
[2]罗长洲,陈良益,孙岩,等.一种新型光学编码器[J].光学精密工程,2003(01):104-108.
[3]周志炜.基于FPGA的多路光电编码器数据采集系统[D].哈尔滨:哈尔滨工业大学,2006.
[4]赵长海,万秋华,王樹洁,等.21位光电编码器数据处理系统[J].电子测量与仪器学报,2010(06):569-573.
[5]李振.一种SSI接口低成本实现方案[J].工业控制计算机,2011(01):61-62.
[6]金彧,金克一,许海洪.一种C8051F单片机读取SSI信号的设计[J].电脑开发与应用,2014(09):67-69.
[7]任先文,王坤,张俊丰,等.基于TMS320F28335的SVPWM实现方法[J].电力电子技术,2010(07):76-78.
[8]姜洪训.基于TMS320F28335的异步电机直接转矩控制系统研究[J].黄石理工学院学报,2010(06):12-15.
[9]刘明.基于TMS320F28335的小型导航计算机系统设计[J].测控技术,2009(12):37-39.
[10]雷晓瑜,曹广忠.TMS320F28335及其最小应用系统设计[J].电子设计工程,2009(01):91-95.
〔编辑:刘晓芳〕