功能描述
正交解码
通过寄存器字段 QEP_DEC_CNT_MODE,可配置解码器的以下几种解码方式:
-
QEP_DEC _CNT_MODE = 0x0,正交计数解码
-
QEP_DEC _CNT_MODE = 0x1,方向计数解码
-
QEP_DEC _CNT_MODE = 0x2,递增计数解码
-
QEP_DEC _CNT_MODE = 0x3,递减计数解码
-
QEP_DEC _CNT_MODE = 0x4,高有效 CW/CCW 计数解码
-
QEP_DEC _CNT_MODE = 0x5,低有效 CW/CCW 计数解码
正交计数解码
正交计数解码方式,外部信号 QEP_A 和 QEP_B 输入为正交信号,根据 QEP_A 与 Q_EPB 的信号的相位信息解析出提供后续解码计数器的步进信号 QEP_CLK 以及步进方向信号 QEP_DIR,如正交计数解码所示。

另外正交计数解码还具有以下的功能:
-
相位异常检测:输入的 QEP_A 以及 QEP_B 的相位不符合正常的相位跳转模式,则产生正交信号异常的中断信号 QEP_QUADPH_ERR;
-
互换功能:通过寄存器字段 QEP_SWAP_AB 配置为 1, 可将 QEP_A 和 QEP_B 的输入信号互换。
方向计数解码
方向计数解码方式,则无需经过正交信号的解码,外部信号 QEP_A 和 QEP_B 输入分别作为时钟信号 QEP_CLK 和方向信号 QEP_DIR,QEP_DIR 决定计数的方向,QEP_CLK 用于控制计数的步进。 默认的配置下 (即输入信号的极性未进行方向反相),QEP_DIR 为高电平的时候,表示正交计数器进行递增计数,QEP_DIR 为低电平的时候,表示正交计数器进行递减计数。 另外 QEP_A 的信号可以配置为上升沿触发一次 QEP_CLK 有效边沿,或上下沿均可触发一次的 CLK 有效边沿。

递增/递减计数解码
内部信号 QEP_DIR 固定选定为递增/递减的方向,此时只需 QEP_A 的输入信号,而 QEP_B 信号无效。另外 QEP_A 的信号可以配置为上升沿触发一次 QEP_CLK 有效边沿,或上下沿均可触发一次的 QEP_CLK 有效边沿。
CW/ CCW 计数解码
CW/ CCW 计数解码方式包括高有效的 CW/ CCW 解码计数和低有效的 CW/ CCW 解码计数:
-
高有效的 CW/CCW 解码方式

高有效是指低电平为无效电平,高电平为有效电平,当从低电平跳至高电平产生的上升边沿为有效边沿。若此有效边沿出现在 QEP_A 信号,即 CW 信号,那么则位置计数器正向加 1;若此有效边沿出现在 QEP_B 信号,即 CCW 信号,那么则位置计数器反向减 1。
另外如若出现 QEP_A 和 QEP_B 同时处于有效电平高电平时,则产生 CW/ CCW 错误中断信号,QEP_CW_CCW_ERR_INT。
-
低有效的 CW/CCW 解码方式

低有效是指高电平为无效电平,低电平为有效电平,当从高电平跳至低电平产生的下降边沿为有效边沿。若此有效边沿出现在 QEP_A 信号,即 CW 信号,那么则位置计数器正向加 1;若此有效边沿出现在 QEP_B 信号,即 CCW 信号,那么则位置计数器反向减 1。
另外如若出现 QEP_A 和 QEP_B 同时处于有效电平低电平时,则产生 CW/CCW 错误中断信号,QEP_CW_CCW_ERR_INT。
输入反相
QEP 模块的输入信号 QEP_A、QEP_B、QEP_I 和 QEP_S,均可以通过寄存器配置相应的输入反相器是否使能。使能后,输入信号为低有效信号。
输入 QEP_IGATE
输入 QEP 模块的输入信号 QEP_I 可以通过寄存器字段 QEP_IGATE 配置是否需要使能信号 QEP_S 对 QEP_I 进行 Gate 处理,处理方式如下图。

位置比较输出
QEP Position Counter Function 模块输出的信号 QEP_SOUT 信号,是位置计数器达到寄存器 QEP_POS_CNT_CMPV 时所产生的脉冲信号,该信号输出至正交解码模块,这里可以通过寄存器字段 QEP_SYNC_OUT_PIN 选择,使能输出为 QEP_I 或 QEP_S 信号。
QEP 模块的信号 QEP_A、QEP_B 为外部输入信号,支持输入信号的滤波。而 QEP 模块的信号 QEP_I、QEP_S 为双向信号,当设置为输入信号时,支持输入信号的滤波。
输入滤波
输入滤波功能,主要是用于滤除噪音信号,功能描述可以参考 EPWM 模块的输入滤波章节描述。
正交位置计数功能
功能框图

