找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1420|回复: 23
打印 上一主题 下一主题
收起左侧

单片机对一个外部脉冲测试频率,每小时测一次,以后每次测出的频率第一次(或者第....

[复制链接]
跳转到指定楼层
楼主
ID:491875 发表于 2021-12-7 09:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
100黑币
各位能者,我是一个刚刚接触单片机的老年人,因工作需要,检测一个外部脉冲的频率,每小时检测一次,然后将每次检测的脉冲频率与第一次(或者第二次)检测的脉冲频率进行比较,如果飘移达到一定值就发出报警信号。这样需要对第一次(或者第二次)检测频率进行存储()以后每次检测可以存储,也可以不存储,不知道能否用数组解决(定义一个200元素的1维数组)。谢谢。

最佳答案

查看完整内容

以STC89C54RD+为例,拥有1K的 XRAM 如果全部用于保存频率,每个频率的长度为16位的话,可以保存512个,完全没有任何问题。你只需要声明数组变量 unsigned short xdata freq_buf[512]; 就可以了。 保存的时候, 定义一个计数 freq_Num,作为数组指针 每次+1 保存就好了。如果你要第一次的周期始终不被覆盖,可以把第一次的周期另外存在变量 freq_sample; 如果只需要存第一次和第二次, 可以有两个方法,一个是把第一次第 ...
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:624769 发表于 2021-12-7 09:21 | 只看该作者
以STC89C54RD+为例,拥有1K的 XRAM 如果全部用于保存频率,每个频率的长度为16位的话,可以保存512个,完全没有任何问题。你只需要声明数组变量
unsigned short xdata  freq_buf[512];  就可以了。
保存的时候, 定义一个计数 freq_Num,作为数组指针 每次+1 保存就好了。如果你要第一次的周期始终不被覆盖,可以把第一次的周期另外存在变量   freq_sample;

如果只需要存第一次和第二次, 可以有两个方法,一个是把第一次第二次的操作写在 while(1)外面。另一个是可以定义一个变量比如: checkFlag  初始为0
然后 第一次保存后   置1, 第二次保存后置2, 只要 为 2 了,之后都是统一的操作,不需要再去变化这个变量了。
回复

使用道具 举报

板凳
ID:491875 发表于 2021-12-7 10:22 | 只看该作者
这样连续检测5-7天,所以一个200的数组应该可以满足要求。如果能够存储这200个频率值为后续上传上位机更好。传播设想将每次检测值与第二次检测值的差的绝对值*100再除以第二个频率值计算飘移率。这样可以避免小数(即使有小数也可以舍去不管)
回复

使用道具 举报

地板
ID:313048 发表于 2021-12-7 10:41 | 只看该作者
1、外部脉冲是一直存在的吗?如果是的话则可以一直检测脉冲频率,通过定时器计时,到点时进行比较就可以了;
2、你说的与第一次或者第二次脉冲频率比较是说的设备首次上电的脉冲频率还是每次上电的脉冲频率。如果是首次的话,则需要存储到eeprom或者flash,否则不需要存储,直接弄一个全局变量就可以了。没必要使用到数组。
回复

使用道具 举报

5#
ID:57657 发表于 2021-12-7 11:16 | 只看该作者
一次测多长时间? 多少HZ的频率?
如果频率上Mhz,加一颗74HC的二进制计数芯片分频,型号有很多。
回复

使用道具 举报

6#
ID:852300 发表于 2021-12-7 12:33 | 只看该作者
要求有点乱,以第一和第二次那一次为准?不确定就没法做!一定下来整个程序就很容易了!还有就是:断电后是不是清除所有数据?
回复

使用道具 举报

7#
ID:213173 发表于 2021-12-7 15:03 | 只看该作者
楼主想制作的这个设备应该没有什么难处,但需要把相关数据说清楚才能规划软硬件方案。外部脉冲的频率范围?外部脉冲峰值电压几V?测量误差允许范围?频率漂移极限范围?间隔1小时取样的时间精度要求?设备使用环境?采用哪种显示方式?是否电池供电?数据实时上传还是任务结束后一次性上传?按说不需要定义一个200元素的数组,选用有内置EEPROM的单片机,可以把监测的时间和频率数据永久保存任意调看。这一点点数据随便找一款STC15W或STC8芯片都可胜任。

评分

参与人数 1黑币 +15 收起 理由
老愚童63 + 15 很给力!

查看全部评分

回复

使用道具 举报

8#
ID:491875 发表于 2021-12-7 18:19 | 只看该作者
AUG 发表于 2021-12-7 10:41
1、外部脉冲是一直存在的吗?如果是的话则可以一直检测脉冲频率,通过定时器计时,到点时进行比较就可以了 ...

对,一直存在
回复

使用道具 举报

9#
ID:491875 发表于 2021-12-7 18:21 | 只看该作者
AUG 发表于 2021-12-7 10:41
1、外部脉冲是一直存在的吗?如果是的话则可以一直检测脉冲频率,通过定时器计时,到点时进行比较就可以了 ...

每次上电的脉冲。外部脉冲和单片机公用电源
回复

使用道具 举报

10#
ID:491875 发表于 2021-12-7 18:22 | 只看该作者
npn 发表于 2021-12-7 11:16
一次测多长时间? 多少HZ的频率?
如果频率上Mhz,加一颗74HC的二进制计数芯片分频,型号有很多。

频率再1000Hz以内(一般在500以内),
回复

使用道具 举报

11#
ID:491875 发表于 2021-12-7 18:23 | 只看该作者
谢谢各位解答
回复

使用道具 举报

12#
ID:491875 发表于 2021-12-7 18:23 | 只看该作者
谢谢各位的解答和帮助,谢谢
回复

使用道具 举报

13#
ID:313048 发表于 2021-12-7 18:27 | 只看该作者
老愚童63 发表于 2021-12-7 18:21
每次上电的脉冲。外部脉冲和单片机公用电源

每次上电的话则不需要进行存储,使用全局变量保存第一次/第二次采集到的频率,后面每次进行比较就可以了,如果想上传上位机的话,通过串口TTL转USB就可以了,具体如何上传则根据你自己的需求,你也可以一直上传,也可以通过PC下发指令上传都是可以的。

评分

参与人数 1黑币 +15 收起 理由
老愚童63 + 15 很给力!

查看全部评分

回复

使用道具 举报

14#
ID:491875 发表于 2021-12-7 18:30 | 只看该作者
AUG 发表于 2021-12-7 18:27
每次上电的话则不需要进行存储,使用全局变量保存第一次/第二次采集到的频率,后面每次进行比较就可以了 ...

谢谢,明天试一下看看能否解决。
回复

使用道具 举报

15#
ID:491875 发表于 2021-12-7 18:32 | 只看该作者
6620680 发表于 2021-12-7 12:33
要求有点乱,以第一和第二次那一次为准?不确定就没法做!一定下来整个程序就很容易了!还有就是:断电后是 ...

第二次吧,因为是同一个脉冲源,所以相邻2次的飘移不会很大。第一次考虑上电不稳定因数,还是第二次可靠一些
回复

使用道具 举报

16#
ID:491875 发表于 2021-12-7 18:34 | 只看该作者
npn 发表于 2021-12-7 11:16
一次测多长时间? 多少HZ的频率?
如果频率上Mhz,加一颗74HC的二进制计数芯片分频,型号有很多。

用一个外部中断源每小时给一个中断再测试,测试时间没有要求,10秒左右就可以了。
回复

使用道具 举报

17#
ID:491875 发表于 2021-12-7 18:38 | 只看该作者
wulin 发表于 2021-12-7 15:03
楼主想制作的这个设备应该没有什么难处,但需要把相关数据说清楚才能规划软硬件方案。外部脉冲的频率范围? ...

单片机考虑用STC89C54RD+或者58RD+或者考虑用STC8A8K64S4A12系列,手头正好有这几个芯片,STC8系列不太熟悉,主要是晶振频率的设置不清楚。最好是用STC89C54RD+或者STC89C58RD+。
回复

使用道具 举报

18#
ID:491875 发表于 2021-12-7 18:39 | 只看该作者
6620680 发表于 2021-12-7 12:33
要求有点乱,以第一和第二次那一次为准?不确定就没法做!一定下来整个程序就很容易了!还有就是:断电后是 ...

断电后清除所有数据,这样确保下次测量。
回复

使用道具 举报

19#
ID:624769 发表于 2021-12-7 18:45 | 只看该作者
看你的说法,好像,你应该没什么问题,你现在的问题,或者说难点,又或者说困惑,主要是在什么方面?

频率捕捉?
频率保存?
频率比较?
定时执行?
回复

使用道具 举报

20#
ID:491875 发表于 2021-12-7 18:53 | 只看该作者
频率保存,因为检测次数比较多,前面第二次检测的值有可能被覆盖。
回复

使用道具 举报

21#
ID:491875 发表于 2021-12-7 18:54 | 只看该作者
188610329 发表于 2021-12-7 18:45
看你的说法,好像,你应该没什么问题,你现在的问题,或者说难点,又或者说困惑,主要是在什么方面?

频 ...

还有怎么区别对待第二次和以后各次的检测存储问题(第二次以后可以不保存),
回复

使用道具 举报

22#
ID:852300 发表于 2021-12-7 19:16 | 只看该作者
老愚童63 发表于 2021-12-7 18:54
还有怎么区别对待第二次和以后各次的检测存储问题(第二次以后可以不保存),

数量不多可以直接以变量方式存储,只保存出现异常的数据及时间段(某小时)就简单了
回复

使用道具 举报

23#
ID:491875 发表于 2021-12-7 19:22 | 只看该作者
188610329 发表于 2021-12-7 19:19
以STC89C54RD+为例,拥有1K的 XRAM 如果全部用于保存频率,每个频率的长度为16位的话,可以保存512个,完全 ...

谢谢,看看能否编写出来。明天试一试。
回复

使用道具 举报

24#
ID:491875 发表于 2021-12-7 19:24 | 只看该作者
6620680 发表于 2021-12-7 19:16
数量不多可以直接以变量方式存储,只保存出现异常的数据及时间段(某小时)就简单了

谢谢,刚刚接触单片机,编程还不熟悉,只能慢慢试了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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