矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 10792|回复: 17

做微波炉点焊机,接触器精确定时

[复制链接]
     
发表于 2020-3-28 20:40:54 | 显示全部楼层 |阅读模式
本帖最后由 xyz123 于 2020-3-28 22:39 编辑

为了用18650电芯做电池组,做个点焊机。
用大电容来做,需许多MOS管,好复杂。先做个微波炉变压器式的。
变压器初级电流估计十几A,用可控硅不熟练,决定先用接触器。

设想功能,要能测量220V交流过零点、精确控制接触器吸合时刻,能设置焊接时间,能保存参数。
手边有几块以前做步进电机简单控制用的电路板,用上。
大众款51单片机,1602液晶屏,按键、LED指示灯、继电器……元件搜罗起来也不少。
001.jpg
002.jpg

动手焊接。有几个元件是拆机的,偶然测量了一下,发现一个三极管是坏的。
003.jpg

其它晶振、LED、电容等可能也混有不良品。做试验焊两套,出问题时好对比。
004.jpg

以前做的步进电机简单控制用的电路板,把单片机的31脚接错了,该接+5V的。
005.gif
液晶屏的数据线D4~D7也错了一位接到单片机的P0.3~P0.6脚了,应该接P0.4~P0.7才方便。只好用程序来补坑。

大众款1602字符屏,控制芯片一般是HD44780或相似的,可显示常用的数字、英文字母、符号。
为了少焊几根线,采用4位接口模式。与8位接口模式相比,程序多几行,执行耗时多几十微秒,无妨。
006.gif
常见1602屏资料里,调节对比度的10K电位器两端分别接+5V、GND。其实对比度合适时,液晶屏V0脚的电压约1V,因此电位器上端多串一个电阻,调节起来较平缓,否则稍旋一点就看不清了。
手中的几块屏,背光LED已串有一个几Ω电阻,太小了,背光电流甚至有近百mA的。多串个几十Ω电阻,令背光电流降到二三十mA较合适。

焊排线花了不少时间,要把排线划开弯曲对好焊盘位置后才剪齐平、剥线头、搓线芯。要做多的话肯定要改成用插座的方式。
007.jpg
008.jpg

过零触发用的是交流9V供电入口接两个二极管,飞了一根线,驱动一个三极管。交流过零时三极管截止,集电极接的单片机引脚上便出现一个高电平脉冲。
009.jpg

液晶屏的1、2脚是GND和+5V,焊个0.1μF的电容改善供电,排线用热熔胶固定。
010.jpg
虽然屏电流只有几mA很小,但接口波形是μs级的方波,对电源瞬时要求不低。不知为何,见过的1602液晶模块都没有在靠近芯片处放一小电容。


每天只可贴10张图啊?
     
发表于 2023-1-24 20:00:56 | 显示全部楼层
只绕了两圈,线还预留了那么长(内阻会较大),都能焊好,说明只要焊接时间足够长,还是能焊上厚件的。足见得那些用更粗的线,还绕了三圈及其以上的网友,说火花太大,问怎么办。看来减少圈数,降低焊接电压,延长焊接时间,是正确的减少火花的方法。
回复 支持 1 反对 0

使用道具 举报

     
发表于 2020-3-31 02:13:29 | 显示全部楼层
以接触器的响应速度来说,检测零点没有意义。
回复 支持 1 反对 0

使用道具 举报

     
 楼主| 发表于 2020-3-28 22:06:56 | 显示全部楼层
本帖最后由 xyz123 于 2020-3-28 22:12 编辑

电路板焊好后,首先要闪个灯,以确认基本正常。
  1. while (1)
  2. {
  3.     LED_PIN = ~LED_PIN;
  4.     Delay_ms(500);
  5. }
复制代码


