找回密码
 立即注册
楼主: dhtx***

关于STC32G的编码器接口的触发问题

[复制链接]

该用户从未签到

550

主题

9410

回帖

1万

积分

管理员

积分
13962
发表于 2024-1-16 22:23:21 | 显示全部楼层
看梁工的 编码器讲解视频,实际仿真调试 梁工的编码器程序
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    擦汗
    5 天前
  • 签到天数: 47 天

    [LV.5]常住居民I

    0

    主题

    24

    回帖

    278

    积分

    中级会员

    积分
    278
    发表于 2024-1-17 09:00:45 | 显示全部楼层
    神农鼎 发表于 2024-1-16 22:23
    看梁工的 编码器讲解视频,实际仿真调试 梁工的编码器程序

    谢谢!
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    0

    主题

    14

    回帖

    44

    积分

    新手上路

    积分
    44
    发表于 2024-1-17 22:06:46 | 显示全部楼层
    peterwangjp 发表于 2024-1-16 21:47
    我也遇到跟你一样的疑问
    我是按照例程进行调试的,每次进入PWM中断读取编码器值都是一次性增加2,而不是1.  ...

    实际测试好像就是这样的,你们验证的怎么样?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    擦汗
    5 天前
  • 签到天数: 47 天

    [LV.5]常住居民I

    0

    主题

    24

    回帖

    278

    积分

    中级会员

    积分
    278
    发表于 2024-1-20 14:54:29 | 显示全部楼层
    ryxhxm 发表于 2024-1-17 22:06
    实际测试好像就是这样的,你们验证的怎么样?

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

    使用道具 举报

    该用户从未签到

    46

    主题

    2997

    回帖

    6757

    积分

    超级版主

    积分
    6757
    发表于 2024-1-20 17:14:45 | 显示全部楼层
    peterwangjp 发表于 2024-1-16 21:47
    我也遇到跟你一样的疑问
    我是按照例程进行调试的,每次进入PWM中断读取编码器值都是一次性增加2,而不是1.  ...

    编码器两个边沿都+1,所以一对脉冲就+2。另一个模式+4。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    擦汗
    5 天前
  • 签到天数: 47 天

    [LV.5]常住居民I

    0

    主题

    24

    回帖

    278

    积分

    中级会员

    积分
    278
    发表于 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.

    请梁工帮忙解答下,是不是我理解错误了。
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-13 08:09 , Processed in 0.060729 second(s), 48 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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