搜索
bottom↓
楼主: machao

高手练手题--频率计设计 [2年后再次孤独求败]

  [复制链接]

出0入4汤圆

发表于 2013-6-9 15:53:18 | 显示全部楼层
顶马老师,包括第一句话。

出0入296汤圆

发表于 2013-6-9 16:27:21 | 显示全部楼层
本帖最后由 Gorgon_Meducer 于 2013-6-9 16:28 编辑
gzhuli 发表于 2013-6-9 15:34
输赢并不是重要的,就如你的笑话一样,着火了喊出来还被人笑,这样比输赢有意义么。
yeshunter说对了,争 ...


给你这么一说,我突然觉得这道题有点类似完型填空呢……我最怕完型填空了……明明有那么多可以写的,却必须写一个
标准答案……而且什么是标准答案还只有出题的人知道……
比如:空山新雨后,_________
^_^

出0入618汤圆

发表于 2013-6-9 16:54:40 | 显示全部楼层
Gorgon_Meducer 发表于 2013-6-9 16:27
给你这么一说,我突然觉得这道题有点类似完型填空呢……我最怕完型填空了……明明有那么多可以写的,却必 ...


millwood0用8脚的PIC12F675做的频率计,4MHz时钟测4MHz,在坛里发过贴的,有仿真有实物。
还有老外同样用PIC,开启内置预分频器做到了50MHz(手册的定时器时钟极限频率),这完全得益于PIC的异步定时器设计。
所以MCU仅限定STC和AVR,觉得做到了1/2Fosc就无敌,实在是无力吐槽。

出0入0汤圆

发表于 2013-6-9 17:56:08 来自手机 | 显示全部楼层
回马老师,我的那个硬件可不是多余的。有它是多周期同步测频,是等精度测频。没有它,只是多周期测周。它们之间的精度可差大发了。如果f0是1MHz, 其误差小于2ppM。如果是多周期测频,则最大误差约为50ppM, 根据我的文档。

出0入0汤圆

 楼主| 发表于 2013-6-9 18:48:28 | 显示全部楼层
本帖最后由 machao 于 2013-6-9 18:58 编辑
gzhuli 发表于 2013-6-9 16:54
millwood0用8脚的PIC12F675做的频率计,4MHz时钟测4MHz,在坛里发过贴的,有仿真有实物。
还有老外同样用 ...


你还真给傻孩子说中了,被我“顽”了。早就看出我的“激将法”,说是要飘过,但是总在这里飘来飘去。谢谢你的捧场。

这幢楼你盖的比我还多,不知道答复哪个。贴近本帖题目的说吧。
=====================================================================
||题目是要做一个频率计,从工程的角度来看肯定是根据设计指标来选择最合适的实现方案。
||马老师的题目并没有先设定指标,而是先限定材料,这本来就不合理,这种思维模式不应该让它埋在学生的潜意识里。
||比赛和考试如此出题就是应该打的,如果还拿这种模式来练手,最终还不是附和了应试教育的思维。

频率计只是一个我出题的一个模仿物品,我的这个栏目是AVR,题目后面写明“侧重MCU的练手设计题”,所以本意不是工程上设计真正的频率计。只是借频率计这个物品让大家训练MCU的深入使用,其中包括傻孩子和一网友提到的TIMER的深入和正确的使用。其实你在回帖中已经看到了,那个开始被你称赞肯定的,做到7位数字的朋友,对于中断是否带来误差还是不了解的,你还回帖子开导他。换句话讲,如果不采用捕捉方式读取计数器的值,他的结果中就有软件的误差。millwood0在66楼:“Now, if you insist, figure out how you would read a prescaler, either internal or external. If you can solve that problem elegantly, you are on your way to design a half-decent frequency counter”。两位元老都知道要正确的读取计数器的值,其实也没什么,简单的很,就是捕捉。但看似简单的问题,其实很多人是不会正确使用甚至是不知道的。因为早期的工程师甚至现在在校的学生学得都是标准51,标准51是没有这个功能。只所以提到STC,是这块片子内部的时钟增加了捕捉功能。并不是所有51兼容MCU,内部时钟有捕捉功能,还有网友说使用89S51就做过了,这个你去提醒吧,或者让他参与你3G频率计的设计。

会使用计数器的捕捉功能,也是N年前我同傻孩子讨论的话题,也是我推荐学习AVR的原因之一,因为标准51没有。可惜在今天还是有非常多的人不知道。

至于限定材料,选择AVR和51是大家熟悉的DD,当然用PIC,STM32也是可以。不过使用32位的MCU,指标就可以做的更好,要求就不一样。使用8位MCU,带来的挑战是计数器是16位的,同时外围硬件尽量少也是为了增加难度,8位数码管动态扫描,几个定时器同时工作,系统软件的编写非常重要。所以指标也是无法限定的,采用的方法不好,你的指标就做不高。硬件使用合理,软件处理好,充分发挥MCU的效率,指标就能做上去。所以不定指标,充分发挥MCU本身的特点,也是我出题的目的。

====================================================================
||millwood0用8脚的PIC12F675做的频率计,4MHz时钟测4MHz,在坛里发过贴的,有仿真有实物。
||还有老外同样用PIC,开启内置预分频器做到了50MHz(手册的定时器时钟极限频率),这完全得益于PIC的异步定时器设计。
||所以MCU仅限定STC和AVR,觉得做到了1/2Fosc就无敌,实在是无力吐槽。

2个都是非常好的例子,开阔眼界,也是本题的目的所在之一。PIC12F675做的频率计,4MHz时钟测4MHz,至少不是单用MCU内部的同步计数器(同步计数器的外部时钟输入极限1/2Fosc),老外做到50M,也是手册的极限。AVR上也有一个8位的异步计数器,给人带来想象空间。按AVR的手册,外部输入频率最高是1/2Fosc,这个就是通常使用同步计数器的极限。也是通常使用同步计数器设计的上限。这个没有什么可以吐槽的,也不是我水平高无敌。这个不是高水平的东西,是很多人水平不够。傻孩子已经贴出手册上的指标,10M系统时钟,做到测4M应该保证,其实可以做到4.5M,如果连4M(1/2.5)也做不到,方法上就有问题了。已经有网友帖子说做不到。

=================================================================================
||如果说做一个最高输入频率6MHz的8位数码管频率计,要求误差不能超过0.01%,比谁的方案成本低,那又是另一回事。
||马老师的擂台是只给个单片机你,看你能做到多高频率和多高精度,这种比试在我看来真的没有意义,并不是花15分钟去做一下的问题,我是宁愿花时间去打这么多字都不会花时间去做这个东西
||的,随便你说我输了也好没真本事也好。

||如果按我设的指标开个擂台,要求数字部分不允许用FPGA,模拟部分不允许用IC可变增益放大器,看有多少人能做得出来。这才是真本事,真的能在做的过程学到知识。
||就算做不到那个指标,如果能根据自己的能力提出一定的妥协指标并完成,也已经可以打70分以上了,因为做产品就是一个不断挑战和妥协的过程,重点不在于你是否做到,而在于你是否真的去努
||力了。

上面我说过了,就是训练单片机。认为没有意义可以飘过。既然宁愿花时间去打这么多字,建议你在本帖内就介绍些最简单的东西。你要开擂台可以另打锣鼓重开张,在你的地盘开个新帖。

我是教师,教单片机简单的东西,所以出题就是侧重单片机训练,出给初学的学生训练,不是给元老级的高手。
没想到的是吸引了众多元老级别的人物,帮助敲锣打鼓,这个开场很好,很热闹。
希望元老级人物不要把重点放在怎么出题上,不要与我讨论什么教育体制,应试教育的大问题,这个我比你抨击的还厉害,我们也解决不了这个社会问题。

类似你下面的回帖我最欢迎:

||yeshunter 发表于 2013-6-9 09:00
||您好,您也是我敬重和佩服的人。
||谈到这个频率计,我个人理解,您所说的可以不做补偿是指:启动Timer和停 ...

||你先大概说一下你的定时器和门控设计,还有中断使用情况。STM32的定时器比STC和AVR还要强大很多,级联和门控都可以用硬件完成,不应该有软件误差的。

我的名气已经臭了,你给他详细解释他会仔细琢磨的,而我解释就会被人“无力吐槽”的,就这样的教授水平呀, the good Professo:)

“借力打人”,我的第二计策,傻孩子没有看出来吧。理论上视乎大家都知道,什么测频、测周,多周期测周,一套一套的。之所以要问具体的实现方法,就是发现破绽,已经有2-3位做过类似DD网友露出破绽了。看到破绽,元老们才会体会到我题目是否有意义,才能清楚的知道这里的网友不都是元老级人物,做过的DD也不是没有提高之处。

出0入0汤圆

 楼主| 发表于 2013-6-9 18:51:18 | 显示全部楼层
yxw_bob 发表于 2013-6-9 17:56
回马老师,我的那个硬件可不是多余的。有它是多周期同步测频,是等精度测频。没有它,只是多周期测周。它们 ...

不是说你的硬件是多余,是指使用MCU内部计数器可以实现同样的功能,所以外部硬件可以省掉。

出0入0汤圆

发表于 2013-6-9 19:39:37 来自手机 | 显示全部楼层
"其实也没什么,简单的很,就是捕捉。"

You don't have the faintest clue about how to do that.

出0入0汤圆

发表于 2013-6-9 19:42:47 来自手机 | 显示全部楼层
"标准51是没有这个功能。只所以提到STC,是这块片子内部的时钟增加了捕捉功能。"

To read the prescaler, all you need is gpio. All 8051 mcus have gpio, :), so all of them can do it.

No need for capture, as long as you know what you are talking about.

出0入93汤圆

发表于 2013-6-9 19:54:39 | 显示全部楼层
machao 发表于 2013-6-9 18:48
你还真给傻孩子说中了,被我“顽”了。早就看出我的“激将法”,说是要飘过,但是总在这里飘来飘去。谢谢 ...

以前非常敬重马老师,但是发现越来越反感马老师的语气了,什么事都说得那么绝对。

请问,52算不算标准的51?还是说,是增强的51?如果不算,那下面的内容算我白说。
T2定时器不但能够输出脉冲(解决马老师某个帖子信誓旦旦的说标准51无法产生1MHz的方波),这里又说标准的51没有捕捉,真的如此?

T2定时器可以16位自动重载(可以做到精确定时而无需中断中补偿),可以向上向下计数,可以在P1.0输出脉冲(可编程时钟输出功能),可以在P1.1捕获,可以产生比T1更广泛的波特率,可以做到USART的发送时钟和接收时钟不同步。STC之类的所谓增强型单片机往往把这个功能阉割,真的完全兼容?

出0入0汤圆

 楼主| 发表于 2013-6-9 19:59:01 | 显示全部楼层
本帖最后由 machao 于 2013-6-9 21:10 编辑
millwood0 发表于 2013-6-9 19:42
"标准51是没有这个功能。只所以提到STC,是这块片子内部的时钟增加了捕捉功能。"

To read the prescaler, all you need is gpio. All 8051 mcus have gpio, :), so all of them can do it.

No need for capture, as long as you know what you are talking about.


看来此贴有收获,我能再学到一手。可能非常简单,或许非常巧妙。请赐教吧。