正交位置计数器有四种复位模式,可通过寄存器字段 QEP_POS_CNT_RST 配置:
-
复位模式 1:QEP_IDX_MKR 信号复位位置计数器,即只要出现 QEP_IDX_MKR 信号,正交位置计数器则进行一次复位:注: 复位模式 1 下,会进行锁存值的判断检测。
- 若为正向前进,复位值为 0。
锁存值的判断检测:在正向前进的情况下,如果 MKR 信号触发写入寄存器 QEP_POS_CNT_ICAPV 的数值与 QEP_POS_CNT_EPV 数值不一致,则 QEP_POS_CNT_ERR_FLG 置 1 且 QEP_POS_CNT_ERR_INT_FLG 置 1,表示产生位置计数的错误。
- 若为反向前进,复位值为终点值 QEP_POS_CNT_EPV。
QEP_IDX_MKR 信号是表示位置回到 0 点位置。QEP_IDX_MKR 信号的产生与输入管脚信号 QEP_I 有关。以下三张示例图片分别描述了三种不同 QEP_I 输入信号所对应的 QEP_IDX_MKR 复位位置寄存器,其中位置寄存器的计数采用十六进制表示。-
QEP_IDX_MKR 信号复位位置计数:

-
QEP_IDX_MKR 信号复位位置计数 (A Gated QEP_I):

-
QEP_IDX_MKR 信号复位位置计数 (A & B Gated QEP_I)

- 若为正向前进,复位值为 0。
-
复位模式 2,QEP_POS_CNT_EP 信号复位位置计数。
QEP_POS_CNT_EP 信号表示位置计数器发生计数溢出的信号:- 递增计数时,当计数达到 QEP_POS_CNT_EPV 时,复位计数器数值为 0,同时产生 QEP_POS_CNT_OVFL 中断信号,指示位置计数器计数上溢出。
- 递减计数时,当计数达到 0 时,复位计数器数值为 QEP_POS_CNT_EPV,同时产生 QEP_POS_CNT_UNFL 信号,指示计数器计数下溢出。
由于后续不会再产生 QEP_FIDX_MKR 信号,后续的位置计数器则通过 QEP_POS_CNT_EP 信号复位,即按照模式 2 进行复位。
-
复位模式 3,QEP_FIDX_MKR 信号复位位置计数。QEP_FIDX_MKR 信号,为 QEP 模块使能后第一次检测到的 QEP_IDX_MKR 信号。
此模式下,位置计数器会在 QEP_FIDX_MKR 信号进行复位:- 如果为正向前进,复位至 0。
- 如果为反向则复位至 QEP_POS_CNT_EPV。
-
复位模式 4,QEP_TMR_TO 信号复位位置计数。QEP_TMR_TO 信号,为 QEP 定时器超时产生的信号。
此模式下,位置计数器会在 QEP_TMR_TO 超时信号进行复位:- 如果为正向前进,复位至 0
- 如果为反向,复位至 QEP_POS_CNT_EPV。
正交位置计数器的捕获
位置计数器的捕获支持两种,Index 相关事件触发的捕获以及 Strobe 相关事件触发的捕获。
-
Index 相关事件的触发捕获,通过寄存器可选择触发捕获位置计数器的 Index 事件。
QEP_POS_ICAP_MOD = 0x1,使能 QEP_IDX 信号的上升沿触发捕获位置计数器,位置计数值 QEP_POS_CNT_V 写入 ICAPV。
QEP_POS_ICAP_MOD = 0x2,使能 QEP_IDX 信号的下降沿触发捕获位置计数器,位置计数值 QEP_POS_CNT_V 写入 ICAPV。
QEP_POS_ICAP_MOD = 0x3,使能 MKR 信号触发捕获位置计数器,位置计数值 QEP _POS_CNT_V 写入 ICAPV。
-
Strobe 相关事件的触发捕获,通过寄存器可选择触发捕获位置计数器的 Strobe 事件。
QEP_POS_SCAP_MOD = 0x0,使能 SRB 信号的上升沿触发捕获位置计数器,位置计数值 QEP_POS_CNT_V 写入 SCAPV。
QEP_POS_SCAP_MOD = 0x1,使能根据方向进行捕获。正向前进时,以 SRB 上升沿进行捕获,反向前进时,以 SRB 下降沿进行捕获,位置计数值 QEP_POS_CNT_V 写入 SCAPV。
正交位置计数器的初始化
位置计数器的初始化,即更新当前位置计数器的计数值,支持三种模式的初始化:
-
Index 相关事件的初始化,通过寄存器可选择触发位置计数器初始化的 Index 事件。
QEP_POS_IDX_INIT = 0x2,使能 IDX 信号的上升沿触发位置计数器的初始化,位置起点值 SPV 写入位置计数器。
QEP_POS_IDX_INIT = 0x3,使能 IDX 信号的下降沿触发位置计数器的初始化,位置起点值 SPV 写入位置计数器。
-
Strobe 相关事件的初始化,通过寄存器可选择触发位置计数器初始化的 Strobe 事件。
QEP_POS_SRB_INIT = 0x2,使能 SRB 信号的上升沿触发位置计数器的初始化,位置起点值 SPV 写入位置计数器。
QEP_POS_SRB_INIT = 0x3,使能 SRB 信号的下降沿触发位置计数器的初始化,位置起点值 SPV 写入位置计数器。
-
软件初始化,寄存器 INIT 字段置 1 可触发位置计数器初始化,位置起点值 SPV 写入位置计数器。
QEP_SOUT 信号
QEP_SOUT 信号,为位置计数器达到 QEP_POS_CNT_CMPV 的时候产生的信号,仅在 QEP_POS_CMP_EN = 1 时产生。QEP_SOUT 信号支持极性的控制,以及脉宽长度的调节。
寄存器 QEP_POS_CNT_CMPV 的更新方式支持立即更新以及影子更新模式。影子更新的加载点也可以通过寄存器配置,具体配置见 QEP_POS_CMP_LP 和 QEP_POS_CMP_UPDT_MOD 的描述。
QEP_SOUT 信号的输出方式见位置比较输出章节。
正交时间捕捉功能

