1 基于ESP32的工业RS485网关项目-德赢Vwin官网 网
×

基于ESP32的工业RS485网关项目

消耗积分:5 | 格式:zip | 大小:0.03 MB | 2022-08-05

贾伟刚

分享资料个

PCB图如下:
poYBAGLM3hWAVvxCAAHiDnBbYe8617.png
pYYBAGLM3hmAFFa1AAB0pbyeddg431.jpg
poYBAGLM3huACUYVAACLruVzLpM144.jpg

描述

工业 RS485 物联网网关

欢迎来到我基于 ESP32 的工业 RS485 网关项目。如果您从未听说过任何工业网关,这个项目将是令人兴奋的。

如果您想知道这个网关是什么,那么请留下来,我们很快就会探索。

什么是工业网关?

简而言之,工业网关主要需要实现这些目标。

它应该维持工业环境。

该设备应能够与其他工业设备通信,例如 VFD、电能表、多功能仪表、逆变器等。

最重要的是它应该与互联网对话。

这就是你现在所需要的一切我认为应该清楚的是,该设备充当互联网和其他工业设备之间的网关。

为了与不同的工业设备进行通信,有不同的工业协议,例如 Profibus、CAN、Profinet、AI 总线、内部总线等等。

但是在这个项目中,我们将使用一个名为 Modbus 的著名协议,它适用于 RS485 串行总线。

我们的设备上有一个 RS485 端口,因此我们可以使用 Modbus RTU、Modbus ASCII,并且通过 WiFi 和以太网,我们可以使用 Modbus TCP IP。

要了解有关 Modbus 的更多信息,您可以查看Simply Modbus ,他们已经涵盖了所有内容。

主要特征:

它支持高达 6 - 35Vdc 的工业电压水平。

用于互联网连接的板载Wi-Fi以太网。

以太网100Mb接口。

ESP32-WROOM-32D WiFi/BLE 模块。(双核能力)。

USB 连接器,用于使用 Arduino IDE轻松编程ESP32 。

半双工RS485通讯

用于存储数据的板载EEPROM IC。

RS485 的自动数据流控制。

两个可编程 LED 指示。(我将它们用作 Tx 和 Rx LED)

可选择的 RS485 收发器电压电平。(5v & 3.3v)

带有 DIN 安装和紧凑尺寸 PCB 的工业外壳。

这个项目可以做什么?

工业电能表监控

大多数工业能源公用事业仪表都提供 RS485 通信。因此,我们可以从电能表中读取数据,例如整体工业单位消耗、功率因数、频率、消耗的总有功或无功功率等。

pYYBAGLM3jOAbs5AAACTrOiQiSA40.jpeg

使用设备读取数据后,我们可以使用 MQTT 或任何其他协议轻松将其发送到云端。您可以将其显示在许多开源应用程序中,例如MQTT 仪表板、 Blynk ,或者您可以使用Adafruit IO 或者您可以构建自己的仪表板。

监控太阳能逆变器

如今,所有太阳能逆变器都具有 RS485 功能,其中一些逆变器还提供诸如通过 RS485 进行开关操作等功能。

poYBAGLM3jaAXmqYAACvHgRIpc450.jpeg

我们的 RS485 网关将直接与此类逆变器连接并与逆变器通信,我们可以轻松获取逆变器的实时状态,例如 PV 电压、所有 MPPT 电压水平、产生的单位、每相电流输出以及不同的错误。此外,如果您的逆变器支持控制,您可以使用这个小型网关远程打开或关闭逆变器。

实时工业温度和湿度值

在许多工业领域,他们安装了温度和湿度传感器,用于将区域的整体温度控制在设定值。此类传感器还具有 RS485 通信功能,我们可以通过此网关在手掌中获取该传感器的实时数据。

我们还可以对它进行编程,例如温度上升到 65°C 以上,然后通过电子邮件、短信或应用程序等发送警报。

监测气压和流量

气动系统广泛用于工业中以产生受控的机械运动或力。而气动系统以空气运行,主要考虑流量和压力两个参数来计算耗气量或空气损失计算。

pYYBAGLM3jiAZqr4AACTpNXHIJk00.jpeg

上面是气动压力和流量指示器,并有一个 RS485 端口。我们现在可以使用 RS485 网关轻松计算和非常精确地监控。

监控 MFM(多功能仪表)

