我的賬戶
中國電子DIY

科技成就未來

親愛的游客,歡迎!

已有賬號,請

如尚未注冊?

【小制作】重新改版的網線測試儀并打樣

  [復制鏈接]
34368 88
1317296227 發表于 2016-12-23 00:58:38 | 只看該作者 |只看大圖 |閱讀模式 打印 上一主題 下一主題
       以前無聊的時候手工做過一次基于單片機IO口掃描的網線測試,鏈接如下:
網線測試儀 - 單片機論壇 - 中國電子DIY之家 - 最受歡迎的電子制作論壇! http://www.abrapl.com/thread-38158-1-1.html
       上次做的網線測試儀在公司沒想到還挺多人用的,使用頻率也挺高的,上次有個同事不小心接錯了電源,直接把小板子給燒了,這次部門要搭建自動化工廠,又需要做大量的網線,有同事建議我再做一個,同時根據同事的要求增加了三個速度選擇按鈕,分別為0.5s,1s,2s。
       其中0.5s是為了快速掃描網線,看是否有問題;另外1s和2s是為了調試網線,自動化工廠有些地方的網線為非標準的網線,要根據物料的接口定義做對應的網線,速度慢點方便觀察非標準網線的線序是否錯誤。
       這次做的網線測試儀總的來說還是有兩個不小的毛病的,至少我自己暫時只發現了這兩個,分別是:
       1、由于給燈供電的電源我是直接接在了板子設計的12V的電源上,另一端通過電阻就直接接在了單片機的IO口上,而不是采用的三極管或者其他的器件來控制每一條線路的導通,所以當我接入的電源是12V的時候,就會出現一個現象,單片機導通的那兩個燈工作正常,但是其他的燈卻也有微弱的亮度,這真的是一大敗筆,這也是設計的時候沒有考慮好的;這里主要的原因是因為當單片機的IO口置高的電壓為5V,而燈的正極是一個12V的電壓,所以這兩者之間就有了一個壓降,于是燈就有了微弱的亮度,索性的是我在設計的時候預留了一個貼片電阻的位置用作調試用,所以在實際的板子中我焊接一個電阻也就能解決這個問題,但是這個問題始終不是很好。下圖中紅色箭頭指向的就是這里設計的問題點。
        
        2、第二個問題就是沒有考慮進入保護電路,其實也是我根本不知道這個保護電路如何做好一點,就是我考慮的是整個板子的工作電壓不大于12V,雖然根據之前被燒的經歷我增加了一個二極管,但是這也只能是防止接反,并不能有效的保護電路。原來是有個想法是在二極管后面加一個貼片的保險,但是由于手上沒有,也就沒有增加了,這里想問下大家有沒有好的方案介紹,求大神指導下。
       下面是PCB板的軟件截圖:
        
       下面是PCB板的3D截圖:
      
       下面是打樣后的一些事物圖,放出來大家批評下
       下面的是焊接了的實物圖,焊工比較垃圾:
      
      
      
      
      
      
      
      
      

       下面的是打樣的PCB板:
      
      
      
      
       這里附上程序代碼:

  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, 下載次數: 360)


     希望各位大神多批評,多給點建議。

2.png (477.65 KB, 下載次數: 4272)

2.png

5.png (544.45 KB, 下載次數: 4267)

5.png

9.png (559.51 KB, 下載次數: 4266)

9.png
參與人數 8下載幣 +32 刀幣 +38 收起 理由
13674116870 + 10 + 5 支持DIY精神!
Ascend + 10 + 10 支持DIY精神!
BOOM。。 + 1
瘋愛 + 5 支持DIY精神!
diyhome + 5 + 5
看門查水表 + 2 + 2 支持DIY精神!
hxrong + 5 + 5 支持DIY精神!
黎明之光 + 5 支持DIY精神!

查看全部評分總評分 : 下載幣 +32 刀幣 +38

收藏
收藏19
分享
分享
支持
支持7
反對
反對0

精彩評論88

跳轉到指定樓層
2#
 樓主| 1317296227 發表于 2016-12-23 01:14:39 | 只看該作者
半夜了,沙發肯定就自己坐了
回復

使用道具 舉報

3#
### 發表于 2016-12-23 07:30:01 | 只看該作者
本帖最后由 ### 于 2016-12-23 07:33 編輯

樓主還可以加入其他線纜的測試功能,比如手機充電線以及各類延長線和硬盤光驅線和串并口延長線和音視頻線測試以及轉接頭測試的功能,常用的插座都加進去就能測試任何線的問題了。
回復

使用道具 舉報

4#
 樓主| 1317296227 發表于 2016-12-23 08:24:11 來自手機 | 只看該作者
### 發表于 2016-12-23 07:30
樓主還可以加入其他線纜的測試功能,比如手機充電線以及各類延長線和硬盤光驅線和串并口延長線和音視頻線測 ...

之前沒想那么多,只是根據同事的需求做了這么一個單一功能
回復

使用道具 舉報

5#
luyuxus 發表于 2016-12-23 09:33:43 | 只看該作者
兩個RJ45口不應該是能分開的嗎?在一起有什么意義啊!!
回復

使用道具 舉報

6#
看門查水表 發表于 2016-12-23 09:39:30 | 只看該作者
不錯!程序寫的很有層次感,我喜歡
不過啊最好分成兩個,發射一個接受一個,這樣方便安裝好以后的線進行測試
回復

使用道具 舉報

7#
dgpower 發表于 2016-12-23 12:37:24 | 只看該作者
多謝分享!實踐是檢驗真理的唯一標準

多用才能暴露問題,才能發現改進機會
回復

使用道具 舉報

8#
FSLTKJ 發表于 2016-12-23 12:38:40 | 只看該作者
用帶隔離變壓器的網口就不怕燒了。
回復

使用道具 舉報

9#
秋天的樹 發表于 2016-12-23 14:48:19 來自手機 | 只看該作者
很實用的作品!給贊
回復

使用道具 舉報

10#
xiaoyao_mdj 發表于 2016-12-23 15:06:26 來自手機 | 只看該作者
我自己以前用stc單片機做過一個,用電位器接AD接囗做調速,還接了一個雙聯繼電器做查找網線接交換機哪個接囗。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

關注4

粉絲3

帖子21

發布主題
最新發布
推薦閱讀
關注我們
中國電子DIY官方微信

客服電話:000-000-0000

客服郵箱:776513803@qq.com

周一至周五 9:00-18:00

公司地址:深圳市南山區美麗灣大廈B座

Powered by Discuz! X3.4@ 2001-2013 Comsenz Inc.