不过按你的习惯基本上是不做具体介绍的,不过这里这几天聚集了不少元老级的人物,知道的请介绍一下。

出0入0汤圆

 楼主| 发表于 2013-6-9 21:07:47 | 显示全部楼层
本帖最后由 machao 于 2013-6-9 21:20 编辑
takashiki 发表于 2013-6-9 19:54
以前非常敬重马老师,但是发现越来越反感马老师的语气了,什么事都说得那么绝对。

请问,52算不算标准的 ...


是有点绝对,这个绝对是基于目前市场上51的教科书,80%是拿51做蓝本,52的T2基本不提及。另外一个绝对的来源来自我个人很小的社会圈:面对过N个各个学校考到我校的研究生,以及一些公司的工程师,基本上都是学过51的,可是不知道有扑捉功能以及输出频率波功能的计数器。

INTEL 后期有89C52的产品,应该讲属于增强型51(可惜晚了点,现在看,int 应该最先推出52,这样就不会有上面我讲的情况发生了),至于是否归到标准 51,每个人可能观点不同,不能强求。

不过使用文中提到52做本帖的题,我也做不好。因为我至少需要2个增强的计数器,一个能自动产生各种需要频率的方波,而另一个要带捕捉功能的。都集中在T2,它不能同时做2件事吧。

还有标准51的内部计数时钟是12分频的,基本指令周期也是12分频的。所以使用12M时钟系统时钟频率,测6M信号,考虑到精度、软件处理时间等,我也做不了。

不要紧,虽然我的水平有限,但高手还是有的。已经有元老提到,根本不用捕捉功能就可以完美的读取计数器的计数值,我还在讨教呢。只要不是涮花枪的,我就能学到东西,等着吧。



出0入0汤圆

发表于 2013-6-9 21:14:09 | 显示全部楼层
可能非常简单,或许非常巧妙。


and very basic (primitive). EE101 kind of basic. Any professor should know, especially the good Professor.

请赐教吧。


If you are nice to gzhuli may be willing to help you understand it.

出0入0汤圆

发表于 2013-6-9 21:19:44 | 显示全部楼层
我承诺的文档.主要阐述了等精度测频法(多周期同步测频法)


A variation of that was discussed earlier in the thread, as a way to use RF AFE to measure LF (sub-1hz) signal. Essentially, you use the incoming pulse train (fx in your case) to gate a reference (typically RF) oscillator (f0 in your case), and you count the pulses coming through. The higher the count, the lower the frequency of fx.

出0入0汤圆

发表于 2013-6-9 21:25:37 | 显示全部楼层
请赐教吧。


Let me give you a hint.

When the time base is up, you have an count in the timer counter, and you also have a count in the prescaler (external or internal).

what you need to do at this point is to read the prescaler. To do that, you will need to switch to a signal source controlled by the mcu (a gpio output pin). You flip the output pin until the timer counter increments. The prescaler width - the number of times you have to flip the gpio pin is the reading of the prescaler.

gzhuli mentioned this quite a few posts back, to a very explicit extent. Any half decent EE student should have gotten it based on what he wrote then.

A good professor like you should be able to replicate it based on what I said above.

出0入0汤圆

发表于 2013-6-9 21:27:34 | 显示全部楼层
本帖最后由 yxw_bob 于 2013-6-9 21:54 编辑

简易频率计误差讨论
测频法和测周法、多周期同步测频法(即等精度测频法)的工作原理和误差讨论。
1.测频原理(多周期测频法)
测频的基本原理: ,T为闸门时间。将被测信号转换为脉冲,并将它通过主门计数;通过时标控制门电路形成门控信号。
电子计数器的测频原理实质上是以比较法为基础,它将 与时基信号频率相比,两个频率相比的结果以数字的形式显示出来。
测频方式的误差表达式为 ,第一项 为数字化仪器所特有的误差,第二项 是闸门时间的相对误差,这项误差取决于石英振荡器所提供的标准频率的准确度。当T确定后, 越高,则由于 误差对测量结果的影响减小,测量准确度越高。测量低频时,由于 误差产生的测频误差较大。所以测低频时不宜采用直接测频方法。

2.测周原理
测周的基本原理: , 为时标周期。工作原理与测频相反;将被测信号转换为脉冲,并用它控制主门开门;而用时标脉冲进行计数。所以实质上也是比较测量方法。

  3.多周期同步测频法(即等精度测频法)
将时标信号 通过主门计数;通过被测信号控制门电路形成门控信号。在等精度测频法中将门控信号与被测信号同步。


多周期同步测频原理框图如下图所示。


工作波形图如下图所示。


。由以上工作过程和波形图可以看出,Nx对被测信号Tx的计数是与闸门是同步的,故不存在量化(±1)误差,即 =0,故 =0。这样,用该计数器测频,不管频率高低其精度是相同的。这时误差仅发生在计数器2对f0的计数N0上,因为主门2与f0之间并无同步关系,故仍存在量化误差,不过通常f0>>fx,故±1误差相对小得多。
等精度测频方式的误差表达式可以表达为 ,第一项 为数字化仪器所特有的误差, =±1;由于 的值趋近于 的值,并且 ﹥ ,故 ﹤ 。第二项 是时标信号 的相对误差,这项误差取决于石英振荡器所提供的标准频率的准确度。由于 误差对测量结果的影响基本固定,故测量准确度越高并且 ﹤ 。

七.多周期同步测频法
       
多周期同步测频法的原理、工作过程和波形图已经给出。至于编程,不再多说。
对于多周期同步测频法的实现我建议大家最好使用具有24 / 32位计数器的微处理器来设计。
多周期同步测频采用8253(或者8254)的原理框图如下图所示。 。


工作波形图如下图所示。


本文文档。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-6-9 21:31:11 | 显示全部楼层
本帖最后由 yxw_bob 于 2013-6-9 21:37 编辑

提交相关的文档。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-6-9 21:33:52 | 显示全部楼层
Nx对被测信号Tx的计数是与闸门是同步的,故不存在量化(±1)误差,即 =0,故 =0。这样,用该计数器测频,不管频率高低其精度是相同的。


That's correct. the circuit you are proposing is the front end of a synchronous counter. Its advantage is as you had articulated (very well done, by the way).

Its disadvantage is that given f0, it limits the upper end of fx to be measured - it requires that f0 >> fx.

if your goal is to measure as wide a frequency range for a given hardware setup, use an asynchronous counter instead.

出0入0汤圆

发表于 2013-6-9 21:40:13 | 显示全部楼层
模拟部分不允许用IC可变增益放大器,


On this very topic, let me put forth an interesting (to me) solution: use a non-schmitt trigger gate. On the gate, put an offset - user adjustable.

Good down to 10mv Vpp (and fairly reliably). It does require an intelligent person to operate, however.

出0入0汤圆

发表于 2013-6-9 21:42:54 | 显示全部楼层
machao 发表于 2013-6-9 21:07
是有点绝对,这个绝对是基于目前市场上51的教科书,80%是拿51做蓝本,52的T2基本不提及。另外一个绝对的 ...

不要紧,虽然我的水平有限,但高手还是有的。已经有元老提到,根本不用捕捉功能就可以完美的读取计数器的计数值,我还在讨教呢。只要不是涮花枪的,我就能学到东西,等着吧。
《=====只要像我的原理图那样加入触发器和两个门控,根本不用捕捉功能就可以完美的读取计数器的计数值,并且不存在计数器的计数值变化的可能性。

出0入618汤圆

发表于 2013-6-9 21:46:23 | 显示全部楼层
machao 发表于 2013-6-9 18:48
你还真给傻孩子说中了,被我“顽”了。早就看出我的“激将法”,说是要飘过,但是总在这里飘来飘去。谢谢 ...

我参与技术讨论向来都是直话直说,不喜欢藏着掖着,懂装不懂,总是飘来飘去无非就是看不惯你的“激将法”。
millwood说了一些稍微超出你题目条件的扩展思路,9楼就试图用题目的框框去反驳了,这种既定思维模式太根深蒂固了。
如你所说,懂的只需只言片语即可看出门道,但不懂的很就容易会被误导,尤其是你这一帖本来要针对的定时器都没玩好的人。很多人看贴都是看第一页然后跳最后一页,这样的装无知钓大鱼式讨论,大多数人是看不出门道的。
“我是教师,教单片机简单的东西,所以出题就是侧重单片机训练,出给初学的学生训练,不是给元老级的高手。”这句话你早挑明就是了,何必激将法贬这个踩那个的,难得炸出一个做过的而且还真的没完全弄懂的,到现在都没给说详细方案,难道这是你的初衷吗?

另外回一下技术上的问题。
PIC12F675做的频率计,4MHz时钟测4MHz,至少不是单用MCU内部的同步计数器(同步计数器的外部时钟输入极限1/2Fosc),老外做到50M,也是手册的极限。AVR上也有一个8位的异步计数器,给人带来想象空间。按AVR的手册,外部输入频率最高是1/2Fosc,这个就是通常使用同步计数器的极限。也是通常使用同步计数器设计的上限。

我不知道你说“单用MCU内部的同步计数器”是什么意思,PIC的T1也是内部计数器,你题目也没说一定要用同步模式,反正PIC12F675只外挂了一片串并转换驱动1602,其余都是内置资源。至于那个50MHz的老外,分辨率没做到1Hz,就是因为没去处理预分频里的剩余计数。如果要做到1Hz就要外加硬件,但一个与门就能做到十数倍的频率提升,这么好的思路又为什么要禁止呢?
AVR的T2异步模式是什么概念,你应该不会不知道,它不像PIC那个,没有可想象的空间,所以AVR只能用同步模式,极限就是1/2Fosc。
因此如果一开始就设定了MCU范围,思路就会受到极大的局限,无法发挥想象的空间。可能很多学生懂的就是51和AVR,但没必要在核心条件里限定这两个来限制思路。

最后还想说的是我已经从学校毕业太久了,什么报告什么论文的标准格式已经不怎么记得了,也没傻孩子能出书那本事,你让我很系统的去给初学者写个定时器扫盲,这我还真的做不来。
能做的,只有偶尔纠下错或者提下思路,零散的说几句,懂的一看就懂。系统化的教学工作还是你老人家比较擅长。

出0入0汤圆

发表于 2013-6-9 21:52:57 | 显示全部楼层
本帖最后由 millwood0 于 2013-6-9 21:57 编辑
《=====只要像我的原理图那样加入触发器和两个门控,根本不用捕捉功能就可以完美的读取计数器的计数值,并且不存在计数器的计数值变化的可能性。


Bingo!

I can actually further simplify that. But let's see if the good Professor can figure that out on his own.

出0入0汤圆

发表于 2013-6-9 21:56:37 | 显示全部楼层
看不惯你的“激将法”。


My dealing with the good Professor is that he always thinks that others are trying to get him. I actually have zero interest in making the good Professor look bad (or good for that matter). I was simply trying to point out for the good Professor that other design alternatives that can make this whole thing more interesting / challenging.

出0入618汤圆

发表于 2013-6-9 22:08:11 | 显示全部楼层
millwood0 发表于 2013-6-9 21:56
My dealing with the good Professor is that he always thinks that others are trying to get him. I a ...

