找回密码
 立即注册
查看: 69|回复: 11

使用STC32G12K128芯片INT0中断测量脉冲宽度问题

[复制链接]

该用户从未签到

3

主题

8

回帖

43

积分

新手上路

积分
43
发表于 2024-5-1 10:52:54 | 显示全部楼层 |阅读模式
使用STC32G12K128芯片中INT0下降沿中断触发方式,来测量P3.2口上,两个下降沿脉冲之间的宽度,

程序配置如下:
       P3.2 配置为输入口模式
      IT0  = 1;           //外部INT0下降沿中断使能   
      IP   = 0X01;      //设置INT0中断优先级为最高
      IPH  = 0X01;
      
      TM3PS = 0x01;  //T3定时器主时钟2分频(主时钟24MHZ)定时器3为1us计数
      T3R  = 1;         //启动定时器3计数  ,通过读取2次INT0中断入口时,定时器T3的值,进行差值计算,得到脉冲宽度
   
      EX0  = 1;
      EA   = 1;  

     实际脉冲宽度在9ms -11ms 之间   

     程序在实际运行时,大部分测量的脉冲宽度是正确的,但其中会发生一次测量信号出错,出错的值每次都一样




回复 送花

使用道具 举报

该用户从未签到

3

主题

8

回帖

43

积分

新手上路

积分
43
 楼主| 发表于 2024-5-1 10:55:36 | 显示全部楼层
同样的程序,之前在STM8S105S4T6C 单片机上,运行没有出现过测量出错问题,麻烦各位老师指导一下,看看我的问题出在什么地方,谢谢

点评

不可能是同样的程序,另外建议改用 专业的 PWM 测量外部信号  详情 回复 发表于 2024-5-1 12:04
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:55
  • 签到天数: 141 天

    [LV.7]常住居民III

    27

    主题

    1338

    回帖

    4169

    积分

    论坛元老

    积分
    4169
    发表于 2024-5-1 11:01:15 | 显示全部楼层
    先用示波器测量一下被测信号是否稳定,有没有受到脉冲干扰。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9441

    回帖

    1万

    积分

    管理员

    积分
    13983
    发表于 2024-5-1 12:04:00 | 显示全部楼层
    etec 发表于 2024-5-1 10:55
    同样的程序,之前在STM8S105S4T6C 单片机上,运行没有出现过测量出错问题,麻烦各位老师指导一下,看看我的 ...

    不可能是同样的程序,另外建议改用 专业的 PWM 测量外部信号
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    8

    回帖

    43

    积分

    新手上路

    积分
    43
     楼主| 发表于 2024-5-1 14:57:53 | 显示全部楼层
    您好,这个项目原来是STM8S105S4芯片做的,项目硬件没有变比,只是把芯片更换成了STC32G系列的芯片,程序基本是移植过来的,这两个芯片的配置基本是一样的,这个脉冲用PWM捕获测量没有问题,但PWM通道已经被使用了,您看下,我这个可能会再哪里出问题,谢谢
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    8

    回帖

    43

    积分

    新手上路

    积分
    43
     楼主| 发表于 2024-5-1 15:01:43 | 显示全部楼层
    神农鼎 发表于 2024-5-1 12:04
    不可能是同样的程序,另外建议改用 专业的 PWM 测量外部信号

    您好,这个项目原来是STM8S105S4芯片做的,项目硬件没有变比,只是把芯片更换成了STC32G系列的芯片,程序基本是移植过来的,这两个芯片的配置基本是一样的,这个脉冲用PWM捕获测量没有问题,但PWM通道已经被使用了,您看下,我这个可能会再哪里出问题,谢谢
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9441

    回帖

    1万

    积分

    管理员

    积分
    13983
    发表于 2024-5-1 15:41:39 | 显示全部楼层
    有如下8个通道可以测量:
    PWM1P, PWM2P, PWM3P, PWM4P;
    PWM5, PWM6, PWM7, PWM8
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3020

    回帖

    6807

    积分

    超级版主

    积分
    6807
    发表于 2024-5-1 21:53:13 | 显示全部楼层
    使用INT0下降沿中断+定时器配合测量周期没有任何问题,因为要进入中断读取定时器需要点时间,可能会造成一点误差,主频运行于24MHz时,误差不会超过1us(24个时钟)。对于楼主要测量的9~11ms,这点误差可以忽略。
    楼主的问题,可能是读取定时器时刚好处于进位而发生错误。处理方式:先挺尸定时器,再读取定时器,然后设置初值(也可以不设置),再允许定时器。这种方式处理,一定不会有问题。另外,必须设置INT0的中断为最高优先级中断,避免别的中断影响精度。

    提别提醒:使用INT0外中断测周期不是好的方法,最好的方法是使用PWM模块来测周期,误差不超过一个PWM时钟。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    8

    回帖

    43

    积分

    新手上路

    积分
    43
     楼主| 发表于 2024-5-1 22:01:06 | 显示全部楼层
    好的,谢谢,梁工,我明天试一下您的处理方案
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    8

    回帖

    43

    积分

    新手上路

    积分
    43
     楼主| 发表于 2024-5-2 16:14:03 | 显示全部楼层
    本帖最后由 etec 于 2024-5-2 16:15 编辑
    梁工 发表于 2024-5-1 21:53
    使用INT0下降沿中断+定时器配合测量周期没有任何问题,因为要进入中断读取定时器需要点时间,可能会造成一 ...

    您好,梁工,按照您的建议,我再INT0中断中,读取T3定时器值前,先停止T3计数,读取完后,再启动那个T3定时器,之前的测量出错的问题,没有了。但是我还是有不太理解的地方,还想再请教您一下,T3定时器时钟是1uS,我的测量脉冲周期大概是10-15ms之间,T3完整的一次计数时间是65536*1us=65.536ms,时间是大于脉冲周期的,程序是通过读取两次T3定时器的差值来计算脉冲宽度的,实际计算时就算发生T3计数进位,但是没有超过一个T3计数周期,应该对计算差值是不影响啊,这个我还是没太搞清楚,因为这个程序我之前用STM8S105芯片也是用T3计数器+INT0中断,读取计数值,我是没有停止T3计数的,直接读取后计算,没发现过问题。您能再和我具体说明一下原因吗,感谢!!!

    点评

    我没有用过STM8S105,捕捉掉其读取定时器16位值的机理,有的MCU读取时,是会瞬间读取16位或锁存16位的值,所以不会存在问题。 但是51的架构,每次读只能读取一个字节,如果不停止计数器,不管先读TH3还是先读TL3,均  详情 回复 发表于 2024-5-2 16:56
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-16 02:17 , Processed in 0.068635 second(s), 66 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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