久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 23945|回復: 54
打印 上一主題 下一主題
收起左側

也做3000F超級電容點焊機(已補充PCB和程序)

  [復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 zuse1021 于 2020-5-21 21:09 編輯

之前做過一個微波爐變壓器版的點焊機,總感覺能力不夠,在看到隔壁論壇的開源的超級電容點焊機后,打算仿一個。
原版本兩個超級電容用均衡版充電,MOS利用升壓電路。感覺比較麻煩,于是打算兩個恒流模塊加上兩個獨立的220轉5V的電源,做成平衡充給電容充電。然后MOS的升壓也直接用成品的升壓模塊,更方便。
手頭正好有一些STC的8A8K64S4A12的直插40針的單片機,就利用起來了。既然用了這個單片機,順便就加上了測電容電壓的功能。
下面介紹一下PCB:

考慮到5塊包郵的嘉立創,PCB的長度被設定為10cm,右上方是0.36寸四位共陽數碼管,三極管是四個9012,四個按鍵,其它元件在PCB上都標注了。
BOOST MODULE是升壓模塊,初步打算用這個模塊:

輸出控制在16v~18v左右,PCB也是按這個模塊的尺寸來畫的。然而買回來一個卻無法升壓,大概是壞了,因為只買了1個,所以也不知道這個模塊是不是能用上,另一家買的另一種升壓模塊倒是可以升壓,但尺寸不對應哈哈。
四個按鍵用于控制脈沖長度、脈沖間隔和脈沖次數的設定,同時可以利用EEPROM儲存,斷電保存上一次的設置,還用于顯示電容電壓。
下面介紹按鍵的作用:
key1--進入菜單1--脈沖長度調節--顯示脈沖長度
key1-- +1
key2-- -1
key3-- 恢復預設值
key4-- back to main

key2--進入菜單2--脈沖間隔調節--顯示脈沖間隔
key1-- +1
key2-- -1
key3-- 恢復預設值
key4-- back to main

key3--進入菜單3--脈沖次數調節--顯示脈沖次數
key1-- +1
key2-- -1
key3-- 恢復預設值
key4-- back to main

key4--進入菜單4--電容電壓顯示--顯示總電壓
key1-- 顯示第一節電容電壓
key2-- 顯示第二節電容電壓
key3-- 保持當前配置于EEPROM
key4-- back to main

MOS板初步打算16個irf3713并聯,也可以某寶入一個成品的點焊MOS板。
實際上,只測試了電路和程序沒問題,還沒有實際裝起來。程序和PCB文件待補充,下面是兩張焊了一部分的照片。


3L補充了PCB和程序,有興趣的可以下載大致分了兩個部分,一部分是main.c,是主程序,另一部分是ADCread.c,用于測電壓。下面把main.c貼上。
  1. #include <STC8.H>
  2. #include <stdio.h>
  3. #include <Intrins.h>
  4. #include <adcread.h>
  5. #define WT_12M          0x83

  6. typedef unsigned int u16;                                                                //對數據類型進行聲明定義
  7. typedef unsigned char u8;                                                                //對數據類型進行聲明定義

  8. sbit key1=P0^0;        //P0.0端口定義為時間減
  9. sbit key2=P0^1;        //P0.1端口定義為時間加
  10. sbit key3=P0^2;        //P0.2端口定義為按下顯示第一節電容電壓
  11. sbit key4=P0^3;        //P0.3端口定義為按下顯示第二節電容電壓
  12. sbit out=P4^1;                   //P4.1端口定義為驅動脈沖輸出
  13. sbit tst=P5^5;       //P5.5端口定義為檢測點焊筆準備焊接的輸入端

  14. sbit DIG1=P2^0;         //P2.0端口定義為DIG1
  15. sbit DIG2=P2^1;         //P2.1端口定義為DIG2
  16. sbit DIG3=P2^2;         //P2.2端口定義為DIG3
  17. sbit DIG4=P2^3;         //P2.3端口定義為DIG4
  18. u16 pulse;                                                  //輸出脈沖長度,×0.1毫秒
  19. u16 interval;                                                //脈沖間隔,×0.1毫秒
  20. u8  num;                                                                //脈沖次數
  21. u16 v1;                                                                        //第一電容電壓
  22. u16 v2;                                                                        //第二電容電壓
  23. u16 vcc;                                                                //總電壓               
  24. u8  Page_Sgin;                                        //頁面選擇
  25. u8 zz;

  26. //數碼管真值表//
  27. u8 code LED_CODE[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //顯示0~9,
  28. u8 code LED_S[2]={0x9f,0xaf}; //顯示上折角,下折角

  29. //延時100us//
  30. void Delay(long t)                //STC8Axx基于STC-Y6指令集@12.000MHz,from:STC-ISP;
  31. {
  32.         u8 ia, ja;
  33.         long ka;
  34.         for(ka=t;ka>0;ka--)
  35.         {
  36.         _nop_();
  37.         ia = 2;
  38.         ja = 140;
  39.         do
  40.         {
  41.                 while (--ja);
  42.         } while (--ia);
  43.         }
  44. }

  45. //檢測點焊筆準備//
  46. bit stst(void)
  47. {
  48.         static unsigned  int l = 0;                        //定義靜態變量,用來記錄延時用.                  
  49.         if(tst == 0)                                                                                //如果檢測到按鍵引腳有低電平,記數變量開始累加.
  50.         {
  51.                 if(l <7000)                                                                                //控制延時計數返0,因為當按鍵不松開時,i一直在累加
  52.                         l++;                                                                                                //CPU每檢測到一次按鍵引腳為低電平0,i就累加1次.
  53.         }
  54.         else                                                                                                                //如果按鍵沒有按下或者按下后有高電平(抖動)i清0
  55.                 l = 0;
  56.         if(l == 6999)                                                                                //如果變量i的值累加到6999,說明點焊筆已經做好準備,可以焊接了.
  57.                 return 1;                                                                                        //返回1,說明已檢測到按鍵有效值.
  58.         else
  59.                 return 0;                                                                                        //返回0,說明沒有檢測到有效值.
  60. }

  61. void IapIdle()                                                                               
  62. {
  63.     IAP_CONTR = 0;                              //關閉IAP功能
  64.     IAP_CMD = 0;                                //清除命令寄存器
  65.     IAP_TRIG = 0;                               //清除觸發寄存器
  66.     IAP_ADDRH = 0x80;                           //將地址設置到非IAP區域
  67.     IAP_ADDRL = 0;
  68. }

  69. char IapRead(int addr)                                        //EEPROM讀一字節
  70. {
  71.     char dat;
  72.     IAP_CONTR = WT_12M;                         //使能IAP
  73.     IAP_CMD = 1;                                //設置IAP讀命令
  74.     IAP_ADDRL = addr;                           //設置IAP低地址
  75.     IAP_ADDRH = addr >> 8;                      //設置IAP高地址
  76.     IAP_TRIG = 0x5a;                            //寫觸發命令(0x5a)
  77.     IAP_TRIG = 0xa5;                            //寫觸發命令(0xa5)
  78.     _nop_();
  79.     dat = IAP_DATA;                             //讀IAP數據
  80.     IapIdle();                                  //關閉IAP功能
  81.     return dat;
  82. }

  83. void IapProgram(int addr, char dat)                                        //EEPROM寫一字節
  84. {
  85.     IAP_CONTR = WT_12M;                         //使能IAP
  86.     IAP_CMD = 2;                                //設置IAP寫命令
  87.     IAP_ADDRL = addr;                           //設置IAP低地址
  88.     IAP_ADDRH = addr >> 8;                      //設置IAP高地址
  89.     IAP_DATA = dat;                             //寫IAP數據
  90.     IAP_TRIG = 0x5a;                            //寫觸發命令(0x5a)
  91.     IAP_TRIG = 0xa5;                            //寫觸發命令(0xa5)
  92.     _nop_();
  93.     IapIdle();                                  //關閉IAP功能
  94. }

  95. void IapErase(int addr)                                                //EEPROM擦除一扇區=512字節
  96. {
  97.     IAP_CONTR = WT_12M;                         //使能IAP
  98.     IAP_CMD = 3;                                //設置IAP擦除命令
  99.     IAP_ADDRL = addr;                           //設置IAP低地址
  100.     IAP_ADDRH = addr >> 8;                      //設置IAP高地址
  101.     IAP_TRIG = 0x5a;                            //寫觸發命令(0x5a)
  102.     IAP_TRIG = 0xa5;                            //寫觸發命令(0xa5)
  103.     _nop_();                                    //
  104.     IapIdle();                                  //關閉IAP功能
  105. }

  106. /********************************
  107.                 數碼管動態顯示程序
  108. ********************************/
  109. void display(u8 wei)
  110. {
  111.                 u8 ke;  
  112.                 u8 dd=0;
  113.                 switch(wei)
  114.                 {
  115.                         case 1://顯示脈沖長度
  116.                                         for(dd=0;dd<3;dd++)
  117.                                         {
  118.                                                 if(dd == 0)                                //顯示個位
  119.                                                 {
  120.                                                                 P2=0xf7;//個位段碼開
  121.                 P3=LED_CODE[pulse%10];
  122.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  123.                                                                 P2=0xff;//段碼關
  124.                                                                 P3=0xff;//位碼消隱
  125.                                                 }
  126.                                                 if(dd == 1&& pulse/10%10!=0)                                //顯示十位
  127.                                                 {
  128.                                                                 P2=0xfb;//十位段碼開
  129.                 P3=LED_CODE[pulse/10%10];
  130.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  131.                                                                 P2=0xff;//段碼關
  132.                                                                 P3=0xff;//位碼消隱
  133.                                                 }
  134.                                                 if(dd == 2 && pulse/100%10!=0)                                //顯示百位
  135.                                                 {
  136.                                                                 P2=0xfd;//百位段碼開
  137.                 P3=LED_CODE[pulse/100%10];
  138.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  139.                                                                 P2=0xff;//段碼關
  140.                                                                 P3=0xff;//位碼消隱
  141.                                                 }
  142.                                         }                                       
  143.                                         break;       
  144.                         case 2:        //顯示脈沖間隔
  145.                                         for(dd=0;dd<3;dd++)
  146.                                         {
  147.                                                 if(dd == 0)                                //顯示個位
  148.                                                 {
  149.                                                                 P2=0xf7;//個位段碼開
  150.                 P3=LED_CODE[interval%10];
  151.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  152.                                                                 P2=0xff;//段碼關
  153.                                                                 P3=0xff;//位碼消隱
  154.                                                 }
  155.                                                 if(dd == 1&& interval/10%10!=0)                                //顯示十位
  156.                                                 {
  157.                                                                 P2=0xfb;//十位段碼開
  158.                 P3=LED_CODE[interval/10%10];
  159.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  160.                                                                 P2=0xff;//段碼關
  161.                                                                 P3=0xff;//位碼消隱
  162.                                                 }
  163.                                                 if(dd == 2 && interval/100%10!=0)                                //顯示百位
  164.                                                 {
  165.                                                                 P2=0xfd;//百位段碼開
  166.                 P3=LED_CODE[interval/100%10];
  167.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  168.                                                                 P2=0xff;//段碼關
  169.                                                                 P3=0xff;//位碼消隱
  170.                                                 }
  171.                                         }
  172.                                         break;       
  173.                         case 3:        //顯示脈沖次數
  174.                                         for(dd=0;dd<2;dd++)
  175.                                         {
  176.                                                 if(dd == 0)                                //顯示個位
  177.                                                 {
  178.                                                                 P2=0xf7;//個位段碼開
  179.                 P3=LED_CODE[num%10];
  180.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  181.                                                                 P2=0xff;//段碼關
  182.                                                                 P3=0xff;//位碼消隱
  183.                                                 }
  184.                                                 if(dd == 1&& num/10!=0)                                //顯示十位
  185.                                                 {
  186.                                                                 P2=0xfb;//十位段碼開
  187.                 P3=LED_CODE[num/10%10];
  188.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  189.                                                                 P2=0xff;//段碼關
  190.                                                                 P3=0xff;//位碼消隱
  191.                                                 }
  192.                                         }
  193.                                         break;       
  194.                         case 4:                //顯示總電壓
  195.                                         for(dd=0;dd<4;dd++)
  196.                                         {
  197.                                                 if(dd == 0)                                //顯示個位
  198.                                                 {
  199.                                                                 P2=0xf7;//個位段碼開
  200.                 P3=LED_CODE[vcc%10];
  201.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  202.                                                                 P2=0xff;//段碼關
  203.                                                                 P3=0xff;//位碼消隱
  204.                                                 }
  205.                                                 if(dd == 1)                                //顯示十位
  206.                                                 {
  207.                                                                 P2=0xfb;//十位段碼開
  208.                 P3=LED_CODE[vcc/10%10];
  209.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  210.                                                                 P2=0xff;//段碼關
  211.                                                                 P3=0xff;//位碼消隱
  212.                                                 }
  213.                                                 if(dd == 2)                                //顯示百位
  214.                                                 {
  215.                                                                 P2=0xfd;//百位段碼開
  216.                 P3=LED_CODE[vcc/100%10];
  217.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  218.                                                                 P2=0xff;//段碼關
  219.                                                                 P3=0xff;//位碼消隱
  220.                                                 }
  221.                                                 if(dd  == 3)                                //顯示千位
  222.                                                 {
  223.                                                                 P2=0xfe;//千位段碼開
  224.                 P3=LED_CODE[vcc/1000]&0x7f;
  225.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  226.                                                                 P2=0xff;//段碼關
  227.                                                                 P3=0xff;//位碼消隱
  228.                                                 }       
  229.                                         }
  230.                                         break;       
  231.                         case 5:                //顯示第一節電容電壓
  232.                                         for(dd=0;dd<4;dd++)
  233.                                         {
  234.                                                 if(dd == 0)                                //顯示個位
  235.                                                 {
  236.                                                                 P2=0xf7;//個位段碼開
  237.                 P3=LED_CODE[v1/10%10];                //個位顯示電壓小數點后第二位
  238.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  239.                                                                 P2=0xff;//段碼關
  240.                                                                 P3=0xff;//位碼消隱
  241.                                                 }
  242.                                                 if(dd == 1)                                //顯示十位
  243.                                                 {
  244.                                                                 P2=0xfb;//十位段碼開
  245.                 P3=LED_CODE[v1/100%10];        //十位顯示電壓小數點后第一位
  246.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  247.                                                                 P2=0xff;//段碼關
  248.                                                                 P3=0xff;//位碼消隱
  249.                                                 }
  250.                                                 if(dd == 2)                                //顯示百位
  251.                                                 {
  252.                                                                 P2=0xfd;//百位段碼開
  253.                 P3=LED_CODE[v1/1000]&0x7f;        //百位顯示電壓小數點前一位+小數點
  254.                                                                 for(ke = 0;ke <100;ke++);                //延時一段時間
  255.                                                                 P2=0xff;//段碼關
  256.                                                                 P3=0xff;//位碼消隱
  257.                                                 }
  258.                                                 if(dd  == 3)                                //顯示千位
  259.                                                 {
  260.                                                                 P2=0xfe;//千位段碼開
  261.                 P3=LED_S[0];                                                        //千位顯示第一節電容符號
  262.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  263.                                                                 P2=0xff;//段碼關
  264.                                                                 P3=0xff;//位碼消隱
  265.                                                 }       
  266.                                         }
  267.                                         break;
  268.                         case 6:                //顯示第二節電容電壓
  269.                                         for(dd=0;dd<4;dd++)
  270.                                         {
  271.                                                 if(dd == 0)                                //顯示個位
  272.                                                 {
  273.                                                                 P2=0xf7;//個位段碼開
  274.                 P3=LED_CODE[v2/10%10];                //個位顯示電壓小數點后第二位
  275.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  276.                                                                 P2=0xff;//段碼關
  277.                                                                 P3=0xff;//位碼消隱
  278.                                                 }
  279.                                                 if(dd == 1)                                //顯示十位
  280.                                                 {
  281.                                                                 P2=0xfb;//十位段碼開
  282.                 P3=LED_CODE[v2/100%10];        //十位顯示電壓小數點后第一位
  283.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  284.                                                                 P2=0xff;//段碼關
  285.                                                                 P3=0xff;//位碼消隱
  286.                                                 }
  287.                                                 if(dd == 2)                                //顯示百位
  288.                                                 {
  289.                                                                 P2=0xfd;//百位段碼開
  290.                 P3=LED_CODE[v2/1000]&0x7f;        //百位顯示電壓小數點前一位+小數點
  291.                                                                 for(ke = 0;ke <100;ke++);                //延時一段時間
  292.                                                                 P2=0xff;//段碼關
  293.                                                                 P3=0xff;//位碼消隱
  294.                                                 }
  295.                                                 if(dd  == 3)                                //顯示千位
  296.                                                 {
  297.                                                                 P2=0xfe;//千位段碼開
  298.                 P3=LED_S[1];                                                        //千位顯示第二節電容符號
  299.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  300.                                                                 P2=0xff;//段碼關
  301.                                                                 P3=0xff;//位碼消隱
  302.                                                 }       
  303.                                         }
  304.                                         break;       
  305.                         case 7://顯示主菜單
  306.                                         for(dd=0;dd<4;dd++)
  307.                                         {
  308.                                                 if(dd == 0)                                //顯示個位
  309.                                                 {
  310.                                                                 P2=0xf7;//個位段碼開
  311.                 P3=LED_S[0];
  312.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  313.                                                                 P2=0xff;//段碼關
  314.                                                                 P3=0xff;//位碼消隱
  315.                                                 }
  316.                                                 if(dd == 1)                                //顯示十位
  317.                                                 {
  318.                                                                 P2=0xfb;//十位段碼開
  319.                 P3=LED_S[1];
  320.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  321.                                                                 P2=0xff;//段碼關
  322.                                                                 P3=0xff;//位碼消隱
  323.                                                 }
  324.                                                 if(dd == 2)                                //顯示百位
  325.                                                 {
  326.                                                                 P2=0xfd;//百位段碼開
  327.                 P3=LED_S[0];
  328.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  329.                                                                 P2=0xff;//段碼關
  330.                                                                 P3=0xff;//位碼消隱
  331.                                                 }
  332.                                                 if(dd == 3)                                //顯示千位
  333.                                                 {
  334.                                                                 P2=0xfe;//千位段碼開
  335.                 P3=LED_S[1];
  336.                                                                 for(ke = 0;ke <100;ke++);        //延時一段時間
  337.                                                                 P2=0xff;//段碼關
  338.                                                                 P3=0xff;//位碼消隱
  339.                                                 }
  340.                                         }                       
  341.                         default:
  342.                                         break;
  343.                 }
  344. }

  345. //按鍵處理函數
  346. //返回按鍵值1~4
  347. //mode:0,不支持連續按;1,支持連續按;
  348. //0,沒有任何按鍵按下

  349. u8 KEY_Scan(u8 mode)
  350. {         
  351.                                 static u8 key_up=1;//按鍵標志
  352.         if(mode) key_up=1;  //支持連按      
  353.                                 //檢測按鍵是否按下      
  354.         if(key_up&&(key1==0||key2==0||key3==0||key4==0))
  355.         {
  356.                 Delay(100);//去抖動
  357.                 if(key_up&&(key1==0||key2==0||key3==0||key4==0))
  358.                 {
  359.                                key_up=0;
  360.                                 if     (key1     == 0)           return 1;
  361.                                 else if(key2     == 0)           return 2;
  362.                                 else if(key3     == 0)           return 3;
  363.                                 else if(key4     == 0)           return 4;
  364.                                                                                                                          
  365.                 }
  366.         }
  367.         //檢測按鍵是否松開
  368.         else if(key1==1 && key2==1 && key3==1 && key4==1)        key_up=1;      
  369.                                 return 0;//無按鍵按下
  370. }

  371. void Main_Menu()
  372. {
  373.                                 u8 i;
  374.                                 u8 m5=stst();
  375.                                 if(m5 == 1)
  376.                                 {
  377.                                         for(i=0;i<num;i++)        //加入 for循環,表明for循環大括號中的程序循環執行num次
  378.                                           {
  379.                                                 out=0;                                        //將P4.1口賦值 0,對外輸出低電平
  380.                                                 Delay(pulse);                //調用延時程序;更改延時數字可以更改延時長度;用于改變輸出脈沖時間pulse×100us
  381.                                                 out=1;                                        //將P4.1口賦值 1,對外輸出高電平
  382.                                                 Delay(interval);//等待間隔時間
  383.                                           }
  384.                                 }
  385.                                 display(7);                                        //顯示主菜單CC
  386.                                 switch(KEY_Scan(0))      
  387.          {
  388.            case 1:                     //key1按下
  389.               Page_Sgin=1;             //頁面選擇置1,進入菜單1--脈沖長度調節
  390.                                                         break;
  391.            case 2:                     //key2按下
  392.               Page_Sgin=2;             //頁面選擇置2,進入菜單2--脈沖間隔調節
  393.                                                         break;
  394.            case 3:                     //key3按下
  395.               Page_Sgin=3;             //頁面選擇置3,進入菜單3--脈沖次數調節
  396.                                                         break;
  397.            case 4:                     //key4按下
  398.               Page_Sgin=4;             //頁面選擇置4,進入菜單4--電容電壓顯示
  399.                                                         break;
  400.            default:
  401.                                                         break;
  402.          }               
  403. }

  404. void Menu_1()                                                                        //菜單1--脈沖長度調節
  405. {

  406.                                 switch(KEY_Scan(0))      
  407.          {               
  408.            case 1:                                     //key1按下
  409.               if(pulse < 999)
  410.                                                                 pulse++;                                                                         //脈沖長度+1
  411.                                                         break;
  412.            case 2:                                     //key2按下
  413.               if(pulse > 1)
  414.                                                                 pulse--;                                                                         //脈沖長度-1
  415.                                                         break;
  416.                                          case 3:                               //key3按下
  417.                                                         pulse=20;                                     //脈沖長度恢復預置,2ms
  418.                                                         break;
  419.            case 4:                                     //key4按下
  420.               Page_Sgin=0;                             //back to 主菜單
  421.                                                         break;
  422.            default :
  423.            break;
  424.          }       
  425.                                 display(1);                                                                                                //顯示菜單1-顯示脈沖長度                       
  426. }

  427. void Menu_2()                                                                        //菜單2--脈沖間隔調節
  428. {
  429.                                 switch(KEY_Scan(0))      
  430.          {               
  431.            case 1:                                     //key1按下
  432.               if(interval < 999)
  433.                                                                 interval++;                                                                //脈沖長度+1
  434.                                                         break;
  435.            case 2:                                     //key2按下
  436.               if(interval > 1)
  437.                                                                 interval--;                                                                //脈沖長度-1
  438.                                                         break;
  439.                                          case 3:                               //key3按下
  440.                                                         interval=3;                             //脈沖長度恢復預置,300us
  441.                                                         break;
  442.            case 4:                                     //key4按下
  443.               Page_Sgin=0;                             //back to 主菜單
  444.                                                         break;
  445.            default :
  446.            break;
  447.          }       
  448.                                 display(2);                                                                                                //顯示菜單2-顯示間隔長度               
  449. }

  450. void Menu_3()                                                                        //菜單3--脈沖次數調節
  451. {
  452.                                 switch(KEY_Scan(0))      
  453.          {               
  454.            case 1:                                     //key1按下
  455.               if(num < 99)
  456.                                                                 num++;                                                                                //脈沖次數+1
  457.                                                         break;
  458.            case 2:                                     //key2按下
  459.               if(num > 1)
  460.                                                                 num--;                                                                                //脈沖次數-1
  461.                                                         break;
  462.                                          case 3:                               //key3按下
  463.                                                         num=3;                                                     //脈沖次數恢復預置,3次
  464.                                                         break;
  465.            case 4:                                     //key4按下
  466.               Page_Sgin=0;                             //back to 主菜單
  467.                                                         break;
  468.            default :
  469.            break;
  470.          }       
  471.                                 display(3);                                                                                                //顯示菜單3-顯示脈沖次數       
  472. }

  473. void Menu_4()                                                                        //菜單4--電容電壓顯示
  474. {
  475.                                 u16 ib,jb;                                                //定義延遲用臨時變量
  476.                           v1=GetResult (7);                        //獲取第一節電池電壓
  477.                                 v2=vcc-v1;                              //計算得到第二節電池電壓
  478.                                
  479.                                 switch(KEY_Scan(0))      
  480.          {               
  481.            case 1:                                     //key1按下
  482.                                                         for (ib = 5000; ib > 0; ib--) //外層循環1000次
  483.                                                                 {
  484.                                                                 for (jb = 124; jb > 0; jb--) ; //內層循環124次,延時一定長度用于顯示第一節電容電壓
  485.                                                                         {
  486.                                                                                 display(5);                                                //顯示第一節電容電壓
  487.                                                                         }
  488.                                                                 }

  489.                                                         break;
  490.            case 2:                                     //key2按下
  491.                                                         for (ib = 5000; ib > 0; ib--) //外層循環1000次
  492.                                                                 {
  493.                                                                 for (jb = 124; jb > 0; jb--) ; //內層循環124次,延時一定長度用于顯示第二節電容電壓
  494.                                                                         {
  495.                                                                                 display(6);                                                //顯示第二節電容電壓
  496.                                                                         }
  497.                                                                 }
  498.                                                         break;
  499.                                          case 3:                                                                       //key3按下,保持當前配置于EEPROM
  500.                                                         IapErase(0x0400);                                                                                        //擦除EEPROM
  501.                                                         IapProgram(0x0400, pulse>> 8);                                //寫入pulse高8位
  502.                                                         IapProgram(0x0401, pulse & 0xff);                        //寫入pulse低8位
  503.                                                         IapProgram(0x0402, interval>> 8);                        //寫入interval高8位                                 
  504.                                                         IapProgram(0x0403, interval & 0xff);        //寫入interval低8位
  505.                                                         IapProgram(0x0404, num);                                                        //寫入num         
  506.                                                         break;
  507.            case 4:                                     //key4按下
  508.               Page_Sgin=0;                             //back to 主菜單
  509.                                                         break;
  510.            default :
  511.            break;
  512.          }       
  513.                                         display(4);                                                                                                //顯示總電壓=VCC               
  514. }

  515. void lnterface()  //人機界面
  516. {      
  517.         switch(Page_Sgin)      
  518.         {               
  519.                 case 0:
  520.                              Main_Menu(); break;
  521.                 case 1:
  522.                              Menu_1();                 break;
  523.                 case 2:
  524.                              Menu_2();                 break;
  525.                                                                 case 3:
  526.                              Menu_3();                 break;
  527.                 case 4:
  528.                              Menu_4();                break;                              
  529.                 default :                                                                         break;
  530.         }
  531. }

  532. void main()                                                                                                                //主函數//
  533. {      
  534.                         pulse = IapRead(0x0400);                                //pulse讀EEPROM
  535.                         pulse <<= 8;                                                                                 //pulse恢復高位
  536.                         pulse |= IapRead(0x0401);                         //pulse或上低位
  537.                         interval = IapRead(0x0402);                        //interval讀EEPROM
  538.                         interval <<= 8;                                                                 //interval恢復高位
  539.                         interval |= IapRead(0x0403);                 //interval或上低位       
  540.                         num=IapRead(0x0404);                                          //num=讀EEPROM
  541.                         out=1;                                                                 //初始化輸出端口
  542.                         tst= 1;                                                                //初始化焊筆檢測端口
  543.                         Page_Sgin=0;                                        //初始化頁面選擇
  544.                         vcc=GetVCC();                                  //獲取總電壓
  545.                         while(1)
  546.                         {
  547.                                 lnterface();
  548.                         }
  549. }  
復制代碼







評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏46 分享淘帖 頂7 踩
回復

使用道具 舉報

沙發
ID:328014 發表于 2020-5-21 15:11 | 只看該作者
好東東  能分享下電路與代碼嗎?
回復

使用道具 舉報

板凳
ID:29594 發表于 2020-5-21 19:30 | 只看該作者
SPOT WELDING.rar (34.37 KB, 下載次數: 346)
分享PCB與程序。

評分

參與人數 1黑幣 +30 收起 理由
admin + 30 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:29594 發表于 2020-5-22 20:16 | 只看該作者

繼續發mos板的圖,16顆mos管用2×20的銅排連接,每顆mos管用兩個m3螺絲固定在銅排上,中間的銅排是D極,兩邊圍合的是S極,G極全部翹起來,準備后續弄個洞洞板連接起來。G極接到PCB控制板上的MOS-G,S極接電容負極,D極接點焊筆A,電容正極接點焊筆B,同時D極接到PCB控制板上的TST,這樣當點焊筆A和B同時點在鎳片上時,會自動延遲大約1秒,然后觸發點焊輸出。
回復

使用道具 舉報

5#
ID:430492 發表于 2020-5-24 18:34 | 只看該作者
樓主有電路圖分享不?
回復

使用道具 舉報

6#
ID:29594 發表于 2020-5-25 08:58 | 只看該作者
cooleaf 發表于 2020-5-24 18:34
樓主有電路圖分享不?


電路圖么有,把PBC的反面也貼圖上來,簡單說明一下:
P3.0~P3.7接共陽數碼管的A~DP,P2.0~P2.3通過1K電阻、9012和220R接數碼管的DIG1~DIG4,P0.0~P0.3接4個按鍵,
P4.1接TLP250的1腳,P5.5接PC817的4腳。
測電壓的部分參考STC8官方文檔,利用P1.7的ADC7通道測電容第一節的電壓,背面絲印的104電容,實際上可以焊在正面IC座里面。
其它如PCB,電路比較簡單,比照著PCB看一下就明白了。
另外那個1.4元的升壓模塊,周末測了測,還是可以用的哈哈。
回復

使用道具 舉報

7#
ID:430492 發表于 2020-5-25 19:18 | 只看該作者
感謝樓主分享!!
回復

使用道具 舉報

8#
ID:29594 發表于 2020-5-30 10:05 | 只看該作者




下面這片是脈沖20(2ms),間隔4(0.4ms),次數4,也就是2ms的脈沖間隔0.4ms連續4次,效果蠻好的,非常牢,用老虎鉗拉只能把鎳片拉壞,焊點不掉。
那么這次點焊機的DIY就算基本成功了。后續有空弄個殼子。

回復

使用道具 舉報

9#
ID:755390 發表于 2020-5-30 15:18 | 只看該作者
能點1mm的不銹鋼嗎?
回復

使用道具 舉報

10#
ID:29594 發表于 2020-5-30 19:52 | 只看該作者
阿東奎 發表于 2020-5-30 15:18
能點1mm的不銹鋼嗎?

不清楚,我估計不行,手頭只有0.15的鍍鎳片,我也只是用來焊焊電池。這個電流是大概可以估計出來的,大約在2000A的樣子吧。之前用微波爐變壓器的那種,電流在幾百安的數量級。這個還是猛不少的。焊1.0不銹鋼可以參考修車場里那種工業用的,那種都要好幾千安培甚至上萬安培電流了吧。
回復

使用道具 舉報

11#
ID:253767 發表于 2020-6-4 06:57 | 只看該作者
謝謝分享!!!
回復

使用道具 舉報

12#
ID:770222 發表于 2020-6-5 12:12 來自手機 | 只看該作者
牛人太多了乙,多謝分享
回復

使用道具 舉報

13#
ID:546568 發表于 2020-6-5 15:55 | 只看該作者
牛人啊,最近正對著感興趣,學習了!
回復

使用道具 舉報

14#
ID:774678 發表于 2020-6-10 09:29 | 只看該作者
厲害了,這個得學習一下兒
回復

使用道具 舉報

15#
ID:345562 發表于 2020-6-13 14:39 | 只看該作者
好完整的的資源,謝謝分享。
回復

使用道具 舉報

16#
ID:241916 發表于 2020-7-4 11:08 | 只看該作者
板子D的真漂亮,有水準
回復

使用道具 舉報

17#
ID:399111 發表于 2020-7-16 14:16 | 只看該作者
你的MOS什么型號啊
回復

使用道具 舉報

18#
ID:56960 發表于 2020-7-16 17:13 | 只看該作者
為DIY精神點贊,頂帖+收藏!
回復

使用道具 舉報

19#
ID:29594 發表于 2020-7-17 09:25 | 只看該作者
YYZZ052 發表于 2020-7-16 14:16
你的MOS什么型號啊

IRF3713×16個。那個寶廣東拆機貨,1塊1個
回復

使用道具 舉報

20#
ID:353831 發表于 2020-7-18 23:46 來自手機 | 只看該作者
樓主  怎么給電容充電啊!另外用的什么充電器?
回復

使用道具 舉報

21#
ID:29594 發表于 2020-7-19 09:26 | 只看該作者
wl020807 發表于 2020-7-18 23:46
樓主  怎么給電容充電啊!另外用的什么充電器?

用兩個普通的5v充電器,某寶買兩個恒壓恒流模塊,調整到2.75v,1A~2A,分別給兩個電容充電。
回復

使用道具 舉報

22#
ID:712493 發表于 2020-7-23 21:34 | 只看該作者
樓主:
1、1-2A充電,要多久能滿,充一次可以打幾個焊點
2、3000F電容是并聯放電,還是串聯放電,或最后是多少電壓 ,多少容量在放電  謝謝
回復

使用道具 舉報

23#
ID:29594 發表于 2020-7-25 21:12 | 只看該作者
fj51hei 發表于 2020-7-23 21:34
樓主:
1、1-2A充電,要多久能滿,充一次可以打幾個焊點
2、3000F電容是并聯放電,還是串聯放電,或最后 ...

1、充電時間沒有測過,我是拿太陽能板輸入,恒流輸出大概3A沖的,大約一刻鐘就滿了。充滿可以打幾個焊點?我也沒測過哈哈。
2、串聯放電。2.75V*2。
回復

使用道具 舉報

24#
ID:712493 發表于 2020-8-2 21:52 | 只看該作者
zuse1021 發表于 2020-7-25 21:12
1、充電時間沒有測過,我是拿太陽能板輸入,恒流輸出大概3A沖的,大約一刻鐘就滿了。充滿可以打幾個焊點 ...

就是串并聯后3000F/5.5V的電容,謝謝答疑
回復

使用道具 舉報

25#
ID:29594 發表于 2020-8-31 08:24 | 只看該作者
據壇友反映,仿制后無法保存設置的問題,忘了在主貼中說了,這個單片機的EEPROM是可以自定義大小的,當時好像是利用了4K的大小,各位如果刷ROM到單片機中時,可以選擇4K的EEPROM大小來刷。
回復

使用道具 舉報

26#
ID:53978 發表于 2020-9-1 08:34 | 只看該作者
這個可以有,感謝分享。
回復

使用道具 舉報

27#
ID:828103 發表于 2020-10-11 21:04 | 只看該作者
這個是好東西啊
回復

使用道具 舉報

28#
ID:824917 發表于 2020-10-27 18:37 來自手機 | 只看該作者
你好,請問為什么我下載了卻解壓不了?手機不行,電腦也不行。
回復

使用道具 舉報

29#
ID:328014 發表于 2020-10-27 18:49 | 只看該作者
搞事DIY 發表于 2020-10-27 18:37
你好,請問為什么我下載了卻

我剛剛用winrar在win10成功解壓了.可能是你沒有用winrar這個軟件吧
回復

使用道具 舉報

30#
ID:824917 發表于 2020-10-27 18:58 來自手機 | 只看該作者
我確實沒有winrsr,我到時試一下。
回復

使用道具 舉報

31#
ID:824917 發表于 2020-10-27 18:59 來自手機 | 只看該作者
51hei團團 發表于 2020-10-27 18:49
我剛剛用winrar在win10成功解壓了.可能是你沒有用winrar這個軟件吧

我確實沒有,我到時下來試一下。
回復

使用道具 舉報

32#
ID:824917 發表于 2020-10-27 21:14 來自手機 | 只看該作者
用winrar成功解壓
回復

使用道具 舉報

33#
ID:288629 發表于 2020-10-30 13:05 | 只看該作者
樓主動手能力太強了,佩服
回復

使用道具 舉報

34#
ID:639666 發表于 2020-10-30 19:18 | 只看該作者
zuse1021 發表于 2020-7-25 21:12
1、充電時間沒有測過,我是拿太陽能板輸入,恒流輸出大概3A沖的,大約一刻鐘就滿了。充滿可以打幾個焊點 ...

場效應管G極的驅動電壓也是5伏?還是升壓板升為12伏來驅動?
回復

使用道具 舉報

35#
ID:29594 發表于 2020-10-30 20:18 | 只看該作者
lhxtzlhxtz 發表于 2020-10-30 19:18
場效應管G極的驅動電壓也是5伏?還是升壓板升為12伏來驅動?

升壓模塊升壓到16v驅動
回復

使用道具 舉報

36#
ID:842023 發表于 2020-11-11 16:28 | 只看該作者
τ 寶成品的點焊MOS板,mos太少,請問樓主線多粗
回復

使用道具 舉報

37#
ID:24379 發表于 2021-1-16 21:49 | 只看該作者
這個牛,就是升壓模塊是為了mos管飽和導通是嗎?
回復

使用道具 舉報

38#
ID:848720 發表于 2021-1-18 11:42 | 只看該作者
有沒有原理圖?
回復

使用道具 舉報

39#
ID:748246 發表于 2021-2-12 11:42 | 只看該作者
6666666待會兒畫pcb試試
回復

使用道具 舉報

40#
ID:884089 發表于 2021-2-16 19:44 來自手機 | 只看該作者
這個mos管的s接哪個呢
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕一区二区三区乱码在线 | 久久精品国产一区 | 99这里只有精品 | 国产最好的av国产大片 | 精品国产乱码久久久久久影片 | 亚洲一区在线日韩在线深爱 | 亚洲精品第一 | 精品九九在线 | 欧美久久电影 | 欧美男男videos | 在线观看一区 | 一级片在线视频 | 天天摸天天干 | 成人午夜毛片 | 日日摸夜夜添夜夜添精品视频 | 国产精品一区二区三区四区 | 国产一极毛片 | 亚洲精品黄色 | 在线成人| 成人在线一区二区 | 一级黄色毛片免费 | 在线一区观看 | www.成人.com| 久久最新网址 | 免费久久精品视频 | 久久国产精品一区二区三区 | 亚洲成人免费网址 | 日韩成人影院 | 亚洲精彩视频 | 美女逼网站 | 一区二区三区亚洲精品国 | 成人精品国产免费网站 | 国产精品视频久久久久 | 91视频一区二区三区 | 成人福利在线视频 | 欧美炮房| 亚洲最新在线视频 | 成人精品一区二区三区中文字幕 | 99久久久无码国产精品 | 精品久久国产 | 欧美四虎 |