这就是所谓的应试教育,国内的学生总是喜欢去猜出题人想要什么答案,而不是真正去思考怎么把事情做得更好,因为只要你超出了题目条件就得不到分,无论你是否答的更漂亮。

出0入0汤圆

发表于 2013-6-9 22:08:56 | 显示全部楼层
真希望看到大牛练几手!

出0入618汤圆

发表于 2013-6-9 22:17:42 | 显示全部楼层
william_rain 发表于 2013-6-9 22:08
真希望看到大牛练几手!


自己练比看人练好多了,哪个大牛不是练出来的,别人练的汗水你都看不见,就看到别人的聪明。

出0入0汤圆

发表于 2013-6-9 22:19:00 | 显示全部楼层
本帖最后由 yxw_bob 于 2013-6-9 22:33 编辑
millwood0 发表于 2013-6-9 21:33
That's correct. the circuit you are proposing is the front end of a synchronous counter. Its advan ...


    不需要f0>>fx,在这里对f0和fx的频率没有限制。只是f0的频率限制了等精度测量的精度而已。例如f0=1MHz,等精度测量的精度约为1ppm;f0=10MHz,等精度测量的精度约为0.1ppm;f0的频率越高,等精度测量的精度越高,当然这要f0的精度等级要先满足要求。
    你所说的 f0>>fx,是在双同步等精度测频中才要考虑,其实也不需 f0>>fx,只要 |f0-fx|〉10以上就可以了。
   双同步等精度测频的本质就是找到 f0和fx的差频同相点,利用f0和fx的差频同相点来同步闸门信号,最后消除NX和N0的+-1个脉冲的计数误差,其最终的测量误差由高精度的f0的精度误差来决定。
     双同步等精度测频的原理如图所示。只要 |f0-fx|〉10以上就可以了。
   
    波形图我就不画了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-6-9 22:24:28 | 显示全部楼层
millwood0 发表于 2013-6-9 21:52
Bingo!

I can actually further simplify that. But let's see if the good Professor can figure that  ...

你可以给单片机使用高精度的晶体振荡器,然后将该高精度的晶体振荡器分频后作为f0(基准频率)就可以简化这个电路。我为了减少其它设备对高精度的晶体振荡器的“频率牵引效应”(以前看别人这么说,我也使用了不知道表述的是否准确),采用了外部的触发器和高精度的晶体振荡器。

出0入296汤圆

发表于 2013-6-9 23:36:41 | 显示全部楼层
对不起大家...有件事情我想说下...看你们写的中文原理...我
一时反应不过来,回头看了下前面英文的内容,就懂你们在
说什么了...我这是不是有点尴尬了?

出0入296汤圆

发表于 2013-6-9 23:40:14 | 显示全部楼层
gzhuli 发表于 2013-6-9 22:17
自己练比看人练好多了,哪个大牛不是练出来的,别人练的汗水你都看不见,就看到别人的聪明。 ...

最近在研究什么?有没有什么好玩的?

出0入618汤圆

发表于 2013-6-10 00:03:34 | 显示全部楼层
Gorgon_Meducer 发表于 2013-6-9 23:40
最近在研究什么?有没有什么好玩的?

最近没什么时间搞研究,各种瞎忙。
想做的倒是很多,例如本帖里我说的那频率计练练手,但感觉目前的精力是没办法坚持到底的,一直没敢动手,就怕烂尾。
以前有些东西PCB画好了主要元件买齐都没时间去焊,凉了以后一转眼又有新方案,唉,生命就是这样折腾中度过。

出0入0汤圆

发表于 2013-6-10 00:23:22 来自手机 | 显示全部楼层
On reading (internal) prescalers, a typical approach uses 4 gates.

A simplified approach uses 2 gates (with some draw backs).

The simplest approach, only available on some versions of timers on some mcus, uses no additional hardware at all.

出0入0汤圆

发表于 2013-6-10 00:26:24 来自手机 | 显示全部楼层
Before our good Professor gets too worked up on this, let me just say that reading prescalers is of limited value is you have to have very high precision. A 1:1 prescalers usually allows accurate reading upto 2Mhz (7 digits). A 64:1 will easily push that limit to 20Mhz (6.5 digits).

That's usually good enough for 99 percent of the applications out there.

出0入296汤圆

发表于 2013-6-10 05:56:39 | 显示全部楼层
gzhuli 发表于 2013-6-10 00:03
最近没什么时间搞研究,各种瞎忙。
想做的倒是很多,例如本帖里我说的那频率计练练手,但感觉目前的精力 ...

哎...我也是各种被折腾啊...不说了,过几个月有个好东西分享,到时候私下骚扰你。

出0入0汤圆

发表于 2013-6-10 08:03:47 来自手机 | 显示全部楼层
machao 发表于 2013-6-8 01:08:08
本帖最后由 machao 于 2013-6-8 22:14 编辑

又要全国大学生电子竞赛了,2年做一次秀,掩盖了多少肮脏,误导了多少良家子弟,这样的大假怎么没人敢打呢?

真心希望参加的TX

马老师,我用的12C5A60S2计数法。12 M晶振,测频到5.4M,误差正负1Hz,想问下还有多大的挖掘空间?

出0入0汤圆

发表于 2013-6-10 08:17:35 | 显示全部楼层
高频就应该用74器件分频了吧

出0入0汤圆

发表于 2013-6-10 09:36:30 | 显示全部楼层
6mHZ 的方波,从示波器上看就是正弦波!

出0入0汤圆

发表于 2013-6-10 09:45:54 | 显示全部楼层
6mHZ =0.006Hz,大哥!

出0入0汤圆

发表于 2013-6-10 10:38:13 来自手机 | 显示全部楼层
本帖最后由 yxw_bob 于 2013-6-11 00:58 编辑

回515135896,135楼,没有余地了。有的不客气的自说一句,你娇幸测到这个频率,在3MHz 到5.4MHz 之你的误差存在一些比较大的误差区域,你可以用标准频率源,10Hz递增比对一下,看看频率误差。
      另外,你可以自己画方波信号分析一下,看是否存在我说的误差的可能性。

出0入0汤圆

发表于 2013-6-10 10:48:25 来自手机 | 显示全部楼层
本帖最后由 yxw_bob 于 2013-6-11 00:56 编辑

因为大部分的单片机IO 引脚的状态/输出要靠CLKIO进行同步。
    而通用的计数器芯片的输入端的状态不需要别的时钟同步,它的频率上限是由芯片本身工艺决定的。
    所以商品频率计全部用外部硬件计数器,或用外部硬件计数器分频后,再用片内计数器。
      所以前面millwood0建议使用异步计数器以实现更宽的频率范围。
    对于IO 结构,傻孩子在86楼,gzhuLi在121楼有相关的论述。

出0入0汤圆

发表于 2013-6-10 15:21:11 | 显示全部楼层
gzhuli 发表于 2013-6-9 21:46
我参与技术讨论向来都是直话直说,不喜欢藏着掖着,懂装不懂,总是飘来飘去无非就是看不惯你的“激将法” ...

咕大师,没有说出详细方案是由于yxw_bob  这位网友已经先我一步非常详细的给了出来。我所写的报告与他一模一样,在我看来无需再发一次。
另外,我曾参考另一位大师使用5110液晶与PIC单片机做的开源频率计,他的方案和套件已经广为流传,所以我实在不敢拿出来献丑。

外国朋友指出我设计的问题,我也确实是没有深刻理解。殷切希望得到您与外国朋友进一步的指导

出0入0汤圆

发表于 2013-6-10 18:23:29 | 显示全部楼层
前段时间刚做了频率计的题目,使用MSP430F169超频到12M直接测方波可以测到0.1Hz ~ 40MHz

出0入0汤圆

发表于 2013-6-10 19:12:34 来自手机 | 显示全部楼层
"12 M晶振,测频到5.4M,误差正负1Hz,想问下还有多大的挖掘空间?"

Pretty good.

出0入0汤圆

发表于 2013-6-10 19:13:42 来自手机 | 显示全部楼层
"高频就应该用74器件分频了吧"

Some of them are good to 100 - 125Mhz.

Beyond that, you need dedicated prescalers.

出0入0汤圆

发表于 2013-6-10 19:15:27 来自手机 | 显示全部楼层
"或用外部硬件计数器分频后,再用片内计数器。"

That's a pratical must if you go over 100Mhz.

出0入0汤圆

 楼主| 发表于 2013-6-10 19:20:17 | 显示全部楼层
本帖最后由 machao 于 2013-6-10 19:29 编辑

事物的发展通常是螺旋式的上升,每一次轮回都会比上一次有发展和进步,如果本帖最终能有这样的效果,这道练手题的题目和这几天的打字也值了。

首先是限定的问题。每个人的职业不同,做的工作也不一样,接触的人和事物以及在社会的经历都会影响到他的言行、思考问题的方法和思路。简单讲就是出发点的不同。如果沟通不畅,不理解或了解对方的思想,就会形成讨论(争论-激烈方式)。这是正常的现象,通过讨论、争论或许能达到一个或几个共识。

这些所谓的共识也不一定就是完全正确,因为没有绝对的事情。其正确性通常是在一定的条件下成立的。例如,理论上可以非常好的方法,在实际中经常是受限而做不到。典型的就是低通滤波器:理论上可以给出完美的低通滤波器,而实际电路中很难实现真正理论上的低通。只能做到近似。其实只要能达到某个具体应用的要求,这个不完美的低通就是成功的,但不能说这个实现低通的方法可以适合所有的应用。

先看本帖的题目:高手练手题--频率计设计     然后是LZ位第2行的具体说明:“给个侧重MCU的练手设计题”
   现在看来,我的题目出的有点问题----后面不应该写频率计设计。尽管大家说不喜欢限定,可是大家还是被限定了,理解成设计专业的频率计了。而后大家却对使用MCU,尤其是用16位的MCU,不用外部分频器的限定而恼火了,砖块砸的把稍微了解我的傻孩子也吓缩了头。

  两个“限定”,第2个是我的初衷,第一个是我没想到的。仔细分析一下,还是应该检讨自己,题目如果这样出会更好点:“高手练手题--侧重MCU的频率周期测量”。或许这样的题目更能让大家了解我出题的目的。

题目毕竟是题目,不同的层次和经历的人理解也是不同的。下面是我出此题详细的背景、目的和想法,交流一下。

1、学校培养的学生将来从事的工作是不同的,因此学校的教学还是注重理论和基础或某个专业方向的理论和基础,动手也是基本功和基本能力的训练。竞赛培训也是如此,我也不知道竞赛有什么题目,所以还是希望学生能利用这个机会,把基本功学好,这个意思在我LZ位的第2句里也表达了:“真心希望参加的TX,能利用这样的机会,真正学点本事”。

2、另外,学校中能和敢于参加竞赛的学生,应该是学得比较好的佼佼者,并且也是喜欢这个行当的,所以我把他们叫做“高手”。这也是题目写成“高手练手题”
的原因(当然也是有点夺人眼球的)。另外,我的这个AVR讨论组通常的访问者是学生和喜欢这个行当的初级修炼者,每到竞赛前(还有就是交毕业设计的时候)人数会大增。这个时候总要有点新东西吧。故也是配合竞赛,把我已经准备好的练手题就贴了上来(年初到一个公司培训用的)。让我没有料到的是,此贴把社会上许多真正的高手也吸引来了。

