天行 发表于 2019-1-21 17:39:12

micro:bit的delay精度问题

micro:bit的delay函数貌似不是很准确,我给我引脚分别写900ms的高电平和100ms的低电平,最后测出的实际脉宽是905ms和102ms,它有更准确的延时函数吗?

rzyzzxw 发表于 2019-1-21 18:05:04

这个问题等工程师来回答。{:5_157:}

fats114 发表于 2019-1-21 23:35:31

单片机电子时钟利用内部定时,计数器溢出产生中断(12MHz晶振一般为50ms)再乘以相应的倍率,来实现秒、分、时的转换。从定时,计数器产生中断请求到响应中断,需要3_8个机器周期。定时中断子程序中的数据人栈和重装定时,计数器的初值还需要占用数个机器周期。此外。从中断人口转到中断子程序也要占用一定的机器周期。在编程时的库一般会把平均值6个机器周期加入定时/计数器的初值中。但是,从定时,计数器溢出中断请求到执行中断需要几个机器周期(3~8个机器周期)。就很难确定准确值,正是这一原因导致了电子时钟计时的不准。解决方案比较难,需要修改固件,同时每块板子都不一样,首先换高精度晶振,然后从程序人手,采用动态同步修正方法给定时,计数器赋初值。动态同步修正方法如下:由于定时,计数器溢出后,又会从O开始自动加数,故在给定时/计数器再次赋值前,先将定时,计数器低位(TLO)中的值和初始值相加,然后送人定时,计数器中,此时定时,计数器中的值即为动态同步修正后的准确值。采用同步修正方案后,电子时钟的精度虽然提高了很多,但是由于晶振频率的偏差和一些其他未知因素的影响(同一块电路板、同样的程序换了一片单片机后,走时误差不一样,不知是何原因),时间长了仍然会有积累误差。为此,可采用自动调整方案。实际上是一种容错技术。其自动调整原理为:实测出误差Is所需的时间,然后每隔这样一段时间后就对秒进行加“1”或减“1”调整。
总结下来因为成本限制,每块microbit的计时器精度都没有你想象中的高,同样受限于成本每块板子出厂矫正的可能性也不大。
这么便宜的板子,编程教育入门用的,你还要什么自行车。
页: [1]
查看完整版本: micro:bit的delay精度问题