延时在很多地方用到,例如液晶屏接口时序控制,蜂鸣器,液晶屏文字显示停留时间,焊接时间控制等。因此做成一个子程序。
Keil C51调用函数时传递参数、LCALL,函数返回的RET,开销是固定的。在C程序中嵌入汇编指令,在计数判断分支时插入适当的NOP指令,保证跳或不跳都耗同样的时间,就能准确实现延时若干个机器周期。

使用12MHz晶振时,传统51单片机一个机器周期是1μs,比较简洁。延时函数就写成
  1. void Delay_us(int8u t);
复制代码

1个字节只能计到255μs,此延时程序适用于电路时序控制等需要十几~一两百微秒延时的地方。

8位的51单片机处理16位数,要做到恒定步数,须处理的判断分支处较复杂,因此另写一个
  1. void Delay_us_2(int16u t);
复制代码

参数是2字节整数,可实现几十~65535μs的延时。

超过上百毫秒,就不需精确到微秒程度了,可调用刚才的Delay_us_2()。
  1. void Delay_ms(int16u t)
  2. {
  3.     while (t != 0)
  4.     {
  5.         Delay_us_2(99x);
  6.         t -= 1;
  7.     }
  8. }
复制代码

回复 支持 反对

使用道具 举报

     
发表于 2020-3-28 22:33:57 | 显示全部楼层
我还有个半成品闲置,微波炉那种。
电焊机没做好,18650就被我淘汰了。直接大单体了。
回复 支持 反对

使用道具 举报

     
发表于 2020-3-29 08:37:51 来自手机 | 显示全部楼层
会编程真好,享受过程,乐趣无穷
回复 支持 反对

使用道具 举报

     
发表于 2020-3-29 08:39:17 来自手机 | 显示全部楼层
继电器和可控硅,哪个性能更优?
回复 支持 反对

使用道具 举报

     
发表于 2020-3-29 09:13:07 来自手机 | 显示全部楼层
我是网购了焊接效果更佳的双脉冲控制板来制作的,因为这制作挺费劲的,所以宁愿多花点成本,以求获得好收成。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-3-29 10:55:50 | 显示全部楼层
接下来要点亮液晶屏。

大众款1602字符屏,控制芯片一般是HD44780或相似的。
虽是大众款,可芯片手册难见一份准确的,连初始化的几条指令流程都讲得不太清晰,各兼容芯片的手册都差不多。日货一向小气,估计此芯片的内部逻辑结构、设计意图、应用细节,只有厂商自珍了。所以让接口时序和指令耗时兼容各家产品的最慢者就行了,其它没多少好考究的。
4位接口模式的初始化流程:
  1.         上电后等待几十毫秒;
  2.         写B0011xxxx;
  3.         等待几毫秒;
  4.         写B0011xxxx;
  5.         等待几毫秒;
  6.         写B0011xxxx;
  7.         写B0010xxxx;                //切换到4bit模式
  8.         分两次写B0010_10xx;        //4bit数据接口,两行,5×7点阵
  9.         分两次写B0000_1000;        //DisplayOff
  10.         分两次写B0000_0001;        //DisplayClear
  11.         分两次写B0000_0110;        //EntryModeSet
  12.         分两次写B0000_1101;        //开显示
复制代码


虽然芯片规格称接口速度能到1MHz,但液晶模块里PCB走线细且长,又未适当接电源退耦电容,用示波器观察可见波形边沿形状不好。所以将控制脉冲放慢到2~3μs。

使用12MHz晶振时,传统51单片机一条指令耗时一、二μs,和HD44780配合较合适。现今的单时钟周期51单片机或其它高速单片机主频十几MHz以上,1μs能运行十多条指令,受影响明显。

虽然HD44780提供BUSY信号可查询,但控制指令总共就清屏、设置模式、设置光标、读写数据、读写地址这几条,执行耗时都是固定的,没必要去读BUSY信号。
况且读BUSY信号这个操作本身也和其它指令一样速度不高。
再有,网上见的资料大多没提到,读BUSY信号这个操作还须等上一次指令之后好几十微秒才能进行。呃,除了清屏、归零两条指令耗时1.5ms外,其它指令耗时均才37μs,比等候BUSY信号能用还快咧。