3、既然来了,就不能白来,要让他们露几手,让学校的高手看看,从中学到更多的知识,正确的认识自己。这是临时加出来想法,所以“激将”一下。成功。否则这里不会怎么热闹的。请这些高手不要生气,也没有什么好生气的。到这里来的知道我,可没有几个知道你们的,我也不知道你们是谁。傻孩子这点说的对,我本是个“老顽童”。

4、我在学校从事MCU课程的教学,这次竞赛单位安排我2天时间做MCU应用培训(其他科目分别由各自熟悉的老师培训),那我当然是侧重MCU了。
4.1 我在学校教学是以AVR作为硬件教学平台,另外考虑到目前很多学校还是以51为主,很多工程师是51出身,所以选择AVR和51。当然其它的8位也是可以的。
4.2 那么怎么培训?总不能照课本重讲吧,要有个合适的题目让大家练手,要能促使大家更好、更深入去学习、掌握MCU的应用。重点放在哪里呢?
4.2.1 定时器!现在新型MCU的定时器功能非常强大,配合比较寄存器、捕捉寄存器可以实现高精度的测量、脉冲波的产生、PWM波等、还可以级联,事件触发。而且基本就是硬件自动完成,因此掌握的好的话可以做很多事情,可以把原来需要外部硬件配合的一些设计转换到内部实现,降低成本。
4.2.2 中断!使用定时器免不了用到中断。其实中断对实时控制系统的影响很大,使用不好会造成严重后果,而且调试也是非常困难的(源于中断产生随机性)。还有很多人不是硬件出身,加上基本是采用C语言编写系统代码。在高级语言中,中断响应后的进入、退出时间,现场保护和恢复时间都是隐蔽的。从而造成根本没有考虑中断延误的时间。如果系统还是多个中断嵌套的系统,那么对于精密的测量控制都是非常要命的。
4.2.3 系统软件框架。对于裸跑MCU的软件系统设计,如何合理安排MCU内部各个部件的协同工作,完成必要的处理和运算等,目前没有什么标准模式。通常是自己凭经验和习惯编写。OS可以帮助解决这方面的问题,但是OS并不一定适合所有的应用,对于有些应用,裸跑是最佳的,比如8位MCU构成的有一定实时要求的控制系统。目前大多是8位系统还是裸跑的。
4.2.4 开拓。常规和开拓是矛盾的双方。首先是你必须熟知常规,有哪些优点,哪些缺点。其次是你的基础知识扎实和广泛、具备一定的能力,这样你就会想到开拓,想到改良,想到用另外的一种新的方法或好的器件来替代。老是墨守成规就没有进步,但是不懂常规,没有一定基础,也无法谈开拓。

5、从上面几点出发,我选择了用MCU测量频率和周期
5.1 对定时器、中断等上面提到几点都能综合训练到
5.2 频率周期测量在实际应用中是一个重要的手段,比如马达转速的测量和控制。在实际应用中的频率周期测量与计数器的要求还是有区别的,通常是在保证一个最小误差的情况下有最快的反映用于控制,而且需要连续不间断。

6、模拟对象的选择
    训练就是训练,训练重点是MCU,一块板就可以,通常是现成的。另外重点要放在MCU训练上。考虑到简单方便就定为频率计了,没有对精度和频度做要求,输入定为了标准方波(恐怕就是在这点上忽视了,让专业人士恼火)。就是看能否正确使用MCU ,并发挥出MCU的最大潜力。

=================================
坏事也是好事,通过上面的争论,我到有了一个新的带限定的讨论题目(还是限定了,重点针对MCU训练):仅使用STM32,能设计一款普通商用频率计吗?它能做到多少精度,能满足一般性的普通应用吗。为了讨论问题方便,还是假定输入信号已经整理为标准脉冲信号吧。当然1G以上就不要考虑了。安捷伦、泰克的100M的示波器和1G的示波器,价格差别达10倍。

晚一些给出我的想法,当然这个想法包含了我设计前一题的基本思路和方法。

出0入0汤圆

发表于 2013-6-10 20:16:57 | 显示全部楼层
如果是仅仅针对此题的要求,不考虑实用性的话,做到极致的方式,我认为有可能采用这种思路:
不用任何中断和定时器,所有的程序结构全部采用汇编算指令的方式。包括显示部分也是一样

出0入0汤圆

发表于 2013-6-11 00:46:59 | 显示全部楼层
本帖最后由 yxw_bob 于 2013-6-11 00:54 编辑
machao 发表于 2013-6-10 19:20
事物的发展通常是螺旋式的上升,每一次轮回都会比上一次有发展和进步,如果本帖最终能有这样的效果,这道练 ...


=====================================
坏事也是好事,通过上面的争论,我到有了一个新的带限定的讨论题目(还是限定了,重点针对MCU训练):仅使用STM32,能设计一款普通商用频率计吗?它能做到多少精度,能满足一般性的普通应用吗。
=================================
     既然马老师出来盖棺了。
    我谈自己的几点看法:1 对于马老师给出的最终题目《有了一个新的带限定的讨论题目(还是限定了,重点针对MCU训练):仅使用STM32,能设计一款普通商用频率计吗?它能做到多少精度,能满足一般性的普通应用吗》,我大约看了STM32F10x的手册,他的TIMX好像没有门控信号,也可能有我没有仔细看;要想精度高,还是外加触发器和门控电路,采用等精度测频法(多周期同步测频法)。如果采用高精度温补晶振(或恒温晶振);假定f0=1MHz,则精度大约为2ppm+晶振误差;假定f0=5MHz,则精度大约为0.4ppm+晶振误差;;假定f0=10MHz,则精度大约为0.2ppm+晶振误差。
         如果看重测量速度且要求一定的精度,则高频采用测频法(高于33KHz或者40KHz),低频采用测周法(低于200Hz或150Hz),剩余的频率则采用多周期测周法,精度大约为0.003%+晶振误差。
   2.学生要认真熟悉电子测量中频率测量的原理和误差分析,并且要熟练使用定时/计数、PWM/比较输出、捕获等方式。
   3.现在的学生电子技术(特别是模拟电子,还有时序逻辑)掌握的比较差,同样微机原理掌握的也不匝的;队伍难带啊。偶尔有几个动手不错的,基础知识怎么一个烂字了得。

    祝马老师好运。

出0入618汤圆

发表于 2013-6-11 01:09:59 | 显示全部楼层
本帖最后由 gzhuli 于 2013-6-11 01:13 编辑
yxw_bob 发表于 2013-6-11 00:46
=====================================
坏事也是好事,通过上面的争论,我到有了一个新的带限定的讨论题 ...


难道你真的是在中断里面去关的……

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-6-11 05:28:19 来自手机 | 显示全部楼层
"仅使用STM32,能设计一款普通商用频率计吗?它能做到多少精度,能满足一般性的普通应用吗。"

Let me try to restate the obvious:

1) The goal is to design a 100Mhz counter assunming that the signal has been condition - that greatly relieves your design difficulTies. However the heart can still be used in a full-featured project in the future.
2) Minimal hardware - simplicity is your goal.
3) Don't worry about user-interface - focus on counting.

I would think the following is what you need:

1) An external prescaller: you need to divide down to 20Mhz for the mcu to count (if the mcu has internal prescaler) or 1Mhz if not. Something like 4040 that's good for 125Mhz would work - they are cheap and inexpensive.
2) You need to read the prescaler. This retains full 1Hz resolution across the entire frequency range.

Alternatively, you can do auto-ranging where you don't need any external hardware but suffer some loss of precision in the high frequency band.

I would recommend that you start with an auto-reanding meter - the guts of it can be used for a full precision meter.

Fron there, you can incorporate fancier features like sub-1hz reading, user-selectable gating, A/B reading, auto power-off, etc.

出0入0汤圆

发表于 2013-6-11 10:18:55 来自手机 | 显示全部楼层
gzhuli 发表于 2013-6-11 01:09
难道你真的是在中断里面去关的……

回gzhuli,我不会在中断里去关计数器。我加入触发器产生闸门时间的目的是让触发器在闸门时间的后再沿关闭计数脉冲信号源,同时又可以产生中断,然后进入中断诵读取计数器的值并清零计数器,然后再产生下一个闸门时间,如此重复。不存在去中断中关计数器的情况,也就不存在中断引起附加的计数误差的问题。

出0入618汤圆

发表于 2013-6-11 13:42:31 | 显示全部楼层
millwood0 发表于 2013-6-11 05:28
"仅使用STM32,能设计一款普通商用频率计吗?它能做到多少精度,能满足一般性的普通应用吗。"

Let me try  ...


The timer of STM32F10x can handle 36MHz maximum external clock (TIM1/8 only), so I'd prefer using a 74AHC74 @ 5V as a 1/4 prescaler, and it's easy to read with 2 five-tolerant GPIO. Then maybe another AHC74 as external gate.
Simple signal condictioning can also be done using a self-biased inverter, as you stated before.
The whole design can be done using STM32F103C8 and several 74s, with 5V CMOS compatible input and sensitivity down to several tens of mVs, and fit on a PCB that can be stacked behind a 1602.

出0入0汤圆

发表于 2013-6-11 17:41:13 来自手机 | 显示全部楼层
本帖最后由 yxw_bob 于 2013-6-11 17:42 编辑

如果TIMx的计数器的计数输入引脚是靠CLKIO同步的,则建议计数输入端的频率小于0.1CLKIO:最大0.2CLKIO。 个人意见,如果哪位有标准频率源,请用10Hz递增帮我验证0.1CLKIO 到0.3CLKIO 之间的误差。

出0入618汤圆

发表于 2013-6-11 18:14:02 | 显示全部楼层
yxw_bob 发表于 2013-6-11 17:41
如果TIMx的计数器的计数输入引脚是靠CLKIO同步的,则建议计数输入端的频率小于0.1CLKIO:最大0.2CLKIO。 个 ...

参考86楼,一般是<1/2.5 CLKIO。

出0入0汤圆

 楼主| 发表于 2013-6-11 18:27:47 | 显示全部楼层
今天上午去了一个某行业的展览会学习了一下,现在基本上各个行业都有电子的产品和设备。只要是家电、娱乐、民用、通信方面的领域,没有好的机会还是不要涉入吧。这些基本已经被垄断,家电、民用的东西,一分一厘都要抠的。现在是又要马儿跑,还要马儿少吃草,甚至是不吃草的激励竞争市场。

现在的MCU已经白菜价,可是内涵是黄金的。我提到的STM32F内部配备高达10个16位定时器,手册中定时器介绍占了很大篇幅,功能五花八门。想想看,如果定时器可以上下沿都计数,那么利用这个特点,测量的精度就有可能在不用外加硬件的情况下提高0.5位。

什么是成规?频率测量的基本方法和理论就是成规,谁能打破?什么叫开拓?按这个理论用最好的方法,最经济的成本去实现就是开拓。

平心静气的说,学校教授的确是偏理论不会动手的多,但他们的思维模式是发散的。企业社会的工程技术人员有着丰富的实践经验和积累,但通常是长期面向和针对某个产品领域或专项技术,他们的思维就容易被不自觉的禁锢。只有两者结合才能迸发出火花。

出0入0汤圆

 楼主| 发表于 2013-6-11 18:40:54 | 显示全部楼层
