Arduino Mini Spot Welder Port (BK11/18/20 Series)

by LucaF40 in Circuits > Soldering

2394 Views, 9 Favorites, 0 Comments

Arduino Mini Spot Welder Port (BK11/18/20 Series)

s-l1600.jpg

I wrote this Arduino "port" for the BK11/18/20 series "Mini Spot Welders" that are surfacing on the market. I specify these series as there is a previous (still available) series which is actually slightly better but has a fatal defect on the MCU board driver section power which will result in FET failure if driven with an insufficiently powerful battery (the 2 versions look identical from the faceplate photos). This can be fixed by adding a 450 to 1000uF 16V cap between GND and the diode + to keep the driving voltage up. If you have one of these versions I'm sure you will be aware of this mod (suggested by Maker Fabio). In the case of this later and parallel version (different design), the driver section has been moved to the main FET board (and modified) so it is not flawed by this original problem. However, the BK11 version has a post manufacturing "wire bodge" under the main board which should be looked at and I suggest to replace the resistors with 1/4 watt resistors and resolder them. Furthermore the STM8 MCU trigger output pin 19 goes through a 1K resistor which is insufficient to drive the transistor enough to achieve full Gate ON after the push-pull. This resistor should also be replaced by a 470 or 560 Ohm SMD or normal resistor. Here is the Reddit discussion:

https://www.reddit.com/r/18650masterrace/comments/jrnsws/make_the_portable_transistor_mini_spot_welder/gknc9oy/

