Wakeboarding winch build log

I built an electric drum winch for towing a wakeboarder. It is a personal project. The motor and the battery come from an Awake board, both rescued from scrap. Everything else is my own design: frame, drum, belt drive, rope guide, the rope guide electronics and the firmware.

ItemValue
Design
target
40 km/h rope speed, 1000 N pull, about 10 kW
Motor12 kW Awake motor, VESC controller
Battery24S10P 18650 pack, LG HJ2 cells, about 100 V fully charged
ReductionHTD 5M belt, 20T to 142T, 7.1:1
Drum200 mm core, 300 mm flanges, 120 mm wide
Rope300 m Dyneema SK-75, 3 mm, 0.84 t breaking load
Rope guideNEMA 23 stepper on a 12 mm ball screw, follows the VESC
techo over CAN.
CostAbout 700 EUR, motor and battery from scrap

Drum and frame

The drum core is 200 mm in diameter and 120 mm wide, 3D printed. The flanges are 300 mm in diameter and 6 mm thick, laser cut at Elba d.o.o. and then CNC finished at home workshop. The 20 mm axle was bought at a hardware store and turned by a friend to fit in the bearings. The axle runs in two UCF204 flange bearing units from 123bearing, 6.56 EUR each.

The dimensions come from a spool calculation. 400 m of 3 mm rope on a 200 mm core, 120 mm wide, is 13 layers at 100 % fill. With a fill factor of 0.8, which is typical for thin rope with many layers, it is 17 layers, or 50 mm of rope. That is exactly the 50 mm flange height. Bending is not the limit: Dyneema needs a bend ratio of 6 to 10, so a 30 mm drum would already be fine. In the end 300 m of rope was installed to save on cost. Dyneema rope is expensive!

The frame is 10 mm laser-cut plate, also from Elba d.o.o.. Side A is 470 x 260 mm, side B 350 x 260 mm, the bottom plate 470 x 390 mm. There is a pulley strut, a pulley side plate and a 240 x 75 mm rope guide mount. The hexagonal cutouts take weight out of the plates. The plates are aluminum. No strength calculations were done. Instead a very generous material thickness was selected which resulted in a very sturdy frame, but also a bit on the heavy side. This was a decision to get to the working unit faster.

Drivetrain

The motor is the 12 kW motor from an Awake board, driven by a motor controller based on VESC. The design targets were 40 km/h rope speed and 1000 N pull at the rider. With a mean spool circumference of 0.71 m, 40 km/h means 944 rpm at the drum. At 5700 rpm motor speed that gives a reduction of about 6:1, 100 Nm at the drum and 16.6 Nm at the motor. Required motor power comes out at 9.9 kW, so the 12 kW motor is just enough.

I used a 20-tooth HTD 5M pulley on the motor side and a 142-tooth pulley on the drum, so the reduction is 7.1:1. The small pulley is a stock part from Tehimpex, drilled to fit. The big pulley is 226 mm in diameter and 3D printed, with two 3D printed flanges. The belt is HTD 5M, 1035 mm long and 25 mm wide, also from Tehimpex. The ROBAJ15 tensioner (45.56 EUR) and the TPCFN45-25 idler (13.29 EUR) are from Misumi. The number of teeth on the big pulley is large and the load runs are short so the 3D printed pulley held well.

The motor does not sit on the belt shaft directly. It is coupled through a Misumi MJT-30K jaw coupling (43.84 EUR) to a 12 mm pulley shaft, which runs in two UCF201 flange bearings. The pulley shaft is a reused Awake drivetrain shaft.

With the 142-tooth pulley gives about 39 km/h rope speed at 6500 rpm and about 1170 N constant pull on an empty drum, with 1.5x that for short bursts. A 25 mm belt is on the thin side for this power. A belt width of 35 to 40 mm would be more buitable for 8 kW with intermittent duty. However for limited amount and short runs it has held up pretty good.

Battery and rope

The battery is the same pack as it is used in the Awake system: 24S10P of LG HJ2 18650 cells, about 100 V fully charged. The VESC and the rope guide board both run from it directly. There is no separate low-voltage supply.

The rope is 3 mm Dyneema SK-75 from syntheticropes.eu at 0.87 EUR per meter. The calculation was done for 400 m, I ordered 300 m. It cost 271.33 EUR plus 28.89 EUR delivery, 300.22 EUR in total. Breaking load is 0.84 t.

Rope guide

300 m of 3 mm rope is 13 to 17 layers on the drum. Without a level wind the rope piles up in the middle and digs into the layers below under load. So the winch has a motorized rope guide that moves across the drum as it turns.

Now would using a larger drum with fewer layers achieve the same thing? Most likely. But this is a home project and over-engineering is allowed!

