找回密码
 立即注册
查看: 953|回复: 1

STC8H8K编码器模式有回差的问题 | 已解决

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:17
  • 最近打卡:2024-08-08 10:25:37

4

主题

5

回帖

98

积分

注册会员

积分
98
发表于 2024-5-2 10:42:34 | 显示全部楼层 |阅读模式
使用STC8H8K64U,PWMA配置为正交编码器,接EC11编码器,不使用中断。
配置程序如下:
        P2_MODE_IN_HIZ(GPIO_Pin_2);//高阻输入
        P2_MODE_IN_HIZ(GPIO_Pin_0);
        P2_PULL_UP_ENABLE(GPIO_Pin_2);//上拉
        P2_PULL_UP_ENABLE(GPIO_Pin_0);

        PWMA_ENO = 0x00; //失能所有PWM输出
        PWMA_PS = 0x05; //引脚映射 PWM1P_2-P2.0 PWM2P_2-P2.2
        PWMA_PSCRH = 0x00; //预分频寄存器
        PWMA_PSCRL = 0x00;
        PWMA_CCMR1 = 0x20 + 0x1; //滤波器4时钟 通道模式配置为输入
        PWMA_CCMR2 = 0x20 + 0x2; //滤波器4时钟 通道模式配置为输入
        PWMA_SMCR = 0x03; //编码器模式3
        PWMA_CCER1 = 0x55; //配置通道使能和极性
        PWMA_CCER2 = 0x55; //配置通道使能和极性
        PWMA_CR1 |= 0x01; //使能计数器
实测可以从PWMA_CCR1H,PWMA_CCR1L读到数据,比如我一直向右拧,也是每格+4,这看起来正常。但是假如我先向右拧再向左拧,就会产生回差。
比如我先右拧一格,由0变4,再右拧一格,由4变8,再右拧一格,由8变12,这时左拧一格,本来它应该变回8,但是它会由12变11,然后再左拧,会变为7。。。
就是这里体现出一种类似回差的问题。
我觉得这个应该不是抖动的缘故,编码器很新且我硬件也有滤波,软件上尝试调整PWMA_CCMR1/2的滤波也没有效果。我尝试转的很慢也一样。

为排除硬件问题,我进一步测试,不转动编码器,而是将两个引脚配置为准双向模式,用代码操作引脚来模拟编码器电平,如下:
正转:

        P20 = 0;
        delay_ms(1);
        P22 = 0;
        delay_ms(1);
        P20 = 1;
        delay_ms(1);
        P22 = 1;
        delay_ms(1);

反转:

        P22 = 0;
        delay_ms(1);
        P20 = 0;
        delay_ms(1);
        P22 = 1;
        delay_ms(1);
        P20 = 1;
        delay_ms(1);

发现上述问题仍然存在,方向切换时拧的那一格计数只会改变1而不是改变4,还是有回差。
请问是我哪里配置的有问题,还是什么原因
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:17
  • 最近打卡:2024-08-08 10:25:37

4

主题

5

回帖

98

积分

注册会员

积分
98
发表于 2024-5-2 17:10:18 | 显示全部楼层
问题已解决,是应该从PWMA_CNTRH/PWMA_CNTRL中读取计数值,而不是从PWMA_CCR1H/PWMA_CCR1L。
CCR中的数值会表现出上文描述的行为,而CNT中数值变化很正常。
看手册里的 22.10.21正交编码器模式 例程,里面在中断处理函数中是
cnt_H = PWMA_CCR1H;
cnt_L = PWMA_CCR1L;
这样读取的数据,于是我也直接这样写了,所以看起来好像在不用中断的情况下,应该去读CNT而非CCR
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-7-2 02:59 , Processed in 0.127341 second(s), 51 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表