OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7315|回复: 14

DS18B20时序与定时器中断可能冲突怎么办

[复制链接]

34

主题

252

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
473
金钱
473
注册时间
2020-5-11
在线时间
217 小时
发表于 2021-2-26 16:00:14 | 显示全部楼层 |阅读模式
10金钱
使用的芯片是STM32F103RCT6,定时器中断是1ms中断一次,程序中的中断除了定时器中断之外还有串口接收中断

使用4路DS18B20读取温度值,有加热,温度值上限设定都是50摄氏度,采用PID控制加热端口,但是在实际应用的过程中总会有一路出现50跳变成54摄氏度,然后再跳回50,或者49到53的跳变,还有到58的跳变

温度采集是500ms一次,其中在串口接收和发送的时候不进行采集(我知道是750ms才转换完成,但是寄存器里面有数值,所以读上一次寄存器里面的数值应该是没问题的)

出现上面的问题我的猜测是定时器中断影响了DS18B20的时序,想问一下各位大佬有没有什么看法呢


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2020-11-24
在线时间
33 小时
发表于 2021-2-26 16:09:09 | 显示全部楼层
DS18B20采集数据的时候屏蔽中断不就好了
回复

使用道具 举报

3

主题

808

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3888
金钱
3888
注册时间
2017-3-7
在线时间
1694 小时
发表于 2021-2-26 16:17:17 | 显示全部楼层
同上,软件模拟通信时序时需要屏蔽中断,不然会被打断
回复

使用道具 举报

34

主题

252

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
473
金钱
473
注册时间
2020-5-11
在线时间
217 小时
 楼主| 发表于 2021-2-26 16:52:08 | 显示全部楼层
BurgLi 发表于 2021-2-26 16:09
DS18B20采集数据的时候屏蔽中断不就好了

定时器里面写的东西对时间有精度要求,不能在采集的时候屏蔽中断呀,不然可能会乱掉的
回复

使用道具 举报

34

主题

252

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
473
金钱
473
注册时间
2020-5-11
在线时间
217 小时
 楼主| 发表于 2021-2-26 16:52:37 | 显示全部楼层
a5820736 发表于 2021-2-26 16:17
同上,软件模拟通信时序时需要屏蔽中断,不然会被打断

定时器里面写的东西对时间有精度要求,不能在采集的时候屏蔽中断呀,不然可能会乱掉的
回复

使用道具 举报

10

主题

271

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1236
金钱
1236
注册时间
2015-5-14
在线时间
352 小时
发表于 2021-2-26 17:02:08 来自手机 | 显示全部楼层
DS18B20延时改为硬计数器试试
回复

使用道具 举报

1

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2018-7-7
在线时间
20 小时
发表于 2021-2-26 22:09:02 | 显示全部楼层
asshole 发表于 2021-2-26 16:52
定时器里面写的东西对时间有精度要求,不能在采集的时候屏蔽中断呀,不然可能会乱掉的

是否可以固定为在定时中断完成后立即开始采集DS18B20,调整好定时中断的时间,确保在下次定时中断来之前可以完成采集。
回复

使用道具 举报

2

主题

685

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3448
金钱
3448
注册时间
2017-7-4
在线时间
869 小时
发表于 2021-2-27 14:59:17 | 显示全部楼层
18B20时序要求比较严格,产品上使用,建议还是使用i2c、spi接口等数字温度传感器。参考18B20单总线抽象:
https://acuity.blog.csdn.net/article/details/81152511
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2021-2-27 18:00:47 | 显示全部楼层
要么读不被打断  要么crc校验不对舍弃不就行了
回复

使用道具 举报

0

主题

48

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1162
金钱
1162
注册时间
2013-8-23
在线时间
166 小时
发表于 2021-3-1 11:05:32 | 显示全部楼层
你是不是在定时器里干活了, 定时器只需进行扫描, 计算留在主程序。
回复

使用道具 举报

34

主题

252

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
473
金钱
473
注册时间
2020-5-11
在线时间
217 小时
 楼主| 发表于 2021-3-1 11:56:40 | 显示全部楼层
01ddd 发表于 2021-3-1 11:05
你是不是在定时器里干活了, 定时器只需进行扫描, 计算留在主程序。

定时器1ms中断一次,用来计算时间,有很多外设要根据时间控制
回复

使用道具 举报

0

主题

4

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2019-8-29
在线时间
15 小时
发表于 2021-3-1 13:40:06 | 显示全部楼层
建议参考9#方法,既然定时器中断不能停,那就给温度做校验,被打断时序的数据丢掉
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2021-3-1 14:06:09 | 显示全部楼层
精简中断程序即可。时序没有你想象的要求那么严格。
正常情况下中断程序运行时间都是微秒级别的。几十个微秒就就退出中断了。
长时间运行中断服务程序。都是不可取的。
关键的时序,可以临时关闭中断。
回复

使用道具 举报

34

主题

252

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
473
金钱
473
注册时间
2020-5-11
在线时间
217 小时
 楼主| 发表于 2021-3-1 15:17:06 | 显示全部楼层
操作系统 发表于 2021-3-1 14:06
精简中断程序即可。时序没有你想象的要求那么严格。
正常情况下中断程序运行时间都是微秒级别的。几十个微 ...

谢谢您的回复,我现在目前中断是1ms中断一次,但是在实验的过程中中断服务程序运行时间超过2us,DS18B20的数值就会出现跳变的问题,在产品中出现这种问题,实在是不行的,现在暂时的措施只能在关键的地方关中断处理了,后面干脆变更成热敏电阻测温算了
回复

使用道具 举报

34

主题

252

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
473
金钱
473
注册时间
2020-5-11
在线时间
217 小时
 楼主| 发表于 2021-3-1 15:17:47 | 显示全部楼层
SHRS23 发表于 2021-3-1 13:40
建议参考9#方法,既然定时器中断不能停,那就给温度做校验,被打断时序的数据丢掉

可以试试,谢谢回复
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 19:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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