xxkj2010 发表于 2024-1-3 15:03:02

梁工 发表于 2024-1-3 14:37
做频率计,可以参考我的示波器的频率计:P3.5(T1)输入频率信号,P3.3是闸门信号。



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

梁工 发表于 2024-1-3 16:17:27

xxkj2010 发表于 2024-1-3 15:03
从难到易?示波器的工作原理要比频率计复杂得多吧?有较长时间再研究示波器了。 ...

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

xxkj2010 发表于 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;
void timer1_ISR (void) interrupt TMR1_VECTOR
{
      freq_H++;
}
由PWM进行计时,1秒产生一个闸门开关,让外部中断1(P33)产生中断;
INT1(P33)中断时算定时器1的计数总量,这个总量就是频率。
/********************* INT0中断函数 *************************/
void INT1_ISR(void) interrupt INT1_VECTOR
{
      frequency = ((u32)freq_H << 16) + ((u32)TH1 << 8) + (u32)TL1;
      freq_H = 0;      TH1 = 0;      TL1 = 0;
      B_FrequencyOk = 1;
}
现在还没有明白的就是:是PWMA对INT1进行控制,还是PWMB对INT1进行控制?
它是在芯片内部对INT1端口的P33进行控制,还是PWM计时1秒时间到了,通过某个引脚给P33产生下拉(或上拉)引发INT1中断?

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



梁工 发表于 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,高电平计数,低电平不计数,下降沿中断,读取频率。




xxkj2010 发表于 2024-1-4 10:14:46

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

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




梁工 发表于 2024-1-4 10:36:03

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

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

xxkj2010 发表于 2024-1-4 10:49:41

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



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



xxkj2010 发表于 2024-1-4 11:12:06

梁工 发表于 2024-1-3 14:37
做频率计,可以参考我的示波器的频率计:P3.5(T1)输入频率信号,P3.3是闸门信号。




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




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



梁工 发表于 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元。

xxkj2010 发表于 2024-1-4 11:44:47

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

恒温晶振一个近100元,那不如买个二手的频率计呢。频率计应该都用上恒温晶振吧?
页: 1 [2] 3 4 5
查看完整版本: STC8H8K64U的P2.0脚可以用PWM捕获功能做频率计吗