找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 24211|回復(fù): 54
收起左側(cè)

也做3000F超級(jí)電容點(diǎn)焊機(jī)(已補(bǔ)充PCB和程序)

  [復(fù)制鏈接]
ID:29594 發(fā)表于 2020-5-21 08:48 | 顯示全部樓層 |閱讀模式
本帖最后由 zuse1021 于 2020-5-21 21:09 編輯

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

考慮到5塊包郵的嘉立創(chuàng),PCB的長(zhǎng)度被設(shè)定為10cm,右上方是0.36寸四位共陽(yáng)數(shù)碼管,三極管是四個(gè)9012,四個(gè)按鍵,其它元件在PCB上都標(biāo)注了。
BOOST MODULE是升壓模塊,初步打算用這個(gè)模塊:

輸出控制在16v~18v左右,PCB也是按這個(gè)模塊的尺寸來(lái)畫(huà)的。然而買回來(lái)一個(gè)卻無(wú)法升壓,大概是壞了,因?yàn)橹毁I了1個(gè),所以也不知道這個(gè)模塊是不是能用上,另一家買的另一種升壓模塊倒是可以升壓,但尺寸不對(duì)應(yīng)哈哈。
四個(gè)按鍵用于控制脈沖長(zhǎng)度、脈沖間隔和脈沖次數(shù)的設(shè)定,同時(shí)可以利用EEPROM儲(chǔ)存,斷電保存上一次的設(shè)置,還用于顯示電容電壓。
下面介紹按鍵的作用:
key1--進(jìn)入菜單1--脈沖長(zhǎng)度調(diào)節(jié)--顯示脈沖長(zhǎng)度
key1-- +1
key2-- -1
key3-- 恢復(fù)預(yù)設(shè)值
key4-- back to main

key2--進(jìn)入菜單2--脈沖間隔調(diào)節(jié)--顯示脈沖間隔
key1-- +1
key2-- -1
key3-- 恢復(fù)預(yù)設(shè)值
key4-- back to main

key3--進(jìn)入菜單3--脈沖次數(shù)調(diào)節(jié)--顯示脈沖次數(shù)
key1-- +1
key2-- -1
key3-- 恢復(fù)預(yù)設(shè)值
key4-- back to main

key4--進(jìn)入菜單4--電容電壓顯示--顯示總電壓
key1-- 顯示第一節(jié)電容電壓
key2-- 顯示第二節(jié)電容電壓
key3-- 保持當(dāng)前配置于EEPROM
key4-- back to main

MOS板初步打算16個(gè)irf3713并聯(lián),也可以某寶入一個(gè)成品的點(diǎn)焊MOS板。
實(shí)際上,只測(cè)試了電路和程序沒(méi)問(wèn)題,還沒(méi)有實(shí)際裝起來(lái)。程序和PCB文件待補(bǔ)充,下面是兩張焊了一部分的照片。

