MBUS主机端简化版电路设计

本文详细介绍了MBus通信机制,这种机制在主从式通信系统中用于从机数据采集和传输。MBus总线是半双工的,由主机、从机和两线制总线构成。发送时,集中器通过电压变化发送36V(逻辑1)和24V(逻辑0);接收时,从机利用电流变化,1.5mA表示逻辑1,增加11-20mA表示逻辑0。此外,文章还涵盖了接收使能、过载检测以及简化电路的设计思路,强调了电路设计中的注意事项和限制条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 Mbus接收发送机制

对于主从式通信系统,因从机之间不能直接交换信息,只能通过主机来转发,此时采用MBus可以实现对从机的相关数据进行采集,并传递至集中器,然后再传递至总站。它由主机从机和两线制总线组成。MBus总线是一种半双工通信总线,其可以通过集中器实现给终端仪表远程供电。

1.1发送

由集中器向终端仪表传输的信号采用电压值的变化来表示, 即集中器向终端仪表发送的数据码流是一种电压脉冲序列, 用 36 V 表示逻辑“1”, 用24V表示逻辑 “0” 。在稳态时,线路将保持“1” 状态。

1.2接收

从终端仪表向集中器传输的信号采用电流值的变化来表示, 即由终端仪表向集中器发送的数据码流是一种电流脉冲序列, 通常用1. 5 mA的电流值表示逻辑 “1” ,当传输 “0” 时,由终端仪表控制可使电流值增加11~20 mA。在稳态时, 线路上的值为持续的 “1” 状态。当终端仪表接收信号时, 其电流应处于稳态 “1” 。

2 原理图

原理图

2.1发送

通过MBUS_TX信号的电平高低来调节U2 LM317 ADJ电阻,从而将MBUS_TX信号转化为36V&24V电压变化。

2.2接收

从机信号为1时,环路电流处于稳态,MBUS+点的电压不变,U35A的IN+>IN-,输出高电平,经过电平转换电路转换为TTL电平的MBUS_RX。
从机信号为0时,增加11-20mA的脉冲电流,环路电流增大,流经采样电路(R848、R846)的电流增大,MBUS+点的电压减小。此时,U35A的IN+电压减小,由于U35A的IN-存在稳压电容C11,以及防反流二极管D78,IN-的电压仍维持原来较高的电压,所以IN+<IN-,U35A输出低电平,经过电平转换电路转换为TTL电平的MBUS_RX。

2.3接收使能

由于MBUS主机发送信号时,LM317电压会在36V和24V间跳变,导致MBUS+点的电压也会发生跳变,同样会导致U35A的输出发生变化,即MBUS_TX发生时,MBUS_RX也会接收到发送的数据,因此增加了U33,当MBUS_RX发送数据时,通过MBUS_RX_EN来关掉U33的电源供电,使MBUS_RX始终处于高电平。当MBUS_TX发送完毕后,MBUS_RX_EN使能U33电源供电,MBUS_RX开始接收U35A的信号。以上措施可以避免MBUS主机发送信号时会收到发送信号的问题。

2.4过载检测

通过检测采样电路(R848、R846)两端的电压差,即可得知环路电流,当电流超过阈值时报警或切断电路。
原理图中,当环路电流小于372mA时,MBUS+电压>MBUS+0,U35B的IN+>IN-,输出高电平。当环路电流大于372mA时,U35B的IN+<IN-,输出低电平。通过检测U35B的输出即可检测环路电流是否过载。

后记:

本电路去掉了MBUS主机分流电路,架构简单,成本更低。但去掉分流电路后环路供电电流全部流经采样电阻,所以总电流不宜过大,导致所带的从机不易过多。以电路中的采样电阻阻值为例,最大从机数量建议不要超过128台。
如想增加从机数量,可以将采样电阻减小。坏处就是采样电阻越小,电压比较器处的分压输入就需要越接近,对电源质量要求越高,抗干扰也越差。
上面的电路考虑器件通用性和采购周期,设计的比较复杂。可以进一步简化为下面的电路

在这里插入图片描述

在这里插入图片描述
这个电路未做验证,仅供参考。

/*
这是一段测试代码
*/
//为了防止系统判断推荐受影响而添加

