神农鼎 发表于 2024-1-16 22:23:21

看梁工的 编码器讲解视频,实际仿真调试 梁工的编码器程序

peterwangjp 发表于 2024-1-17 09:00:45

神农鼎 发表于 2024-1-16 22:23
看梁工的 编码器讲解视频,实际仿真调试 梁工的编码器程序

谢谢!

ryxhxm 发表于 2024-1-17 22:06:46

peterwangjp 发表于 2024-1-16 21:47
我也遇到跟你一样的疑问
我是按照例程进行调试的,每次进入PWM中断读取编码器值都是一次性增加2,而不是1....

实际测试好像就是这样的,你们验证的怎么样?

peterwangjp 发表于 2024-1-20 14:54:29

ryxhxm 发表于 2024-1-17 22:06
实际测试好像就是这样的,你们验证的怎么样?

我目前得到结果跟你一样我还在学习视频 看是不是进入中断后检测方式有问题

梁工 发表于 2024-1-20 17:14:45

peterwangjp 发表于 2024-1-16 21:47
我也遇到跟你一样的疑问
我是按照例程进行调试的,每次进入PWM中断读取编码器值都是一次性增加2,而不是1....

编码器两个边沿都+1,所以一对脉冲就+2。另一个模式+4。

peterwangjp 发表于 2024-1-21 13:10:54

梁工 发表于 2024-1-20 17:14
编码器两个边沿都+1,所以一对脉冲就+2。另一个模式+4。
谢谢梁工解答。

void PWMA_ISR(void) interrupt PWMA_VECTOR
{
      u8      sr1, sr2;
      sr1 = PWMA_SR1;      //为了快速, 中断标志用一个局部变量处理
      PWMA_SR1 = 0;      //清除中断标志
      sr2 = PWMA_SR2;      //为了快速, 中断标志用一个局部变量处理
      PWMA_SR2 = 0;      //清除中断标志
      sr1 &= PWMA_ISR_En;      //每个通道可以单独允许中断处理

      if(sr1 & 0x02)      //通道1 编码器中断
      {
                pulse = ((u16)PWMA_CNTRH << 8) + (u16)PWMA_CNTRL;      //读取当前编码器计数值
                B_Change = 1;                //标志已有捕捉值
      }
}

这个例程里,是上升沿和下降沿都会触发B_change = 1 么?如果仅仅是其中一个,那么做判断时候读取pulse的就是+2,如果上升沿和下降沿都会对B_change赋值,那么就会+1.
实际上这个例程每次通过串口打印输出的是+2.

请梁工帮忙解答下,是不是我理解错误了。
页: 1 [2]
查看完整版本: 关于STC32G的编码器接口的触发问题