01.jpg
02.jpg 3L補(bǔ)充了PCB和程序,有興趣的可以下載大致分了兩個(gè)部分,一部分是main.c,是主程序,另一部分是ADCread.c,用于測(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;                                                                //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
  7. typedef unsigned char u8;                                                                //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義

  8. sbit key1=P0^0;        //P0.0端口定義為時(shí)間減
  9. sbit key2=P0^1;        //P0.1端口定義為時(shí)間加
  10. sbit key3=P0^2;        //P0.2端口定義為按下顯示第一節(jié)電容電壓
  11. sbit key4=P0^3;        //P0.3端口定義為按下顯示第二節(jié)電容電壓
  12. sbit out=P4^1;                   //P4.1端口定義為驅(qū)動(dòng)脈沖輸出
  13. sbit tst=P5^5;       //P5.5端口定義為檢測(cè)點(diǎn)焊筆準(zhǔn)備焊接的輸入端

  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;                                                  //輸出脈沖長(zhǎng)度,×0.1毫秒
  19. u16 interval;                                                //脈沖間隔,×0.1毫秒
  20. u8  num;                                                                //脈沖次數(shù)
  21. u16 v1;                                                                        //第一電容電壓
  22. u16 v2;                                                                        //第二電容電壓
  23. u16 vcc;                                                                //總電壓               
  24. u8  Page_Sgin;                                        //頁(yè)面選擇
  25. u8 zz;

  26. //數(shù)碼管真值表//
  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. //延時(shí)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. //檢測(cè)點(diǎn)焊筆準(zhǔn)備//
  46. bit stst(void)
  47. {
  48.         static unsigned  int l = 0;                        //定義靜態(tài)變量,用來(lái)記錄延時(shí)用.                  
  49.         if(tst == 0)                                                                                //如果檢測(cè)到按鍵引腳有低電平,記數(shù)變量開(kāi)始累加.
  50.         {
  51.                 if(l <7000)                                                                                //控制延時(shí)計(jì)數(shù)返0,因?yàn)楫?dāng)按鍵不松開(kāi)時(shí),i一直在累加
  52.                         l++;                                                                                                //CPU每檢測(cè)到一次按鍵引腳為低電平0,i就累加1次.
  53.         }
  54.         else                                                                                                                //如果按鍵沒(méi)有按下或者按下后有高電平(抖動(dòng))i清0
  55.                 l = 0;
  56.         if(l == 6999)                                                                                //如果變量i的值累加到6999,說(shuō)明點(diǎn)焊筆已經(jīng)做好準(zhǔn)備,可以焊接了.
  57.                 return 1;                                                                                        //返回1,說(shuō)明已檢測(cè)到按鍵有效值.
  58.         else
  59.                 return 0;                                                                                        //返回0,說(shuō)明沒(méi)有檢測(cè)到有效值.
  60. }

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

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

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

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

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

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

  349. u8 KEY_Scan(u8 mode)
  350. {         
  351.                                 static u8 key_up=1;//按鍵標(biāo)志
  352.         if(mode) key_up=1;  //支持連按      
  353.                                 //檢測(cè)按鍵是否按下      
  354.         if(key_up&&(key1==0||key2==0||key3==0||key4==0))
  355.         {
  356.                 Delay(100);//去抖動(dòng)
  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.         //檢測(cè)按鍵是否松開(kāi)
  368.         else if(key1==1 && key2==1 && key3==1 && key4==1)        key_up=1;      
  369.                                 return 0;//無(wú)按鍵按下
  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循環(huán),表明for循環(huán)大括號(hào)中的程序循環(huán)執(zhí)行num次
  378.                                           {
  379.                                                 out=0;                                        //將P4.1口賦值 0,對(duì)外輸出低電平
  380.                                                 Delay(pulse);                //調(diào)用延時(shí)程序;更改延時(shí)數(shù)字可以更改延時(shí)長(zhǎng)度;用于改變輸出脈沖時(shí)間pulse×100us
  381.                                                 out=1;                                        //將P4.1口賦值 1,對(duì)外輸出高電平
  382.                                                 Delay(interval);//等待間隔時(shí)間
  383.                                           }
  384.                                 }
  385.                                 display(7);                                        //顯示主菜單CC
  386.                                 switch(KEY_Scan(0))      
  387.          {
  388.            case 1:                     //key1按下
  389.               Page_Sgin=1;             //頁(yè)面選擇置1,進(jìn)入菜單1--脈沖長(zhǎng)度調(diào)節(jié)
  390.                                                         break;
  391.            case 2:                     //key2按下
  392.               Page_Sgin=2;             //頁(yè)面選擇置2,進(jìn)入菜單2--脈沖間隔調(diào)節(jié)
  393.                                                         break;
  394.            case 3:                     //key3按下
  395.               Page_Sgin=3;             //頁(yè)面選擇置3,進(jìn)入菜單3--脈沖次數(shù)調(diào)節(jié)
  396.                                                         break;
  397.            case 4:                     //key4按下
  398.               Page_Sgin=4;             //頁(yè)面選擇置4,進(jìn)入菜單4--電容電壓顯示
  399.                                                         break;
  400.            default:
  401.                                                         break;
  402.          }               
  403. }

  404. void Menu_1()                                                                        //菜單1--脈沖長(zhǎng)度調(diào)節(jié)
  405. {

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

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

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

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

  489.                                                         break;
  490.            case 2:                                     //key2按下
  491.                                                         for (ib = 5000; ib > 0; ib--) //外層循環(huán)1000次
  492.                                                                 {
  493.                                                                 for (jb = 124; jb > 0; jb--) ; //內(nèi)層循環(huán)124次,延時(shí)一定長(zhǎng)度用于顯示第二節(jié)電容電壓
  494.                                                                         {
  495.                                                                                 display(6);                                                //顯示第二節(jié)電容電壓
  496.                                                                         }
  497.                                                                 }
  498.                                                         break;
  499.                                          case 3:                                                                       //key3按下,保持當(dāng)前配置于EEPROM
  500.                                                         IapErase(0x0400);                                                                                        //擦除EEPROM
  501.                                                         IapProgram(0x0400, pulse>> 8);                                //寫(xiě)入pulse高8位
  502.                                                         IapProgram(0x0401, pulse & 0xff);                        //寫(xiě)入pulse低8位
  503.                                                         IapProgram(0x0402, interval>> 8);                        //寫(xiě)入interval高8位                                 
  504.                                                         IapProgram(0x0403, interval & 0xff);        //寫(xiě)入interval低8位
  505.                                                         IapProgram(0x0404, num);                                                        //寫(xiě)入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()  //人機(jī)界面
  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()                                                                                                                //主函數(shù)//
  533. {      
  534.                         pulse = IapRead(0x0400);                                //pulse讀EEPROM
  535.                         pulse <<= 8;                                                                                 //pulse恢復(fù)高位
  536.                         pulse |= IapRead(0x0401);                         //pulse或上低位
  537.                         interval = IapRead(0x0402);                        //interval讀EEPROM
  538.                         interval <<= 8;                                                                 //interval恢復(fù)高位
  539.                         interval |= IapRead(0x0403);                 //interval或上低位       
  540.                         num=IapRead(0x0404);                                          //num=讀EEPROM
  541.                         out=1;                                                                 //初始化輸出端口
  542.                         tst= 1;                                                                //初始化焊筆檢測(cè)端口
  543.                         Page_Sgin=0;                                        //初始化頁(yè)面選擇
  544.                         vcc=GetVCC();                                  //獲取總電壓
  545.                         while(1)
  546.                         {
  547.                                 lnterface();
  548.                         }
  549. }  
復(fù)制代碼







評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:328014 發(fā)表于 2020-5-21 15:11 | 顯示全部樓層
好東東  能分享下電路與代碼嗎?
回復(fù)

使用道具 舉報(bào)

ID:29594 發(fā)表于 2020-5-21 19:30 | 顯示全部樓層
SPOT WELDING.rar (34.37 KB, 下載次數(shù): 346)
分享PCB與程序。

評(píng)分

參與人數(shù) 1黑幣 +30 收起 理由
admin + 30 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:29594 發(fā)表于 2020-5-22 20:16 | 顯示全部樓層
51hei圖片20200522193511.jpg
繼續(xù)發(fā)mos板的圖,16顆mos管用2×20的銅排連接,每顆mos管用兩個(gè)m3螺絲固定在銅排上,中間的銅排是D極,兩邊圍合的是S極,G極全部翹起來(lái),準(zhǔn)備后續(xù)弄個(gè)洞洞板連接起來(lái)。G極接到PCB控制板上的MOS-G,S極接電容負(fù)極,D極接點(diǎn)焊筆A,電容正極接點(diǎn)焊筆B,同時(shí)D極接到PCB控制板上的TST,這樣當(dāng)點(diǎn)焊筆A和B同時(shí)點(diǎn)在鎳片上時(shí),會(huì)自動(dòng)延遲大約1秒,然后觸發(fā)點(diǎn)焊輸出。
回復(fù)

使用道具 舉報(bào)

ID:430492 發(fā)表于 2020-5-24 18:34 | 顯示全部樓層
樓主有電路圖分享不?
回復(fù)

使用道具 舉報(bào)

ID:29594 發(fā)表于 2020-5-25 08:58 | 顯示全部樓層
cooleaf 發(fā)表于 2020-5-24 18:34
樓主有電路圖分享不?

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

使用道具 舉報(bào)

ID:430492 發(fā)表于 2020-5-25 19:18 | 顯示全部樓層
感謝樓主分享!
回復(fù)

使用道具 舉報(bào)

ID:29594 發(fā)表于 2020-5-30 10:05 | 顯示全部樓層
51hei圖片20200530094848.jpg
51hei圖片20200530094809.jpg
51hei圖片20200530094855.jpg
51hei圖片20200530094905.jpg
下面這片是脈沖20(2ms),間隔4(0.4ms),次數(shù)4,也就是2ms的脈沖間隔0.4ms連續(xù)4次,效果蠻好的,非常牢,用老虎鉗拉只能把鎳片拉壞,焊點(diǎn)不掉。
那么這次點(diǎn)焊機(jī)的DIY就算基本成功了。后續(xù)有空弄個(gè)殼子。

回復(fù)

使用道具 舉報(bào)

ID:755390 發(fā)表于 2020-5-30 15:18 | 顯示全部樓層
能點(diǎn)1mm的不銹鋼嗎?
回復(fù)

使用道具 舉報(bào)

ID:29594 發(fā)表于 2020-5-30 19:52 | 顯示全部樓層
阿東奎 發(fā)表于 2020-5-30 15:18
能點(diǎn)1mm的不銹鋼嗎?

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

使用道具 舉報(bào)

ID:253767 發(fā)表于 2020-6-4 06:57 | 顯示全部樓層
謝謝分享!!!
回復(fù)

使用道具 舉報(bào)

ID:770222 發(fā)表于 2020-6-5 12:12 來(lái)自手機(jī) | 顯示全部樓層
牛人太多了乙,多謝分享
回復(fù)

使用道具 舉報(bào)

ID:546568 發(fā)表于 2020-6-5 15:55 | 顯示全部樓層
牛人啊,最近正對(duì)著感興趣,學(xué)習(xí)了!
回復(fù)

使用道具 舉報(bào)

ID:774678 發(fā)表于 2020-6-10 09:29 | 顯示全部樓層
厲害了,這個(gè)得學(xué)習(xí)一下兒
回復(fù)

使用道具 舉報(bào)

ID:345562 發(fā)表于 2020-6-13 14:39 | 顯示全部樓層
好完整的的資源,謝謝分享。
回復(fù)

使用道具 舉報(bào)

ID:241916 發(fā)表于 2020-7-4 11:08 | 顯示全部樓層
板子D的真漂亮,有水準(zhǔn)
回復(fù)

使用道具 舉報(bào)

ID:399111 發(fā)表于 2020-7-16 14:16 | 顯示全部樓層
你的MOS什么型號(hào)啊
回復(fù)

使用道具 舉報(bào)

ID:56960 發(fā)表于 2020-7-16 17:13 | 顯示全部樓層
為DIY精神點(diǎn)贊,頂帖+收藏!
回復(fù)

使用道具 舉報(bào)

ID:29594 發(fā)表于 2020-7-17 09:25 | 顯示全部樓層
YYZZ052 發(fā)表于 2020-7-16 14:16
你的MOS什么型號(hào)啊

IRF3713×16個(gè)。那個(gè)寶廣東拆機(jī)貨,1塊1個(gè)
回復(fù)

使用道具 舉報(bào)

ID:353831 發(fā)表于 2020-7-18 23:46 來(lái)自手機(jī) | 顯示全部樓層
樓主  怎么給電容充電。×硗庥玫氖裁闯潆娖?
回復(fù)

使用道具 舉報(bào)

ID:29594 發(fā)表于 2020-7-19 09:26 | 顯示全部樓層
wl020807 發(fā)表于 2020-7-18 23:46
樓主  怎么給電容充電。×硗庥玫氖裁闯潆娖?

用兩個(gè)普通的5v充電器,某寶買兩個(gè)恒壓恒流模塊,調(diào)整到2.75v,1A~2A,分別給兩個(gè)電容充電。
回復(fù)

使用道具 舉報(bào)

ID:712493 發(fā)表于 2020-7-23 21:34 | 顯示全部樓層
樓主:
1、1-2A充電,要多久能滿,充一次可以打幾個(gè)焊點(diǎn)
2、3000F電容是并聯(lián)放電,還是串聯(lián)放電,或最后是多少電壓 ,多少容量在放電  謝謝
回復(fù)

使用道具 舉報(bào)

ID:29594 發(fā)表于 2020-7-25 21:12 | 顯示全部樓層
fj51hei 發(fā)表于 2020-7-23 21:34
樓主:
1、1-2A充電,要多久能滿,充一次可以打幾個(gè)焊點(diǎn)
2、3000F電容是并聯(lián)放電,還是串聯(lián)放電,或最后 ...

1、充電時(shí)間沒(méi)有測(cè)過(guò),我是拿太陽(yáng)能板輸入,恒流輸出大概3A沖的,大約一刻鐘就滿了。充滿可以打幾個(gè)焊點(diǎn)?我也沒(méi)測(cè)過(guò)哈哈。
2、串聯(lián)放電。2.75V*2。
回復(fù)

使用道具 舉報(bào)

ID:712493 發(fā)表于 2020-8-2 21:52 | 顯示全部樓層
zuse1021 發(fā)表于 2020-7-25 21:12
1、充電時(shí)間沒(méi)有測(cè)過(guò),我是拿太陽(yáng)能板輸入,恒流輸出大概3A沖的,大約一刻鐘就滿了。充滿可以打幾個(gè)焊點(diǎn) ...

就是串并聯(lián)后3000F/5.5V的電容,謝謝答疑
回復(fù)

使用道具 舉報(bào)

ID:29594 發(fā)表于 2020-8-31 08:24 | 顯示全部樓層
據(jù)壇友反映,仿制后無(wú)法保存設(shè)置的問(wèn)題,忘了在主貼中說(shuō)了,這個(gè)單片機(jī)的EEPROM是可以自定義大小的,當(dāng)時(shí)好像是利用了4K的大小,各位如果刷ROM到單片機(jī)中時(shí),可以選擇4K的EEPROM大小來(lái)刷。
回復(fù)

使用道具 舉報(bào)

ID:53978 發(fā)表于 2020-9-1 08:34 | 顯示全部樓層
這個(gè)可以有,感謝分享。
回復(fù)

使用道具 舉報(bào)

ID:828103 發(fā)表于 2020-10-11 21:04 | 顯示全部樓層
這個(gè)是好東西啊
回復(fù)

使用道具 舉報(bào)

ID:824917 發(fā)表于 2020-10-27 18:37 來(lái)自手機(jī) | 顯示全部樓層
你好,請(qǐng)問(wèn)為什么我下載了卻解壓不了?手機(jī)不行,電腦也不行。
回復(fù)

使用道具 舉報(bào)

ID:328014 發(fā)表于 2020-10-27 18:49 | 顯示全部樓層
搞事DIY 發(fā)表于 2020-10-27 18:37
你好,請(qǐng)問(wèn)為什么我下載了卻

我剛剛用winrar在win10成功解壓了.可能是你沒(méi)有用winrar這個(gè)軟件吧
回復(fù)

使用道具 舉報(bào)

ID:824917 發(fā)表于 2020-10-27 18:58 來(lái)自手機(jī) | 顯示全部樓層
我確實(shí)沒(méi)有winrsr,我到時(shí)試一下。
回復(fù)

使用道具 舉報(bào)

ID:824917 發(fā)表于 2020-10-27 18:59 來(lái)自手機(jī) | 顯示全部樓層
51hei團(tuán)團(tuán) 發(fā)表于 2020-10-27 18:49
我剛剛用winrar在win10成功解壓了.可能是你沒(méi)有用winrar這個(gè)軟件吧

我確實(shí)沒(méi)有,我到時(shí)下來(lái)試一下。
回復(fù)

使用道具 舉報(bào)

ID:824917 發(fā)表于 2020-10-27 21:14 來(lái)自手機(jī) | 顯示全部樓層
用winrar成功解壓
回復(fù)

使用道具 舉報(bào)

ID:288629 發(fā)表于 2020-10-30 13:05 | 顯示全部樓層
樓主動(dòng)手能力太強(qiáng)了,佩服
回復(fù)

使用道具 舉報(bào)

ID:639666 發(fā)表于 2020-10-30 19:18 | 顯示全部樓層
zuse1021 發(fā)表于 2020-7-25 21:12
1、充電時(shí)間沒(méi)有測(cè)過(guò),我是拿太陽(yáng)能板輸入,恒流輸出大概3A沖的,大約一刻鐘就滿了。充滿可以打幾個(gè)焊點(diǎn) ...

場(chǎng)效應(yīng)管G極的驅(qū)動(dòng)電壓也是5伏?還是升壓板升為12伏來(lái)驅(qū)動(dòng)?
回復(fù)

使用道具 舉報(bào)

ID:29594 發(fā)表于 2020-10-30 20:18 | 顯示全部樓層
lhxtzlhxtz 發(fā)表于 2020-10-30 19:18
場(chǎng)效應(yīng)管G極的驅(qū)動(dòng)電壓也是5伏?還是升壓板升為12伏來(lái)驅(qū)動(dòng)?

升壓模塊升壓到16v驅(qū)動(dòng)
回復(fù)

使用道具 舉報(bào)

ID:842023 發(fā)表于 2020-11-11 16:28 | 顯示全部樓層
τ 寶成品的點(diǎn)焊MOS板,mos太少,請(qǐng)問(wèn)樓主線多粗
回復(fù)

使用道具 舉報(bào)

ID:24379 發(fā)表于 2021-1-16 21:49 | 顯示全部樓層
這個(gè)牛,就是升壓模塊是為了mos管飽和導(dǎo)通是嗎?
回復(fù)

使用道具 舉報(bào)

ID:848720 發(fā)表于 2021-1-18 11:42 | 顯示全部樓層
有沒(méi)有原理圖?
回復(fù)

使用道具 舉報(bào)

ID:748246 發(fā)表于 2021-2-12 11:42 | 顯示全部樓層
6666666待會(huì)兒畫(huà)pcb試試
回復(fù)

使用道具 舉報(bào)

ID:884089 發(fā)表于 2021-2-16 19:44 來(lái)自手機(jī) | 顯示全部樓層
這個(gè)mos管的s接哪個(gè)呢
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表