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

STC8H8K64U的P2.0脚可以用PWM捕获功能做频率计吗

[复制链接]
  • TA的每日心情
    开心
    昨天 09:07
  • 签到天数: 167 天

    [LV.7]常住居民III

    67

    主题

    846

    回帖

    2836

    积分

    金牌会员

    积分
    2836
    发表于 2024-1-3 15:03:02 | 显示全部楼层
    梁工 发表于 2024-1-3 14:37
    做频率计,可以参考我的示波器的频率计:P3.5(T1)输入频率信号,P3.3是闸门信号。

    从难到易?示波器的工作原理要比频率计复杂得多吧?有较长时间再研究示波器了。

    点评

    不叫你研究示波器,只是叫你参考测频电路接法与里面的测频软件。 我的数字示波器例子虽然简单,但是还是有好多细分的知识在里面的,可以提供参考。  详情 回复 发表于 2024-1-3 16:17
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    2997

    回帖

    6757

    积分

    超级版主

    积分
    6757
    发表于 2024-1-3 16:17:27 | 显示全部楼层
    xxkj2010 发表于 2024-1-3 15:03
    从难到易?示波器的工作原理要比频率计复杂得多吧?有较长时间再研究示波器了。 ...

    不叫你研究示波器,只是叫你参考测频电路接法与里面的测频软件。
    我的数字示波器例子虽然简单,但是还是有好多细分的知识在里面的,可以提供参考。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 09:07
  • 签到天数: 167 天

    [LV.7]常住居民III

    67

    主题

    846

    回帖

    2836

    积分

    金牌会员

    积分
    2836
    发表于 2024-1-4 08:46:50 | 显示全部楼层
    本帖最后由 xxkj2010 于 2024-1-4 18:25 编辑
    梁工 发表于 2024-1-3 16:17
    不叫你研究示波器,只是叫你参考测频电路接法与里面的测频软件。
    我的数字示波器例子虽然简单,但是还是 ...

    昨晚下载了《STC32G12K128-DSO-USB-CDC-PC-480x320-V2-opencode-20220819》下来学习,感觉大佬太厉害了!
    几乎把STC32G12K128的资源都榨干了:定时器0、1、3、4,ADC,PWMA、PWMB,外部中断1,内部比较器,USB-CDC。

    测频率的基本流程是这样的:
    用定时器1进行计数,从0计数到0xffff,产生中断,中断时freq_H加1;
    1. void timer1_ISR (void) interrupt TMR1_VECTOR
    2. {
    3.         freq_H++;
    4. }
    复制代码

    由PWM进行计时,1秒产生一个闸门开关,让外部中断1(P33)产生中断;
    INT1(P33)中断时算定时器1的计数总量,这个总量就是频率。
    1. /********************* INT0中断函数 *************************/
    2. void INT1_ISR(void) interrupt INT1_VECTOR
    3. {
    4.         frequency = ((u32)freq_H << 16) + ((u32)TH1 << 8) + (u32)TL1;
    5.         freq_H = 0;        TH1 = 0;        TL1 = 0;
    6.         B_FrequencyOk = 1;
    7. }
    复制代码

    现在还没有明白的就是:是PWMA对INT1进行控制,还是PWMB对INT1进行控制?
    它是在芯片内部对INT1端口的P33进行控制,还是PWM计时1秒时间到了,通过某个引脚给P33产生下拉(或上拉)引发INT1中断?

    感谢梁工在百忙中抽出时间给予答复,谢谢!



    点评

    请留意我的程序里有解释的,main函数初始化那里: [attachimg]31898[/attachimg] [attachimg]31900[/attachimg]  详情 回复 发表于 2024-1-4 09:43
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    2997

    回帖

    6757

    积分

    超级版主

    积分
    6757
    发表于 2024-1-4 09:43:04 | 显示全部楼层
    本帖最后由 梁工 于 2024-1-4 09:45 编辑
    xxkj2010 发表于 2024-1-4 08:46
    昨晚下载了《STC32G12K128-DSO-USB-CDC-PC-480x320-V2-opencode-20220819》下来学习,感觉大佬太厉害了!
    ...

    请留意我的程序里有解释的,main函数初始化部分。PWMB-3从P3.3输出高1S低10ms的信号接INT1,高电平计数,低电平不计数,下降沿中断,读取频率。
    截图202401040937585119.jpg

    截图202401040942488329.jpg

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 09:07
  • 签到天数: 167 天

    [LV.7]常住居民III

    67

    主题

    846

    回帖

    2836

    积分

    金牌会员

    积分
    2836
    发表于 2024-1-4 10:14:46 | 显示全部楼层
    梁工 发表于 2024-1-4 09:43
    请留意我的程序里有解释的,main函数初始化部分。PWMB-3从P3.3输出高1S低10ms的信号接INT1,高电平计数, ...

    看到了,这外部中断可以由芯片内部总线去控制,今天算了长见识了。我一直以为外部中断既然叫外部就得由外部控制的。

    01.jpg


    点评

    外部中断INT0~INT4,只是检测对应引脚的上升沿(INT0、INT1支持)、下降沿并产生中断信号,跟这个引脚上的电平变化是怎么来的无关。  详情 回复 发表于 2024-1-4 10:36
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    2997

    回帖

    6757

    积分

    超级版主

    积分
    6757
    发表于 2024-1-4 10:36:03 | 显示全部楼层
    xxkj2010 发表于 2024-1-4 10:14
    看到了,这外部中断可以由芯片内部总线去控制,今天算了长见识了。我一直以为外部中断既然叫外部就得由外 ...

    外部中断INT0~INT4,只是检测对应引脚的上升沿(INT0、INT1支持)、下降沿并产生中断信号,跟这个引脚上的电平变化是怎么来的无关。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 09:07
  • 签到天数: 167 天

    [LV.7]常住居民III

    67

    主题

    846

    回帖

    2836

    积分

    金牌会员

    积分
    2836
    发表于 2024-1-4 10:49:41 | 显示全部楼层
    梁工 发表于 2024-1-4 10:36
    外部中断INT0~INT4,只是检测对应引脚的上升沿(INT0、INT1支持)、下降沿并产生中断信号,跟这个引脚上 ...



    我用手头自制的STC8H1K17T实验板试了,基本思路是这样的:
    定时器中断计数,每0.5秒给P33一个下降沿,INT1中断函数为这样:
    1. void INT1_Isr() interrupt 2
    2. {
    3.     LED=!LED;
    4. }
    复制代码
    结果LED如愿闪动。
    谢谢大佬的解答,今天又学到了一点!
    有关频率计的问题,以后可能还会有些问题想请教你,因为PWM这一块我还没有学透。



    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 09:07
  • 签到天数: 167 天

    [LV.7]常住居民III

    67

    主题

    846

    回帖

    2836

    积分

    金牌会员

    积分
    2836
    发表于 2024-1-4 11:12:06 | 显示全部楼层
    梁工 发表于 2024-1-3 14:37
    做频率计,可以参考我的示波器的频率计:P3.5(T1)输入频率信号,P3.3是闸门信号。

    大佬,我用你的示波器板子(V1.1)下载了虚拟示波器的程序,对RT8025T的32.768KHz信号进行测频,结果显示范围在32749-32761之间
    32751.jpg
    32760.jpg


    请问:是不是虚拟示波器中使用的中断太多,导致彼此相互影响,从而导致INT1计数有时会多一些,有时会少一些?
    如果设计成单独的频率计模式,准确度会提高些?



    点评

    不是,频率计的计数是纯硬件完成的,中断不会导致误差。 造成误差的原因是使用的是内部时钟,秒级的间隔,抖动在0.1%~0.2%左右,所以你会看到有30~60Hz的抖动。 要稳定准确,请使用外部晶振,则频率计的精度就跟你的  详情 回复 发表于 2024-1-4 11:32
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    2997

    回帖

    6757

    积分

    超级版主

    积分
    6757
    发表于 2024-1-4 11:32:42 | 显示全部楼层
    xxkj2010 发表于 2024-1-4 11:12
    大佬,我用你的示波器板子(V1.1)下载了虚拟示波器的程序,对RT8025T的32.768KHz信号进行测频,结果显示 ...

    不是,频率计的计数是纯硬件完成的,中断不会导致误差。
    造成误差的原因是使用的是内部时钟,秒级的间隔,抖动在0.1%~0.2%左右,所以你会看到有30~60Hz的抖动。
    要稳定准确,请使用外部晶振,则频率计的精度就跟你的外部时钟精度一样了。

    比如我做的频率计,使用外部恒温晶振+北斗模块驯服(同步),1小时后的精度优于0.01ppm,即小于亿份之一,年(大约3100万秒)误差小于0.3秒。
    新的恒温晶振一般会超过100元RMB一个,二手的则便宜很多,北斗模块不超过30元。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 09:07
  • 签到天数: 167 天

    [LV.7]常住居民III

    67

    主题

    846

    回帖

    2836

    积分

    金牌会员

    积分
    2836
    发表于 2024-1-4 11:44:47 | 显示全部楼层
    梁工 发表于 2024-1-4 11:32
    不是,频率计的计数是纯硬件完成的,中断不会导致误差。
    造成误差的原因是使用的是内部时钟,秒级的间隔 ...

    恒温晶振一个近100元,那不如买个二手的频率计呢。频率计应该都用上恒温晶振吧?

    点评

    便宜的频率计一般都是10ppm级别的精度。那些国外大牌子的不知道。  详情 回复 发表于 2024-1-4 12:09
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-13 01:03 , Processed in 0.072211 second(s), 66 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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