打印
[51单片机]

关于精确定时us

[复制链接]
1609|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chuandaoxy|  楼主 | 2021-3-23 20:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
c8051f的片子,倍频后跑到88M,为了做精准的脉冲,例如定时22us,在定时器0设置的时候22/0.0113
这时候误差就来了,因为定时是整数操作小数被舍去,所以累计误差会越来越大,当脉冲数量多的时候
这种误差就很明显7-80us甚至更大,大家想想有啥办法补偿,让他更精准,谢谢大家

使用特权

评论回复

相关帖子

沙发
misra| | 2021-3-23 20:20 | 只看该作者
你把C程序代码算式列出来

使用特权

评论回复
板凳
LcwSwust| | 2021-3-23 20:32 | 只看该作者
本帖最后由 LcwSwust 于 2021-3-23 20:33 编辑

时钟88M,要得到22us,应该很准啊,22*88=1936分频,怎么会有小数?假如定时器计88个数中断一次,那就是1us的周期,需要多少us就再中断里计个数不就完了?

使用特权

评论回复
地板
chuandaoxy|  楼主 | 2021-3-23 21:38 | 只看该作者
LcwSwust 发表于 2021-3-23 20:32
时钟88M,要得到22us,应该很准啊,22*88=1936分频,怎么会有小数?假如定时器计88个数中断一次,那就是1us ...

cpu分频是固定的12/4/48

使用特权

评论回复
5
zlf1208| | 2021-3-24 09:13 | 只看该作者
chuandaoxy 发表于 2021-3-23 21:38
cpu分频是固定的12/4/48

用4分频,时钟为88/4=22MHz,计数22个时钟就是1us,不是很准的吗

使用特权

评论回复
6
coody| | 2021-3-24 09:14 | 只看该作者
22*88=1936,整数哦。

使用特权

评论回复
7
wh6ic| | 2021-3-24 09:49 | 只看该作者
如果是项目限制,使用 12/48 分频,引入了 3 这个不大友好的数字,可以每 3 的整倍数校正一次分频系数,比如每三次定时中断,其中一次调节系数,一次恢复系数,或者 六次/九次/十二次 中断,调节一次,然后恢复。
如果对 间隔要求很严,不允许间隔校正,可以考虑将 定时最小粒度 设置为 1.5uS、3.0uS 之类,不使用 1.0uS 这个引入误差的数字为最小粒度。

使用特权

评论回复
8
wh6ic| | 2021-3-24 09:55 | 只看该作者
另外,88MHz 是用哪个频率 倍频得到的? 比如是用 22MHz 晶体? 不能改成相近的 22.1184MHz?  其它频率附近,都可以找到非常多附近的频率。
晶振厂家 通常会欢迎你的。

使用特权

评论回复
9
chenyuanjiyi| | 2021-3-24 11:20 | 只看该作者
定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
22us=1 000 000 *1936/88 000 000
正正好

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

855

主题

1044

帖子

4

粉丝