```c
#example configuration for a dialup connection authenticated with PAP or CHAP
#
# This is the default configuration used by pon(1) and poff(1).
# See the manual page pppd(8) for information on all the options.
# MUST CHANGE: replace myusername@realm with the PPP login name given to
# your by your provider.
# There should be a matching entry with the password in /etc/ppp/pap-secrets
# and/or /etc/ppp/chap-secrets.
#user "myusername@realm"
# Serial device to which the modem is connected.
# ttyname 串口端口,若非以”/“开头,则会自动补充”/dev/
/dev/ttyS6
#/dev/ttyUSB2
#NO硬件流控
nocrtscts
# 前台运行
nodetach
# speed 串口波特率
# Speed of the serial line.
#115200
9600


### 单片机间通讯识别方法及协议 #### 自定义数据通信协议 为了实现单片机之间的有效通信,通常会设计一种自定义的数据通信协议。这种协议规定了发送方和接收方如何交换信息以及处理这些信息的方式[^1]。 对于上位机与下位机间的通信而言,在构建通信程序时可以采用如下方式: - **帧结构**:每一帧数据包应该包含起始标志、长度字段、命令码、参数列表以及校验码等部分。 起始标志用于通知接收者新消息的到来;长度字段指明后续跟随的有效载荷大小以便于解析;命令码用来区分不同类型的请求或响应动作;而参数则携带具体的操作对象及其属性值等内容;最后通过计算整个报文除开校验域外所有字节值得到的结果作为校验依据以确保传输准确性。 - **握手过程**:在正式传递业务指令之前往往还需要经历一个简单的握手流程来确认双方状态正常并且已经准备好参与对话环节。这可能涉及到了一些特殊的控制字符或者是特定格式的消息交互模式。 ```c // 定义一帧完整的数据包结构体 typedef struct { unsigned char startFlag; // 起始标记 unsigned short dataLength; // 数据长度 unsigned char commandCode; // 命令代码 unsigned char parameters[]; // 参数数组 } DataPacket; // 发送函数简化版示意 void sendCommand(DataPacket *packet) { serialWrite(packet->startFlag); serialWrite((unsigned char*)&packet->dataLength, sizeof(unsigned short)); serialWrite(packet->commandCode); serialWrite(packet->parameters, packet->dataLength - sizeof(unsigned short) - 1); // 减去前面占用的空间 } ``` #### Modbus RTU 通讯协议 另一种常见的工业自动化领域内的解决方案就是基于Modbus RTU (Remote Terminal Unit) 的规约体系。该方案利用RS-485 或 RS-232 接口完成物理层面上的连接工作,并且遵循一套严格的编码规则来进行逻辑层面的信息交流活动[^2]。 在这种情况下,主站(通常是PC或其他高级别的控制系统)向从站发起查询请求时需按照既定格式组装好相应的询问语句并通过串行线路将其广播出去等待回应。一旦目标节点接收到匹配自己地址编号的通知之后就会依照预设好的算法执行相应任务并将结果反馈回去给对方知晓。 ```python import minimalmodbus as mbus instrument = mbus.Instrument('/dev/ttyUSB0', slaveaddress=1) temperature = instrument.read_register(registeraddress=289, functioncode=3) print(f'Temperature is {temperature}') ``` #### IIC(SMBUS) 总线协议 I²C(Inter-Integrated Circuit),即内部集成电路总线也是一种广泛应用于嵌入式系统的低速率同步串行接口技术之一。它只需要两根导线就能实现多台设备间的资源共享和服务调用功能[^3]。 当主机想要访问某个远程传感器芯片上的寄存器资源时,则先要发出启动条件紧接着跟随着被寻址单元的身份标识符连同读/写指示位一起送出。如果一切顺利的话那么接下来就可以连续不断地获取所需测量数值直到全部采集完毕为止。 ```cpp Wire.beginTransmission(deviceAddress); Wire.write(memoryRegisterStartAddr); Wire.endTransmission(false); Wire.requestFrom(deviceAddress, numberOfBytesToRead, true); while(Wire.available()) { byte receivedData = Wire.read(); Serial.println(receivedData, HEX); } ```
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tech-Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值