用户
 找回密码
 注册
发新帖
1#
跳转到指定楼层

【小制作】重新改版的网线测试仪并打样

  [复制链接]
       以前无聊的时候手工做过一次基于单片机IO口扫描的网线测试,链接如下:
网线测试仪 - 单片机论坛 - 中国电子DIY之家 - 最受欢迎的电子制作论坛! http://www.ndiy.cn/thread-38158-1-1.html
       上次做的网线测试仪在公司没想到还挺多人用的,使用频率也挺高的,上次有个同事不小心接错了电源,直接把小板子给烧了,这次部门要搭建自动化工厂,又需要做大量的网线,有同事建议我再做一个,同时根据同事的要求增加了三个速度选择按钮,分别为0.5s,1s,2s。
       其中0.5s是为了快速扫描网线,看是否有问题;另外1s和2s是为了调试网线,自动化工厂有些地方的网线为非标准的网线,要根据物料的接口定义做对应的网线,速度慢点方便观察非标准网线的线序是否错误。
       这次做的网线测试仪总的来说还是有两个不小的毛病的,至少我自己暂时只发现了这两个,分别是:
       1、由于给灯供电的电源我是直接接在了板子设计的12V的电源上,另一端通过电阻就直接接在了单片机的IO口上,而不是采用的三极管或者其他的器件来控制每一条线路的导通,所以当我接入的电源是12V的时候,就会出现一个现象,单片机导通的那两个灯工作正常,但是其他的灯却也有微弱的亮度,这真的是一大败笔,这也是设计的时候没有考虑好的;这里主要的原因是因为当单片机的IO口置高的电压为5V,而灯的正极是一个12V的电压,所以这两者之间就有了一个压降,于是灯就有了微弱的亮度,索性的是我在设计的时候预留了一个贴片电阻的位置用作调试用,所以在实际的板子中我焊接一个电阻也就能解决这个问题,但是这个问题始终不是很好。下图中红色箭头指向的就是这里设计的问题点。
         问题一.png
        2、第二个问题就是没有考虑进入保护电路,其实也是我根本不知道这个保护电路如何做好一点,就是我考虑的是整个板子的工作电压不大于12V,虽然根据之前被烧的经历我增加了一个二极管,但是这也只能是防止接反,并不能有效的保护电路。原来是有个想法是在二极管后面加一个贴片的保险,但是由于手上没有,也就没有增加了,这里想问下大家有没有好的方案介绍,求大神指导下。
       下面是PCB板的软件截图:
         PCB.png
       下面是PCB板的3D截图:
       3D.png
       下面是打样后的一些事物图,放出来大家批评下
       下面的是焊接了的实物图,焊工比较垃圾:
       1.png
       3.png
       8.png
       11.png
       13.png
       14.png
       15.png
       16.png
       17.png

       下面的是打样的PCB板:
       18.png
       19.png
       20.png
       21.png
       这里附上程序代码:

  1. /**********************网线测试仪*****************************
  2.         网线测试仪,定义三个按钮作为速度选择
  3.         速度选择分别有30ms/1s/2s
  4.         程序初始化默认进入1s运行函数
  5.         其中网线扫描口用的P2口
  6. *************************************************************/
  7. #include <reg52.h>
  8. #include <intrins.h>                                  //循环左右移头文件
  9. #define uchar unsigned char
  10. #define uint unsigned int
  11. sbit sw1 = P3^5;                                        //定义30ms按钮
  12. sbit sw2 = P3^6;                                        //定义1S按钮
  13. sbit sw3 = P3^7;                                        //定义2S按钮
  14. uint i,a,b;                                                        //定义变量
  15. void delay(int t)
  16. {
  17.         int y;
  18.         for(;t>0;t--)
  19.                 for(y=110;y>0;y--);
  20. }
  21. void key1();                                                //函数声明
  22. void key2();
  23. void key3();
  24. void key1()                                                        //30ms运行函数
  25. {
  26.         if(sw1 == 0)
  27.         {
  28.                 delay(10);
  29.                 if(sw1 == 0)
  30.                 {
  31.                         sw2 = sw3 = 1;
  32.                         P2 = a;
  33.                         b = 1;
  34.                         while(b)
  35.                         {
  36.                                 for(i=9;i>0;i--)
  37.                                 {
  38.                                         P2 = _crol_(a,1);                 
  39.                                         for(i=30;i>0;i--)                 //1/2s
  40.                                         {
  41.                                                 delay(10);                       
  42.                                                 if(sw2 == 0)
  43.                                                 {
  44.                                                         delay(5);
  45.                                                         if(sw2 == 0)
  46.                                                         {
  47.                                                                 key2();
  48.                                                         }
  49.                                                 }
  50.                                                 if(sw3 == 0)
  51.                                                 {
  52.                                                         delay(5);
  53.                                                         if(sw3 == 0)
  54.                                                         {
  55.                                                                 key3();
  56.                                                         }
  57.                                                 }
  58.                                         }
  59.                                         a = P2;
  60.                                 }
  61.                         }
  62.                 }
  63.         }       
  64. }
  65. void key2()                                                  //1S运行函数
  66. {
  67.         if(sw2 == 0)
  68.         {
  69.                 delay(10);
  70.                 if(sw2 == 0)
  71.                 {
  72.                         sw1 = sw3 =1;
  73.                         P2 = a;
  74.                         b = 1;
  75.                         while(b)
  76.                         {
  77.                                 for(i=8;i>0;i--)
  78.                                 {
  79.                                         P2 = _crol_(a,1);
  80.                                         for(i=60;i>0;i--)                 //1S
  81.                                         {
  82.                                                 delay(10);                       
  83.                                                 if(sw1 == 0)
  84.                                                 {
  85.                                                         delay(5);
  86.                                                         if(sw1 == 0)
  87.                                                         {
  88.                                                                 key1();
  89.                                                         }
  90.                                                 }
  91.                                                 if(sw3 == 0)
  92.                                                 {
  93.                                                         delay(5);
  94.                                                         if(sw3 == 0)
  95.                                                         {
  96.                                                                 key3();
  97.                                                         }
  98.                                                 }
  99.                                         }
  100.                                         a = P2;
  101.                                 }
  102.                         }
  103.                 }
  104.         }       
  105. }
  106. void key3()                                           //2S运行函数
  107. {
  108.         if(sw3 == 0)
  109.         {
  110.                 delay(10);
  111.                 if(sw3 == 0)
  112.                 {
  113.                         sw1 = sw2 = 1;
  114.                         P2 = a;
  115.                         b = 1;
  116.                         while(b)
  117.                         {
  118.                                 for(i=8;i>0;i--)
  119.                                 {
  120.                                         P2 = _crol_(a,1);
  121.                                         for(i=200;i>0;i--)                 //2S
  122.                                         {
  123.                                                 delay(10);                       
  124.                                                 if(sw1 == 0)
  125.                                                 {
  126.                                                         delay(5);
  127.                                                         if(sw1 == 0)
  128.                                                         {
  129.                                                                 key1();
  130.                                                         }
  131.                                                 }
  132.                                                 if(sw2 == 0)
  133.                                                 {
  134.                                                         delay(5);
  135.                                                         if(sw2 == 0)
  136.                                                         {
  137.                                                                 key2();
  138.                                                         }
  139.                                                 }
  140.                                         }
  141.                                         a = P2;
  142.                                 }
  143.                         }
  144.                 }
  145.         }
  146. }
  147. void main()
  148. {
  149.         P2 = 0xff;                                  //IO赋初值
  150.         a = 0xfe;
  151.         sw2 = 0;                                  //初始执行1s函数
  152.         while(1)
  153.         {
  154.                 key1();
  155.                 key2();
  156.                 key3();
  157.         }
  158. }
