微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 用DSP实现增量式光电编码器的细分

用DSP实现增量式光电编码器的细分

时间:01-01 来源: 点击:

对光栅传感器原始信号进行细分是采用各类光栅器件进行高精度位置测量、角度测量过程中不可或缺的一个环节。细分方法多种多样,针对各种现有的电子学细分方案并结合实际应用,本文采用软件程序判卦限,查表细分方法,实现了针对测角传感器信号的2048次细分。

1 引言

目前,各类伺服驱动器及其应用中广泛采用光栅装置作为速度测量、位置测量的敏感元件。而且,广泛采用两路正交方波的形式,系统的实时性要求极高。因此,对于光栅编码器的信号的细分等主要处理环节,一方面集中考虑提高分辨率的问题,同时,需要考虑实时性的问题。

有很多采取纯硬件进行细分的方法,如,电阻链细分,空间细分,锁相倍频,还有两种方法的结合使用等。上述几种方法在实际应用中被广泛采用,特别是电阻链细分,在低倍频的情况下是一种很好的方案。但是在高倍频的情况下,不可避免地出现大量使用比较器的情况,以及比较器死区(滞后区)问题,难以调节。空间细分的方法中,主要解决的问题是切割电平精准的问题,其中的三角波切割三角波的方案有很多优点,可以改变使用过零比较造成的细分误差。但是仍然存在大量使用比较器的问题,调节起来比较繁琐。锁相倍频细分的方法,一方面,成本较前两种高,另一方面,受环境温度的影响比较大,实际的应用中很少采用。

高速数字处理器件DSP的应用可以极大地改善系统的实时性,DSP中集成了16路10位A/D转换,同时有丰富的硬件资源,比较器、定时器,和两个专门用于产生PWM波的事件管理器。DSP中丰富的指令集为做除法提供了条件。设DSP(2407a)的时钟频率是40MHZ,除法程序可以在35个指令周期内执行完,两路A/D转换需要29个指令周期,查询数据得细分值需要两个指令周期。共69个指令周期,DSP中程序执行是流水线执行的,一个时钟周期最多可以执行4条指令。则需要不到1.6us就可以得到精确的光栅位移值。对于一般的应用场合,用DSP细分可以足够保证控制器500KHz的频带,和定位的精确性。

本文从原理上考虑在DSP中完成细分的方案,使用取绝对值,八卦限理论,利用DSP器件(速度为25纳秒)对信号进行逻辑运算和处理等一整套信号细分方案。

2 细分及框图

通过软件查询的方式进行细分。从光电编码器输出的两路角位移信号首先进行滤波整型,硬件辨向,提取整周期信号,得到粗位移;同时对两路信号进行A/D转换,通过U函数得到计数脉冲,从而得到卦限值,通过V函数得到精位移的地址信号,查询得到精位移。系统框图如下:

输入的两路信号分别是x1=2.5*sin(fai)+2.5(v),x2=-2.5*cos(fai)+2.5(v);在DSP中有专门的16路A/D转换电路,因而不用再设计A/D转换电路。A/D转换后得到y1=|2.5*sin(fai)|,y2=|-2.5*cos(fai)|。对其进行卦限计数,
A/D转换周期由软件设定,而在硬件电路实现时,必须要考虑卦限信号,控制信号的高度同步,但在实际电路中是很难做到的。

如果将该数据与相位之间的对应关系用一张表来描述,就是我们所建立的细分表,放在DSP中的SRAM中,DSP中集成了2K×16的SRAM,足够放置查询表。两者之间并不是一一对应关系。
(FAI)(t)=arctanθt∝sinxt/cosxt;

软件流程图如下:

软件程序流程图:

U函数取为U=y1*y2*(y2-y1);当U为零时,卦限信号就增加1

; ;;;;;;;;;;-------细分程序

XIFEN: LDP #0E1h;

CLRC SXM ; 抑制符号位扩展

LACC RESULT0,10

SACH X1 ; 存X1值

LACC RESULT1,10 ;

SACH X2; 存X2值

SETC SXM ;允许符号位扩展

LACL R1SIN;

SUB #JUNZHI ;(2.5V);

ABS

SACL Y1 ; 得到y1

LACL X2;

SUB #JUNZHI(2.5V);

ABS

SACL Y2 ; 得到y2

SUB Y1 ;

SACL Y ; 得到Y=y2-y1值,保存 ;用dsp中计数器T4记卦限

BCND ss,NEQ

Lacl y1

BCND ss,NEQ

Lacl y2

BCND ss,NEQ ;若U=0,卦限计数器计数

set t4clkin ; 为计数器提供脉冲

ss: LACL y

BCND DEVISION,GEQ ; 判断卦限,y2>=y1 时,直接y1/y2;否则y2/y1,除数变被除数

JIAOHUAN: LACC y1 ; y1和y2交换

SACL TEMP_AD ;

LACL y2 ;

SACL y1 ;

LACC TEMP_AD ;

SACL y2 ; y2/y1 ; 毫秒为Q8格式

DEVISION LACC R1SIN ,6;;;;取分子并左移6位;

RPT #15 ; 后面的指令执行15+1次。

SUBC R2COS ;16 CYCLE divIDED LOOP

; .ACC中的数据减去Demon 减10次,直到被减数小于0

SACL QUOT ; 得到商

SACH REMAIN ; 得到余数

LACC REMAIN; 取余数后再除

R

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top