多功能仪表用作工业面板中的子仪表。MFM 用于零件,就像他们为行业的每个部分/机器部分安装此类仪表一样。这样他们就可以观察特定的机器消耗、效率等。以下是使用 IoT RS485 网关将 MFM 仪表实时馈送到移动设备。

这些仪表提供了对行业整体运作的完美洞察。因为它们可以测量所有重要的电气参数,例如三相电压和电流、有功和无功功率、功率因数、频率、千瓦时等。

我见过有超过 120 多个这样的小仪表的行业。这是一个装满多功能仪表的工业电气面板室,他们有5个这样的大面板室。

因此,在这种情况下安装 RS485 网关是最可靠的,因为它们体积小、成本效益高、准确,并且可以提供有关工业电网的大量有用信息。

如果您想监视或控制此类 RS485 设备,那么您将需要要监视或控制的从站的 Modbus 寄存器映射数据。这很可能会在 RS485 通信端口的从设备的应用说明中给出。

作为多功能仪表的起点,您可以查看Aggsoft网站,他们列出了来自不同公司的许多不同 MFM,并为您准备了 Modbus 注册表。

除此之外,我还使用此网关通过 RS485 控制了 VFD(交流驱动器)。

正如我们所见,这种小型设备在工业用例中的可能性是无限的。

探索 PCB 组件

DC-DC 降压转换器

由于印度的工业标准电压等级为 12Vdc 和 24Vdc,因为大多数自动化设备(如 HMI、PLC 等)都在此电压等级上工作。

因此,我们的设备需要在这样的电压水平下完美运行,才能满足行业要求。

为了高效且经济高效地完成此操作,我选择在板上添加一个 DC-DC 降压转换器作为初级电压转换。

我在项目中使用了转换器名称 XL1509。

XL1509 主要有 3 种不同的型号

3.3v输出电压(XL1509-3.3)

5v输出电压(XL1509-5)

可调输出电压(XL1509-ADJ)

该转换器可以提供我们不需要的 2A 恒流输出。

它以 150KHz 的开关频率工作。

就我而言,我将高压直流电源转换为 5v 作为主要转换。因此,我为此使用XL1509-5变体。

poYBAGLM3jqAXkUZAABVYx7L_oM006.png

它需要很少的外部组件,例如

输入输出大容量滤波电容(电石电容 470uF - 330uF)

一个电感器(47uH - 68uH)

一个肖特基二极管(SS34)

这就是转换器所需的一切,并且要从中获得适当的结果,需要对电感器和电容器值进行微调。

PCB 布局在此类转换器中起着至关重要的作用,例如到转换器 IC 的反馈路径应短且远离高频开关,应牢记适当的散热等等。

二次电压转换

我们仍然需要 3.3v 电平来运行我们的 ESP32。因此我使用了ESP32开发板具有AMS1117-3.3的著名LDO

它还具有不同的输出电压和电流变体。我在这个项目中使用了 3.3v 和 1A 输出变体。

USB接口

为了尽量降低整体 BOM 价格,我选择 CH340 作为 USB 转 TTL 转换器,因为 CP2102 价格有点高,而且我有足够的空间放置 CH340。

主要有两种类型的 CH340 IC,即著名的 CH340G 和 CH340C,它们具有相同的封装和功能。唯一不同的是CH340C不需要外接晶振。

而且我添加了 ESP32 自动复位电路,因此使用 Arduino IDE 对设备进行编程非常简单。

并且为了稳固的连接,我选择了 USB B 型,因为它与微型 USB 或其他类型相比,与价格相比,它很大并且具有稳定的适合性。

以太网接口

对于以太网功能,我使用了 LAN8710A 芯片,也称为单芯片以太网物理层收发器 (PHY)。

该 IC 遵循 10/100BASE-T 标准,根据数据表,它可以达到 100mbps 的数据速度(尚未以最大速度对其进行测试,因为如果有人以最大速度使用它,我不需要它,请在下面留下评论)

此外,该 IC 具有用于以太网连接器的内置两个状态 LED 输出。

使用它

自动协商启用模式

RMII 配置

SMI 地址:0x00

对于以太网连接器,我使用的是 带有磁性的 Hanrun HR911105A 连接器。

RS485接口

RS485 接口使用差分电压进行无差错通信。因此,我们需要使用 RS485 收发器 IC,将普通的 TTL 信号转换为 RS485 差分电压信号。

入围两款著名收发IC

MAX485(工作在 5v 输入电源)

MAX3485(工作在3.3V输入电源)

