12. 正交编码器(QEI)

12.1. 概述

SWM221系列所有型号QEI操作均相同。使用前需使能对应QEI模块时钟。

正交编码器(增量式编码器或光电式编码器)用于检测旋转运动系统的位置和速度,正交编码器可以用于多种电机的闭环控制,诸如开关磁阻(SR)电机和交流感应电机(ACM)等。

12.2. 特性

  • 可编程输入信号毛刺滤波

  • 提供脉冲计数和计数方向的正交解码器

  • 16位向上/向下计数器

  • 计数方向状态

  • ×2和×4两种计数模式

  • 索引复位/计数匹配复位模式

  • 通用16位计数器(正向计数或反向计数)

  • QEI产生的中断

  • A相和B相输入的交换模式

12.3. 功能描述

12.3.1. 模块结构框图

QEI 模块结构如 图 48 所示。

../../_images/QEI%E6%A8%A1%E5%9D%97%E7%BB%93%E6%9E%84%E6%A1%86%E5%9B%BE.png

图 48 QEI模块结构框图

12.3.2. 功能说明

典型的增量式编码器包括一个放置在电机转动轴上的带有开槽的轮子和一个用于检测开槽的发射/接收装置,通常有三个输出,分别为 A 相、B 相和索引相(INDEX),所提供的信息可被 QEI 接口解码,用来提供电机的运动信息,包括旋转距离和旋转方向,编码盘的示意图如 图 49 所示。

../../_images/QEI%E5%A2%9E%E9%87%8F%E5%BC%8F%E6%AD%A3%E4%BA%A4%E7%BC%96%E7%A0%81%E7%9B%98%E7%A4%BA%E6%84%8F%E5%9B%BE.png

图 49 增量式正交编码盘示意图

12.3.3. 时序说明

在正交编码器中 A 相(QEA)和B相(QEB)的位置关系是唯一的,如果A相超前B相,那么电机的旋转方向被认为是正向,反之则被认为是反向旋转,索引相作为基准来确定电机的绝对位置,电机每旋转一圈产生一个索引相脉冲信号,电机旋转时三个信号的相关时序如 图 50 所示。

../../_images/%E4%B8%89%E7%9B%B8%E4%BF%A1%E5%8F%B7%E6%AD%A3%E5%90%91%E5%8F%8D%E5%90%91%E6%97%8B%E8%BD%AC%E6%97%B6%E5%BA%8F%E5%85%B3%E7%B3%BB.png

图 50 三相信号正向/反向旋转时序关系

12.3.4. 正交解码器

正交解码器的工作过程如 图 51图 52 所示:

图 51 中正交解码器工作在 x4 计数模式下,在 QEA、QEB 的上升沿和下降沿处都会计数。

计数的方向由正反转状态 UPDN 决定:

  • 当 UPDN 为高电平时,表示电机正转,计数器在每个计数脉冲到来时累加计数结果;

  • 当 UPDN 为低电平时,表示电机反转,计数器在每个计数脉冲到来时递减。

在电机换向旋转时若产生抖动(在 图 51 中 jitter 为抖动部分),QEI 模块会根据检测到的计数脉冲情况判断是否产生抖动,在电机抖动的情况下,计数器不工作,直到电机恢复稳定状态为止。

../../_images/%E6%AD%A3%E4%BA%A4%E7%BC%96%E7%A0%81%E5%99%A8x4%E8%AE%A1%E6%95%B0%E6%A8%A1%E5%BC%8F%E7%A4%BA%E6%84%8F%E5%9B%BE.png

图 51 正交编码器 x4 计数模式示意图

图 52 所示:正交编码器工作在 x2 计数模式下,在该模式下,计数脉冲只在 QEA 的上升沿和下降沿处产生,QEB 只被用来判断旋转方向。

