OpenEdv-开源电子网

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

18b20在电磁干扰环境中如何能稳定使用

[复制链接]

37

主题

174

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2018-2-9
在线时间
137 小时
跳转到指定楼层
#
发表于 2025-8-8 23:29:24 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
50金钱
本帖最后由 ccciron 于 2025-8-9 10:59 编辑

项目中使用18b20去测水温,期间发现有种种干扰,但板子已经画好了,硬着头皮用吧,使用了屏蔽线,读数程序中加上了crc验证、滤波等等。
但还是发生了令人费解的问题:
有两个水温传感器,一个进水一个出水。管道中测水温的位置如图所示,现在状况是,传感器放在空气中的时候读数是稳定且正常的,一放到管道中的测温位置,读数就乱跳。拔出来就正常。。。
猜想:管道振动太强导致故障?  管道漏电导致故障?
实在没招了,大神们支支招吧Orz

左边是板子,右边是变频器,离得比较近。

传感器就在这个位置测温。

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

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2020-8-28
在线时间
38 小时
9#
发表于 4 天前 | 只看该作者
工况恶劣的情况下建议别用18b20,我们强磁工况,现在已经用回ntc了,越简单越皮实
回复

使用道具 举报

37

主题

174

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2018-2-9
在线时间
137 小时
8#
 楼主| 发表于 4 天前 | 只看该作者
你的蓝朋友 发表于 2025-8-12 11:26
DS18B20和PCB距离太长就不能用了

线长度不到2米,用淘宝板子没有问题
回复

使用道具 举报

37

主题

174

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2018-2-9
在线时间
137 小时
7#
 楼主| 发表于 4 天前 | 只看该作者
xuande 发表于 2025-8-12 11:58
你要检查一下,CRC 究竟起作用没有。
如果起作用,只要通过校验,那数据一定没问题。
我怀疑你 CRC 程序 ...

好的,我会继续测试,另外我现在有个怀疑是不是我检测传感器掉线的逻辑又问题,我之前是读取温度前检测一次没得到回应,就报错,我现在增加了一点容错率,一次没检测到应答,会再检测2次,三次都没有应答才判定传感器丢失,不知道有没有效果,等再测试看看
回复

使用道具 举报

58

主题

6296

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11600
金钱
11600
注册时间
2014-4-1
在线时间
1326 小时
6#
发表于 4 天前 | 只看该作者
你要检查一下,CRC 究竟起作用没有。
如果起作用,只要通过校验,那数据一定没问题。
我怀疑你 CRC 程序根本没有真正起作用,虚晃一枪,自己骗自己。

另外,既然网购的板子能正常,那就好办了。
回复

使用道具 举报

13

主题

236

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6327
金钱
6327
注册时间
2016-12-19
在线时间
819 小时
5#
发表于 4 天前 | 只看该作者
DS18B20和PCB距离太长就不能用了
回复

使用道具 举报

37

主题

174

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2018-2-9
在线时间
137 小时
4#
 楼主| 发表于 4 天前 | 只看该作者
又买了个淘宝的板子做对比,同样环境下,淘宝板子读数很稳定,甚至没用屏蔽线,板子上也看不到什么滤波电路,费解,难道真是我程序问题?
回复

使用道具 举报

37

主题

174

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2018-2-9
在线时间
137 小时
3#
 楼主| 发表于 4 天前 | 只看该作者
xuande 发表于 2025-8-11 11:41
按说 CRC 是最有效的滤波方法。
你的 CRC 到底能不能正常运转?

/**
* @brief DS18B20专用CRC-8校验(逆序位处理)
* @param data 待校验数据指针
* @param len 数据长度
* @return CRC-8校验值(若与第9字节匹配则返回0)
*/
uint8_t DS18B20_CRC8(const uint8_t *data, uint8_t len) {
    uint8_t crc = 0x00;
    for (uint8_t i = 0; i < len; i++) {
        crc ^= data;
        for (uint8_t j = 0; j < 8; j++) {
            if (crc & 0x01) crc = (crc >> 1) ^ 0x8C;  // 多项式0x8C(0x31的反转)
            else crc >>= 1;
        }
    }
    return crc;
}


------------------------------------------------------------------------
    // 读取暂存器(9字节)
    DS18B20_Reset(GPIOx, GPIO_Pin);
    DS18B20_WriteByte(GPIOx, GPIO_Pin, 0xCC);
    DS18B20_WriteByte(GPIOx, GPIO_Pin, 0xBE);  // 读取暂存器
    for (uint8_t i = 0; i < 9; i++) {
        scratchpad = DS18B20_ReadByte(GPIOx, GPIO_Pin);
    }
        //        eMBEnable();   // 重新开启中断

    // CRC校验(前8字节计算值应与第9字节匹配)
    if (DS18B20_CRC8(scratchpad, 8) != scratchpad[8]) {
        return lasttemp;  //
    }
这是我的校验函数和如何使用的
回复

使用道具 举报

58

主题

6296

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11600
金钱
11600
注册时间
2014-4-1
在线时间
1326 小时
2#
发表于 5 天前 | 只看该作者

按说 CRC 是最有效的滤波方法。
你的 CRC 到底能不能正常运转?

回复

使用道具 举报

13

主题

3429

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8768
金钱
8768
注册时间
2020-5-11
在线时间
4300 小时
楼主
发表于 5 天前 | 只看该作者
示波器看看波形、减小上拉电阻、加电容、加滤波、加隔离。
解决不了就换方案,比如热电偶、PT100、NTC。

专治疑难杂症
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-16 20:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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