ling010512 发表于 2012-7-12 23:49:12

用内置网络隔离变压器RJ45传输RS485信号?

首先 用RJ45来传输RS485信号是可以的,只要Pin脚连接正确就可以;
问题在于内置网络隔离变压器的RJ45,
隔离变压器是专门为PHY设计的,所以PHY是电压驱动,网络隔离变压器的中间抽头就上拉电压。

网络隔离变压器原理
http://wenku.baidu.com/view/868e90ff910ef12d2af9e70b.html

若是要驱动RS485,即电压型的,这样中间抽头就要上拉电压
一般以太网是上拉3.3V,假设上拉至5V
以前隔离RS485通信
Processor---隔离芯片----485协议转换芯片----DB9
                            ^(隔离电压5V_ISO加在隔离芯片后)
DCDC-->隔离电压---- |

现在可不可以
Processor----485协议转换芯片----RJ45( with Integrated Megnecics)
                                          ^(非隔离电压5V加在RJ45中间抽头处)

RJ45选用的是HR872103或是J0011D01BNL

不知道这样设计可不可以?

另: RS232不是差分的,且是3线制的,
可不可以RXD--GND作为一对,TXD--GND作为一对,中间抽头就要上拉电压上拉至5V么?

mitchell 发表于 2012-7-13 00:14:08

485带有直流分量的,过不了变压器

again 发表于 2012-7-13 07:15:50

哈哈,我就是这么用的sp3078必须选短路保护的,数据采用曼码编制,码率10M,这个只能一对一,一个隔离变有2个收发,可以实现级联

again 发表于 2012-7-13 07:18:39

数据尾加了两个0字节来消除振荡

again 发表于 2012-7-13 07:25:00

用音频隔离编码率可以低,但那个体积大多了

Flyback 发表于 2012-7-13 08:17:29

曼切斯特编码是能解决直流分量的问题,只是那个网络变压器的响应频率在M级吧,坐等lz测试

again 发表于 2012-7-13 08:33:42

对,码率得高,我用的就是10M,都是DMA收发,低码率可以用ADSL、AUDIO这类变压器

again 发表于 2012-7-13 08:34:33

或者自己拿磁环绕,码率与电感量成反比

dadongleilei 发表于 2012-7-13 10:18:12

还可以这样用啊,效果怎么样呢

bsz84 发表于 2012-7-13 10:37:13

again
----------------
能分享一下你的原理图否?

worldheaven 发表于 2012-12-13 16:56:44

很赶兴趣,我也准备用RJ45来当485和232的接线端子,不知道这样做是否就隔离了?因为现场条件好,简单的隔离就行,这样就不用光耦了

速度不快,9600最快了,不知道楼主测试了没有,这样可以么?

worldheaven 发表于 2012-12-18 23:21:17

没有人这么用过么?省钱又方便的办法,貌似挺好的

simon51 发表于 2013-5-10 15:40:57

mark下{:smile:}

adslmorisong 发表于 2019-5-28 23:32:40

正想这样用呢,大家有用过吗,分享一下

mndsoft2012 发表于 2019-6-6 10:53:39

楼上的盆友有成功使用的吗? 就是简单用于485 和232 数据传输。

感觉这样蛮不错 ,比如用HR913550A,HR911105A这种带滤波的网口插座,隔离:1500Vrms。

lin28 发表于 2019-7-12 22:01:20

mndsoft2012 发表于 2019-6-6 10:53
楼上的盆友有成功使用的吗? 就是简单用于485 和232 数据传输。

感觉这样蛮不错 ,比如用HR913550A,HR91 ...

同问。。

fengxin32 发表于 2019-7-12 22:21:48

again 发表于 2012-7-13 07:15
哈哈,我就是这么用的sp3078必须选短路保护的,数据采用曼码编制,码率10M,这个只能一对一,一个隔离变有2 ...

“曼码编制”
通过软件把数据编成曼彻斯特编码么?

again 发表于 2019-7-13 18:41:28