../../_images/%E6%AD%A3%E4%BA%A4%E7%BC%96%E7%A0%81%E5%99%A8x2%E8%AE%A1%E6%95%B0%E6%A8%A1%E5%BC%8F%E7%A4%BA%E6%84%8F%E5%9B%BE.png

图 52 正交编码器 x2 计数模式示意图

12.3.5. 计数器复位模式

在 QEI 模块中支持两种复位模式:索引复位和计数匹配复位。

索引复位

索引复位的方式如 图 53 所示,在 INDEX 信号到来时,QEI 计数器复位,旋转方向不变时计数器每次都将在索引信号的同一位置发生复位,正向旋转和反向旋转时的复位位置相对称,将 QEI 模块配置在索引复位模式下,QEI 模块将会自动检测 INDEX 信号和电机正转/反转时索引信号的复位位置。

../../_images/QEI%E8%AE%A1%E6%95%B0%E5%99%A8%E7%B4%A2%E5%BC%95%E5%A4%8D%E4%BD%8D%E6%A8%A1%E5%BC%8F.png

图 53 QEI计数器索引复位模式

匹配复位

计数匹配复位发生在计数器的累加值与预置的目标计数值相等时发生。

在电机正向旋转时,计数器的累加值与最大计数值相等时发生复位,复位后计数器的值被置 0;

在电机反向旋转时,计数器的累加值在等于零时发生复位,复位后计数器的值被复位为预置的最大计数值,计数匹配复位方式如 图 54 所示。

../../_images/%E8%AE%A1%E6%95%B0%E5%8C%B9%E9%85%8D%E5%A4%8D%E4%BD%8D%E6%A8%A1%E5%BC%8F.png

图 54 计数匹配复位模式

12.3.6. 配置方式

配置方式如下:

  • 通过 PORTX_FUNC 寄存器将引脚切换为 QEI 对应数字功能,并使能数字输入

  • 配置 QEI 工作模式(X2、X4)、最大计数值、复位源等设置

  • 若需要使用中断,使能 QEI 相应中断

  • 启动 QEI,开始计数

  • 定时读取 QEI 位置计数器和最大值计数器,从而计算电机的转动方向和速度

12.3.7. 中断配置与清除

可通过配置 IE 寄存器设置 QEI 模块对应的中断,如需清除相应的中断标志,需在 IC 寄存器相应位中将中断状态写 1 清零(R/W1C)。

12.4. 寄存器映射

名称

偏移

复位值

QEI BASE:0x40041000

CR

0x00

0x00000000

POSCNT

0x04

0x00000000

MAXCNT

0x08

0x00000000

IE

0x20

0x00000000

IM

0x24

0x00000000

IC

0x28

0x00000000

IIF

0x2C

0x00000000

IFOV

0x30

0x00000000

12.5. 寄存器描述

12.5.1. 控制/状态寄存器(CR)

偏移: 0x00

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

QEISIDL

INDEX

UPDN

7

6

5

4

3

2

1

0

QEIM<2>

QEIM<1>

QEIM<0>

SWPAB

TQCKPS<1:0>

TQCS

QEPEN

位域

名称

类型

描述

31:11

REVERSED

RO

10

QEISIDL

R/W

空闲模式停止位

1:模块暂停工作

0:模块继续工作

9

INDEX

RO

索引信号状态位(写无效)

1:索引引脚为高电平

0:索引引脚为低电平

8

UPDN

R/W

计数方向状态位(仅用于定时器模式)

1:正向计数

0:反向计数

7

QEIM<2>

R/W

工作模式选择位

1:QEI解码器模式

0:定时器模式

6

QEIM<1>

R/W

计数器复位模式选择位

1:索引信号复位

0:计数匹配复位

5

QEIM<0>

R/W

QEI计数模式选择位

1:X4计数模式

0:X2计数模式

4

SWPAB

R/W

B换向选择位

1:A、B以换向

0:A、B未换向

3:2

TQCKPS<1:0>

R/W

定时器时钟分频选择位(仅用于定时器模式)

