恭喜,你发布的帖子
发布于 2023-09-26 16:09:39
22楼
1这个如果你信的话就不需要再验证了。能通过的。下一次的中断可以在上一个值上增加1000啊。这增加没阻碍高计的计数。而复位是影响到高计计数的。都说了。来一个脉冲到底清不清除这个脉冲。而修改设定值,修改归修改,计数归计数,河水不犯井水。
2……后面的。这个知道就是了。有时间我再仔细看你的程序。
计算脉冲密度最好是使用Bitime时间刻度,扫描扫到什么值就什么值。分子是脉冲个数,分母是Bitime刻度。随时读个分子紧跟读个分母,不论间隔多久,一除还是对的。避开了所有准不准的问题。100个脉冲用了100毫秒算出来是1khz,106个脉冲用了106毫秒,仍然算出来是1khz。
1、 最新的试验结果出来了,达到了多个高速计数基本相同的效果,三个显示在1012和1013之间跳。这是正常的,因为存在正负1误差。正负1误差可以通过多次采样平均来优化。
那么,按我这个思路精确测频率就可以实现了。用Q0.0产生标准频率,接入I0.0进行HSC0,中断中重置HSC0,获得准确时间;并且采样另外被测脉冲。
相对主贴的改动就是不在中断里重置HSC3和HSC4,及算前后两次中断的差值。HSC0还是重置,不想重计算中断比较值。
多谢芳季、大连穆工,你们反复说不要重置。也多谢其他网友,后面有时间一起探讨,因为关于中断响应时间、定时中断准不准等问题还需要跟大家探讨学习。
2、新的问题:
2.1 为什么HSC重置会影响计数准确性?这个影响不是正负1误差影响(不认可方季的解释),而是高达4%的影响(1000次有40次的影响,或40ms)。我估计跟HSC激活指令的实际执行时刻有关。多个HSC指令倒底是在中断里立马执行还是退出后执行?执行时是前后脚执行,还是有可能相差多达30多个ms间隔执行?
以及,为什么我重置HSC0一个又没有影响?理论上,HSC3和HSC4不断计数,但重置HSC0的时刻不是即时的话,假设存在10ms的延时,那HC0和其他两个不可能相同。这么看的话,应该是在中断中立即执行重置了。
3、遗留问题:
3.1 上面有版主yanxiao怀疑中断响应时间13ms太长,我也怀疑。现在找不到官方资料,从单片机的角度来说,应是us级的。有没有可能还是跟我重置HSC0有关。
3.2 网友winter938做的测试是没有发现有13ms存在,也就是在HSC0的比较中断中再次读取HC0的值仍是1000,跟我这里的不一样。差异性到底在哪里还要再分析,请winter938再研究一下,或贴出测试程序。非常感谢!
3.3 计算前后两次中断里HSC读数,存在着到达顶部后拐弯的问题。相关的减法会不会出一次问题,我还要再验证一下。这个有时间再说。
请填写推广理由:
分享
只看
楼主