HD44780每行的显存是40个字符,1602屏每行只可显示16个字符。
屏幕滚动的功能似乎没什么用,估计不太会用它去做滚动广告、屏保之类。对显示效果要求不高,一般也不会去搞两屏内容快速切换。
因此写几个常用的功能就够。
  1. void LcdLocate(int8u row, int8u col);  //指定字符显示位置。
  2. void LcdPrint(int8u c);  //显示一个字符。
  3. void LcdPrintString(int8u row, int8u col, int8u *str);  //依次显示str中的字符,直至'\0'。不考虑超出16列、换行。
  4. void LcdClearRow(int8u row);  //其实就是从行首位置起显示16个空格。
复制代码


例如,程序初始的界面:
  1. LcdInit();
  2. LcdPrintString(1, 1, "  Spot Welder");
  3. LcdPrintString(2, 1, "    2020-02");
复制代码

02-01.jpg


接下来是按键。

设置一个定时中断,每1ms扫描一遍按键,记录每个按键的状态、持续时间。当连续若干次的状态不变时,才认为按键已稳定。
通常微动开关的按键抖动在几毫秒以内。若要过滤50Hz市电线路的干扰,可将判断时间加长到几十毫秒,不过按键的响应也会相应延迟。这个时间值可做进参数设置功能里,让用户自由变更。

在菜单操作中,按+、-键调节数值时,短按一次增减1步长,若持续按键达一两秒则连续自动调节,例如一秒重复10次。
大范围的调节,例如“触发延迟10~15000μs,调节步长10μs”,一秒重复10次的话,持续按键要150秒才能调到头,显然太久。一般按着键十几秒估计就令人厌烦了。
因此须判断当持续按键超过例如3秒后,进一步加速,例如一秒重复100次。

有些产品按键很少,看似简洁,但用起来要区分短按、长按,功能复用太多,很麻烦。
这里准备6个按键:设置,取消,减,增,确认,焊接。
按〖设置〗进入参数设置菜单,〖减〗〖增〗移动光标,〖确认〗进入该项,〖取消〗退回上一级菜单。
在参数项目中,按〖减〗〖增〗进行调节,持续按着可快速调节,按〖确认〗保存,〖取消〗则放弃更改。

调试观察,扫描一次6个按键要耗好几百步。传统51单片机接12MHz晶振时,1ms里有六七百μs都用来处理按键了。
简单控制类的应用通常运算量不多,需要的是响应速度。按上述情况,若不用高优先级中断,就要等几百微秒处理完按键之后再来响应其它事件,而且剩下的处理能力只剩两百多步了。
例如控制步进电机,一圈200个脉冲,每秒5转,则每1ms要处理一个脉冲,1ms内只剩两百多μs来处理,较吃力。
换成现今的单周期51,速度翻十几倍,1ms里只用去了几十μs,能充分迅速地响应其它事件。

现在做这个点焊机控制,没什么需要高速响应的控制,焊接动作那几百毫秒精确计时期间可暂停按键、液晶屏等其它处理,大众款51足以胜任了。


接下来是存储器。

需要保存的几个参数:
  交流电过零点之后多久触发。
  第一次焊接时间。
  第一次焊接之后等待时间。
  第二次焊接时间。
  第二次焊接之后等待时间。

交流过零检测电路是个电压比较器,检测到电压低于一定值时动作,在零点左右产生一个约1ms宽的脉冲。
程序可能是在零点之前捕捉到,则延时几百μs后即零点。或是零点之后才捕捉到,则下个半波零点是9点几ms之后。
为了保持磁平衡,令变压器每次通电整数个全波,因此零点之后才捕捉到的,下个过零点选在19点几ms之后。
于是,该参数的设置范围是0~20000μs。
整机做好后,用示波器观察程序捕捉到的零点时刻,减去接触器机械动作延迟时间,来做设定。小继电器的动作时间大概是数毫秒,大个头的接触器不知如何。
不用示波器的话,也可观察接触器触点通断时的火花,调节达到火花最小即可。

