找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1547|回复: 12
收起左侧

初学者关于频率计的一点疑问

[复制链接]
ID:158391 发表于 2022-12-17 05:41 | 显示全部楼层 |阅读模式
本帖最后由 ldc2000 于 2022-12-17 05:43 编辑

前两天学了51定时器计数器和中断,然后看到论坛里有关频率计的好几个例子,看得有点懵。
现在我的问题是:为什么加那么多复杂的电路?51本身就有计数器,为什么不直接把信号输入到51的中断脚上,或随便哪个I/O脚,比如P3^2 INT0,然后让这个中断捕捉信号的下降沿,每捕捉到一次变量++,一秒内捕捉到多少个下降沿就是多少频率呗。按用12M晶振算,测量1MHz以下的频率应该没问题吧?信号弱的顶多加个放大电路

我这个想法是不是太简单了?请大佬指教
回复

使用道具 举报

ID:883242 发表于 2022-12-17 11:12 | 显示全部楼层
想法不错,但是想法和实际产品的距离有多大,要自己做一遍才会知道。
回复

使用道具 举报

ID:158391 发表于 2022-12-17 11:42 | 显示全部楼层
Hephaestus 发表于 2022-12-17 11:12
想法不错,但是想法和实际产品的距离有多大,要自己做一遍才会知道。

是什么原因呢,是51的反应速度跟不上吗
回复

使用道具 举报

ID:1034262 发表于 2022-12-17 11:53 | 显示全部楼层
我做频率计一直是用的51,特别是STC的1T51,计数器可以计数的最高频率为主频的一半,比如我常用温补晶振32.768MHz做时钟做频率计/周期计,可以计数到16MHz,精度可达0.1ppm。MCU用PCA高速输出高电平1秒低电平10ms信号接INT0 INT1分别对Timer0和Timer1做门控计数,同时允许下降沿中断,高电平计数,低电平停止计数,进外部中断读取计数值即是频率。输入用不同的方式分频,0~50MHz分辨率是1Hz,2.4GHz分辨率是100Hz。
回复

使用道具 举报

ID:158391 发表于 2022-12-17 12:32 | 显示全部楼层
coody_sz 发表于 2022-12-17 11:53
我做频率计一直是用的51,特别是STC的1T51,计数器可以计数的最高频率为主频的一半,比如我常用温补晶振32. ...

我 我是新手,刚百度了PPM和分频,1T51是啥?单片机型号?可以2个时钟周期运算1次的?没查到。
不分频的话可以吗,分频的作用是什么呢,会不会加大误差?因为我想测的信号频率顶多也就几十KHz,不过这个信号应该是复合的,即有低频也有高频,还没想好怎么测
回复

使用道具 举报

ID:491875 发表于 2022-12-17 13:19 | 显示全部楼层
ldc2000 发表于 2022-12-17 12:32
我 我是新手,刚百度了PPM和分频,1T51是啥?单片机型号?可以2个时钟周期运算1次的?没查到。
不分频的 ...

只要脉冲波形规则(方波)也就是有陡峭的下降沿,电平和频率符合单片机要求就可以直接使用。
回复

使用道具 举报

ID:149799 发表于 2022-12-17 14:00 | 显示全部楼层
老愚童63 发表于 2022-12-17 13:19
只要脉冲波形规则(方波)也就是有陡峭的下降沿,电平和频率符合单片机要求就可以直接使用。

能不能发个程序,让我们学习学习。感谢。
回复

使用道具 举报

ID:155507 发表于 2022-12-17 15:49 | 显示全部楼层
王秋冬 发表于 2022-12-17 14:00
能不能发个程序,让我们学习学习。感谢。

给你一个。用89C51单片机制作了一个频率计
用计数器1对外部频率信号进行计数1.jpg


  1. /****************************************************
  2. 名称:频率计,用8位数码管显示

  3. 说明:用计数器1对外部频率信号进行计数,用定时器0每隔
  4.           一秒查询计数器1的累计值,就是信号频率。
  5.         89c52 主频11.0592M         在开发板上测试通过
  6. ****************************************************/

  7. #include <REGX52.H>
  8. #include "SMG.h"

  9. unsigned long num;           //        储存计算频率值
  10. unsigned char T1_count;         //计数器1计满65536的次数

  11. void init()
  12. {
  13.         TMOD = 0x51;// 0101 0001
  14.         TH0 = 0x4c;// 初值=65536 - 11.0592/12*50000;定时50ms
  15.         TL0 = 0x00;
  16.         PT0 = 1;
  17.         EA = ET1 = ET0 =1;
  18.         TR0 = TR1 = 1;
  19.         TI = 1;
  20. }
  21. void main()
  22. {
  23.         init();
  24.         while(1)
  25.         {
  26.                  smgxs8w(num);         //数码管显示8位数
  27.         }
  28. }

  29. void T1_int() interrupt 3        //计数65536次触发一次
  30. {
  31.         T1_count++;        
  32. }

  33. void T0_int() interrupt 1        //50ms触发一次
  34. {
  35.         static unsigned char T0_count;
  36.         TR1 = 0;
  37.         TH0 = 0x4c;//定时50ms
  38.         TL0 = 0x13;        //理论值0x00,实测0x13最准
  39.         if(++T0_count == 20)          //达到1秒
  40.         {
  41.                 num = T1_count *65536 + TH1*256+TL1;
  42.                 TH1 = TL1 = 0;
  43.                 T1_count = 0;
  44.                 T0_count = 0;
  45.         }         
  46.         TR1 = 1;

  47. }

复制代码




回复

使用道具 举报

ID:158391 发表于 2022-12-17 17:09 | 显示全部楼层
angmall 发表于 2022-12-17 15:49
给你一个。用89C51单片机制作了一个频率计

哈哈哈,作过校验没有,精度怎么样?
回复

使用道具 举报

ID:158391 发表于 2022-12-17 17:15 | 显示全部楼层
老愚童63 发表于 2022-12-17 13:19
只要脉冲波形规则(方波)也就是有陡峭的下降沿,电平和频率符合单片机要求就可以直接使用。

感谢感谢
回复

使用道具 举报

ID:158391 发表于 2022-12-17 17:36 | 显示全部楼层
coody_sz 发表于 2022-12-17 11:53
我做频率计一直是用的51,特别是STC的1T51,计数器可以计数的最高频率为主频的一半,比如我常用温补晶振32. ...

除了STC12系列,其他的还有能工作在1T模式下的吗
回复

使用道具 举报

ID:158391 发表于 2022-12-18 11:08 | 显示全部楼层
有没有大佬还有别的看法?
回复

使用道具 举报

ID:420836 发表于 2022-12-20 09:51 | 显示全部楼层
为了创造实用的设计,我们需要添加信号调理电路、滤波电路和补偿电路等。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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