The numbers: at 40 km/h the drum turns 15.7 times per second, so the guide has to move 47 mm/s. I sized it for a 1000 N side load, for the case where the rope comes in at an angle. With a 4 mm lead ball screw at 85 % efficiency that is 0.75 Nm and 708 rpm at the screw, about 55 W. The motor torque only depends on the side force. The motor speed scales with drum speed.

The build: an SFU1204 ball screw (12 mm, 4 mm lead, 250 mm) from Aliexpress, driven by a NEMA 23 stepper (57 x 56 mm, 8 mm shaft) through a D20L25 flexible coupling. The screw runs in a 608 and a 6000 bearing, held in CNC-milled side mounts from JLC. The carriage body is 3D printed and slides on two 12 mm steel rods with linear bearings. The rope runs between eight MR83 ball bearings on 3 mm dowel pins, held in two 3D printed caps, so it rolls instead of rubbing. Two end switches (HD110V01A12AR) on 3D printed mounts are used for homing. The whole guide sits on the rope guide mount plate.

Rope guide driver board

The stepper needs a driver, the driver needs CAN to talk to the VESC, and everything has to run from 100 V. I designed a board for this in Altium, a 4-layer PCB with:

  • STM32F042F6P6 microcontroller, Cortex-M0, 32 kB flash, TSSOP20
  • DRV8452 stepper driver, 50 V, 5 A, dual H-bridge, with stall detection
  • TJA1051 CAN transceiver with PESD2CAN ESD protection
  • LTC3894 step-down controller rated for 150 V input, with a 150 V P-channel MOSFET (SI7315DN) and 170 V Schottky diodes, 47 uH inductor, switching at about 106 kHz
  • AP62300 buck and MIC5365 LDO for the 5 V and 3.3 V logic rails
  • 470 uF 63 V and 2 x 33 uF 160 V bulk capacitors, 2.2 uF 250 V ceramics on the input
  • Connectors for the stepper, the two end switches, an encoder input, CAN and a 5-pin SWD header

The LTC3894 steps the battery voltage down to the stepper supply. The first version ran at 36 V, which was too low, the guide motor did not reach the required speed. I changed the feedback resistors (R4 to 8.06 kOhm, R1 to 10 kOhm) and it now runs at 48 V with a 4 A limit.

I also designed a small encoder board with two DRV5015 Hall-effect latches, giving quadrature A/B outputs for a drum encoder. This would be used in case the sensorless tacho from VESC wouldn’t be accurate enough. In the end the firmware uses the VESC tachometer instead, so the encoder input on the driver board is unused for now.

Firmware

The firmware is plain STM32 HAL code. There is no user interface and nothing to configure. The board does one thing.

At power-up the stepper drives the carriage toward the end switch, zeroes the position and moves to the 20 mm start offset. Then it waits for CAN messages.

The VESC broadcasts status message 5 on the CAN bus at 250 kbit/s. It carries the motor tachometer value. On every message the board calculates how far the drum turned since the last one and moves the carriage by the matching fraction of the rope diameter: one full drum turn moves the guide by 3 mm. When the carriage reaches the end of the 120 mm spool width, the direction flips and the overshoot is carried over into the other direction. The guide does not care about rope speed, it just follows the drum.

Step pulses come from a timer interrupt at about 50 kHz with a trapezoidal motion profile: 2,000,000 steps/s² acceleration and 45,000 steps/s top speed. The stepper runs at 4x microstepping, which with a 4 mm lead is 200 steps per mm. The required 47 mm/s is 9,400 steps/s. I started with 16x microstepping, but the drum was too fast for that step rate, so I reduced it.

What went wrong

Three things from the prototype log:

  1. Rope guide driver, input voltage. 36 V on the stepper rail was too low and the guide motor did not reach the required speed. Fixed by raising the buck output to 48 V and the current limit to 4 A.
  2. Rope guide driver, heat. The DRV8452 overheated. More vias under the IC and a lower drive current. R18 was changed to 30 kOhm to reduce the full-scale current.
  3. Firmware, step rate. The drum was too fast for 16x microstepping. Reduced microstepping, now 4x.
  4. The sensorless motor startup had to be re-tuned for a load with a higher inertia than the propeller of the Awake board.
  5. Big pulley not being 100% correct scale due to 3D printing shrinkage. It made the belt skip at heavy load. 3D print would need to be dialed in or manufactured using water jet and aluminum.

Timeline and cost

  • October 2024: winch CAD, production drawings for the laser-cut parts
  • January 2025: rope guide CAD, driver PCB, encoder board
  • March 2025: firmware
  • August 2025: first run on the water