yxw_bob 发表于 2013-6-11 17:41
如果TIMx的计数器的计数输入引脚是靠CLKIO同步的,则建议计数输入端的频率小于0.1CLKIO:最大0.2CLKIO。 个 ...

MCU内部的定时器通常都是同步计数器。根据采样定理,I/O输入的最高频率是1/2clkio,如果clkio = clksys,那么就是1/2clksys。手册上给出保证的值1/2.5,0.4。这个是保证的。

如果使用内部时钟作为频率源,也就是基时计数,如果系统时钟100M,其内部计数器的输入就是100M。如果100M是外部基时时钟,那就送不进,外面要加分频器,或使用外部计数器。

出0入296汤圆

发表于 2013-6-12 00:04:38 | 显示全部楼层
machao 发表于 2013-6-11 18:27
今天上午去了一个某行业的展览会学习了一下,现在基本上各个行业都有电子的产品和设备。只要是家电、娱乐、 ...

如果您有兴趣和时间,我想给您阐述一下我设计的一个定时器系统模型。同时听听您的意见。

出0入0汤圆

发表于 2013-6-12 00:42:52 来自手机 | 显示全部楼层
"根据采样定理,I/O输入的最高频率是1/2clkio,"

It is due to the counter's synchronization - identical to the one elaborated earlier.

It has nothing to do with Nyquist (which applies to the analog domain).

出10入113汤圆

发表于 2013-6-12 00:59:23 | 显示全部楼层
好多中国语法的英语句子。

出0入0汤圆

发表于 2013-6-12 01:10:25 | 显示全部楼层
本帖最后由 yxw_bob 于 2013-6-12 01:17 编辑

     韩国的爱好者 开源的基于C51的频率计
http://www.sample.co.kr/sefcntr/index.htm
http://bbs.yleee.com.cn/thread-1079-1-1.html
C51+COUNTER原理图:


200MHz ANALOG PREAMP 原理图:


2GHz ANALOG PREAMP 原理图:


程序:
//
// 100MHz / 2.4GHz Universal Counter
//
// SAMPLE Electronics co. 25. Nov. 2003
//
// Crossware Embedded Development Studio V 3.3.1.2
//
//
//
// 74F161 의 4 Bit, 74HC393의 8 Bit 그리고 8051 내부 카운터 T0 16 Bit 로
// 28 비트의 카운터를 구성한다.
// 펄스 계수시간을 1 Sec 가 되도록 하여 8 디지트표시100 MHz 카운터를 만든다.
// 64 분주 프리스케일러를 사용하기 위하여 펄스 계수 시간을 0.64 S 가
// 되도록 한다.
//
//
// 8051 Initial C Source File
//
#include <sfr.h>
#include <os.h>
#include <stdlib.h>
#include <stdio.h>

_sfrbit P36_o_74f161_clr_n = _p3^6; // 외부 카운터 F161 리세트
_sfrbit P35_o_74f161_enp = _p3^5; // 외부 카운터 F161 인에이블
_sfrbit P30_io_74hc393_clr_hold = _p3^0; // 외부 카운터 HC393 리세트 / HOLD입력
_sfrbit P37_i_prescaler = _p3^7; // 64 분주 Pre Scaler
//
// 7 Segment LED 패턴 데이터
// hgfedcba
#define DIG0 0xC0 // 11000000b ; 0 P2.0
#define DIG1 0xF9 // 11111001b ; 1 +-----a-----+
#define DIG2 0xA4 // 10100100b ; 2 | |
#define DIG3 0xB0 // 10110000b ; 3 P2.5 f b P2.1
#define DIG4 0x99 // 10011001b ; 4 | |
#define DIG5 0x92 // 10010010b ; 5 | P2.6 |
#define DIG6 0x82 // 10000010b ; 6 +-----g-----+
#define DIG7 0xD8 // 11011000b ; 7 | |
#define DIG8 0x80 // 10000000b ; 8 P2.4 e c P2.2
#define DIG9 0x98 // 10011000b ; 9 | |
// ; | P2.3 |
#define DIGM 0xBF // 10111111b ; - +-----d-----+ * h P2.7
#define DIGP 0x7F // 01111111b ; .
#define DIGB 0xFF // 11111111b ; "Blank"
//
const char segment_pattern[] = { DIG0, DIG1, DIG2,\
DIG3, DIG4, DIG5, DIG6, DIG7, DIG8, DIG9 };
//
const char segment_select[] = { 0xFE, 0xFD, 0xFB, \
0xF7, 0xEF, 0xDF, 0xBF, 0x7F };
//
unsigned long trailer;
unsigned long task;
unsigned int trimer;
unsigned char fnd[8];
unsigned char mfnd[8];
unsigned int int_state;
unsigned char fnd_state;
unsigned char boat;
bit hold;
//
//
void _interrupt IVN_TIMER1 time_base() {
//////////////////////////////////////////////
_tl1 = 0x60; _th1 = 0xF0; // 4000 2 M Sec 500 Times
//////////////////////////////////////////////
_p0 = 0xff;
_p2 = segment_select[fnd_state];
_p0 = fnd[fnd_state++];
fnd_state &= 0x07;
//////////////////////////////////////////////
if(int_state == 0) { //

P35_o_74f161_enp = 0; // 외부 카운터 F161 카운터 동작 금지
//
P30_io_74hc393_clr_hold = 1; // 외부 카운터 HC393 카운터 리세트
P36_o_74f161_clr_n = 0; // 외부 카운터 F161 카운터 리세트
_tl0 = 0x00; _th0 = 0x00; // 내부 카운터 리세트
//
hold = P30_io_74hc393_clr_hold; // Hold Key 상태 입력

P36_o_74f161_clr_n = 1; // 외부 카운터 F161 카운터 인에이블
P30_io_74hc393_clr_hold = 0; // 외부 카운터 HC393 카운터 인에니블
//

P35_o_74f161_enp = 1; // 외부 카운터 F161 카운터 동작 개시
}
//////////////////////////////////////////////
if(int_state == 316) { // 10 GHz Mode(64 Divide Prescaler)
if (!P37_i_prescaler) { // 0.64 Sec Gate Time

for (trimer = 0; trimer<202; trimer++) ; // 15 Machine Cycle 단위
// 테스트 신호원을 24 MHz 로 입력하고
boat++; // 15360000 이 표시되도록 조정한다.
boat++; // 1 Machine Cycle (12 Clock) Delay
boat++; // 15359988
boat++; // 15360000
// boat++; // 15360012

P35_o_74f161_enp = 0; // 외부 카운터를 멈춘다.

trailer = _th0;
trailer = (trailer << 20) & 0x0ff00000;
task = _tl0;
task = (task << 12) & 0x000ff000;
trailer |= task;
task = _p3;
task = (task << 7) & 0x00000f00;
trailer |= task;
task = _p1 & 0x000000ff;
trailer |= task;

P35_o_74f161_enp = 1; // 소비 전류가 일정하게 하기위하여
// 외부 카운터를 다시 시작한다.
}

}
//////////////////////////////////////////////
if(int_state == 494) { // 100 MHz Mode 1 Sec Gate Time
if (P37_i_prescaler) { // 1 Sec Gate Time

for (trimer = 0; trimer<248; trimer++) ; // 15 Machine Cycle 단위
// 테스트 신호원을 24 MHz 로 입력하고
boat++; // 24000000 이 표시되도록 조정한다.
boat++; //
boat++; //
boat++; //
boat++; // 1 Machine Cycle (12 Clock) Delay
boat++; // 23999988
boat++; // 24000000
// boat++; // 24000012


P35_o_74f161_enp = 0; // 외부 카운터를 멈춘다.

trailer = _th0;
trailer = (trailer << 20) & 0x0ff00000;
task = _tl0;
task = (task << 12) & 0x000ff000;
trailer |= task;
task = _p3;
task = (task << 7) & 0x00000f00;
trailer |= task;
task = _p1 & 0x000000ff;
trailer |= task;

P35_o_74f161_enp = 1; // 소비 전류가 일정하게 하기위하여
// 외부 카운터를 다시 시작한다.
}

}
//////////////////////////////////////////////
if(int_state == 506) { // 1Hz 표시 디지트
boat = trailer % 10;
mfnd[7] = segment_pattern[boat & 0xf];
trailer /= 10;
}
//////////////////////////////////////////////
if(int_state == 507) {
boat = trailer % 10;
mfnd[6] = segment_pattern[boat & 0xf];
trailer /= 10;
}
//////////////////////////////////////////////
if(int_state == 508) {
boat = trailer % 10;
mfnd[5] = segment_pattern[boat & 0xf];
trailer /= 10;
}
//////////////////////////////////////////////
if(int_state == 509) {
boat = trailer % 10;
mfnd[4] = segment_pattern[boat & 0xf];
trailer /= 10;
}
//////////////////////////////////////////////
if(int_state == 510) {
boat = trailer % 10;
mfnd[3] = segment_pattern[boat & 0xf];
trailer /= 10;
}
//////////////////////////////////////////////
if(int_state == 511) {
boat = trailer % 10;
mfnd[2] = segment_pattern[boat & 0xf];
trailer /= 10;
}
//////////////////////////////////////////////
if(int_state == 512) {
boat = trailer % 10;
mfnd[1] = segment_pattern[boat & 0xf];
trailer /= 10;
}
//////////////////////////////////////////////
if(int_state == 513) {
boat = trailer % 10;
mfnd[0] = segment_pattern[boat & 0xf];
trailer /= 10;
}
//////////////////////////////////////////////
int_state++;
//////////////////////////////////////////////
if(int_state >= 514) {
int_state = 0;
if (hold) {
fnd[0] = mfnd[0];
fnd[1] = mfnd[1];
fnd[2] = mfnd[2];
fnd[3] = mfnd[3];
fnd[4] = mfnd[4];
fnd[5] = mfnd[5];
fnd[6] = mfnd[6];
fnd[7] = mfnd[7];

if (P37_i_prescaler) {
fnd[1] &= 0x7F; // MHz Point
} else {
fnd[0] &= 0x7F; // GHz Point
}
}
}
//////////////////////////////////////////////
}

main()
{
_tmod = 0x15; // 0b00010101 Timer0 = Mode1, Counter, use TR0
// Timer1 = Mode1, Timer, use TR1
_tl0 = 0X0; _th0 = 0X0;
_tl1 = 0X0; _th1 = 0X0;
_tr0 = 1; // Timer 0 START
_tr1 = 1; // Timer 1 START
_et1 = 1; // TIMER1 INT ,타이머 1 인터럽트 가능상태 설정
_ea = 1; // ENABLE INT,글로벌 인터럽트 가능상태 설정

while(1) ;

}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入618汤圆

发表于 2013-6-12 01:21:12 | 显示全部楼层
millwood0 发表于 2013-6-12 00:42
"根据采样定理,I/O输入的最高频率是1/2clkio,"

It is due to the counter's synchronization - identical ...

It can be explained by the Nyquist theory: the synchronization acts as an 1-bit ADC.
To avoid alias, the maximum allowed input frequency is 1/2 sampling clock, which is CLKIO.
Higher frequency (as far as the gates can handle) can still be counted. You'll just get an alias counting.
You can even use this intentionally to undersample the signal and extend the frequency range.