复制代码

      下面放上PCB的工程和源程序,共一个包:
       网线测试仪.zip (4.01 MB, 下载次数: 217)
2.png
5.png
9.png

评分

参与人数 7下载币 +22 刀币 +33 收起 理由
Ascend + 10 + 10 支持DIY精神!
BOOM。。 + 1
疯爱 + 5 支持DIY精神!
diyhome + 5 + 5
看门查水表 + 2 + 2 支持DIY精神!
hxrong + 5 + 5 支持DIY精神!
黎明之光 + 5 支持DIY精神!

查看全部评分

半夜了,沙发肯定就自己坐了
回复

使用道具 举报

本帖最后由 ### 于 2016-12-23 07:33 编辑

楼主还可以加入其他线缆的测试功能,比如手机充电线以及各类延长线和硬盘光驱线和串并口延长线和音视频线测试以及转接头测试的功能,常用的插座都加进去就能测试任何线的问题了。
回复

使用道具 举报

来自手机
### 发表于 2016-12-23 07:30
楼主还可以加入其他线缆的测试功能,比如手机充电线以及各类延长线和硬盘光驱线和串并口延长线和音视频线测 ...

之前没想那么多,只是根据同事的需求做了这么一个单一功能
回复

使用道具 举报

两个RJ45口不应该是能分开的吗?在一起有什么意义啊!!
回复

使用道具 举报

不错!程序写的很有层次感,我喜欢
不过啊最好分成两个,发射一个接受一个,这样方便安装好以后的线进行测试
回复

使用道具 举报

多谢分享!实践是检验真理的唯一标准

多用才能暴露问题,才能发现改进机会
回复

使用道具 举报

用带隔离变压器的网口就不怕烧了。
回复

使用道具 举报

来自手机
很实用的作品!给赞
回复

使用道具 举报

来自手机
我自己以前用stc单片机做过一个,用电位器接AD接囗做调速,还接了一个双联继电器做查找网线接交换机哪个接囗。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回顶部