据说先短焊第一次,可去除氧化层、预热,紧接着焊第二次,这样的效果好。因此预留了两组焊接、等待的时间参数。
为了保持磁平衡,焊接时间取20ms的整数倍,范围定20~2000ms吧。
焊接时间也可短到10ms的倍数,程序里记录是在正半周还是负半周的过零点触发的,下次交换即可。估计20ms够短了,先不考虑太复杂的。

焊接之间的间隔,感觉100~2000ms范围可以了。

AT24Cxx存储器,便宜,IIC接口不复杂。
为防芯片上电自动复位失败,程序应对其发指令复位。方法见芯片手册,通常发至多9个SCL时钟就能完成。
只读写几个字节,不需考虑连续读写、页长度之类的,做两个子程序就好。
  1. void At24cByteWrite(int8u addr, int8u dat);
  2. int8u At24cRandomRead(int8u addr);
复制代码


Keil C51将多字节整数按高位字节先行,保存到AT24Cxx时按同样顺序就好。
例如保存一个2字节整数4779,可在存储器地址0x00存0x12、地址0x01存0xAB。



硬件部分基本好了。接下来是菜单操作过程。

按〖设置〗键,进入菜单。
02-02.jpg
02-03.jpg
02-04.jpg
02-05.jpg
02-06.jpg

按〖减〗〖增〗移动光标,〖确认〗进入该项,〖取消〗退回上一级菜单。
按〖减〗〖增〗进行调节数值,持续按着可快速调节,按〖确认〗保存,〖取消〗则放弃更改。
02-07.jpg
02-08.jpg

退出最初级菜单后,回到等待焊接状态。
02-09.jpg

各项参数都是简单整数,调节过程都是相似的,只是提示文字、数值范围不同。将不同的部分定义一个结构体
  1. typedef struct
  2. {
  3.   int8u *Title;
  4.   int8u *Unit;
  5.   int16u Value;
  6.   int16u ValueMin;
  7.   int16u ValueMax;
  8.   int16u ValueAdj;
  9. } INPUT_DIALOG;
复制代码


做一个子程序InputDialog()来统一调用,比较简洁。例如设置触发延时:
  1. ……
  2. INPUT_DIALOG dialog;

  3. dialog.Title = "Trig Delay";
  4. dialog.Unit = "us";
  5. dialog.Value = (int16u)At24cRandomRead(ADDR_TRIG_DELAY) << 8;
  6. dialog.Value |= At24cRandomRead(ADDR_TRIG_DELAY + 1);
  7. dialog.Value = dialog.Value / 10 * 10;
  8. dialog.ValueMin = 0;
  9. dialog.ValueMax = 20000;
  10. dialog.ValueAdj = 10;

  11. InputDialog(&dialog);
  12. ……
复制代码

02-10.jpg

主程序部分就简单了,按〖设置〗键就进入参数设置菜单,按〖焊接〗则暂停扫描按键、等待过零信号、驱动继电器。
  1.     void main()
  2.     {
  3.         LcdPrintString(1, 1, "  Spot Welder");
  4.         LcdPrintString(2, 1, "    2020-02");
  5.         LoadConfig();
  6.         while(1)
  7.         {
  8.             if (KeyIsPressed(KEY_SETUP))
  9.             {
  10.                 Menu();
  11.                 LoadConfig();
  12.             }
  13.             else if (KeyIsPressed(KEY_WELD))
  14.             {
  15.                 //暂停按键扫描

  16.                 //等待过零信号

  17.                 Delay_us_2(cfg_TrigDelay);

  18.                 RELAY = RELAY_ON;
  19.                 Delay_ms(cfg_WeldingTime1);

  20.                 RELAY = RELAY_OFF;
  21.                 Delay_ms(cfg_WaitingTime1);

  22.                 RELAY = RELAY_ON;
  23.                 Delay_ms(cfg_WeldingTime2);

  24.                 RELAY = RELAY_OFF;
  25.                 Delay_ms(cfg_WaitingTime2);

  26.                 //恢复按键扫描
  27.             }
  28.         }
  29.     }