出0入0汤圆

发表于 2013-6-12 06:12:43 来自手机 | 显示全部楼层
"It can be explained by the Nyquist theory:"

I don't know. If you consider square waves to be reconstitued sine waves of increasing harmonics (of infinite bandwidth), you would need a much higher sampling frequency to accurately reproduce the harmonics (thus the square wave).

出0入0汤圆

发表于 2013-6-13 08:11:55 | 显示全部楼层
韩国的爱好者 开源的基于C51的频率计


I am going to say that this is one of those dumber designs.

Here is how it works: F161+F393 form a 4+8 = 12-bit external prescaler. The divided signal is then feed to P3.4 (T0) to be counted by the internal counter. That part is fairly standard.

Two areas for improvement:

1) reading of the external prescaler: they are now read in parallel. It takes a lot of gpio lines. They could have a couple gpio pins to serially read the prescaler. The downside is that you need a few high-speed gates.
2) using one chip for the prescaler: something like a 4020/40/60 for example. The advantage of a 4040 is that you can get 200Mhz+ 4040 fairly easily. This approach requires minimum changes to hardware  / software.

Additionally, some one could have easily re-written the code in a more popular compiler, like C51.

出0入0汤圆

发表于 2013-6-13 11:50:13 | 显示全部楼层



量程要求是?





出0入0汤圆

 楼主| 发表于 2013-6-13 13:35:02 | 显示全部楼层
本帖最后由 machao 于 2013-6-13 13:57 编辑

新的限定就是为了反限定(打破旧的限定),而打破了旧的限定就得到一个新的相对更好的限定。所以限定和反限定是辩证的关系。
各位反对我限定仅使用MCU实现频率计的设计,自己却牢牢的被限定在N年前频率计实现方法和手段中。到目前还是这样。

举个例子,一位元老提到当基时时钟为精准10M的话,可以达到7位数字的精度,没错,这个是正确的,但是如果你连续不间断的测量10次,把10次的测量值取平均,那么对于10M的基频,就能达到8位数字的精度。
对于频率计的使用,被测的频率相对变化不大(不像测量转速),一旦开始测量,前9秒是7位精度,但第10秒以后就达到8位精度,在实际应用中应该是允许的。一秒钟的间隔时间内加10个数(实际只要累加1次),做个除10的运算,对于软件绰绰有余,也不是困难的事情。
这里的关键是两个计时器要连续的计数,计数的过程不能停止。

我后面给出的参考设计方案,将不涉及实际的芯片型号(怕别人说为哪个公司做宣传),只要2个带比较匹配输出、捕捉功能的32位计数器(其实16位就可以,用32位主要是为了更好的说明和理解方法)就足够了。程序设计也不需要什么汇编(仅指频率计,控制就要看情况)

作为基时时钟,目前的MCU内部10M根本不是问题(就是100M也是有芯片的),只要系统时钟精准就可以。10M单次测量达到7位数字,连续测量10次平均,精度达到8位。
受限的是外部被测信号的输入。上面已经有人讨论了,极限是1/2clk。假如使用工作在72M的STM32,那么极限就是36M,打个保险系数,30M应该没有问题。

此时要扩展测量范围,就需要外加分频器,一个4分频器就能达到120M。而且如果采用连续不间断的测量方法,这个4分频器里的尾数根本不需要每次采用专门的方式读出,连续的几次数据平均就解决。

如果基时频率100M,你在外面做电路,用计数器搭出来,能比得上专业设计MCU内部100M的计数器吗?两个计数器都是外置,要做到连续不间断多次测量恐怕难度还是不小的吧。

我的练手题并不是要发挥MCU的极致,用汇编什么的(硬件基础都缺乏、方法不对、用汇编也没有什么作用)的,关键是用好和会用定时器,深入理解比较、捕捉的意义,合理搭配使用,能带来多少好处?

频率测量涉及到“同步”,使用MCU内部计数器(不管是做计数还是分频,都是一样)使用捕捉功能就是实现同步的关键。奇怪的是大家不冷静的思考我的问题,却被一个所谓读外部分频器中剩余尾数的雕虫小技所折服。

看看写的什么:
yeshunter 发表于 2013-6-9 13:02
When the time base is up, you have an count in the timer counter, and you also have a count in the prescaler (external or internal).

what you need to do at this point is to read the prescaler. To do that, you will need to switch to a signal source controlled by the mcu (a gpio output pin). You flip the output pin until the timer counter increments. The prescaler width - the number of times you have to flip the gpio pin is the reading of the prescaler.

gzhuli mentioned this quite a few posts back, to a very explicit extent. Any half decent EE student should have gotten it based on what he wrote then.

A good professor like you should be able to replicate it based on what I said above.


如果prescaler (external or internal)是interna的,直接读不就完啦?反正已经停了下来不会变化了。还需要GPIO吗。如果要实现的是连续不间断的测量,你那个GPIO还有什么用?

更奇怪的,这位元老在162楼的观点竟然无人做解释,他是对还是错?

傻孩子在86楼贴出的DD不是我说的,是ATMEL公司的原文:

yeshunter 发表于 2013-6-9 13:02
作为之前Atmel工程师的一个敏感,我忍不住查了一下M16的数据手册,这里有一个内容我觉得需要大家注意下:
15.4 External Clock Source
...
Each half period of the external clock applied must be longer than one system clock cycle to
ensure correct sampling. The external clock must be guaranteed to have less than half the system
clock frequency (fExtClk < fclk_I/O/2) given a 50/50% duty cycle. Since the edge detector uses
sampling, the maximum frequency of an external clock it can detect is half the sampling frequency
(Nyquist sampling theorem). However, due to variation of the system clock frequency
and duty cycle caused by Oscillator source (crystal, resonator, and capacitors) tolerances, it is
recommended that maximum frequency of an external clock source is less than fclk_I/O/2.5.


各位是如何理解的?

出0入0汤圆

 楼主| 发表于 2013-6-13 14:08:58 | 显示全部楼层
等一会要去上课,如北大博士说的那样“去误人子弟”了。
今天、明天和周六都有安排,至少一顿小酌。如周日晚上能空闲,贴上我的参考设计思路共大家参考,当然拍砖也可以。
警告:怕被我误的,以及将来参与航天卫星、导弹控制系统设计的TX和DX们,还有是将来准备买肉的就此飘过吧。

出0入0汤圆

发表于 2013-6-13 15:49:46 | 显示全部楼层
我用lpc2366的端口中断做过频率计数,用于测量汽车的速度,开始用的1秒数脉冲个数的方法,这个方法对于慢速、频率不变的信号是可以用的,后来用的测周法,具体精度没有测量。
请马老师指教。

出0入0汤圆

发表于 2013-6-13 16:10:50 | 显示全部楼层
看过这个帖子,想起了以前说waijiaobu的一句话,说waijiaobu是翻译部,呵呵,一点不错,还是实战性的人才 太缺乏了, 都是些搞理论的扯淡份子。

出0入0汤圆

发表于 2013-6-13 16:12:36 | 显示全部楼层
这个帖子 足可以反应 我国教育的失败 到了何种地步,哈哈。

出0入618汤圆

发表于 2013-6-13 17:45:57 | 显示全部楼层
machao 发表于 2013-6-13 13:35
新的限定就是为了反限定(打破旧的限定),而打破了旧的限定就得到一个新的相对更好的限定。所以限定和反限 ...
一旦开始测量,前9秒是7位精度,但第10秒以后就达到8位精度,在实际应用中应该是允许的。


这个太想当然了。少数要求不高的应用是允许的,又或者大多数日常应用其实并不要求那么高精度,但如果在关键时刻卡了壳那什么都白搭,一个需求就足以否决全部。
HP 80年代的产品就做到了10/12位每秒连续测量,同时也带累计平均,软硬指标都具备了。而现在市面上200块左右的频率计指标是100MHz 8位/s等精度,预分频扩展到2.4GHz,带外壳带保修。
如果想DIY个实用的频率计,超不过这指标还不如买,200块是大多数人几个小时的工资而已。如果要DIY就DIY点有挑战性的,指标至少要远超200块的国产货,接近国外30年前的水平吧。
所以我觉得这个题目就专注单片机定时器学习,定个单片机本身就能做到的指标就得了,不要尝试往产品靠,越靠就越不靠谱,还达不到学习定时器使用的最初目的。

至于预分频的问题,millwood一开始是针对MB506来说的,如果预分频后还要做到1Hz分辨率,那你就只能想办法去读出MB506里面的计数值。如果用你的平均法,这个1/64分频器至少要64秒的平均周期。

用PIC16F675的异步计数器也是一样的,internal的预分频器没办法直接读出的,不读就做不了每秒1Hz的分辨率。

市面上200块的频率计是没做这个功能的,因为8位的分辨率对于2.4G来说已经只能显示100Hz了,时基精度也达不到这个级别,没必要去读。但做到9位甚至10位的就必须去读了。
这是很基础的思路,应该会的,没什么值得炫耀,实际设计中会遇到更多比这复杂得多的难题,这种最基础的问题都解决不了就很难设计更复杂的东西了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-6-13 18:42:42 来自手机 | 显示全部楼层
关于采用多次连续测量提高测量精度。
      对于等精度测量,假如进行N次测量,则误差降为单次测量的1/sqrt(N)。故马老师的说法,如每次的精度是7位,连续读10次得到8位精度结论是不正确的。要想达到8位的精度有两种方法:1.采用连续采样100次的方法。2.将闸门变为10秒。

出0入0汤圆

发表于 2013-6-13 18:45:03 | 显示全部楼层
Back when I said that you don't know how to read prescalers, you protested violently, :)

如果prescaler (external or internal)是interna的,直接读不就完啦?


Pick a simple mcu that you know well, like the avr, write a piece of code that 1) sets its internal prescaler to 256:1 (or any  number other than 1:1); 2) send a few pulses to it (less than 256). and 3) show us how you would know how many pulses have been piped into the prescaler.

:)

Reading a prescaler is easy only because you don't know how to do it.

出0入0汤圆

发表于 2013-6-13 18:49:49 | 显示全部楼层
这个4分频器里的尾数根本不需要每次采用专门的方式读出,连续的几次数据平均就解决。


You so not understand it.

I feel sad for your students.

出0入0汤圆

发表于 2013-6-13 18:58:38 来自手机 | 显示全部楼层
路过学习学习

出0入0汤圆

发表于 2013-6-13 19:34:01 来自手机 | 显示全部楼层
gyfeng1017 发表于 2013-6-13 16:10
看过这个帖子,想起了以前说waijiaobu的一句话,说waijiaobu是翻译部,呵呵,一点不错,还是实战性的人才  ...

    那你也给大家扯一个淡。
    我一直认为只实践不进行相关原理学习的更扯淡。那对做技术的来说是无源之水。
    现在的某些学生,到处找的图纸或抄点别人的东西,就觉得牛得不得了。你要问一下,说不出个一二三,还整天拿老师说事。当然不排除个别很差的奇芭老师。有些老师像小学生一样教本科生,照本宣科,学生还高兴得很。现在这学生... ..

     最近有些浮躁。哎..
..

出0入0汤圆

发表于 2013-6-13 19:52:47 来自手机 | 显示全部楼层
本帖最后由 yxw_bob 于 2013-6-13 19:55 编辑

