可水下湿插拔的互感式电连接器
摘要:
由两部分组成,一是连接器部分,二是附属的方波转换器部分,二用于弥补一的缺陷使其可用于数据传输。
连接器由一组U型和I型的磁芯,利用互感,组成互感式连接器,结构上具有结合容错范围高的特点。因为互感式连接器本身不能传递一些持续的电平信号,所以以方波信号转换器使他能够传输数字信号。因为在磁芯表面加上绝缘和防水的涂层也不影响连接,因此比起普通插接式连接器有防水的特点。
关键词:
防水 互感原理 连接器 湿插拔 不对称磁芯
1 连接器
1.1 原理
基于互感现象,只要有闭合的磁芯就能形成磁感线通路,从而进行连接,只要子母端线圈内径相等,那只要子端的两端能搭上母端的两臂,那在一定范围内的旋转和平移都不会改变他们的连接状态。
1.2 结构
大图在第五页
连接器部分由一对磁芯构成,一端为U型,一端为I型,误差容许为U型磁芯的内面积,只要I型磁芯上的线圈能落在这一范围,搭上U型磁芯的两臂,就能建立连接。
由于工作频率只受磁芯材料的磁导率影响,因此如下图状态也能稳定连接,不影响工作频率,演示装置可正常工作:
这样的结构是为了能一定范围内容许机器人自动连接时结合的误差,若接合可由人工进行,只需要防水,也可使用下图结构(大图在第五页)不要求容许接合误差的话,还可以加入一些方便的结构,比如图中我直接用永磁体和干簧管使系统能检测到连接器是否已连接。
理想的连接器连接流程为:
1.3 目的
人类对海底的探索也在逐渐深入,到了一定深度之后,若两个设备需要有线互联,连接器的拆解和连接要到水面上进行应该是不太可能的,所以我认为需要一个【易于对接,易于分离,分离状态也拥有良好防水性能的水下连接器】
设计目的并不打算用于跨洋电缆等长时间低损耗使用的场合,那种场合只能用一整条电缆,若加入电连接器,微量损耗也会造成巨大损失,基本来说任何形式的电连接器都不适合长时间使用。
目标使用的范围是如海洋动物根据数据采集,还有深海探矿机器人,电缆修复机器人,深海基地建造设备等,若可以水下湿插拔,便可使设备长期在水下工作,水下数据采集设备可以只更换数据载体而不用整套收回。
若有方便自动连接的连接器,可以直接用一个供能及信号处理中枢,在水下给多个设备供能并采集信号,补充能量只需要让这个中枢上浮,或给这个中枢单独供电即可,从而进行长时间的水下工作。
水下工作以及潜水泵,潜水景观灯等通常也会用到水下接头。
查询了许多关于水下连接器的相关专利,都钻在了【用什么材料对连接后的连接器密封】【用何种方法排出水】等,没有想过做一个不怕接触水的连接器,大都采用橡胶气囊等,将接头封闭的水排出。
传统的水下接头有两种防水方法:一是潜水前用胶带缠绕密封;二是将接头放入密封箱灌电缆胶。这两种方法使用不方便,都是在水面上进行密封,不能在水下接插,而且在胶带老化之后容易漏电。而快插式水下接头需要设置密封圈等,结构复杂,而且也还是无法直接在水下插拔密封,存水会导致接头腐蚀破损,容易漏电导致触电事故。
如下图,现在市面上的水下连接器,防水只是指在接合完毕的状态防水,若在水下对接,铜芯外露在水下易腐蚀漏电破坏机体,而且电极都是小孔对小孔,对接基本不容许误差,给自动对接带来障碍
优点
容许较大接合误差,适合自动连接。若是没有容许误差的需求,也可以保留互感传输的方式,而做成上图这些传统连接器的形状,比如用于海洋生物的跟踪数据采集装置,靠潜水员手动连接。
防水,可在水下多次自由插拔,不腐蚀漏电
良好连接时结构类似于变压器,效率高,可进行能量传输。
1.5 测试
能量传输方面,可以看到空载时阻抗较大,这是因为磁芯无法购买到一体的理想磁芯,是用多个方形磁芯粘合的,漏磁较大,再加上缺乏变压器相关知识,对于匝数的调配仅只控制了匝数比,没有对相应的工作频率选择相应的合适匝数,较为粗糙所致。
但我觉得,作为一个项目,我把重心放在能量传输的研究上是浪费时间,因为变压器是个很成熟的行业,比我更懂这个的人多的是,若这个装置进入实际应用,能量传输问题上只要让变压器专业人士进行改进就可以了,连手工制作都能保证80%以上的效率已经证明了他的损耗不会太大。
因此我将重心放在了解决和证明数据传输可行性问题上,为此研究了下文的方波转换器。
方波调制器
2.1 结构
图2.1
简单总结成模块来说为图2.1所示。
模型中,调制器由51单片机+Arduino单片机组成
解码器由一个51单片机组成
2.2调制器原理简述
将源信号的【持续时长】转换为持续高频脉冲信号的【脉冲数量】传递到母端磁芯。
2.3解码器原理简述
由一个低电平到下一个低电平为一段的划分标准,以单片机计数器记录每段的的【脉冲数量】,并将其还原为源信号。
2.4 目的
在我想为连接器做一个演示装置,来验证其数据传输的可行性时,遇到了一个问题。我先做了一个初版的演示装置,工作原理为:根据母端键盘按下的不同按键,发出以不同长度组合的高电平和低电平组合成的脉冲信号,再由子端单片机还原成数字,依次显示在4位数位管屏幕,第一次千位,第二次百位,依次类推,键盘上有【1234567890清屏】这十一种按键。
但经过多次实验,我发现这个对一般的有线传输来说再普通不过的编码传输方式,却不能用在互感式连接器上,由此我作出了如下猜想。
在连接器用作数据传输时,常见的数字信号通讯,如下图所示,其方波波形常以【不同持续时间的高电平长度】来代表不同的数据。
然而互感式连接器有一个问题,能在磁芯中传输的只有【电流的变化】,因此无法传递持续信号,不论母端给出什么长度的信号,子端都只会接收到同样长度的一小段脉冲,如下图所示:
经过示波器验证,方波通过连接器时的表现基本符合预想,我也是蛮高兴的,便继续研究了下去↓
因此需要用一个装置来对母端信号进行调制,以适应互感式连接器。
调制后持续高电平转换为了持续的脉冲波,可以通过连接器了。也能因此保证连接器永远工作在同一频率,不同信号仅只是连续信号的持续时间不同,因为磁芯和匝数的选择都需要基于频率,这样调制也有利于磁芯的定制。
基于以上猜想,我改进了演示装置,将本来的高电平持续时间都转换为了周期固定的脉冲波的持续数量。由子端计数器记录脉冲的数量转换为数字。
改进后功能得到了实现,可见猜想是正确的。只要将持续高电平切割成多个部分就能解决互感连接器的数据传输问题。
下图是经过改造,验证方案可行的装置图,可以看到按键信号通过编码解码之后成功通过了连接器。
具体程序过长,我放到了论文的末尾,在这里裁剪一段核心部分。
发生信号
………
void frequency(unsigned int shuzi)
{unsigned int
table[]={0,700,1300,1800,2300,2800,3300,3800,4300,5100,6300,7800};
for(unsigned int z=0;z
{ digitalWrite(13,LOW);
digitalWrite(10,HIGH);
delayMicroseconds(28);
digitalWrite(10,LOW);
digitalWrite(13,HIGH);
delayMicroseconds(18); }
…………
读取信号
…………
while(1){
if(read()>0)
{
hajimaru=1;
}
while(hajimaru==1)
{
k1=read();
while(t1count<30)
{
if(t1count<30)
{
P0=0x00;
choose=1;
P0=xuanwei[1];
………………
t1count=0;
k2=read();
dif=k2-k1;
if(dif>500)
{
r++;
yes++;
clear_timer();
}
else
{
if(yes>0)
…………
2.5优点
使本不能进行数据传输的连接器进行数据传输
由于方波转换器将源信号调制为了同一频率,因此连接器拥有了固定的工作频率,可以以此定制磁芯。
2.6演示装置的程序
(见附录)
3 结语
综上所述,我的作品的主要结构,是一个U型和I型线圈组成的防水连接器,具有防水,容许接合误差等优点。
以及为了弥补它的缺陷而做的方波转换器,具有固定连接器工作频率方便根据频率定制磁芯的优点。
我没有测量过多的数据,因为我认为,一个手工制品硬是做的细致硬撑上个5% 6%的效率,也比不过车间产品,即使列举一个长长的好像很专业的电压电流数据分析的表格,也只不过是装模作样,硬是和相关领域的专业人士分一杯羹,因此我将重心放在探讨解决一些更实质的,影响创意实用化的矛盾上。
从实验来看,手工制品也可达到80%以上的效率,那问题应该不在于效率,而是由于互感现象的特性导致不能用于数据传输,只要将方波进行相应的调制,就能让它可用于数据场合。
【附录】
·母端51程序
#include
sbit R1=P0^0;
sbit R2=P0^1;
sbit R3=P0^2;
sbit R4=P0^3;
sbit C1=P0^4;
sbit C2=P0^5;
sbit C3=P0^6;
sbit C4=P0^7;
sbit start=P1^7;
unsigned char key;
unsigned char bin[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10};
void delayms(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
while(1)
{
P1=0xff;
P0=0xf0;
key=0;
if((C1&C2&C3&C4)!=1)
{
delayms(8);
P0=0xff;
R1=0;
if((C1&C2&C3&C4)!=1)
{
if(C1==0)
key=1;
if(C2==0)
key=2;
if(C3==0)
key=3;
if(C4==0)
key=4;
}
P0=0xff;
R2=0;
if((C1&C2&C3&C4)!=1)
{
if(C1==0)
key=5;
if(C2==0)
key=6;
if(C3==0)
key=7;
if(C4==0)
key=8;
}
P0=0xff;
R3=0;
if((C1&C2&C3&C4)!=1)
{
if(C1==0)
key=9;
if(C2==0)
key=10;
if(C3==0)
key=11;
if(C4==0)
key=11;
}
P0=0xff;
R4=0;
if((C1&C2&C3&C4)!=1)
{
if(C1==0)
key=11;
if(C2==0)
key=11;
if(C3==0)
key=11;
if(C4==0)
key=11;
}
}
if(key!=0)
{
start=0;
P1=bin[key];
delayms(50);
start=1;
delayms(100);
}
}
}
·母端arduino程序
xvoid setup()
{
pinMode(10,OUTPUT);
pinMode(1,INPUT);
pinMode(2,INPUT);
pinMode(3,INPUT);
pinMode(4,INPUT);
pinMode(5,INPUT);
}
void frequency(unsigned int shuzi)
{
unsigned int table[]={0,700,1300,1800,2300,2800,3300,3800,4300,5100,6300,7800};
for(unsigned int z=0;z
{
digitalWrite(13,LOW);
digitalWrite(10,HIGH);
delayMicroseconds(28);
digitalWrite(10,LOW);
digitalWrite(13,HIGH);
delayMicroseconds(18);
}
void loop()
{
delay(600);
while(1)
{
if(digitalRead(5)==LOW)break;
}
delay(50);
unsigned char p1,p2,p3,p4;
unsigned int wuyao;
wuyao=0;
p1=digitalRead(1);
p2=digitalRead(2);
p3=digitalRead(3);
p4=digitalRead(4);
if(p1==HIGH)
{
wuyao=wuyao+1;
}
if(p2==HIGH)
{
wuyao=wuyao+2;
}
if(p3==HIGH)
{
wuyao=wuyao+4;
}
if(p4==HIGH)
{
wuyao=wuyao+8;
}
frequency(wuyao);
}
子端51程序
#include
sbit choose=P2^0;
sbit digit=P2^1;
unsigned int k1,k2,dif,r,r1,r2,r3,r4,r5,count,yes;
unsigned int t1count,hajimaru;
unsigned char code shuzi[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0x09,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xfd};
unsigned char code xuanwei[]={0x00,0x80,0x40,0x20,0x10,0xf0};
void delayms(unsigned int x)
{
unsigned int i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void delaymst(unsigned int x2)
{
unsigned int i2,j2;
for(i2=x2;i2>0;i2--)
{
if(t1count<30)
{
for(j2=27;j2>0;j2--)
{
if(t1count>=30)break;
}
}
else break;
}
}
void light_same(int same)
{
P0=0x00;
choose=1;
P0=xuanwei[5];
choose=0;
P0=0xff;
digit=1;
P0=shuzi[same];
digit=0;
delayms(1);
}
void clear_timer()
{
k1=0;
k2=0;
TH0=0;
TL0=0;
}
void light_digit(int e,f,g,h)
{
P0=0x00;
choose=1;
P0=xuanwei[1];
choose=0;
P0=0xff;
digit=1;
P0=shuzi[e];
digit=0;
delayms(1);
P0=0x00;
choose=1;
P0=xuanwei[2];
choose=0;
P0=0xff;
digit=1;
P0=shuzi[f];
digit=0;
delayms(1);
P0=0x00;
choose=1;
P0=xuanwei[3];
choose=0;
P0=0xff;
digit=1;
P0=shuzi[g];
digit=0;
delayms(1);
P0=0x00;
choose=1;
P0=xuanwei[4];
choose=0;
P0=0xff;
digit=1;
P0=shuzi[h];
digit=0;
delayms(1);
}
void light_number(int num)
{
int a,b,c,d;
a=num/1000;
b=(num-a*1000)/100;
c=(num-a*1000-b*100)/10;
d=num-a*1000-b*100-c*10;
P0=0x00;
choose=1;
P0=xuanwei[1];
choose=0;
P0=0xff;
digit=1;
P0=shuzi[a];
digit=0;
delayms(1);
P0=0x00;
choose=1;
P0=xuanwei[2];
choose=0;
P0=0xff;
digit=1;
P0=shuzi[b];
digit=0;
delayms(1);
P0=0x00;
choose=1;
P0=xuanwei[3];
choose=0;
P0=0xff;
digit=1;
P0=shuzi[c];
digit=0;
delayms(1);
P0=0x00;
choose=1;
P0=xuanwei[4];
choose=0;
P0=0xff;
digit=1;
P0=shuzi[d];
digit=0;
delayms(1);
}
unsigned int read()
{
unsigned char t1, th1;
unsigned int val;
while(1)
{
th1=TH0;
t1=TL0;
break;
}
val=th1*256+t1;
return val;
}
/*things above are initialization.*/
void main()
{
light_same(20);
TMOD=0x15;
EA=1;
ET1=1;
TR1=1;
TH1=(65536-922)/256;
TL1=(65536-922)%256;
TH0=0;
TL0=0;
TR0=1;
r=0;
r1=20;
r2=20;
r3=20;
r4=20;
r5=0;
count=0;
t1count=0;
yes=0;
hajimaru=0;
while(1){
if(read()>0)
{
hajimaru=1;
}
while(hajimaru==1)
{
k1=read();
while(t1count<30)
{
if(t1count<30)
{
P0=0x00;
choose=1; P0=xuanwei[1];
choose=0;
P0=0xff;
digit=1;
P0=shuzi[r4];
digit=0;
}
if(t1count<30)
{
delaymst(1);
}
if(t1count<30)
{
P0=0x00;
choose=1;
P0=xuanwei[2];
choose=0;
P0=0xff;
digit=1;
P0=shuzi[r3];
digit=0;
}
if(t1count<30)
{
delaymst(1);
}
if(t1count<30)
{
P0=0x00;
choose=1;
P0=xuanwei[3];
choose=0;
P0=0xff;
digit=1;
P0=shuzi[r2];
digit=0;
}
if(t1count<30)
{
delaymst(1);
}
if(t1count<30)
{
P0=0x00;
choose=1;
P0=xuanwei[4];
choose=0;
P0=0xff;
digit=1;
P0=shuzi[r1];
digit=0;
}
if(t1count<30)
{
delaymst(1);
}
}
t1count=0;
k2=read();
dif=k2-k1;
if(dif>500)
{
r++;
yes++;
clear_timer();
}
else
{
if(yes>0)
{
count++;
if(count==0)
{
light_digit(r4,r3,r2,r1);
}
else if(count==1)
{
r4=r;
r5=r;
r=0;
}
else if(count==2)
{
r3=r;
r5=r;
r=0;
}
else if(count==3)
{
r2=r;
r5=r;
r=0;
}
else if(count==4)
{
r1=r; r5=r;
r=0;
}
else
{
r5=r;
r=0;
}
}
yes=0;
}
if(r1>20|r2>20|r3>20|r4>20)
{
r1=20;
r2=20;
r3=20;
r4=20;
}
if((r5==15)|(r5==13)|(r5==14))
{
count=0;
light_same(20);
r=0;
r1=20;
r2=20;
r3=20;
r4=20;
r5=0;
}
}
}
}
void T1_time() interrupt 3
{
TH1=(65536-922)/256;
TL1=(65536-922)%256;
t1count++;
}
| 测试电阻 |
母端电流 |
子端电流 |
效率 |
| 10Ω |
383mA |
330mA |
86.2% |
| 50Ω |
188mA |
160mA |
85.1% |
| 3KΩ |
4.83mA |
3.98mA |
82.4% |
| 空载 |
506mA |
438mA |
86.6% |