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

如何测量72MHz以下的外部信号,STC32的144MHz的高速PWM

[复制链接]

该用户从未签到

1

主题

2

回帖

13

积分

新手上路

积分
13
发表于 2023-4-2 16:59:28 | 显示全部楼层
楼主,所以外部捕获方式还是不适合直接测量高频窄脉冲频率,将外部频率N次分频后在输入单片机,用捕获方式测量分频信号的周期可以推算出待测频率,系统频率越高,测量越精确

点评

捕获方式测量周期(计算频率),因为要中断操作,所以最小周期有限制,仅仅对于捕捉,至少要间隔64个时钟,假设主频为40MHz,则周期最小为1.6us,这还仅仅是捕获、进中断读取,实际项目还要考虑数据处理时间,还要兼  详情 回复 发表于 2023-6-6 12:19
回复 支持 反对 送花

使用道具 举报

该用户从未签到

550

主题

9235

回帖

1万

积分

管理员

积分
13944
 楼主| 发表于 2023-4-2 17:15:24 | 显示全部楼层
4nS, 相当于 250MHz
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    无聊
    2023-11-26 13:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    14

    主题

    85

    回帖

    609

    积分

    高级会员

    积分
    609
    发表于 2023-6-6 10:55:19 | 显示全部楼层
    Sushijin 发表于 2023-4-2 16:59
    楼主,所以外部捕获方式还是不适合直接测量高频窄脉冲频率,将外部频率N次分频后在输入单片机,用捕获方式 ...

    为什么要N分频后输出MCU?stc32g自带预分频器
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    45

    主题

    2920

    回帖

    6564

    积分

    超级版主

    积分
    6564
    发表于 2023-6-6 12:19:32 | 显示全部楼层
    Sushijin 发表于 2023-4-2 16:59
    楼主,所以外部捕获方式还是不适合直接测量高频窄脉冲频率,将外部频率N次分频后在输入单片机,用捕获方式 ...

    捕获方式测量周期(计算频率),因为要中断操作,所以最小周期有限制,仅仅对于捕捉,至少要间隔64个时钟,假设主频为40MHz,则周期最小为1.6us,这还仅仅是捕获、进中断读取,实际项目还要考虑数据处理时间,还要兼顾别的程序运行,所以实际能捕获、处理的最小脉冲周期,就要具体分析了。
    STC8H、STC32G的PWM捕获模式,只测量周期的话,可以将输入信号预分频1、2、4、8,最多8分频,这样就可以拓展测量的最小脉冲周期可以达到1/8,仅仅捕获可以捕获0.2ua@40MHz,实际项目捕获到200KHz都是没有压力的。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    无聊
    2023-11-26 13:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    14

    主题

    85

    回帖

    609

    积分

    高级会员

    积分
    609
    发表于 2023-6-7 09:07:45 | 显示全部楼层
    如何测量72MHz以下的外部信号,
    STC32的144MHz的高速PWM
    STC32G12K128-35MHz-LQFP64/48/32,TSSOP20
    STC32G8K64-42MHz-LQFP48/32
    STC8H1K08T-33I-TSSOP20/QFN20
    看了这个列表,发现没有DIP40封装,说明这种封装的不行吧
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    9 小时前
  • 签到天数: 126 天

    [LV.7]常住居民III

    26

    主题

    1275

    回帖

    3969

    积分

    论坛元老

    积分
    3969
    发表于 2023-6-7 19:03:12 | 显示全部楼层
    如何测量72MHz以下的外部信号, STC32的144MHz的高速PWM
    修改3楼的例程为中断模式 !
    主要修改部分:
    1.     HSPWMB_CFG = 0x07;                      //使能PWMB相关寄存器异步访问功能,并使能异步模式PWM中断
    复制代码
    1.png
    使能PWM捕获中断:
    1.     WritePWMB((char)&PWMB_IER, 0x06);       //使能CC5,CC6捕获中断
    2.     EA = 1;
    复制代码
    主循环打印捕获结果:
    1.         if (Cap5Flag)
    2.         {
    3.             Cap5Flag = 0;
    4.             printf("%04x ",PWM5_cnt);
    5.         }
    6.         if (Cap6Flag)
    7.         {
    8.             Cap6Flag = 0;
    9.             printf("%04x\r\n",PWM6_cnt);
    10.         }
    复制代码
    添加PWM中断函数:
    1. void PWMB_ISR() interrupt PWMB_VECTOR
    2. {
    3.     char sta;
    4.         sta = ReadPWMB((char)&PWMB_SR1);
    5.         if (sta & 0x02)
    6.         {
    7.                 PWM5_cnt = ReadPWMB((char)&PWMB_CCR5H);
    8.                 PWM5_cnt = (PWM5_cnt<<8) + ReadPWMB((char)&PWMB_CCR5L);
    9.                 Cap5Flag = 1;
    10.         }
    11.         if (sta & 0x04)
    12.         {
    13.                 PWM6_cnt = ReadPWMB((char)&PWMB_CCR6H);
    14.                 PWM6_cnt = (PWM6_cnt<<8) + ReadPWMB((char)&PWMB_CCR6L);
    15.                 Cap6Flag = 1;
    16.         }
    17.         WritePWMB((char)&PWMB_SR1, 0x00);   //清除完成标志
    18. }
    复制代码

    高速PWM使用PLL时钟实现高速输出和高速捕获功能-中断模式.zip

    10.84 KB, 下载次数: 44

    点评

    请问中断函数中换成获取实时计数值出错咋办 PWM6_cnt = ReadPWMB((char)&PWMB_CNTRH); PWM6_cnt = (PWM6_cnt<<8) + ReadPWMB((char)&PWMB_CNTRL);  发表于 2024-1-21 22:37
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    45

    主题

    2920

    回帖

    6564

    积分

    超级版主

    积分
    6564
    发表于 2023-8-7 17:12:09 | 显示全部楼层
    Sushijin 发表于 2023-4-2 16:28
    请教一下,测量72M一下信号频率对信号的上升沿或者下降沿时间有没有要求,比如我的待测频率是50M,虽然周期 ...

    如果是测频率,可以分频后再测。内部分频也要补超过72MHz的频率,高、低电平均大于7ns才行,4ns不行的。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9235

    回帖

    1万

    积分

    管理员

    积分
    13944
     楼主| 发表于 2024-1-14 10:02:24 | 显示全部楼层
    STC32F 的 PLL-250MHz, 可以用来测量 50MHz 的方波
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-20 09:06
  • 签到天数: 1 天

    [LV.1]初来乍到

    2

    主题

    3

    回帖

    84

    积分

    注册会员

    积分
    84
    发表于 2024-1-14 20:31:28 | 显示全部楼层
    本帖最后由 flashlix 于 2024-1-14 20:36 编辑

    楼主,请问两个问题:
    1、在使用高速高级PWM进行捕获时,捕获数值的寄存器的时钟源是按系统时钟计时还是按照PLL输出时钟计时?
    关于高速高级PWM在手册之找到以下截图,可以确认一下吗?谢谢
    2、如果使用高速高级PWM进行捕获,可以同时进行高级PWM(非高速)输出吗?比如,PWM7/8进行PWM输出(非高速),PWM1P采用高速高级PWM进行捕获
    截图202401142031087694.jpg

    点评

    1、在使用高速高级PWM进行捕获时,捕获数值的寄存器的时钟源是按PLL时钟。 2、PWMA、PWMB是两组相互独立的PWM,各自操作互不干涉,PWM7/8属于PWMB,PWM1P疏于PWMA,各自为政。  详情 回复 发表于 2024-1-14 23:02
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9235

    回帖

    1万

    积分

    管理员

    积分
    13944
     楼主| 发表于 2024-1-14 20:52:05 | 显示全部楼层
    PLL时钟
    回复 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-28 18:41 , Processed in 0.072687 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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