After having run some tests and blowing a FET (Yes, I'm part of the club!) my MCU board died on me (blank screen no activity). After a short diagnosis the MCU was simply draining an enourmous amount of current (several hundred mAmps) and 2 pins appeared to be shorted to ground (not the trigger but apparently the Vsense and Autotrigger pins). At this point I did some investigation and found out that the 0.96" OLED display was ST7735 based (FP-096H09A) and worked in SPI mode. So I said to myself why not write an Arduino version to drive the display and use the board for some fun? So, if you have a dead MCU board and/or blew some FETs and have one of these versions or simply want to have some fun and feel up to it here's what you can do to get it working again.

Supplies

Arduino Pro Mini 3.3V, USB Serial to TTL converter to program the Arduino Pro Mini (set at 3.3V), some Kynar or thin enough wire, a lot of patience.

Disassemble and Remove BK11-1k MCU Board

20210127_154236.jpg
20210131_221143.jpg

Firstly you need to disassemble it by unscrewing all top 4 and bottom 4 screws to remove the protective plates. If you want you can go ahead and remove the support studs by unscrewing them by hand. You can then simply pull the MCU board off the mainboard.

BK11-1k Mainboard With Driver Section

20210127_154154.jpg
20210130_032430.jpg
20210127_154217.jpg

While you're at it, if you have the BK11-1k version you will have the post manufacturing "fixup" under the main board: you can see it in the 1st (before mod) and 2nd (post mod) pictures. These are 2 SMD resistors (1K and 10K) which BIAS the driver transistor for it to properly drive the Push-Pull which in turn drive the FETs through the resistor array. Mine had bad contact on the 10K resistor so I replaced it with a 1/4watt 10K resistor. I then went ahead and also replaced the 1K for safety (not shown).

BL18 With Fix

bl18-2k_board.png

If you have the BL18 version then this has been fixed and you will
see the 2 resistors placed on the other side near the 2 push-pull transistors so you're ok.

OLED Pins to Solder to Arduino and Code

Arduino-to-OLED_Pins.png
20210131_225341.jpg
Rmod.jpg

Since the MCU is dead (well, maybe not and you want to try it anyhow;) you need to remove it from the board. I used a hot air desoldering gun but you can use solder and flux taking care not to rip any pads off.

Now the hard part - you do need some soldering skills (and patience) as the wiring is critical and there's not much space to solder the connections to the pins. In the second image (and code) there is a description of all the wiring to be done to the OLED. You will need a multimeter to trace the pins so that you can solder them from the pads directly. If you find difficulty because of lack of space you can solder some from the correct traces by scraping some mask off and exposing the track partially. You can use kynar wire or .1/.2mm copper wire or any thin enough wire you can get that fits the job. My suggestion is first program the Arduino Pro Mini (3.3V Version!) and then start wiring the OLED pins, VCC and GND. You can get the VCC off the output of the 3.3V regulator (uppermost pin looking at the pinout photo - check with a multimeter) and gnd from any contact pad that is wired to GND (one side of all pushbuttons is gnd). Before powering it up just check that there isn't any short between VCC and GND. If you short one of the SPI pins it's not a big deal for a few seconds when you turn it on, but doube check that all is ok. You can then power the board by either plugging it back in to test if it boots up or use an external PSU and connecting pins 1 (Battery VCC - not regulator output!) and 5 (GND) to it. Check which pin is which with a tester (pin 1 is labeled with a square on the mask and pin 5 is GND). If the display works it's time to wire the rest, the 3 buttons (easy) the VSense (the 2 resistors indicated in the last image, you can solder the relative arduino input to the middle of this divider or after the 1K resistor on the top) and the Auto trigger pin coming from PIN 3 (middle pin) going to the MCU directly (easy to find). Last but not least the buzzer (also easy as you can just trace it, it's visible) and the manual trigger (trace it from the transistor). Keep in mind that if you power it without conecting it to the mainboard, once you enable it (right button) it will autotrigger in a loop as without the connection the input it will float and trigger randomly (pin 3) so that's normal.

A note on the compilation and ucglib by Oliver Kraus https://github.com/olikraus/ucglib

To get it to compile and dispay correctly on this display version you need to modify a C file.
Add it using the Library manager (search for ucglib). Then modify the INVERT declaration in the Ucglib C file under libraries\Ucglib\src\clib\ucg_dev_tft_128x160_st7735.c

lines 59-60 by commenting out line 59 and removing the commenting on 60:

//UCG_C10(0x20),
UCG_C10(0x21)

This is stated also in the INO file as with many other details you can look into.

Downloads

Testing and Operation

20210206_012256.jpg

To test if everything works, you can go ahead and isolate the arduino with some tape and tuck it between the MCU board and the mainboard, it fits - or simply leave it out for testing. I suggest you use a limited current PSU to run some tests (say 1-5Amps) to see if the autotrigger and the FETs are triggering properly. You can simply touch the terminals together and wait for the trigger and check that the PSU goes into current limitation by setting a 50ms pulse. If you have a scope, check any Gate pin and see what the trigger looks like - it should be above 8V (mine measures around 12). Also with long pulses it should stay stable. Once you are satisfied with the operation you can hookup a good battery (I suggest an AGM with at least 120CCAs but LiPos are ok just take safety precautions - DO NOT USE GEL BATTERIES). Be sure to have a good connection (use good connectors, XT90 for Lipos and screw on crimped/soldered for AGMs)

When it is powered the time defaults to 5ms and the device is unarmed (OFF is displayed in the lower right). To enable it press the right button once and it will enter AUTO trigger mode, press again for MANUAL. If nothing happens within 30 seconds it will disarm itself. This can be changed in the code if you want a longer or shorter auto-disarm delay. Based on your power source you can start getting good welds from 20ms up to 60. You will note the color changes from green to orange after 25ms as this is the working zone. After 50ms it becomes RED with black text because in this zone if you switch to a thinner .1mm) strip you're guaranteed to blow a hole in it and spray some incandescent particles around. This way you are warned. If you want to reset to 5ms in any situation simply press both buttons (up and down) and it will default back to 5ms.

As the method here is *time based* there is no way of determining a precise amount of Energy delivered to the weld as there are several variables such as battery type, connectors, wired length. Usually all this is calibrated before welding on professional spot welding machines by placing the electrodes on the weld and running the calibration: the whole "circuit" acts as a shunt and the voltage drop is calculated in order to determine the resistance and adapt the power to match the energy requested. In theory this could be added by simply adding 2 wires that connect the electode ends to a voltage divider towards an analog input and run a calibration pulse (lower current) and detect the voltage hence introduce a "compensation time" based on a known value. The fact is that this setup is rather limited in what it can deliver - it can weld .1 to .12 strips ok and .15 with difficulty (you need a beefy battery). Once you exceed the 60ms limit those losses are going to heat up your electrodes and FETs after just a few welds. If you need such power this is not the setup for you - there are other more professional devices out there! This is a nice compact device with a display (which is why I liked it in the first place) for the hobbyist who needs to weld a few packs every now and then, certainly not for 100s of welds every day.