复制代码

回复 支持 反对

使用道具 举报

     
发表于 2020-3-29 11:08:24 | 显示全部楼层
好帖子,顶顶
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-3-30 12:14:36 | 显示全部楼层
电路板焊好了,用示波器检测一下。
02-11.jpg

过零检测用的是交流9V供电入口接两个二极管,驱动一个三极管。交流过零时三极管截止,集电极接的单片机引脚上便出现一个高电平脉冲。
02-12.gif
估计是因为小变压器内阻高,仅几十mA的平均电流,整流后的正弦半波顶部已被拉平了。

放大看看。
02-13.gif
02-14.gif
过零检测用的三极管集电极接的单片机引脚本来是接键盘用的,有个0.1μF电容滤波,懒得拆了,所以触发波形的上升沿较缓。现在检测的是下降沿,不要紧。

再放大一点。
02-15.gif
可见触发脉冲约800μs,即单片机在过零点之后400μs才检测到。

将“触发延迟”这项参数就设为10ms-400μs=9600μs,用单片机的一个空余引脚输出一个信号来观察。
02-16.gif
能准确定位到下个过零点。

将参数设置为“第一焊20ms、间隔100ms、第二焊40ms”的效果。
02-17.gif

程序基本搞定。

遇到的弯路,拆机件蜂鸣器是坏的,所用的液晶屏背光极性和常见的引脚排列相反。
看来用旧元件最好一一检测过,步步为营,不然调试程序时易踩坑。
回复 支持 反对

使用道具 举报

     
发表于 2020-3-30 12:58:12 | 显示全部楼层
我不知道楼主要实现多大的焊接时间,一般我都是一到两个正弦波,所以这个一定要过零触发,可控硅很容易实现,就是不清楚继电器的控制特性是怎么个情况
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-3-30 16:21:24 | 显示全部楼层
开始组装。

接触器是地摊旧货,天正CJX2-1810。看起来蛮新的,拆开来检查,发现三组主触点中有两组熏黑严重。估计之前被用来接马达之类的感性负载。
用割纸刀片刮干净。运气还可以,虽熏黑,但烧蚀很少,看来没用几次。
03-01.jpg

订购牛奶那种挂家门口的小塑料箱,旧楼拆迁时去拆了几个,要的就是那几块塑料板。
手边无曲线锯,钻排孔。
03-02.jpg
03-03.jpg

牛奶箱本来被涂写得乱七八糟,太难看,用砂纸磨了一遍。
03-04.jpg
方孔开得大了,忘了其实露出液晶屏玻璃片大小就可以了。

手边无合适的柱子,先拿筷条顶上。
03-05.jpg
03-06.jpg

以前囤的微波炉变压器,铜线的
空开也是地摊买的旧货,施耐德的。小变压器是从个电动栏杆门的控制板上拆的。
正泰的TB-1503接线端子,导体条铜的。本地机电市场里卖的无牌货全是铁的。
03-07.jpg
不知电压对焊接效果影响如何,先绕2圈试看。

一个简单的继电器小板子,光耦隔离。控制板先驱动继电器,继电器再通断接触器的线圈。
03-08.jpg
03-09.jpg

通断只有几十~几百毫秒,担心接触器线圈火花干扰大,以及影响驱动它的小继电器的触点寿命,加个吸收元件。
03-10.jpg
内部就是0.1μF电容串联一两百Ω的电阻。这个是从个日货仪器的电路板里拆得的,不太常见。自己用个安规电容串个两三瓦的电阻,效果一样的。
淘宝见也有和接触器配套的这个消火花配件卖,正泰的八九块~十几块,蛮贵的。估计买的少,物稀为贵了。
若非保护前级价格贵的PLC的输出继电器,或是对干扰要求严格的场合,或自用的设备认真做,一般不愿多花这个钱。客户只看价格,耐用性低以后还可搞点维护费。