最初,我使用 MAX485 并不担心 ESP32 GPIO 处于 3.3v 逻辑电平,幸运的是它的工作原理很迷人,并且没有 ESP32 损坏,它们仍然工作正常。

但过了一会儿,我发现了支持3.3v输入电源的MAX3485,现在我不用担心了。(现在我有一个 SMD 跳线 JP2 用于选择此 RS485 收发器的输入电压)

此外,我为 RS485 收发器的自动数据流控制使用了一个简单的晶体管逻辑。如果您需要使用软件控制流程,则需要移除组件 R4、R5 和 T2。现在将 JP1 跳线短接,流量控制引脚将连接到 ESP32 的 GPIO2。

RS485用于远距离有线通信,我个人测试过1Km的无差错通信,波特率为9600。

我使用了Belden 公司 (3105A)的标准双绞线和屏蔽RS485 通信线

poYBAGLM3j6AV2N-AACXVQ1vDMg98.jpeg

使用此 RS485 收发器 IC,我们可以读取/写入多达 32 个从设备。所有从机都需要连接在菊花链中以进行正确通信,并且所有从机都应具有唯一的从机 IC,以避免主从机之间的通信冲突。

如果通讯距离较近,则需要 120ohm 的终端电阻 Rt,对于长距离,可以省略。

pYYBAGLM3kCAczUJAABTCScBLPQ152.jpg

RS485 总线保护

为了保护 RS485 总线,我使用了小型 SM712 系列 600W 非对称 TVS 二极管阵列。SM712 专门设计用于保护具有不对称工作电压(-7V 至 12V)的 RS-485 应用免受静电放电 (ESD)、电快速瞬变 (EFT) 和雷电感应浪涌造成的损坏。

根据数据表,它提供以下保护 -

ESD,IEC 61000-4-2,±30kV 接触,±30kV 空气

EFT、IEC 61000-4-4、50A (5/50ns)

闪电,IEC 61000-4-5 第 2 版,19A (tP=8/20μs) 

如果需要更多的防雷保护,则可以使用 LittelFuse 的 SG6和 SG7 SMD 气体放电管。

板载存储

如果有一段时间没有互联网可用并且监控数据很重要,那么我们有板载 EEPROM 存储。

我使用了 Microchip 的AT24C512 EEPROM IC ,它为我们提供了额外的 65536 字节存储内存。

电气外壳

对于工业用途,外壳还应满足工业要求,例如

它应该具有 DIN 导轨安装功能。

耐高温能力。(-40 °C ... 80 °C)

适当的 IP 等级。(IP20)

适当的通风

因此,经过大量搜索,我找到了我正在寻找的项目的完美外壳。

我在这个项目中使用的外壳来自Phoenix Contact 。他们有大量的工业级外壳可供选择。

对于基础,我使用2200474和顶部,我使用2201770。

这是带有电气外壳的整个项目的 3D 动画。

想玩 3D 模型然后试试这个。

未来范围

将来我想在这个项目中加入的东西很少。

添加隔离式以太网供电功能 (POE)。

添加隔离式 DC-DC 降压转换器,为设备提供更多保护。(但如果我们使用适当的 SMPS,则不需要)。

添加额外的 RS485 端口。因为一条总线最多只能支持 32 个设备。

当前版本在 RS485 端口中有一个 120 欧姆的终端电阻。需要时希望添加一个开关或跳线来打开和关闭终端。

添加几个高压直流 IO 引脚。

添加一个板载继电器,可以对其进行编程以在故障条件下打开重负载,例如交流警报。

配置 Wi-Fi 凭据

我使用 ESP touch (SmartConfig) 在 ESP32 中轻松配置 WiFi 凭据。

一旦配置好,我将它们存储在 ESP32 非易失性存储器中,因此无需重新配置。

为此,我有一个在 ESP32 中使用 SmartConfig 的分步指南,请查看。

此外,您可以查看我的网站TechTONions.com了解更多此类项目

画廊

还有几张要展示的照片,现在我已经说不出话了,所以在这里添加它们很有趣。

pYYBAGLM3kKALuGhAABQsab5N4o602.png

poYBAGLM3kSAW6bNAADElJDDQ84396.png

pYYBAGLM3keAGhIbAAFAojSSnt4333.jpg

poYBAGLM3kuAKFKQAAEeRby_-y8845.jpg

代码

https://github.com/TechTONions/RS485-master-liberary

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"//www.hzfubeitong.com/m/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="https://m.elecfans.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'基于ESP32的工业RS485网关项目',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.hzfubeitong.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);