找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1596|回复: 14
收起左侧

关于STC单片机1us定时误差问题

  [复制链接]
ID:953416 发表于 2022-11-8 11:21 | 显示全部楼层 |阅读模式
芯片型号STC15W4K48S4  时钟采用内部时钟24M  模式16位自动重载
用定时器定时1us,变量做累加,发现定时时间一直存在误差,后修改代码做验证
代码1.png K_7}Z(081(@1[58J(J]@9KY.jpg
按程序来说,输出波形周期应为2us,实际测试4us多,误差有点大,修改程序继续验证
代码2.png 7C0{3F1_(K3TPR[Y@$HL78X.jpg

注释掉部分代码之后,周期终于对了,所以确定是程序执行所需时间导致输出1us时间不准,但我需要1us时间,且需要调节这时间。
芯片速度不够,不知道STM32可不可以做到?准备换方案了
回复

使用道具 举报

ID:57657 发表于 2022-11-8 12:13 | 显示全部楼层
自动重装初值模式,中断内不要赋值 TH0、TL0寄存器。
回复

使用道具 举报

ID:807591 发表于 2022-11-8 12:25 | 显示全部楼层
1us除了中断,能做的事不多了啊
回复

使用道具 举报

ID:86926 发表于 2022-11-8 14:08 | 显示全部楼层
赋值、指令执行和判断都是要花时间的;不同的指令执行的时间也不一样;而且1us那么短;对于这种芯片来说还要调时间;肯定是吃不消的,要么用硬件pwm
回复

使用道具 举报

ID:941942 发表于 2022-11-8 14:09 | 显示全部楼层
stm32肯定可以达到
回复

使用道具 举报

ID:624769 发表于 2022-11-8 14:11 | 显示全部楼层
为什么非要用中断呢?
用 INT_CLKO |= 0x01;  直接输出不好么?
回复

使用道具 举报

ID:619250 发表于 2022-11-8 15:29 | 显示全部楼层

stm32的应该没问题
回复

使用道具 举报

ID:213173 发表于 2022-11-8 16:36 | 显示全部楼层
自动重装不需要再给TH0、TL0赋值,2us周期脉冲也不适合用定时器中断。改用高速脉冲输出功能为宜。
回复

使用道具 举报

ID:1047954 发表于 2022-11-8 16:53 | 显示全部楼层
STC的下载软件内都有范例程序的,你可以用范例试试呢
下载软件.png
回复

使用道具 举报

ID:1034262 发表于 2022-11-8 17:44 | 显示全部楼层
时间太短了,进中断处理、退出中断,总时间已经超过1us,所以会不准。
回复

使用道具 举报

ID:883242 发表于 2022-11-8 20:09 | 显示全部楼层
发送连续波形完全可以用定时器自身的功能。只有单次输出才需要中断。
回复

使用道具 举报

ID:688692 发表于 2022-11-9 12:55 | 显示全部楼层
所有的锅都甩给八位机,就是不提系统架构设计,应用合理性。
你STM32做1us的中断也不见得中断程序里面你能多跑几条代码
回复

使用道具 举报

ID:1051174 发表于 2022-11-9 13:12 | 显示全部楼层
自动重装初值模式,中断内不要赋值 TH0、TL0寄存器。
回复

使用道具 举报

ID:123289 发表于 2022-11-9 14:18 | 显示全部楼层
1、已经设置为自动从装了,为何还要重置时常路,不合理。
2、每个us反转输出就完成2us的周期脉冲输出了,为何还要用NUM数数,也不合理。
两个不合理,导致程序执行时间过长,超出中断时间!
根本问题:中断时间不能太短,当中断服务程序运行时间>中断时间时,时序就控制不了了。
回复

使用道具 举报

ID:401564 发表于 2022-11-10 00:26 | 显示全部楼层
24MHZ在1T模式下,误差最多就是1/24
做1uS肯定是没有问题的
问题是,你要这1uS又是可调的干嘛?
如果是计时,可以用定时器
如果输出PWM......很少有用到1MHZ的PWM的
也许,你想要的功能,可以通过其它方式来实现,还不如说说你要做什么好点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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