The whole build cost about 700 EUR. The rope is the biggest item at 300 EUR. The Misumi parts (coupling, idler, tensioner) are 103 EUR, the four flange bearings 26 EUR, the fairlead 18 EUR. The rest is laser cutting, CNC milling, PCBs, the stepper, the ball screw and small parts. The motor and the battery were rescued from scrap, so they cost nothing.

Water testing

https://youtube.com/shorts/Adb0Hk1ToHA

Or.. you can simply go to a wake park. But they you are riding in circles and where is the fun in that?

How to repair Broken Trail Remote on Specialized Turbo Levo 2018 and the pinout for bonus

Specialized e-bikes utilize control cables with a braided wire construction that exhibit a lower tolerance for mechanical stress and extended vibration compared to more industrial durable options. These cables, specifically those associated with the handlebar-mounted remote buttons, are susceptible to fatigue-induced failure due to their fine gauge and hard braided design. This can manifest as button malfunction after a period of sustained use, as experienced in my case after two to three years of riding.

And now the sad part of the story… Replacement part price. For 130 euros, those buttons better come pre-attached to a small gold-plated unicorn. Four buttons? Absolutely criminal!

Disassembly:

  1. Housing Access: The remote enclosure utilizes a sonic welding technique, essentially creating a permanent closure between the two halves. Destructive disassembly is required. A thin, flat-head screwdriver can be used to carefully pry open the housing seam, but caution is necessary to avoid damaging the internal flexible printed circuit board (FPCB).
  2. Cable Removal: Once the housing is breached, the control cable can be severed near the entry point. This allows for the complete removal of the remote unit.
  3. Sealant Removal: The remaining challenge lies in the removal of the silicone sealant. This process requires meticulous cleaning with a sharp tool to scrape away the adhesive from the wires and FPCB. Special attention should be paid to the vicinity of the soldering pads on the circuit board, as these delicate components are susceptible to damage from excessive force.

The pinout:

1 = “S”, 2 = “+”, 3 = “-“, 4 = Foot, 5 = Common

The pinout (see above)
Continue reading ‘How to repair Broken Trail Remote on Specialized Turbo Levo 2018 and the pinout for bonus’ »

KWeld spot welder

I recently bought Kweld spot welder kit for all battery welding purposes. The old, transformer welder was not good and welds were not consistent and reliable. Worst issue with transformer welder was inability to weld thicker metal strips (0,3mm Ni).

The Kweld came with everything needed to start welding except power supply source. They offer supercap bank with charger or recommend some RC batteries. I had niether. The most suitable battery pack I have was 3S1P LiFePo pack with internal resistance of 5mΩ. Unfortuantely such source is not OK for kWeld.

Continue reading ‘KWeld spot welder’ »

Raspberry pico W GUI (-O)

The Raspberry Pi Pico W is a microcontroller board that is based on the Raspberry Pi Pico, but with the addition of wireless connectivity features. Specifically, the Pico W includes built-in Wi-Fi and Bluetooth, which allows it to connect to the internet and communicate with other devices wirelessly.

The Pico W is powered by a dual-core Arm Cortex-M0+ processor, which runs at a speed of up to 133 MHz. It also includes 264KB of RAM and 2MB of flash memory, which can be used to store programs and data. Additionally, the board has a variety of input/output (I/O) pins, which can be used to connect to sensors, actuators, and other devices.

The Pico W can be programmed using a variety of programming languages and development environments, including MicroPython and C/C++. This makes it a flexible and versatile platform for a wide range of projects, including Internet of Things (IoT) devices, robotics, and more.

Here is one example how to use Raspberry Pi Pico W with micropython, one senzor connected via I2C and simple GUI on the android device using GUI-O via WiFi.

Read more

STLINK-V3-MODS Simple Breakout board

I bought few STLINKs V3 (MODS) modules. It is ST-Link module to be embedded on some target system. It can be used as any other ST-Link, but the pinout and castelated via contacts have 50 mils pitch. So I prepared very simple, single sided breakout board with 100 mils pitch. The most important signals are connected to larger pads:

  • SWD
  • VCP Rx/Tx
  • Bootloader Bridge via UART
  • Supply

The “toner transfer” pdf is here (with marked signals):

There is no schematic, just layout:

PCB


Remote SDRs – update

This is short update on my post about seting up the Multiband WEB SDR with remote receivers: https://e.pavlin.si/2021/12/11/multiband-sdr-with-remote-receivers/

The update is based on Armbian, Linux for ARM development boards. First download and write image (CLI) for your preffered board. After first boot, enter default credentials for Armbian (root/1234) and follow some basic setup:


create new password
select bash (1)
enter your new username
create pass for new user
enter real name
Set user language based on your location? Yes

Now enter following commands:

apt update
sudo apt install soapyremote-server
sudo apt install soapysdr-tools
sudo apt install rtl-sdr
sudo apt-get install soapysdr-module-rtlsdr

edit the file /etc/modprobe.d/blacklist.conf and add following lines:

sudo nano /etc/modprobe.d/blacklist.conf 
blacklist dvb_usb_rtl28xxu
blacklist rtl2832
blacklist rtl2830

reboot with

reboot

Now plug RTL SDR (could be more than one) and check if everything works with:

SoapySDRUtil --probe="driver=rtlsdr"

The output should be something like this:

#
Soapy SDR -- the SDR abstraction library
#
Probe device driver=rtlsdr
Found Rafael Micro R820T tuner
Found Rafael Micro R820T tuner

-- Device identification
driver=RTLSDR
hardware=R820T
origin=https://github.com/pothosware/SoapyRTLSDR
rtl=0

-- Peripheral summary
Channels: 1 Rx, 0 Tx
Timestamps: NO
Other Settings:
* Direct Sampling - RTL-SDR Direct Sampling Mode
[key=direct_samp, default=0, type=string, options=(0, 1, 2)]
* Offset Tune - RTL-SDR Offset Tuning Mode
[key=offset_tune, default=false, type=bool]
* I/Q Swap - RTL-SDR I/Q Swap Mode
[key=iq_swap, default=false, type=bool]
* Digital AGC - RTL-SDR digital AGC Mode
[key=digital_agc, default=false, type=bool]

-- RX Channel 0
Full-duplex: YES
Supports AGC: YES
Stream formats: CS8, CS16, CF32
Native format: CS8 [full-scale=128]
Stream args:
* Buffer Size - Number of bytes per buffer, multiples of 512 only.
[key=bufflen, units=bytes, default=262144, type=int]
* Ring buffers - Number of buffers in the ring.
[key=buffers, units=buffers, default=15, type=int]
* Async buffers - Number of async usb buffers (advanced).
[key=asyncBuffs, units=buffers, default=0, type=int]
Antennas: RX
Full gain range: [0, 49.6] dB
TUNER gain range: [0, 49.6] dB
Full freq range: [23.999, 1764] MHz
RF freq range: [24, 1764] MHz
CORR freq range: [-0.001, 0.001] MHz
Sample rates: 0.25, 1.024, 1.536, 1.792, 1.92, 2.048, 2.16, 2.56, 2.88, 3.2 MSps

Finally, use rtl_eeprom to change serial numbers and add newly created receivers to your WEB SDR.

Optionally: add firewall rule for the Soapy remote:

ufw allow 55132

1 to 4 power splitter

This is small module for splitting 1 signal to 4 receivers. It is part of the multiband SDR receiver, but it can be used standalone for any similar application.

Finished splitter with four SMA connectors
Continue reading ‘1 to 4 power splitter’ »

Multiband SDR with remote receivers

In past I assembled small SDR receiver based on Raspberry Pi and SDR USB dongle based on software developed by PA3FWM. The problem was with limited usability by multiple clients connected to the Raspberry pi at the same time. The old SDR was retired and put aside for few years.

Then András Retzler ha7ilm developed (and stopped developing) OpenWebRx, which was the base for now regulry maintained and further developed OpenWebRx.de.

I recently built homelab server based on “proper” server infrastructure with plenty of RAM and lots of processing cores. I decided to setup OpenWebRx in one linux virtual machine with raspberry pi only as remote receivers serving single user (server itself).

Continue reading ‘Multiband SDR with remote receivers’ »

GoPro Session 3D printed housing

I broke the original housing for GoPro Session (the smallest GoPro). Then I designed more bulky one, suitable for 3D printing.

Here is the OnShape project.

and 3D printed part…

Please send email for STL files.

Final version with holder for quick release gooseneck:


FT991 IPO/ATT FAULT

Yaesu FT-991A Frontend has nasty hidden fault. It is not normal from €1000 radio to stop working just because you use it in a pileup situation or when your close OM is beaming toward you with QRO.

New, out-of-the box radio receive performance of the FT-991(A) was normal, but after other station(s) had transmitted at a higher power levels, the FT-991(A) receiver failed. The failure mode was as follows:

  • Receiver operation is normal when the Attenuator feature is disabled.
  • Receiver operation fails (no receive and a very quiet noise-floor) when the Attenuator feature is enabled.
  • IPO operation enables the Attenuator and results in the same receiver failure mentioned immediately above.

Same issues are reported elsewhere:

Patient with exactly the same simptoms got to the operation table in my lab today. The owner is OM S52W, very successfull contester and member of the famous contest club.

Continue reading ‘FT991 IPO/ATT FAULT’ »