时间捕捉功能的框图如上图所示,具体的功能描述如下:
-
SYS_CLK 信号,利用寄存器字段 DIV 进行分频,分频后提供给 Capture 定时器以及 Capture 控制。
-
QEP_CLK 信号,表示 1 次位置计数器的计数,经过 Unit Distance Control 功能模块对 QEP_CLK 进行分频,对应就可以获得单位距离的信号 QEP_UD_EVNT,下图为设定 QEP_SET_UDIST = 0x1,即 2 次 CLK 的对应产生一次的 EVNT。
-
QEP_UD_EVNT 信号,会触发 Capture 控制模块进行 Capture 定时器的数值捕获,进而计算与上次数值作差,写入 DELT 寄存器中,随后对 Capture 定时器进行复位至 0,如下图所示。
-
通过 QEP_UD_EVNT 信号触发获得 QEP_CAP_DELT,对于电机的应用,可以实现 T 法的速度计算。
-
QEP_TMR_TO 信号,为 Timer 的超时信号 (可参考章节 QEP Timer),也可以触发寄存器 TMRV 锁存至 LH,而 DELT 锁存至 LH。
-
通过 TO 信号触发读取 QEP_POS_TOCAP 的位置值,对于电机的应用,可以实现 M 法的速度计算。
-
QEP_DIR 输入至方向检测模块,此模块检测在 EVNT 的有效边沿间隔中是否出现方向改变的状态,若出现方向改变,QEP_CAP_DERR 信号置 1。
QEP Capture Timer 时间捕获:

QEP Hall Monitor
QEP Hall Monitor 的功能用于检测三路管脚输入信号 QEP_HA0/ 1/ 2 的电平:
-
三路输入信号均配有滤波模块,支持电路的硬件滤波。
-
三路输入信号的电平可以通过寄存器 STS 读取,在寄存器字段配置 QEP_HALL_IN_POL = 0(正极性)的情况下,0 代表低电平,1 代表高电平,若为负极性则相反。
-
三路的输入信号若由其中一路发生改变,则产生中断,读取状态寄存器 FLG 可以得出发生信号改变的通道号。
QEP Timer
QEP Timer 的功能框图如下所示,当寄存器 V 的数值大于 QEP_TMR_PRD_V 时,产生 TO 超时信号。

QEP Watchdog Timer
QEP Watchdog Timer 的功能框图如下所示,QEP_CLK 信号用于对看门狗定时器的复位,当无有效的 CLK 信号出现时,看门狗计时器一直计数,当 V 的数值大于 QEP_WDTMR_PRD_V 时,产生 TO 超时信号。

中断
QEP 模块支持产生中断,通过寄存器可以使能以下的信号经过 OR 逻辑得出 QEP 模块的中断信号 QEP_INT:
-
QEP_TMRTO:指示 QEP 计数器超时的信号
-
QEP_ICAP:指示发生 Index 相关事件引起的捕获位置计数器的信号
-
QEP_SCAP:指示发生 Strobe 相关事件引起的捕获位置计数器的信号
-
QEP_POS_CMP:指示产生了位置比较信号
-
QEP_POS_CMP_RDY:指示位置比较寄存器 QEP_POS_CNT_CMPV 的数值需要更新
-
QEP_POS_CNT_OVFL:指示位置计数器发生上溢出的信号
-
QEP_POS_CNT_UDFL:指示位置计数器发生下溢出的信号
-
QEP_WDTO:指示看门狗计时器发生超时的信号
-
QEP_DIR_CHG:指示 QEP 的正交解析的方向信号发生了改变
-
QEP_QUADPH_ERR:指示 QEP 的正交解析的相位信号发生错误
-
QEP_POS_CNT_ERR:指示 QEP 的位置计数器计数出错的信号
-
QEP_CW_CCW_ERR_INT:指示 QEP 输入的 CW 和 CCW 信号出现异常
-
QEP_HALL_INT:QEP 霍尔输入中断信号,指示 QEP 输入霍尔信号 HA0/1/2 的通道中,至少存在一个通道发生输入信号的改变