fengxin32 发表于 2019-7-12 22:21
“曼码编制”
通过软件把数据编成曼彻斯特编码么?

1bit变2bit,最简单做个表直接隐射,我的代码还兼容线+-接反,发送时加签到码识别下即可
代码:
const u8 g_ManchesterEncodeTab[] = {43, 45, 51, 53, 54, 75, 77, 83, 85, 86, 89, 90, 101, 102, 105, 106};
const u8 g_ManchesterDecodeTab[] = {
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,   0, 255,   1, 255, 255,
255, 255, 255,   2, 255,   3,   4, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,   5, 255,   6, 255, 255,
255, 255, 255,   7, 255,   8,   9, 255, 255,10,11, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255,12,13, 255, 255,14,15, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255
};
//反转时码表{169, 165, 153, 149, 147, 105, 101, 89, 85, 83, 77, 75, 53, 51, 45, 43};
const u8 g_ManchesterDecodeRevTab[] = {
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,15, 255,14, 255, 255,
255, 255, 255,13, 255,12, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,11, 255,10, 255, 255,
255, 255, 255,   9, 255,   8, 255, 255, 255,   7, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255,   6, 255, 255, 255,   5, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255,   4, 255,   3, 255, 255, 255,   2, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255,   1, 255, 255, 255,   0, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255
};

/*************************************************************************
* Function Name: ManchesterEncode
* Parameters:
*
* Return: none
*
* Description: Manchester编码,1=10, 0=01
*
*************************************************************************/
void ManchesterEncode(u8 *pIn, u8 *pOut, u16 n)
{
//u8 b;
//
//while(n--)
//{
//    b = *pIn++;
//    *pOut++ = g_ManchesterEncodeTab;//low 4bit
//    *pOut++ = g_ManchesterEncodeTab;//hight 4bit
//}
//
pIn += n - 1;//为了兼容PIN POUT指向同一地址
pOut += n + n - 1;
u8 b;

while(n--)
{
    b = *pIn--;
    *pOut-- = g_ManchesterEncodeTab;//hight 4bit
    *pOut-- = g_ManchesterEncodeTab;//low 4bit
}
}

/*************************************************************************
* Function Name: ManchesterDecode
* Parameters:
*
* Return: none
*
* Description: Manchester解码,1=10, 0=01
*
*************************************************************************/
void ManchesterDecode(u8 *pIn, u8 *pOut, u16 n)
{
u8 b;

while(n--)
{
    b = g_ManchesterDecodeTab[*pIn++];
    *pOut++ = b | (g_ManchesterDecodeTab[*pIn++]<<4);
}
}

/*************************************************************************
* Function Name: ManchesterDecodeRev
* Parameters:
*
* Return: none
*
* Description: 线接反时Manchester解码,1=10, 0=01
*
*************************************************************************/
void ManchesterDecodeRev(u8 *pIn, u8 *pOut, u16 n)
{
u8 b;

while(n--)
{
    b = g_ManchesterDecodeRevTab[*pIn++];
    *pOut++ = b | (g_ManchesterDecodeRevTab[*pIn++]<<4);
}
}

fengxin32 发表于 2019-7-13 22:08:48

again 发表于 2019-7-13 18:41
1bit变2bit,最简单做个表直接隐射,我的代码还兼容线+-接反,发送时加签到码识别下即可
代码:
const u8...

多谢指教,从来没有想到曼彻斯特还能这么实现,越搞越觉得自己懂得少。

“发送时加签到码识别下即可”,是指报文头,通知对方发送的是曼彻斯特编码?

again 发表于 2019-7-14 00:17:41

fengxin32 发表于 2019-7-13 22:08
多谢指教,从来没有想到曼彻斯特还能这么实现,越搞越觉得自己懂得少。

“发送时加签到码识别下即可”, ...

就是加一特定帧头,这样客户AB线可以随便接
页: [1]
查看完整版本: 用内置网络隔离变压器RJ45传输RS485信号?