多CPU单线通信原理与实现
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_419089.JPG原理图 (原文件名:多CPU单线通信原理图.JPG)
发现所有已发帖子都丢了,用户也注销了,还是重新注册回来的。下面转正题。
所谓单线通信,其实还是需要两根导线,否则形不成电流回路。这里的意思是,共用CPU电源线完成信号的传递,而不需要单独的信号线。
两根线,既要给CPU供电,又要传递信号,供电电压需要稳定,信号电压需要交变,看起来是矛盾的。
解决方法无非是折中:供电电压稳定性做点牺牲,让信号调制上来,再加一个低通滤波器将其消除;信号的调制方法做点让步,尽量减少对
电源的影响,借用电源通道传输,再加一个高通滤波器将信号提取出来。在电力线上传输信号已经是成熟技术,在此我不想讨论,我只想做一
个简单的方案,能够使CPU之间以不太低的速率可靠传输数据即可。
方案如图所示。
1. DC是供电电源,L1是电感,GND和COM是公用线,既给CPU供电,又供CPU间传递信号。
2. C1是滤波电容,储存电能给CPU供电。
3. D2有两个作用,一是截止作用:当COM线上的电位由高变低时,C1上的电能不会回灌到COM;二是导通作用:当COM线上的电位由低变高时,
L1上会感应出高电压,导致COM线电位高于C1电位,D2起到泄压作用。
4. D1的作用是防止多个CPU 同时发送数据时造成电流短路。
原理:
没有数据发送时,COM线高电平;有CPU发送数据时,COM线电平随发送CPU的Tx信号高低变化,因为所有Rx(包括发送CPU的)都连在一起,因
此都可以接收到该数据,这样就完成了数据的发送与接收。
通信协议可以自定义,我提出两个例子。
协议1:主从协议
只有一个CPU做主,其余都是从,所有通信都由主CPU发起,其余只能被动应答。通信过程分三步:1)主CPU发送命令,2)从CPU回应数据,3
)主CPU回应ACK。或,1)主CPU发送命令,2)主CPU发送数据,3)从CPU回应ACK。
命令格式:2字节同步码 + 1字节标记码 + 1字节从CPU地址码 + 1字节命令码 + 2字节参数码 + 1字节CRC校验码
数据格式:2字节同步码 + 1字节标记码 + 1字节数据长度码 + N 字节数据 + 1字节CRC校验码
ACK格式:2字节同步码 + 1字节标记码 + 1字节回应码 (0x55表示接收正确,否则失败) + 1字节CRC校验码
侦错与纠错机制:靠同步码进行帧同步,靠CRC校验码进行帧检错,接收方发现错误丢弃错误帧,发送方等待数据超时重发,连续重发3次失败
放弃发送。
协议2:竞争协议
借用以太网的机制,每个CPU都是平等地位,都可以随时发送数据。步骤如下,当任何一个CPU想发送数据时,
1)探听COM线1ms时间,之内若无数据接收,则转2),否则继续探听。
2)向COM线发送数据,同时接收回来,一旦发现接收数据和发送数据不相同,则转3),否则一直发送数据直到数据发送完毕,返回。
3)停止发送,等待一个随机时间 N ms,转1)。
发送数据格式:2字节同步码 + 1字节源CPU地址码 + 1字节目的CPU地址码 + 1字节数据长度码 + N 字节数据 + 1字节CRC校验码
侦错与纠错机制:靠同步码进行帧同步,靠CRC校验码进行帧检错,靠高层协议进行纠错,高层协议略。
疑问解答:发送数据时Tx变成低电平,电源岂不对地短路啦?
如果不接电感L1,COM又接地,确实会发生电源对地短路,但是接了L1后就不会了,COM接地相当于此时电源只接了L1一个负载,电源消耗的
电能随着L1电流增加变成了储存在L1中的磁能,当COM又变回高电平时,这部分磁场能量会随着D2的泄压作用转移到电容C1中,变成电场能量,
最终被CPU消耗掉,是不是和升压DC-DC有点像?因此可以预期在通信期间,CPU供电电压(即C1电压)会有所升高。
疑问解答:为何选择串口(Tx、Rx)作为数据收发口?
从原理上看,调制信号占空比应该越大越好,占空比越大,每个周期内低电平时间相对越短,因DC-DC效应对CPU电源电压影响就越小;凡事
不能走极端,占空比也不能太小,否则抗干扰能力就差了。
另外,通信速率也不宜太低,速率太低,造成发送1bit时COM线电平被拉低时间太长,L1电流过大,会造成L1储能饱和,电源效率降低。
因此,使用串口不是最好选择,串口信号调制占空比为‘1’100%可以,‘0’0%太小了;串口速率普遍较低,最高才115Kbps。但是,因为单
片机上一般不集成有专门适用于我这个方案的硬件收发器,软件模拟或外挂CPLD又太麻烦,所以干脆用串口算了,硬件简单,成本还低,软件
也不复杂,直接操作串口就行了。 强帖
看来电源线传输信号不是不可能啊
LZ这么讲就明白了
值得研究的技术 mark 楼主强人也! 做个实验了吗? mark 可以查看一个HOMEPLUG的协议。。。电源线可以传到85Mps MARK MARK 我初步做过实验,L1取 100uH - 1mH,D1 D2 取1N5819, C1 取220uF 电解电容,速率在 100Kbps - 1Mbps,示波器看 COM 线波形良好。更深一步的编程实验还没做。 很不错,学习了 诚如 6 楼所说,电力 modem 是很成熟的技术了,可以借鉴一下。但又不想把事情搞复杂,所以才有这个方案,如果谁感兴趣可以做一下实验,并把结果反馈共享。 二线对讲机也是利用电源线传输声音信号的。 二线对讲机和电话线一样,既供电,又传递模拟声音信号,若传递数字信号可以先调制再解调,语音信号的带宽(300Hz - 3400Hz)决定调制信号的最大波特率为 56Kbps,就是我们早期的拨号上网速率。
这个方案没有对信号进行调制,线缆带宽也没有限制,线缆特性阻抗也没有匹配,如果进一步完善有很多工作要做,在此仅起一个抛砖引玉的作用。 关注这个主题,我接触过欧洲的EIB协议,并且使用过法国海格的eib产品,它就是用双线,进行电源与信号的供应与传送 不错,值得学习 不错,有新意.
估计通信不稳定, 电感余振,会是个问题, 我们有款产品基本上就是类似的原理,不是用的电感而是电阻,外围也要增加很多 mark 有创意,但觉得用1-wire类似的通信更可靠些。 可以看看电视机的天线放大器的供电和信号传输!
一根屏蔽线就可以传上G的频率信号!
还是模拟信号啊!
要是数字信号基本不用考虑损耗!
还有双线可以实现双向传输的!
我是修家电的!天线放大器做过一些!
还有那个供电的可以用稳压!
有空大家来考虑一下!
天线架放大器的电路原理就是一个空心线圈电感隔离信号来提取用电!
然后用一个电容接出信号!
下面是一个自制电视天线放大器的帖子链接!
http://www.dzdiy.com/html/200712/31/20071231065351.htm 记号 mark 类似的 达拉斯 1-wire 。。。 冲突怎么办?如果用硬件通讯的方法,那么只有一个字节发送完成后才可以检查到,这时候所有的发送数据都会错的。硬件不能做到按位检查。 【25楼】 ssyniuej
积分:1410
派别:
等级:------
来自:山东济宁
冲突怎么办?如果用硬件通讯的方法,那么只有一个字节发送完成后才可以检查到,这时候所有的发送数据都会错的。硬件不能做到按位检查。
__________________________
冲突了只是数据会乱,可以通过协议解决,不会烧电路。 厉害,以后试试这种总线用到机器里。 focus 总线报警主机好像就采用此方式,好像工作电流不大。 加一楼 加一楼 加一楼 加一楼 支持下 mark MAKR 看看 mark 记号记号! 在这种通讯模式下,一台机器出错,所有机器全死
个人认为,这并不是一种安全和稳定的通讯方式,只在极少数情况下有意义 mark. mark mark 用CAN总线的原理接线能实现硬件防冲突 mark jh mark MARK 好办法 记号 顶一下,先 消防报警系统中供电和数据就是共线啊,就两根线搞定的!稳定也不是问题啊,人命关天嘛。 mark 【15楼】 gzrascal
终于看到有接触过EIB的兄弟了。。。呵呵
------
LZ的这种多机通讯方式,在协议制定上一定要注意信号碰撞,和单个通讯模块故障导致整个系统崩溃。参考相关EIB的技术,在这两方面是做得非常好的。。。
另外,使用直流电+信号线的这种方式,不仅仅是LZ所想,EIB、大金空调等很多厂商都有使用这种通讯方式的。。。可这项技术10多年前就有了。。。
有兴趣我们大家一起研究一下,制定一个相关可实施的协议或标准。。。 有意思,有具体的例子参考一下就好了。 楼顶图是个很不错的构思,但也正如39楼水猫所说,危险潜伏其中。
打个比方,一组潜水员被一根共用的氧气管连接起来,他们之间的通信手段就靠捏几下氧气管传递信息。如果其中有个人出了意外神志不清,他在昏迷中老捏着氧气管不放手的话,就把别人也憋死了。
不过其实是有改进办法的,比如各节点的TX不要直接短路电源,改用串电容用交流调制的办法通信,就安全了。 不错,供电很象电话总机的模式 串电阻电容很简单的 mark 支持,学习了,理论上是可以的!
实际应该也是可以的,呵呵!!! 用过CMBUS-CMT100芯片,可以实现跟lz一样的功能,不过成本要高一些 MARK 受教了!!感谢楼主!!!! 加一楼!
MARK! MARK! 很好! 好想法 值得一试 多谢楼主! 很好的想法,有空可以研究下。 呵呵
【15楼】 gzrascal
终于看到有接触过EIB的兄弟了。。。呵呵
------
LZ的这种多机通讯方式,在协议制定上一定要注意信号碰撞,和单个通讯模块故障导致整个系统崩溃。参考相关EIB的技术,在这两方面是做得非常好的。。。
另外,使用直流电+信号线的这种方式,不仅仅是LZ所想,EIB、大金空调等很多厂商都有使用这种通讯方式的。。。可这项技术10多年前就有了。。。
有兴趣我们大家一起研究一下,制定一个相关可实施的协议或标准。。。
目前国内搞基于EIB通讯产品的兄弟太少啦。这个贴我关注好久拉!
海格的总线电源 ,驱动器,调光模块都有接触过,他们的信号调整解调电路都是分立元件搭的。
西门子的信号调整解调电路是用的专用芯片。
不过都是在30V的总线电源上叠加交流信号。
这类产品都是用的低功耗的单片机,海格用的是TI 的M430低功耗系列。 想上传一个EIB协议中文版 现在我还没有审核通过呢
EIB 产品就是多主 竞争协议
有几个优先等级 TO 【70楼】 Aaronli
是的,搞EIB的兄弟是太少了。。。。就我知道的在上海,有过培训认证的,能独立完成整个系统调试的,也就那二十几个人。
你也用过海格的东西吗?我是从西门子Install BUS开始接触的,随后ABB的i bus、海格的tebis、莫顿、威琅、WDL、吉萊,伟麦、永诺等等多少都有接触过,最近在看becker的DD,起始都差不多。。。呵呵
EIB是个标准协议,全称翻译过来就是欧洲安装总线,而且已经成为了我国的一个暂行标准。。。唉
西门子发起的时候已经有个KNX系统(欧洲标准的),貌似是弥补BA系统低端的应用,不过用来做规模大点的应用也是可以的。上海的烟草大厦,浦东国际机场,世博场馆,等都有应用。
现在我主要是用EIB系统来完成一些别墅和豪宅的家居智能化系统。当然,还同时要整合安防,监控,音视频一体化,空调,地暖啥的控制的。
这ID是马甲号,需要的话留个联系方式,交流一下。。。呵呵 TO hetiger
加群28343506,我们群里聊吧! NBA 是个好思路,虽然实际使用会有些麻烦! mark 好用吗? mark 这种电路好像有专用芯片,hetlk有介绍过他的专用芯片,听说爱普生打印机的打印头是单总线架构,通过电源线进来的,速度还很快 好像用红外线类似的高频传输也可以。不过距离是问题 能给个实现该功能的IC或者成熟电路吗?
我们用3V供电,用两根线连接到另外一块板子,即供电又传输信号!双向通信!
单线通信和总线供电吧!
QQ:52157293 g00d mark 学习一下 hao 高深,学习 如果电压高,要好搞得多 强帖,留个印。 很有意思的帖子,学习了。 先做个记号,回头仔细看看。 消防总线就是二线制的,既做供电又把信号调制上面进行通信,总线上可以挂200多个设备,但现在可以提供的电流比较小,设备要求低功耗,但更改设计,以提供更大电流也是可能的。 干扰会不会很大~ 既做供电又把信号调制上面进行通信,学习一下 嗯,这个方案的话,
各个CPU怎么区分?
例如他们实现相同的功能,用的是相同的程序,怎样给每个CPU赋值不同的地址? 帮顶 看看 现在已经有啦仪表总线 楼主此方案商用了吗? 没有商用,只是几年前我的一个想法,还不成熟
值得一看,下面的恢复更好看,eib不错,研究一下 思路明晰,值得研究!LZ强人 mark 这么好的帖子怎么让它沉了呢!!
页:
[1]
2