接线还蛮多的。试验机,线头就不压端子了。
03-11.jpg
03-12.jpg
03-13.jpg
03-14.jpg
点焊时磁场干扰可能高,液晶屏和按键板的线缆不要太长。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-3-31 17:39:30 | 显示全部楼层
本帖最后由 xyz123 于 2020-3-31 17:42 编辑

接触器的辅助触点接一节电池提供个电压,示波器观察动作时间。
先看看单发焊40ms的。
03-15.gif
下方蓝色波形上沿是控制板输出驱动信号。上方黄色波形第一簇干扰即小继电器吸合、接触器线圈得电产生的磁场感应到示波器探头,可见其动作延迟约5ms。
接触器线圈得电后,又过约15ms,接触器的触点才吸合。看来要经过半个波以上的时间,线圈的磁力才足以拉动触点。

再试一下双发焊,第一次20ms、间隔100ms、第二次焊40ms。
03-16.gif
发现接触器的触点都是在交流过零点时刻吸合。
之前一直忘了接触器的线圈也是交流220V这点,如此看来,若要实现非10ms周期的通断,就要使用直流线圈的接触器了。还好现在只做20ms整周期的,不影响。

时局不测,手边工具材料有限,焊针就用6平方毫米的单芯铜线,直接捆好。
03-17.jpg
手里只有10平方毫米的7芯线,比较硬,穿变压器费了点力。电焊机的焊把线那种细芯电缆应该会方便不少。
1平方毫米铜线每米电阻18mΩ,为了预留多绕几圈的试验,共1.5米长,算得电阻约3mΩ。
猜测电流有200~800A,10平方毫米细了点。不过通电时间比例小,先试看效果。

量了一下变压器,初级电阻不到1Ω,电感212mH,理论上空载电流3A多。
做好放炮准备——通电!空载焊几下,没跳闸

试焊0.12mm厚的镀镍片,只听线圈嗡嗡震动,丝毫没有加热迹象,奇怪。
万用表量变压器次级,2.1V。不像是电压太低、被焊件接触不良的样子。

这时发觉电缆略发热,可能刚才捆焊针那段没包好,手持摁着时短路了。包好,再来。
小遇波折,急于攻克,设个单发1000ms……唔,500ms吧。焊!
03-18.jpg
嗡一声,哦,威力太猛,眼看着迅速红热,熔了绿豆大小的一片。

把凳子面也烫了个坑。还好刚才没设置成1000ms,不然飞溅钢花烫手
03-19.jpg

刮干净看看。0.5mm厚的割纸刀片已被熔透,蛮强大的嘛。
03-20.jpg
03-21.jpg

试试不同焊接时间的效果。
单发焊,从左到右分别是180ms、160ms、140ms、120ms、100ms、80ms、60ms、40ms,每种时间值焊了两次,即4个点痕。
03-22.jpg
实际上是从最右侧那个500ms坑开始,从右往左,依次增大焊接时间值来试的。

每对焊痕右边的较大,是因为手持焊针不方便,焊针不垂直于工件,两针受力也不均。
03-23.jpg
初步感觉,单发焊,薄的工件用40~100ms合适。工件表面要干净,焊针要施适当压力,最好做个夹具。

铜线头毫无烧蚀,看来少量用用,不必买那叫氧化铝铜材质的焊针了。
03-24.jpg

焊点热冷变形,刀片被拉弯了。以后想要这种略带弧度的刮猪毛刀片可以这么搞。
03-25.jpg
回复 支持 反对

使用道具 举报

     
发表于 2020-3-31 18:55:44 | 显示全部楼层
谢谢分享学习中
回复 支持 反对

使用道具 举报

     
发表于 2020-5-16 10:38:35 | 显示全部楼层
这个不是一般人能做的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-29 13:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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