DIY, 如果没有好的时钟源,10的—7次方,即0.1ppM是极限了。对于不少人来说,会止步于1ppM。
     如果大家不想信可以做做看。立此为证。
     有人会说我有100M的时钟源,如果你不对闸门时间做处理,还是在扯淡。30年前HP的水平不是盖的。国人的浮躁有目共睹,8位精度是个技术门槛。

出0入0汤圆

发表于 2013-6-13 19:53:30 | 显示全部楼层
从头看到尾,有不少收获

出0入618汤圆

发表于 2013-6-13 20:13:07 | 显示全部楼层
yxw_bob 发表于 2013-6-13 19:52
DIY, 如果没有好的时钟源,10的—7次方,即0.1ppM是极限了。对于不少人来说,会止步于1ppM。
     如果大 ...

正解,7位到8位、8位到9位看似都只有1位之差,其技术门槛相差百倍。
理论上说得通的东西,做的时候才会知道问题一大堆,而且往往就是“不考虑XX”“忽略XX”造成的。
所以我也比较反对在学生时代做题就灌输“忽略XX”的概念,要讨论频率计精度怎么能忽略时钟误差,拿个50ppm的普通晶体做到8位精度又有何意义?

出0入0汤圆

发表于 2013-6-13 20:49:07 | 显示全部楼层
完全看不懂,仅做一个记号。

出0入0汤圆

发表于 2013-6-13 21:24:45 | 显示全部楼层
gzhuli 发表于 2013-6-13 20:13
正解,7位到8位、8位到9位看似都只有1位之差,其技术门槛相差百倍。
理论上说得通的东西,做的时候才会知 ...

绝大多数人的实验条件和测试环境,做到10^-7已经是极限了

出0入0汤圆

发表于 2013-6-13 21:40:08 来自手机 | 显示全部楼层
本帖最后由 yxw_bob 于 2013-6-13 21:53 编辑

给大家推荐2本书,自己感觉不错,非广告。华中科技大学出版社 赵茂泰(电子测量仪器设计),国防工业出版社 潘仁瑾等(常用进口电子仪器实用指南—电学分册)。还有一本万用表的暂时找不到了,以后再补。
     非油炸安全食品。不需要广告。
     若干年前被本坛的GPS 训服钟所吸引,从坛友处买了若干个洋垃圾的大块头的恒温晶振,现在不知道在哪里吃灰,好像是—7, 还是 —8级别的。大家可以挖墓,找一下,好像是Lucent 的某个设备上拆下来的。惭愧,当年只做到5MHz, 谁让咱穷没有源呢?

出0入0汤圆

 楼主| 发表于 2013-6-13 21:53:12 | 显示全部楼层
yxw_bob 发表于 2013-6-13 18:42
关于采用多次连续测量提高测量精度。
      对于等精度测量,假如进行N次测量,则误差降为单次测量的1/sqrt ...

你提出的2个方法有矛盾。到底哪个正确?
每次门宽1S,连续10次测量做平均,不就意味着门宽10S?而连续测量100次,门宽相当于与100S吧。
如果认为门宽10秒,精度可以提高1位的话,我把连续10次、1次/S的不间断数据相加,是否意味着门宽10S?

出0入0汤圆

发表于 2013-6-13 22:04:51 来自手机 | 显示全部楼层
zqy517 发表于 2013-6-8 21:43:37
路过的,学习了,但是提醒哈,尊敬的大师们学术交流应该心平气和,营造和谐气氛,切莫相互冒犯!

我感觉也是,像我这种菜鸟开观摩大神的,也隐约觉得这样不好,值得敬仰的大神不是说技术多牛,起码人格有魅力

出0入618汤圆

发表于 2013-6-13 22:05:32 | 显示全部楼层
yeshunter 发表于 2013-6-13 21:24
绝大多数人的实验条件和测试环境,做到10^-7已经是极限了

也够了。
另外,精度和分辨率是两回事,能做到8位分辨率不代表有8位精度,能分辨1Hz不代表能精确到1Hz,但很多时候分辨率比精度更重要,只要时钟源的短期稳定性能保证,8位分辨率绝对比7位实用。

出0入0汤圆

发表于 2013-6-13 22:22:37 来自手机 | 显示全部楼层
machao 发表于 2013-6-13 21:53
你提出的2个方法有矛盾。到底哪个正确?
每次门宽1S,连续10次测量做平均,不就意味着门宽10S?而连续测 ...

    我说的不矛盾。门宽10S跟10次1S门宽的测量是不等价的。因为闸门信号本身还是有误差的,只是很小,累积起来就大了。只要分次,门控信号就会关,闸门只要关前后沿就会有误差。10次闸门的前后沿的误差是1次闸门前后沿误差的10倍,因为所有时钟信号都有抖动(Jitter, 好像是这个单词)。

出0入0汤圆

发表于 2013-6-13 22:22:52 来自手机 | 显示全部楼层
zqy517 发表于 2013-6-8 21:43:37
路过的,学习了,但是提醒哈,尊敬的大师们学术交流应该心平气和,营造和谐气氛,切莫相互冒犯!

我感觉也是,像我这种菜鸟开观摩大神的,也隐约觉得这样不好,值得敬仰的大神不是说技术多牛,起码人格有魅力

出0入0汤圆

 楼主| 发表于 2013-6-13 22:46:16 | 显示全部楼层
gzhuli 发表于 2013-6-13 20:13
正解,7位到8位、8位到9位看似都只有1位之差,其技术门槛相差百倍。
理论上说得通的东西,做的时候才会知 ...

这话我认可,7到8,8到9,每提高一位难度都会大大增加。而且难度是成倍的。

理论上是一样分析的,主要是工程上面实现起来的困难,器件、晶体稳定度、布线走法等。但这些问题的解决能指望和依靠今天的大学生吗。依靠每2年一次的全国大学生竞赛?说我水平差我不在乎。两年一次的全国大学生电子竞赛也不是我组织的,题目也不是我出的,北大、国内仪器仪表专业好的学校也有好几所,类此网友说的出的好书的教授全国多的是,可是这个竞赛已经举办了N次了,没看见超过HP的频率计出来吗?

我这次为学校实验室购买设备,500M以上的数字示波器国内品牌基本没有。志向是崇高的,要超过别人,要超过HP20年前的水平,问一下你手上用的器件有几个是国产的?国情就是如此。
愤青有什么用?我们学校每年培养出来的少数几个优秀的学生,有几个愿意在学校教书?当你面对一群什么也不像学的学生,你跟他们讲设计9位精度的计数器?你给他能做9位精度的东西,他能做到6位就不错了。

所以我说过,每个人的出发点不同,目的不同。我的任务不是设计高精度频率计,而是教他们更好的学习和使用MCU,为以后能设计出好的高档电子设备仪器打一点基础。这个就是我的目的,也是我目前能够做到事情。

10M基频对于现在的MCU没有问题,采用软件的方法理论上可以提高到1位,而且也是比较容易实现的。至少应该有这样的概念。所以我没有给出1G的指标,最多扩一下频也就是120M。主要还是侧重MCU的练习。

什么叫“练手”题,不管是做什么,不要忘啦,这个题目是练手题。不是设计专业的频率计。

出0入0汤圆

发表于 2013-6-13 22:49:04 来自手机 | 显示全部楼层
有2点我忘了向马老师确实一下:您的匹配输出,除了作为捕获触发,还作为门控信号吗?您如何保证连续10次测量的捕获时刻的精度?您如果不能保证10个1S的捕获点与10S的捕获点的精度,那您1S测量精度与10S精度相差太多了。原因同我的上一次回复。

出0入0汤圆

 楼主| 发表于 2013-6-13 22:54:48 | 显示全部楼层
yxw_bob 发表于 2013-6-13 22:22
我说的不矛盾。门宽10S跟10次1S门宽的测量是不等价的。因为闸门信号本身还是有误差的,只是很小,累 ...

我的方法里没有闸门的概念,或者说不是真正“闸门”的作用,我用的是同步捕捉,它不会对原始信号,不管是被测还是基时脉冲,有任何影响。

出0入618汤圆

发表于 2013-6-13 23:05:08 | 显示全部楼层
machao 发表于 2013-6-13 22:46
这话我认可,7到8,8到9,每提高一位难度都会大大增加。而且难度是成倍的。

理论上是一样分析的,主要是 ...

这道题的目的我已经了解,实际教学中不可能给学生讲太细,没有实践经验讲了也不会明白,这个我知道。
不过如果有可能还是尽量带进一下相关概念,让学生有个印象知道可能出问题的方向,有兴趣的自然就会深究。
例如前面yxw_bob所说的,过了100M时钟就连一个门的延迟都要算进去,这些概念可以略略带过,虽然对于绝大多数人来都是不会在意的。

出0入0汤圆

发表于 2013-6-13 23:07:04 来自手机 | 显示全部楼层
machao 发表于 2013-6-13 21:53
你提出的2个方法有矛盾。到底哪个正确?
每次门宽1S,连续10次测量做平均,不就意味着门宽10S?而连续测 ...

我仔细看了下马老师的这个回复。如果您10次读数过程中计数器不停止计数,则您的方法可以使用并且精度可以保证。不过,您这里的10次的读数是通常的等精度测量,用您的这10次结果来计算出来的不确定度要比你用10S的累计结果的不确定度差很多。
   

出0入0汤圆

发表于 2013-6-13 23:27:33 来自手机 | 显示全部楼层
本帖最后由 yxw_bob 于 2013-6-13 23:34 编辑

我担心您的”闸门”—捕获时间点的重复度,比较匹配计数器重载带来的不确定度。如果您用从0一2^32之间的单调变化产生连续的10个1S信号,我认为您可以用10个数达到10S闸门效果。否则,我不会认为10个数相加能达到10S闸门的效果。我在这里強調信号之间的随机性。原因同我的上上贴。
    提醒大家,基准晶振的准确度和稳定性决定了频率计的准确度,频率计精度不会优于它的源。

出0入17汤圆

发表于 2013-6-13 23:38:25 | 显示全部楼层
本帖最后由 machao 于 2013-6-14 00:16 编辑

几位大神将讨论提高到了新的学术高度

一场比赛并不能体现大学的最先进水平;
老是强调和国外差距多少年未免有些妄自菲薄
我相信中国的研究所里有接近HP水平的仪器,只是不做商品出售;

========================================
据我所知,国内重点实验室、研究所里使用的仪器,主要都是进口的。
一台3G的数字示波器要40万,算上配件、软件要50万,安捷伦、泰克是主流。如果国产有类似产品,价格早就降了下来。就像汽车一样。
100M的数字示波器,泰克5年前买9000元,由于最近几年国内有类似的(也就到这个级别),现在是5000元。没有国内同级别的产品,他们是不会降价的。

machao

出0入0汤圆

发表于 2013-6-13 23:58:44 来自手机 | 显示全部楼层
楼上别把牛吹上天了。老农都没牛耕地了。

出0入0汤圆

 楼主| 发表于 2013-6-14 00:06:14 | 显示全部楼层
本帖最后由 machao 于 2013-6-14 02:24 编辑

