找回密码
 立即注册
楼主: ahong

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

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:521
  • 最近打卡:2025-05-02 09:38:13

109

主题

1900

回帖

5214

积分

论坛元老

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

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

点评

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:521
  • 最近打卡:2025-05-02 09:38:13

109

主题

1900

回帖

5214

积分

论坛元老

积分
5214
发表于 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
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12081
发表于 2024-1-4 09:43:04 | 显示全部楼层
本帖最后由 梁工 于 2024-1-4 09:45 编辑
xxkj*** 发表于 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

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:521
  • 最近打卡:2025-05-02 09:38:13

109

主题

1900

回帖

5214

积分

论坛元老

积分
5214
发表于 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
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:521
  • 最近打卡:2025-05-02 09:38:13

109

主题

1900

回帖

5214

积分

论坛元老

积分
5214
发表于 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这一块我还没有学透。



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:521
  • 最近打卡:2025-05-02 09:38:13

109

主题

1900

回帖

5214

积分

论坛元老

积分
5214
发表于 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
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12081
发表于 2024-1-4 11:32:42 | 显示全部楼层
xxkj*** 发表于 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元。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:521
  • 最近打卡:2025-05-02 09:38:13

109

主题

1900

回帖

5214

积分

论坛元老

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

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

点评

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 12:49 , Processed in 0.169408 second(s), 115 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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