找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2899|回复: 2
打印 上一主题 下一主题
收起左侧

我也来 普通氩弧焊改冷焊机

  [复制链接]
跳转到指定楼层
楼主
在论坛看到个普通氩弧焊改冷焊机程序的帖子挺有意思的,可惜只发了代码部分。
我也有个氩弧焊机啊没法了干脆自己动手也搞了个发上来一起研究下。
先上电路图,


看看嘉立创里的效果哈哈


已经装机了,没有焊板子的图了直接上装机效果https://www.bilibili.com/video/BV1nW4y1u7tz/?spm_id_from=333.999.0.0&vd_source=319f267cc6110f5c414f91b611c5d0d8

代码因为不是KEIL的随便看看就好了,最后面会放编译完的固件的。
  1. #define KEY_COUNT_DESHAKING 15//按键消抖时间15MS
  2. #define KEY_COUNT_LONGT 1000//长按按键判断时间1000MS
  3. #define KEY_COUNT_DUAL 180//双击按键判断时间180MS
  4. #define KEY_LONG_REPEAT 2000//长按按键时响应的时间间隔2000MS
  5. #define  TASKS_MAX   4
  6. #define SMG_PORT P1
  7. #define SMG_PORT_MODE {P1M1=0x00;P1M0=0xff;}//P1推挽输出
  8. #define SMG_WEI1 P3_5
  9. #define SMG_WEI1_OUT {P3M1&=~0x20;P3M0|=0x20;}//P3_5推挽输出
  10. #define SMG_WEI2 P3_1
  11. #define SMG_WEI2_OUT {P3M1&=~0x02;P3M0|=0x02;}//P3_1推挽输出
  12. #define SMG_WEI3 P3_6
  13. #define SMG_WEI3_OUT {P3M1&=~0x40;P3M0|=0x40;}//P3_6推挽输出
  14. #define smg_lx0
  15. #define duan_0
  16. #define smg_clear
  17. #define smg_shunum
  18. #define smg_displa_dian
  19. #define smg_update_buf

  20. #include <STC8HX.h>
  21. uint32 sys_clk = 24000000;//设置PWM、定时器、串口、EEPROM频率参数
  22. #include "myLib/LUNXUN.h"
  23. #include "shumaguan.h"
  24. #include "lib/eeprom.h"
  25. #include "myLib/EC11_51.h"//声明库头文件
  26. #include "xiaogju.h"

  27. uint8 huilingjs = 0;
  28. uint8 dianhanzt = 0;
  29. uint16 i = 0;
  30. uint8 shezhishijian[3]={0,0,0};
  31. uint8 jianhc_A1;

  32. void Timer0Init(void)        //100微秒@24.000MHz
  33. {
  34.   AUXR &= 0x7f;                //定时器时钟12T模式
  35.   TMOD &= 0xf0;                //设置定时器模式
  36.   TL0 = 0x38;                        //设定定时初值
  37.   TH0 = 0xff;                        //设定定时初值
  38. }

  39. void T_IRQ0(void) interrupt 1 using 1{
  40.   TaskReMarks(); //此函数在中断中调用
  41. }

  42. void renwu1() {
  43.   //↑ ↑ ↑显示更新处理/100ms
  44.   switch (shezhishijian[(int)(2)]) {
  45.    case 0:
  46.     smg_display_clear_bit(8);//数码管清指定位
  47.     smg_display_num(1-1,shezhishijian[(int)(0)]);//数码管显示数字
  48.     break;
  49.    case 1:
  50.     smg_display_clear_bit(8);//数码管清指定位
  51.     smg_display_num(1-1,(shezhishijian[(int)(1)]<<1));//数码管显示数字
  52.     smg_display_dian(2-1,1);//数码管指定位控制小数点
  53.     smg_display_dian(3-1,1);//数码管指定位控制小数点
  54.     break;
  55.    case 2:
  56.     smg_display_clear_bit(8);//数码管清指定位
  57.     smg_display_update_buf(1-1,15);//数码管指定位显示字符
  58.     smg_display_update_buf(2-1,15);//数码管指定位显示字符
  59.     smg_display_update_buf(3-1,0);//数码管指定位显示字符
  60.     break;
  61.   }
  62.   if((huilingjs != 0) && (shezhishijian[(int)(2)] != 2)){
  63.     huilingjs--;
  64.     if(huilingjs == 0){
  65.       shezhishijian[(int)(2)] = 0;
  66.       eeprom_sector_erase(0);  //EEPROM擦除指定扇区
  67.       eeprom_write_uchar(0,shezhishijian,(sizeof(shezhishijian)/sizeof(shezhishijian[0])));  //EEPROM写数据
  68.     }
  69.   }

  70. }
  71. xdata tongdaoHC HC_A1 = {0,0,0,0,0,0,0};//声明A1通道全局结构体缓存
  72. void renwu0() {
  73.   //↑ ↑ ↑编码器输入处理/1ms
  74.   smg_scan_callback(10);//数码管扫描回调
  75.    HC_A1.EC11_A_dq = P3_3;
  76.    HC_A1.EC11_B_dq = P3_4;
  77.    HC_A1.EC11_D_dq = P3_2;
  78.    jianhc_A1 = Encoder_EC11_Scan(&HC_A1);
  79.    switch ( jianhc_A1)
  80.     {
  81.       case 1:
  82.          if(shezhishijian[(int)(2)] < 2){
  83.       if(shezhishijian[(int)(shezhishijian[(int)(2)])] >= 12){
  84.         shezhishijian[(int)(shezhishijian[(int)(2)])] = shezhishijian[(int)(shezhishijian[(int)(2)])] - 1;
  85.       }
  86.       huilingjs = 30;
  87.     }
  88.        break;
  89.       case 2:
  90.          if(shezhishijian[(int)(2)] < 2){
  91.       if(shezhishijian[(int)(shezhishijian[(int)(2)])] < 255){
  92.         shezhishijian[(int)(shezhishijian[(int)(2)])] = shezhishijian[(int)(shezhishijian[(int)(2)])] + 1;
  93.       }
  94.       huilingjs = 30;
  95.     }
  96.        break;
  97.       case 3:
  98.          if(shezhishijian[(int)(2)] < 2){
  99.       if(shezhishijian[(int)(shezhishijian[(int)(2)])] >= 30){
  100.         shezhishijian[(int)(shezhishijian[(int)(2)])] = shezhishijian[(int)(shezhishijian[(int)(2)])] - 10;
  101.       }
  102.       huilingjs = 30;
  103.     }
  104.        break;
  105.       case 4:
  106.          if(shezhishijian[(int)(2)] < 2){
  107.       if(shezhishijian[(int)(shezhishijian[(int)(2)])] < 240){
  108.         shezhishijian[(int)(shezhishijian[(int)(2)])] = shezhishijian[(int)(shezhishijian[(int)(2)])] + 10;
  109.       }
  110.       huilingjs = 30;
  111.     }
  112.        break;
  113.       case 5:
  114.             break;
  115.       case 6:
  116.          if(shezhishijian[(int)(2)] == 0){
  117.       shezhishijian[(int)(2)] = 1;
  118.     }
  119.     else{
  120.       shezhishijian[(int)(2)] = 0;
  121.       eeprom_sector_erase(0);  //EEPROM擦除指定扇区
  122.       eeprom_write_uchar(0,shezhishijian,(sizeof(shezhishijian)/sizeof(shezhishijian[0])));  //EEPROM写数据
  123.     }
  124.     huilingjs = 30;
  125.        break;
  126.       case 7:
  127.          if(shezhishijian[(int)(2)] != 2){
  128.       shezhishijian[(int)(2)] = 2;
  129.       eeprom_sector_erase(0);  //EEPROM擦除指定扇区
  130.       eeprom_write_uchar(0,shezhishijian,(sizeof(shezhishijian)/sizeof(shezhishijian[0])));  //EEPROM写数据
  131.     }
  132.     else{
  133.       shezhishijian[(int)(2)] = 0;
  134.       eeprom_sector_erase(0);  //EEPROM擦除指定扇区
  135.       eeprom_write_uchar(0,shezhishijian,(sizeof(shezhishijian)/sizeof(shezhishijian[0])));  //EEPROM写数据
  136.     }
  137.        break;
  138.       case 8:
  139.             break;
  140.     }
  141.   WDT_CONTR = 0X38;//在溢出设定时间到前调用

  142. }
  143. void renwu2() {
  144.   //↑ ↑ ↑点焊处理/1ms
  145.   if(shezhishijian[(int)(2)] == 2){
  146.     if(P5_4){
  147.       P3_7 = 0;
  148.       smg_display_dian(1-1,0);//数码管指定位控制小数点
  149.       dianhanzt = 0;
  150.     }
  151.     else{
  152.       P3_7 = 1;
  153.       smg_display_dian(1-1,1);//数码管指定位控制小数点
  154.     }
  155.   }
  156.   else{
  157.     if(P5_4){
  158.       P3_7 = 0;
  159.       smg_display_dian(1-1,0);//数码管指定位控制小数点
  160.       dianhanzt = 0;
  161.     }
  162.     else{
  163.       switch (dianhanzt) {
  164.        case 0:
  165.         P3_7 = 1;
  166.         smg_display_dian(1-1,1);//数码管指定位控制小数点
  167.         dianhanzt = 1;
  168.         i = 0;
  169.         break;
  170.        case 1:
  171.         i++;
  172.         if(i >= shezhishijian[(int)(0)]){
  173.           P3_7 = 0;
  174.           smg_display_dian(1-1,0);//数码管指定位控制小数点
  175.           dianhanzt = 2;
  176.           i = 0;
  177.         }
  178.         break;
  179.        case 2:
  180.         i++;
  181.         if(i >= 1000){
  182.           P3_7 = 1;
  183.           smg_display_dian(1-1,1);//数码管指定位控制小数点
  184.           dianhanzt = 3;
  185.           i = 0;
  186.         }
  187.         break;
  188.        case 3:
  189.         i++;
  190.         if(i >= shezhishijian[(int)(0)]){
  191.           P3_7 = 0;
  192.           smg_display_dian(1-1,0);//数码管指定位控制小数点
  193.           dianhanzt = 4;
  194.           i = 0;
  195.         }
  196.         break;
  197.        case 4:
  198.         i++;
  199.         if(i >= (shezhishijian[(int)(1)]<<1)){
  200.           P3_7 = 1;
  201.           smg_display_dian(1-1,1);//数码管指定位控制小数点
  202.           dianhanzt = 3;
  203.           i = 0;
  204.         }
  205.         break;
  206.       }
  207.     }
  208.   }

  209. }

  210. void setup()
  211. {
  212.   P5M1|=0x10;P5M0&=~0x10;//高阻输入
  213.   P3M1&=~0x80;P3M0|=0x80;//推挽输出
  214.   Timer0Init();
  215.   TR0 = 1;// 定时器0开始计时
  216.   EA = 1; // 控制总中断
  217.   ET0 = 1; // 控制定时器中断
  218.   TaskComps[0].Yun = 1;
  219.    TaskComps[0].Run = 1;
  220.    TaskComps[0].Timer = 10;
  221.    TaskComps[0].ItvTimer = 10;
  222.    TaskComps[0].TaskHook = renwu0;
  223.   TaskComps[1].Yun = 1;
  224.    TaskComps[1].Run = 1;
  225.    TaskComps[1].Timer = 1000;
  226.    TaskComps[1].ItvTimer = 1000;
  227.    TaskComps[1].TaskHook = renwu1;
  228.   TaskComps[2].Yun = 1;
  229.    TaskComps[2].Run = 1;
  230.    TaskComps[2].Timer = 10;
  231.    TaskComps[2].ItvTimer = 10;
  232.    TaskComps[2].TaskHook = renwu2;
  233.   smg_init();//数码管初始化
  234.   smg_display_clear_bit(8);//数码管清指定位
  235.   eeprom_read_uchar(0,shezhishijian,(sizeof(shezhishijian)/sizeof(shezhishijian[0])));  //EEPROM读数据
  236.   P3M1|=0x04;P3M0&=~0x04;//P3_2高阻输入
  237.   P3M1|=0x10;P3M0&=~0x10;//P3_4高阻输入
  238.   P3M1|=0x08;P3M0&=~0x08;//P3_3高阻输入
  239. }

  240. void loop()
  241. {
  242.   TaskProcess();
  243.   TaskProcess();
  244.   TaskProcess();
  245. }

  246. void main(void)
  247. {
  248.   setup();
  249.   while(1){
  250.     loop();
  251.   }
  252. }
复制代码
完工后面上干货了。

上图8个文件下载: 氩弧焊脉冲点焊控制.rar (474.88 KB, 下载次数: 71)

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:1084100 发表于 2023-6-14 16:52 | 只看该作者
楼主问下大电流是怎么控制的,能上个图吗,看有的用mos管  有的用igbt  也不知道选什么型号合适
回复

使用道具 举报

板凳
ID:399179 发表于 2023-8-7 22:11 来自手机 | 只看该作者
单片机会不会受到高压的干扰?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表