已经在外面宾馆,晚上没喝多少,因为其他的朋友明天还要上班。还有精力做点备课。
测频、测周、等精度的测量理论感谢网友帮助整理,省了我一些备课的时间。
=======================================================
1、下面的描述不涉及芯片型号。
1.1、某芯片内部具备2个带比较匹配输出、捕捉功能的32位同步计数器(16位也可以,但描述起来麻烦点),一个普通的8位预分频器。
1.2、芯片采用50M系统时钟,当然要测频,必须使用高精度、有源、带温度补偿......晶体。
1.3、8位预分频器设置成5分频输出,50M经过5分频器输出10M,作为32位计数器F0的计数时钟信号,F0为基时计数器。每秒10000000个脉冲,计数器不会溢出
1.4、被测信号为方波,最高输入限制为20M(1/2.5),外部输入作为FX的计数信号,FX为被测频率计数器。每秒最高20000000个脉冲,计数器也不会溢出
1.5、F0的比较匹配输出引脚接FX的捕捉信号输入引脚
1.6、FX的比较匹配输出引脚接F0的捕捉信号输入引脚

以上硬件设置配备连接完毕

2、简单测频实现
2.1 设置F0的比较匹配寄存器的值为n,比较匹配相等时,匹配输出端输出高电平,作为FX的输入捕捉信号。初始化设置匹配输出端为低电平,不使用任何中断
2.2 设置FX工作在上升沿捕捉工作方式,允许捕捉中断
2.3 启动2个计数工作,永远不停。
2.4 当F0计数值到达n时,与比较匹配寄存器的n相等,匹配输出端输出高电平,其上升沿作为FX的输入捕捉信号,F0本身计数不受任何影响
2.5 F0的匹配输出信号的上跳变作为FX捕捉触发,此时FX把当前的计数值同步存入FX的捕捉寄存器中,同样FX本身的计数过程不受任何影响。
2.6 FX捕捉时间发生后,MCU响应中断。中断中读取FX捕捉寄存器的值,保存为FX1,并把F0的比较寄存器的值+10000000(1秒),同时把F0的匹配输出端置为低电平。这个中断处理时间很短,大大小于1S,而且对2个计数器的计数没有任何影响。
2.7 F0继续计数,一直到计数器的值与比较寄存器的值相等,又产生一次捕捉信号,此时是严格的1S(如果第1次输出有延误,那么本次的延误是相同的,是硬件本身带来的,不是软件)
2.8 本次捕捉发生,FX把当前的计数值同步存入FX的捕捉寄存器中,再次进入中断,中断中读取FX捕捉寄存器的值,保存为FX2,并把F0的比较寄存器的值+10000000(1秒),同时把F0的匹配输出端置为低电平。FX2 - FX1 为频率值。周而复始........
2.9  这样的方法,绝对误差是正负1hz(1个被测信号的脉冲),相对误差是1/(fx2-fx1),显然,被测频率越高,相对误差越小。
2.10 可以通过滑动窗口平均的软件方式减小相对误差,比如窗口为10,也就是实现10次(秒)计数的平均。这个对于软件根本不在话下。中断时间间隔是1S,MCU能多多少事情?计数的事情就交给两个计时器硬件自己完成吧。
2.11 变化    如果是用于测频(转速)控制系统,如果精度够用,可以减少F0比较匹配计数器的每次累加值,比如每次加5000000,就是0.5秒的反应时间。注意:这个累加值不可以很小,面临的挑战就是必须大于捕捉中断服务的时间,一般是2-3倍以上。实在需要,中断服务必须考虑使用汇编。

3、测周实现,如果频率比较低,应该转换成测周法
3.1 根据上面的描述,其实只要设置FX的比较寄存器,产生比较输出,作为F0的捕捉信号就可以了。处理方法相同。
3.2 FX的比较寄存器每次的累加值就是多周期测周法,比如每次加10,就是10个周期的时间。
3.3 测周法的绝对误差是10-7秒,相对误差要看F0中两次中断的计数差值,越大的话相对误差就越小,所以频率越低,测试效果越好。
3.4 注意:这个方法面临的挑战也是,2次捕捉中断的时间间隔必须大于捕捉中断服务的时间,一般是2-3倍以上。实在需要,中断服务必须考虑使用汇编。
3.5 只要精度满足,软件写的好,可以减少FX比较寄存器每次累加的值,达到更快的反应控制时间。

4、等精度测量法(适合频率计标准)
等精度测量类似上面的测周方法,区别的是,FX比较寄存器的的累加值不能随便设定,应该基本上为1秒一次。所以处理上稍微转一下,两个捕捉中断都用。
4.1  设置FX比较寄存器为n 。
4.2  FX计数器到n后产生比较匹配输出,作为F0的捕捉信号。
4.3  MCU响应第一次F0的捕捉中断,中断服务中:读取当前F0捕捉寄存器的值F01,置FX比较输出低电平,将F0的比较寄存器设置为F01+5000000(0.5秒)
4.4 大约0.5秒后F0计数器比较匹配输出,触发FX捕捉中断。
4.5  MCU响应FX的捕捉中断,中断服务中:读取当前FX捕捉寄存器的值FX1,置F0比较输出低电平,将FX的比较寄存器设置为FX1+ (FX1-n),括号里是大约0.5秒内FX的个数。
4.6 大约0.5秒后,FX的计数值与FX的比较寄存器相等,匹配输出触发F0捕捉动作。
4.7 MCU响应第二次F0的捕捉中断,中断服务中:读取当前F0捕捉寄存器的值F02,置FX比较输出低电平,将F0的比较寄存器设置为F01+5000000(0.5秒)
4.8 此大约1秒时间内,FX的计数值为2(FX1 - n) ,F0计数值为 F02-F01
4.9 又是周而复始........
4.10 又是可以通过滑动窗口平均的软件方式减小相对误差,设定2个滑动窗口为10,一个累计最后10次的FX个数,一个累计最后10次的F0个数,然后除还是乘,根据需要。
4.11 0.5秒一次中断,中断中没有做多少事情,MCU有大把的时间做其它事情
4.12 由于两个计数器从不停止计数过程,你这次少一个,下次就会多一个。所以如果提高量程,外面加个分频器,也不要读尾数的。当然你一定要1秒定终身,这个是做不到的。
4.13 不过要是捕捉信号的毛刺,通常使用示波器吧。谁测频率就看头1秒的显示?

出0入618汤圆

发表于 2013-6-14 00:14:08 | 显示全部楼层
yxw_bob 发表于 2013-6-13 23:27
我担心您的”闸门”—捕获时间点的重复度,比较匹配计数器重载带来的不确定度。如果您用从0一2^32之间的单 ...

晶振还算容易搞,淘宝弄只年份新点的MV89A,短稳2x10e-12,再弄只GPS授时模块搞个GPSDO,总共也就几百块而已。
就是随便搞只拆机OCXO应付8位也足够了。

出0入0汤圆

 楼主| 发表于 2013-6-14 00:24:13 | 显示全部楼层
yxw_bob 发表于 2013-6-13 23:27
我担心您的”闸门”—捕获时间点的重复度,比较匹配计数器重载带来的不确定度。如果您用从0一2^32之间的单 ...

10M对于现在的MCU不是问题。
如果你自己搭电路,你的门控稳定度、晶体的精度也存在这些问题。这个是任何方案都不能避免的。你在外面搭电路,买的器件也是进口的,也得依赖器件本身的指标。我给的MCU模型,国内目前没有自己的产品。也是国外的。

出0入0汤圆

发表于 2013-6-14 01:32:17 | 显示全部楼层
machao 发表于 2013-6-8 20:27
1、有本事在我的条件下给出最好的设计。不要拿什么HP的说事,你自己懂吗?
2、知道中国现在有哪些厂家能自 ...

您还跟我们扯辩证,这就是你的辩证?就看看示波器多宽带宽,多高采样率,多大屏幕,几个通道,多深的存储,按键布局怎样,就告诉我都是抄的。我想知道您的辩证在哪里?

出0入0汤圆

发表于 2013-6-14 01:38:30 | 显示全部楼层
machao 发表于 2013-6-13 13:35
新的限定就是为了反限定(打破旧的限定),而打破了旧的限定就得到一个新的相对更好的限定。所以限定和反限 ...

我们继续辩证,一个示波器的核心是什么?是信号调理,采样,数字信号处理部分吧,我就不明白,你的的辩证基础里面涵盖了这些东西吗?你的前提都存在问题,你那草率的结论是怎么的出来的呢?一个相同定位的示波器其主要指标肯定是差不多的,按照您的逻辑,我觉得所有10W左右的汽车都是抄的,您觉得这个结论正确吗?

出0入0汤圆

 楼主| 发表于 2013-6-14 02:46:55 | 显示全部楼层
本帖最后由 machao 于 2013-6-14 02:49 编辑
Puzzle 发表于 2013-6-14 01:38
我们继续辩证,一个示波器的核心是什么?是信号调理,采样,数字信号处理部分吧,我就不明白,你的的辩证 ...


新注册就是因为我说了示波器不服气啦。我还真不了解,因为不在这个行业混。
我所知道是我听到的。
去年我们实验中心有笔国家下拨的经费用于更新学生基础实验室的设备。在此以前,我们实验室使用的都是6-8年前的模拟示波器(20M。新建?)
我们找了安捷伦、泰克、力科、台湾、国内共6家厂商,带来6台100M的示波器进行比较和挑选。
从他们口中(国内厂商)告诉我,我们国家有世界上最大的100M示波器流水线,下线后就是贴牌。某些国际品牌(不变透露)也是这个线上下来的,就是器件用的好些。至于核心技术,我不便多讲。反正我也不好意思说。最后选择是安捷伦的100M示波器120台。

实验室购买了400M、3G 数字示波器各一台,3G信号源一台。此时国内没有一个厂家提供样品。最近几年,国内有个别民营企业在向中档仪器推进,但还是不能与国际品牌抗衡。

出0入0汤圆

 楼主| 发表于 2013-6-14 03:12:35 | 显示全部楼层
本帖最后由 machao 于 2013-6-14 04:18 编辑
Puzzle 发表于 2013-6-14 01:38
我们继续辩证,一个示波器的核心是什么?是信号调理,采样,数字信号处理部分吧,我就不明白,你的的辩证 ...


关于汽车问题不愿意多说。你有10W,你是买纯国产车还是买合资品牌才车?
反正我的第一部车是国产的,但发动机进口的,软件是德国博世的。开了3年,发动机没有出过问题,但一年内螺丝锈了,后备箱的后盖边缘生锈了,老实盖不上,水箱的橡皮管换了3次,11个月电瓶费了,空调换了2次冷凝器。。。。。。后来换了一款14W的合资品牌车(也算国产吧),快4年了,没有这些啰嗦事。

国家保护汽车工业,所以20W一下的车基本上没有全进口的。知道国外类似国内10W的车是什么价格吗。

国内的汽车工业是在发展,但水平还是底层次的,现在是花钱买外国的技术。

希望国家的实力强大这是全国人民的愿望,但是大家必须踏踏实实的努力,不是发发很喊几句口号就能实现的。可能要经过几代人才能全面赶上。

就我这个讨论组所涉及的简单的MCU芯片,国内自己的DD也是基本没有的。有也是拿别人的内核,在别人的基础上做了点小的变化。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 19:04

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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