| 晶振改用有源温度晶振试试,我也曾经试过,用15W单片机,用有源温度晶振,用PCA采集频率,校准后采集1HZ时,可以达到小数点第5位的精度,可惜这样的精度还达不到我项目0.5PPM的要求,后来就没再用了 |
| 只要你用的时基是晶振,测量频率,做到6个有效数字的精度是没有问题的。 |
yzwzfyz 发表于 2022-4-13 16:54 好像确实是这么回事 ![]() |
|
13#: 你们老师敷衍你了: 理论上:测量精度取决于你的时基精度(这里是你CPU使用晶振的精度),保守一点,计数时存在+-1的误差,即测试数量存在+-1的不确定度。这是极限精度了。 实际上:由于软件的不合理,捕捉不及时,中断延时等等,不确定度会增加,这就要看你对单片机的认知度了,也考验你编程的水平。懂汇编的人,会做得更精准。 例如:你用定时器做个2秒的脉冲,再打开一个计数器,CLK从引脚用被测的5MHz信号,用2秒脉冲作CLK的开关,即当脉冲为1时,让CLK通过,则脉冲过后,理论上计数器应收到10M个脉冲。你说是也不是。 |
lkc8210 发表于 2022-4-13 11:54 因为我单片机是12T的,11.0592MHZ的晶振12分频后为0.9216MHZ,测一个波形需要两个机械周期,所以除2得460800HZ。当然这只是理论值,就跟您说的一样我并没有求出中断一次和累加所消耗的时间,之所以确定是在460KHZ左右,是因为之前没有使用74LS161和74LS01进行外部电路10分频时,测得的界限大概为460KHZ(超过这个值误差会变得特别大)。而我想的是,外部10分频后,进入单片机(能被计算机准确测量的)的最大频率应该也为460KHZ,那么按理论值来说,就应该是可以测到4.6M。当然这可能是比较不成熟的想法,如有疏漏的地方请指点。 |
|
460kHz是如何算出来的? 你知道89C52进出一次中断要多久? 你知道char类型++一次要多久? |
| 尬住,我问了另一个导师这个问题,那个老师说实现这种要求(5MHZ以上且精度为小数点)很难,不知道是这个东西本身就很难实现,还是以我的水平现在很难实现....跟导师说了之后,导师让我做到20MHZ精度不在要求,现在又有一个问题想请教大佬们,因为我是用的74LS161和74LS01在单片机外部构成的10分频,按理说,11.0592MHZ的单片机大概可以测到460KHZ左右,外部分频后应该可以测到4.6MHZ,但实际电路(非仿真)只能测到1MHZ。74系列芯片的最大工作频率也大概在25MHZ以上应该没问题,有大佬知道为什么或者你觉得会有那种情况导致这种问题呢?给一点思路也可以 |
|
低频:在两次输入脉冲之间,数定时器的脉冲个数。 高频:用定时器给出一个时间间隔,数此间隔中输入脉冲的个数。 |
lkc8210 发表于 2022-4-11 14:28 很有参考价值,谢谢大佬。因为我使用的方法是单位时间内测量脉冲个数,在外部电路中使 用D触发器达到脉冲上升沿时停止计数的作用,并且使用fx=(Nx*f0)/N0进行误差的矫正。 (fx为待测信号频率,f0为时钟频率即晶振大小,Nx为单位时间内所计待测信号的脉冲,N0为 单位时间内所计时钟的脉冲个数) 。实际上达到的效果和您所说的差不多。而我目前所遇到的问题是在高频时误差较大并且不停 改变显示值。经过查找资料和向周围人了解,应该是在晶振不高的情况下,测高频就会产生误 差,除了换晶振好像没什么好办法,当然也可能是我刚刚接触单片机,理解的不到位。大佬的 思路很清晰,我会去试试的。 |
| 顶一下 |
起昵称真难 发表于 2022-4-11 11:33 高速脉冲计数, 低速测量脉冲的周期, 两种结合就是固定采样时间内计数N个脉冲+脉冲周期, 比如采用一个外部中断源, 当脉冲下降沿开始计时100毫秒, 计数脉冲的个数N。 100ms时间到, 再计时T到下一个脉冲的下降沿。 那么总的脉冲数N+1个, 总的周期100ms+T.。 那么频率 =(N+1)/(0.1+T) |
Y_G_G 发表于 2022-4-11 12:11 主要是导师让我搞一下这个,说我基础不太好,提的要求还比较苛刻,要测5MHZ以上,精度在小数点后,实在没办法了,才来求助 |
|
频率计这种东西,感觉也没什么用,不知道要用这玩意来干嘛 单片机推荐用STC8A8K64D,这个时钟可以到33MHZ 而且可以DMA操作,最大程度提高CPU效率 使用32MHZ有源晶振,提高精度 可以加入SN74LVC1G14之类的触发器进行整形 |
lkc8210 发表于 2022-4-11 11:24 是我拘泥于测频法了,学到了,这就去试一下 |
|
基操不应该是用定时器2的捕获模式来得出脉冲周期时间吗? |
xuyaqi 发表于 2022-4-10 16:43 我用的这个单片机频率为11.0592MHZ,外部电路经过了74LS161进行了10分频,理论来说可以测到4MHZ,频率太高时有误差可以理解,但实际电路测量中,1MHZ就已经出现20~35的误差了,个人感觉这个是有点大了。所以我觉得应该是代码写的没那么好,中间漏测或者多测了些方波。 |
| 单片机主频不够高。电脑性能不够好。 |
| 提醒一下,lcd_send函数注释有误,不是12864,是1602,忘改了。 |