Lifting 100+ kilos with precision control

Was designing a giant 5 x 5 x 5 meter 3D printer at FabLabRUC. After several less successful designs for the Z-axis drive we settled on using four electric winches, one for each corner. We chose a heavy duty 12V automotive model from biltema:

I wanted to be able to test the winch in the lab under full load so first I build a stand for it:

Tripod designed in Fusion360
Winch installed on tripod

The stand is made of 3mm laser cut steel and 20×40 mm steel pipe. Also the mounting for the winch is made from 3mm steel:

I had no real idea how much current the winch would draw under load. The best Amp meter I had would only go to 20A but I suspected the motor would draw much more. So I rigged up a 500A shunt with a 1:10 amplifier and connected it to an Arduino UNO:

Measuring high current with Arduino and shunt

In the video above the left axis is Ampere times 10. The average max load turned out to be just under 25A.

The next challenge was to find a DC motor driver able to deliver the around 30A that the winch required. I tried using different RC car ESC’s but they all seemed to have some kind of acceleration delay or required dead time to switch between forward and reverse. This would be useless in a closed loop system.

I then tried some dedicated DC motor controller chips that was spec’ed to 30A:

The winch at full load would draw around 25A. At this load these drivers would run red hot and fail after a few minutes. The device has no good way of attaching a heat sink either. Apparently 1 China Ampere equals 0.2 real Ampere..

So in the spirit of “if you want to have something done properly, you’ll have to do it yourself” I started to design a controller from scratch:

Napkin drawing of the controller
First prototype

The prototype (schematic) was build around a simple STM32F103 (Blue Pill) “Arduino” board. The H-bridge was build from discrete IRFZ44 N-Mosfets driven by IRF2104 drivers. This allowed me to have full control over the power driver and add as much cooling to the switches as I needed.  During operation one side of the H-bridge would have its lower switch closed and the top side of the other side would be driven with a PWM signal from the micro controller. This allowed me to measure the switching current by measuring the voltage over the on-resistance of the constantly closed switch:


Measuring current for one direction of rotation

Having some measure of the motor current allowed me to implement over-current/over-load protection in software.

During the OFF time of the PWM signal back EMF from the motor flows through internal diode of the lower switch. Surprisingly most of the losses in this circuit comes from this diode. The transistors have very low internal ON resistance so barely any voltage is present across them even with lots of current flowing. The diode on the other hand have a forward voltage of a couple of hundred milivolt and thus real power is precipitated.  Only the low side transistors (internal diode) gets warm.

To accurately position the spool of the winch I needed to mount an encoder:

Encoder on winch

Fortunately I was able to remove a quick release mechanism at the end of the drum and print a interface part connecting the drum with the encoder:

Interface part

With the encoder in place I could now create a feed-back loop that would position the spool accurately at any angle. Schematic and test sketch for the controller with PID control.

The wire was originally just randomly rolled onto the spool. To be useful I needed an exact amount of wire to be fed for each revolution of the spool. Since the wire was much longer and stronger than I needed, I could reduce the amount and thickness of the wire. I also added a printed insert to increase the diameter of the spool. I calculated the diameter in such a way that a single neatly wound layer would contain all the wire I needed.

The spool insert is made from PET(soda bottle plastic).  It is strong and easy to print. To get it done quickly and since it didn’t need to be pretty, it was printed with a huge nozzle on a TAZ-5 printer:

Spool insert

The project was nearing its deadline so I decided to make circuit boards for the final DC motor controller myself using a CNC router.:

Four winches was needed for the project. They all needed to run precisely and perfectly synchronized. They also needed to be placed 5 meters apart.

The original plan was to run separate power cables to each winch from a central power supply. This proved impractical because of the high current and low voltage. Instead I chose to equip each winch with its own local power supply. I realized that the winches would only run for short intervals and not very often so I chose a lead/acid gel battery for each winch. I could now run a thin charging/data cable between all the winches .

Winch controller

When not charging a mechanical relay completely disconnected the battery. This both served to remove the chance of accidental discharge and locked the winch in place in case of power failure or emergency stop.

A central  hub contained a charger and interface to the computer running the 3D printer.The charger was simply a current limited power supply with voltage set to 14V and current to 2A. Once charging :

Central hub with charger and interface
Winch mounted on truss
Winch and controller

To “level the bed” of the 3D printer I added two buttons to each controller. These would override the closed loop controller and allow for slow up or down adjustment during installation.

Above video show the 3D printer printing with the four winches continuously moving upward.

Leave a Reply