11: 256分频

10: 64分频

01:8分频

00:不分频

1

TQCS

R/W

定时器时钟来源选择位(仅用于定时器模式)

1:QEA引脚(上升沿)

0:内部时钟

0

QEPEN

R/W

QEI模块使能(QEI、定时器功能)

1:使能

0:禁能

12.5.2. 位置计数器/定时器状态寄存器(POSCNT)

偏移: 0x04

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

POSCNT

7

6

5

4

3

2

1

0

POSCNT

位域

名称

类型

描述

31:16

RO

15:0

POSCNT

RO

位置计数器/定时器状态

12.5.3. 位置计数器/定时器匹配计数寄存器(MAXCNT)

偏移: 0x08

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

MAXCNT

7

6

5

4

3

2

1

0

MAXCNT

位域

名称

类型

描述

31:6

RO

15:0

MAXCNT

R/W

位置计数器/定时器匹配计数值

12.5.4. 中断使能寄存器(IE)

偏移: 0x20

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

INTEN3

INTEN2

INTEN1

INTEN0

位域

名称

类型

描述

31:4

REVERSED

RO

保留

3

INTEN3

R/W

计数错误中断使能标志位

1:使能

0:禁能

2

INTEN2

R/W

计数器溢出中断使能标志位

1:使能

0:禁能

1

INTEN1

R/W

计数匹配/定时器中断使能标志位

1:使能

0:禁能

0

INTEN0

R/W

索引信号复位中断使能使能标志位

1:使能

0:禁能

12.5.5. 中断状态屏蔽寄存器(IM)

偏移: 0x24

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

MASK3

MASK2

MASK1

MASK0

位域

名称

类型

描述

31:4

RO

3

MASK3

R/W

屏蔽计数错误中断标志位

1:未屏蔽

0:已屏蔽

2

MASK2

R/W

屏蔽计数器溢出中断标志位

1:未屏蔽

0:已屏蔽

1

MASK1

R/W

屏蔽计数匹配/定时器中断标志位

1:未屏蔽

0:已屏蔽

0

MASK0

R/W

屏蔽索引信号复位中断标志位

1:未屏蔽

0:已屏蔽

12.5.6. 清除中断状态寄存器(IC)

偏移: 0x28

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

CLR3

CLR2

CLR1

CLR0

位域

名称

类型

描述

31:4

REVERSED

RO

保留

3

CLR3

R/W

清除计数错误中断标志位

1:清除

0:未清除

2

CLR2

R/W

清除计数器溢出中断标志位

1:清除

0:未清除

1

CLR1

R/W

清除计数匹配/定时器中断标志位

1:清除

0:未清除

0

CLR0

R/W

清除索引信号复位中断标志位

1:清除

0:未清除

12.5.7. 中断状态寄存器(IF)

偏移: 0x2C

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

INT3

INT2

INT1

INT0

位域

名称

类型

描述

31:4

REVERSED

RO

保留

3

INT3

RO

计数错误中断标志位

1: 有错误

0:无错误

2

INT2

RO

计数器溢出中断标志位

1:以溢出

0:未溢出

1

INT1

RO

计数匹配/定时器中断标志位

1:计数匹配

0:计数未匹配

0

INT0

RO

索引信号复位中断标志位

1:以复位

0:未复位

12.5.8. 中断溢出寄存器(IFOV)

偏移: 0x30

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

FLINT3

FLINT2

FLINT1

FLINT0

位域

名称

类型

描述

31:4

REVERSED

RO

保留

3

FLINT3

RO

计数错误中断溢出标志位

1:溢出

0:未溢出

2

FLINT2

RO

计数器溢出中断溢出标志位

1:溢出

0:未溢出

1

FLINT1

RO

计数匹配/定时器中断溢出标志位

1:溢出

0:未溢出

0

FLINT0

RO

索引信号复位中断溢出标志位

1:溢出

0:未溢出