lisingch 发表于 2020-7-7 16:49

【华大测评】八、正交编码

      之前在另外一品牌微控制器上实现了EC11旋转编码器的正交解码,这次实验依然使用的EC11旋转编码器模块利用HC32F460PETB的TIMERA模块实现对其解码,同时利用串口将EC11旋转的正、反计数值送至PC端通过串口助手软件进行显示。

一、实验资源
1、HC32F460-EVB;
2、Keil V5.28;
3、ST-LINK调试器;
4、EC11模块;
5、串口调试助手

二、资源简介

      HC32F460PETB的TIMERA是一个通用16位计数宽度、8路PWM输出的计时器。支持向上、向上向下计数模式,支持2相、3相编码计数。本次试验即使用其2相编码计数功能。




      正交编码计数只是TIMERA众多功能中的一个小功能,当然在高级定时器TIMER6中也具有此功能。这里使用了2相正交编码计数功能。



      正交编码计数属于相位差计数,根据AIN和BIN的相位关系进行计数,可以实现1倍、2倍及4倍计数:



      下面是EC11模块资料中的截图,从中不难看出对于它的解码使用2相相位差计数非常匹配,根据一般的使用需求计数模式采用单倍计数即可。


三、代码实现
      实验代码参考了DEMO,通过阅读手册并结合DEMO对于正交编码的理解非常有益。AIN与BIN的配置使用了DEMO中的原代码,在中断回调函数中增加了计数判断:
static void TimeraUnit1Over_IrqCallback(void)
{
    TIMERA_ClearFlag(TIMERA_UNIT1, TimeraFlagOverflow);
       
        coding_value++;
        if(coding_value > 99)
                coding_value = 0;
        printf("\r\nCW = %d",coding_value);
}


static void TimeraUnit1Under_IrqCallback(void)
{
    TIMERA_ClearFlag(TIMERA_UNIT1, TimeraFlagUnderflow);
       
        coding_value--;
        if(coding_value < 0)
                coding_value = 99;
        printf("\r\nCCW = %d",coding_value);
}

四、实验结果


五、实验总结
      TIMERA虽然只是一个通用定时器模块但其功能非常强大,正交编码只是其中的功能之一,下来还要对TIMERA的功能进行深入学习。

chunxulele 发表于 2021-10-12 22:03

好帖子

chunxulele 发表于 2021-10-12 22:07

有没有谁用过HC32L136的正交编码器的

豌豆爹 发表于 2021-10-18 16:53

好帖,赞

mickit 发表于 2021-10-18 20:04

这个用定时器吗?   

mikewalpole 发表于 2021-10-18 20:04

相位是怎么检测的呢   

robincotton 发表于 2021-10-18 20:05

这个方向是怎么实现的?         

jackcat 发表于 2021-10-18 20:05

用普通单片机怎么实现的

hearstnorman323 发表于 2021-10-18 20:05

EC11旋转编码器怎么样   

tifmill 发表于 2021-10-18 20:05

使用中断就可以实现的。   

nomomy 发表于 2021-10-18 20:06

HC32F460这个板子怎样

elsaflower 发表于 2021-10-18 20:06

TIMERA模块解析两路信号吗

ulystronglll 发表于 2021-10-18 20:06

这个资料时在哪里下载的   

abotomson 发表于 2021-10-18 20:07

是官网的资料吗?   

chenqianqian 发表于 2021-10-18 20:20

看看去,谢谢分享。

chunxulele 发表于 2021-10-19 08:25

有没有136的,例程居然没有
页: [1]
查看完整版本: 【华大测评】八、正交编码