Ammo Box 6384 Winch Build

I’ve learned a ton on this forum, so I decided to contribute back with this post. This is my first build of this sort so any advice is much appreciated.

Why a winch:

I initially was thinking of making a tow boogie or foil assist, but the winch won out for a few reasons.

  1. My primary purpose is to get better at foiling then transition to prone and wing.
  2. I had a good time doing a couple of sessions at a wake tow park on a foil board, but the travel time and cost doesn’t justify going back .
  3. I figured I could also use the winch with surf/skim boards with friends on flat days.
  4. I assumed the tow boogie and foil assist would be more difficult builds​ - lack of 3d printer, and not in a major market where getting the right props seemed difficult.
    In retrospect, I think I should have tried to build a tow boogie, but ​I’m happy so far with what I have with the winch.

The inspiration:

Rewinch - https://rewinch.com/
Motowinch - https://motowinch.com/
Commercial option​s, and quite pricey.

DIY build 1 - Power winch for wake-boarding | Endless Sphere DIY EV Forum
Amazing, but not cheap. He manages to get 30mph max, and can pull 200lb men from a deep water start. He runs a 12s ​battery, and the motor he mentions is a ‘custom’ Astro Flight 3220. The link I found online​ shows the specs of the motor only roughly 50% beefier than the 6384. (3220 ASTRO BRUSHLESS MOTOR).​

DIY build 2 - https://www.youtube.com/watch?v=kr2-DdBsqFw
They say 72v at 60a which is just above 4000watts using an e-bike hub motor.

DIY build 3 - https://www.youtube.com/watch?v=9XLXMNq9u4Q
These guys are using a 1000watt motor to tow foils, so you don’t need very much power​ if you just want to foil.

The key ​components:

6384 140KV Flipsky motor.

  • After doing a bunch of research and some basic math, I figured this motor should be plenty for a foiling and surfing.

Flipsky 75100 vesc.

  • I’m not sure how much these things matter as long as they can push the amps you need.

Flipsky VX3 remote.

  • I got a waterproof remote for future use in other builds​, and to possibly remotely operate the winch from the water.

A 12s 5000mah Lipo battery (2x 6s in series).

  • Rewinch comes with 4x 6s 4000mah, so I’m not too far off from their capacity, and my use case should be ​much less energy intensive.

​Some questions people may have about the parts:

Why a chain vs belt? - There was no choice. I could only find a chain sprocket sized for my motor shaft here.

Why LiPo? - I don’t want to build my own battery which seemed involved and dangerous, and for 100usd for both it was an easy buy. With proper maintenance people seem to have no problem with LiPos.

Why not a hub motor? - I wish. It would simplify things greatly. I could not find a reasonably priced one with anything like the amount of power the 6384 was promising.

The build:

I tried to go as simple as possible avoiding welding, and went with an ammo box which was roughly the size I needed.​ It felt a bit flimsy so I added some aluminum plates to the back where I mounted the motor, and may add more as required. ​The box didn’t fit the batteries, but that worked out as even Rewinch has a separate battery bag. Also, I’m not sure I want powerful moving parts and batteries too close together. The assembly was pretty straight forward as you can see in the pictures.​ The chain is 25H and ​the line is a 2mm 16 strand fishing line with a stated strength of 500lbs. The spool is a 14cm diameter hexagon and gear ratio is 6:1 (13:78 sprocket teeth).​ Everything was done with a hand drill (I wish I had a drill press) and basic tools. Now for some math:
Max Speed:
48v (~12s) * 140KV => 6720 motor rpm / 6 gear ratio => 1120 spool rpm * 42cm spool circumference => 4740 cm / m => 28.2 km/h
Max Torque:
9NM => .918kgf m * 6 gear ratio => 5.508 kgf m * ( 1m / 7cm spool radius ) => 78.7kgf at the point on the spool. I’ll be honest, this feels high​, so correct me if I’m wrong.
I’ve never built anything from metal before and had a hard time imagining the forces the build could withstand

​Testing (unscientific and in progress):

Test 1 - lifting water bottles vertically.
I had 16L (16KG) of large water bottles laying around, and decided to see how it handled those in a vertical lift test. They flew right up with little effort. Seemed like it could do a ton more. The inline amp meter briefly spiked to somewhere between 30-40 amps during the upward acceleration. After bouncing bottles up and down for a bit, the chain fell and I had my first weakest link. The tip of a set screw to the gear on the motor sheared half off. The reason was that the motor shaft has a keyway in it, but I could not find a gear that also had one. As a hack I screwed the tip of the 5mm set screw into the keyway (3mm wide) for better hold. I tried filing a keyway into the gear with a diamond file, but that metal is really damn hard. I decided to try a dog set screw with a 3mm bottom peg that slid right into the keyway as a fix. Anyway, the result of the first test seemed to suggest that the calculated torque rating may not be too far off. Also, an unloaded spool with a partly drained battery had RPMs suggesting around 25km/h.

Test 2 - with a foil
We decided to skip to the fun, and took a 112L board with a 1500sqcm foil out onto the water. It basically worked. At about half throttle, we were taking off (and wiping out soon after). I don’t have good speed or amp measurements to report for this as its hard to concentrate on the rider, the remote display, and the winch at the same time. Toward the end of the session, the winch had a few bolts loose. The yanking and vibration is serious enough that I will need to Loctite everything.

​Test 3 - coming soon.

​Planned improvements:

Limit torque - This thing can really yank. I’m afraid of pulling someones arm off, or breaking some other mechanical part on the winch itself. I’ll be exploring settings on the remote and vesc to maybe smooth the power delivery. Not sure if there are small slipper clutches or torque limiters that I could add between the motor and the sprocket. I’ve had 10m of retired dynamic climbing rope on the handle side which allows for some stretch and safety (you don’t want to be tangled in that fishing line), but it is nowhere near enough.

Controller sensitivity - Related to the previous item, the distance between 0 and 100 on the controller is relatively small so its hard to make minor adjustments for someone else on a board. Ultimately the plan is to use the controller while on the board, but perhaps a nice big dial of sorts would have been a better option for the land-based operator.

Sand/Water protection - Initially I though a ton of sand and water would be coming in with the line, but that has not been the case so far. I think my waterproofing precautions were overkill.

Bi-directional support (once everything else is dialed in) - The pulley part is obvious. I suspect the internally winch modification is relatively simple with the spool split into two (winding and unwinding) sections. Does anyone know how Rewinch does this?



8 Likes

The VX3 has three “power” settings. The setting is done by pressing the function button quickly and it will cycle through H M and L and the top right corner of the display shows which one it’s in. The default at power on is H so you have to adjust for each on-off cycle.

This might help with the smoothing out the initial pull.

1 Like

Or set a ramping time in the VESC APP Settings and adjust the curve

1 Like

Thanks! This might help a bunch with the trigger range. I didn’t consider just capping the max power. Hopefully, for foiling, full power on M or L is roughly what we need which would make it easier for the operator to deliver a consistent pull each time.

There also seems to be a ‘Throttle Sensitivity’ option on the remote, but the documentation is pretty thin on that. I’ll need to play with it to get a feel for what kind of delay and smoothing is applied.

Awesome. Thanks! I think this is exactly what I’m looking for:

VESC tool → App Settings → VESC remote → Positive Ramping Time (currently set to 0.4s)

I’ll be playing around in this settings area to try to get some more reasonable behavior from the remote.

Progress Update

I updated the Positive Ramping Time to 2s, and I think it helped a bit in that nobody’s arms were ripped off during the tests.

Test 3 - 70L soft top surfboard.
We decided to pull ourselves parallel to shore on a 70L soft top board. There is not much to say here other than it worked, and we were cruising at around 15km/h pulling about 30 amps. After several runs, a cheap shaft collar became loose allowing the spool to shift sideways which resulted in the chain falling and getting a bit bent around some bolts.

Upgrade - A second layer of shaft collars was added for extra durability. An adjustable chain tensioner was added and the chain channel was narrowed as it did seem like the chain was a bit loose in general. There were chain falls before under different scenarios with less catastrophic consequences, so I figured this was also an area for improvement. Finally, the rope was extended to 200m as 100m felt a bit short.

Test 4 - Skimboarding a 40L soft top surfboard without fins
This was a lot of fun, and nothing broke! We got 13 runs, each about 100m, on a half full battery (~2100mAh used). The runs were about 15km/h and were using 30 amps at full power.

Newest Problem -
I’m not sure why my ‘Flipsky 75100 With Aluminum PCB’ is only pushing 30 amps max resulting in 15km/h when all the amp settings in the vesc tool are set much higher. The theoretical max speed at 3.8v per cell is about 27km/h (3.8v * 12 cells * 140kv / 6 gear ratio * 42cm circumference * 100000 cm/m * 60 minutes/hr). I’ll be looking into this, but if anyone has any insight it would be much appreciated.
A few more facts:
– The 30 amps was measured both on the remote and inline amp meter.
– The 15km/h and 30 amps both make sense when you do the math in terms of how much rope there was, the number of runs, and total battery usage at the end of the day, so it doesn’t seem to be a measurement problem. That is, 100m * 13 runs / 15km/h * 30 amps = 2600mAh. Not exactly 2100mAh, but close enough given the estimates involved.
– On the last run, with no vesc throttling enabled, peak amp usage dropped to around 20 and speed was reduced to around 10km/h. Not sure why this would occur. The battery was still around 3.65v per cell.

Question -
Has anyone tried changing VESC tool → App Settings → General → General → UAVCAN Raw Throttle Mode from ‘current’ to ‘duty cycle’? I don’t see much documentation on the internet about it, but my guess is that the trigger of the remote would then control speed with amps adjusting automatically to get enough torque rather than amps. This would help with foiling as drag changes significantly from start to planing to flight. I tried changing it and testing with no load, but did not notice a difference.

Some other lessons or things I feel like I should have done differently -
– Align the height of rope intake and the winch restraining loops. This may not sound clear, but you need to account for the lateral force if your rope is being pulled in at an angle. Currently my restraining loops are a bit lower than the rope intake, and it looks like the winch wants to tip over (hasn’t yet) when it slides to the side.
– When building things, make sure bolts and screws are easy to access. Some parts of this winch are a pain to disassemble.
– I should have gotten a bluetooth module for the vesc. Would have made testing easier out in the wild.
– I didn’t need the waterproof remote. The range of the VX3 is pretty limited, so controlling the winch while being pulled is not an option with it.

The chain tensioner is just a couple of bearings on a bolt and silicone tubing.

Red plastic added to narrow the chain channel and chain tensioner on the return (bottom) side of the chain.

For completeness, the handle. I’m using a thicker rope here for safety. You don’t want that 2mm fishing line near you.

Regarding the speed you get there are some possible issues, one is that loaded speed is not same as unloaded. Depending on how hard the motor is loaded you need a reduction factor for it. Still the difference between 15kph and 28kph is a bit too large, motor would be really hot if loading was the cause to the difference.

What is the unloaded motor rpm? Could be an rpm restriction in vesc settings, rpm restriction in remote settings, wrong kV motor and all those would affect the unloaded rpm.

Check:

  • max current settings
  • max power settings
  • max eRPM settings

Water causes havoc with the signal over distance. You need to raise the receiver around 2m above the winch and then it should work much better. I had the same issues with a Maytech remote, but went 3m up and all of a sudden I had great signal.

Flipsky sells both a 1.5m and 3m antennae extension for the VX3 receiver. Take the original off and replace with one of these might help range issues.

Exactly what I did on a broomstick :rofl:

@Jezza @Foilguy What kind of range are you guys getting?

I noticed, even with line of sight, my signal (ping time) degrades about 20 meters away from the winch. That said, the antenna is taped to the side of a metal box which may affect things. I tried to find the official range spec, but all I got was the a listing on Amazon (by Flipsky) stating that the max range is 15 meters. That made me give up, but that is probably without an antenna extension. That text has since been removed on Amazon, but Google still has the cached version.

It seems like drones also use 2.4g for their remotes, so assuming the vx3 is putting out enough juice, the range should be substantial. I’ll try the Flipsky antenna extension or maybe a compatible retractable one. Adding a 2 meter broom stick to the crap I have to lug to the beach isn’t ideal.

Thanks guys!

vx3

EDIT:
I decided to do some basic range tests today. When I placed the winch 1.5 meters above the ground, the range situation improved greatly. More specifically, at 100m I still had great signal (full bars, <50ms ping) regardless of the orientation of the antenna. It was worst (by a small margin), when the signal would have to penetrate through the winch, but still fine. It was best with the antenna’s flat part facing me (winch sideways). When the winch was at ground level, I was intermittently losing signal around the 50m mark with much higher ping times in general. I guess I need to add a tall antenna.

Unloaded RPM yields 25.5 km/h using almost no power.
RPM with spool yields 25.5 km/h using about 1.5 amps.
So, these numbers are roughly inline with the theoretical value of 28 km/h, and probably lower due to 95 max duty and other possible stress limiting settings.

And I understand that under heavy loads, RPMs would in theory go down. But, maybe my understanding is off here - wouldn’t the current increase first to give more torque? Or said another way, if the motor got 60 amps (double) in this scenario, it would be able to spin faster, correct?

Regarding the heat issue, I did try and feel the motor while at the beach and it wasn’t particularly hot. Additionally, the runs are only ~20s long so I can’t imagine it overheating that quickly. This issue was also present from the first run. I’ll look into this more carefully next time as well as the speed control temperature as it does seem like the most plausible explanation at the moment. Perhaps a heat sensor is busted.

Also, I am running the motor in sensored mode in case it matters.

@Jezza To answer your questions
Max Current: 80 amps
Max Power: 1500000 watts
Max eRPM: 100000 (I’m guessing this is fine given that the motor can reach higher speeds under less load)

I think my next step will be to figure out a way to pull various loads across the beach and try to figure out what the speed vs load curve looks like while taking note of the motor and speed control temperatures. It’s really the only thing I can think of. Also, I will look into figuring out how to monitoring live VESC info with my laptop at the beach to see if anything jumps out at me.

I’m also including an export of all the settings as C header files for reference. This seemed much more readable than XML.

motor configuration header

// This file is autogenerated by VESC Tool

#ifndef MCCONF_DEFAULT_H_
#define MCCONF_DEFAULT_H_

// PWM Mode
#define MCCONF_PWM_MODE 1

// Commutation Mode
#define MCCONF_COMM_MODE 0

// Motor Type
#define MCCONF_DEFAULT_MOTOR_TYPE 2

// Sensor Mode
#define MCCONF_SENSOR_MODE 0

// Motor Current Max
#define MCCONF_L_CURRENT_MAX 80

// Motor Current Max Brake
#define MCCONF_L_CURRENT_MIN -80

// Battery Current Max
#define MCCONF_L_IN_CURRENT_MAX 200

// Battery Current Max Regen
#define MCCONF_L_IN_CURRENT_MIN -5

// Absolute Maximum Current
#define MCCONF_L_MAX_ABS_CURRENT 120

// Max ERPM Reverse
#define MCCONF_L_RPM_MIN -100000

// Max ERPM
#define MCCONF_L_RPM_MAX 100000

// ERPM Limit Start
#define MCCONF_L_RPM_START 0.8

// Max ERPM Full Brake
#define MCCONF_L_CURR_MAX_RPM_FBRAKE 300

// Max ERPM Full Brake Current Control
#define MCCONF_L_CURR_MAX_RPM_FBRAKE_CC 1500

// Minimum Input Voltage
#define MCCONF_L_MIN_VOLTAGE 12

// Maximum Input Voltage
#define MCCONF_L_MAX_VOLTAGE 72

// Battery Voltage Cutoff Start
#define MCCONF_L_BATTERY_CUT_START 43.2

// Battery Voltage Cutoff End
#define MCCONF_L_BATTERY_CUT_END 42

// Slow ABS Current Limit
#define MCCONF_L_SLOW_ABS_OVERCURRENT 1

// MOSFET Temp Cutoff Start
#define MCCONF_L_LIM_TEMP_FET_START 85

// MOSFET Temp Cutoff End
#define MCCONF_L_LIM_TEMP_FET_END 100

// Motor Temp Cutoff Start
#define MCCONF_L_LIM_TEMP_MOTOR_START 85

// Motor Temp Cutoff End
#define MCCONF_L_LIM_TEMP_MOTOR_END 100

// Acceleration Temperature Decrease
#define MCCONF_L_LIM_TEMP_ACCEL_DEC 0.15

// Minimum Duty Cycle
#define MCCONF_L_MIN_DUTY 0.005

// Maximum Duty Cycle
#define MCCONF_L_MAX_DUTY 0.95

// Maximum Wattage
#define MCCONF_L_WATT_MAX 1.5e+06

// Maximum Braking Wattage
#define MCCONF_L_WATT_MIN -1.5e+06

// Max Current Scale
#define MCCONF_L_CURRENT_MAX_SCALE 1

// Min Current Scale
#define MCCONF_L_CURRENT_MIN_SCALE 1

// Duty Cycle Current Limit Start
#define MCCONF_L_DUTY_START 0.85

// Minimum ERPM
#define MCCONF_SL_MIN_RPM 150

// Minimum ERPM Integrator
#define MCCONF_SL_MIN_ERPM_CYCLE_INT_LIMIT 1100

// Max Brake Current at Direction Change
#define MCCONF_SL_MAX_FB_CURR_DIR_CHANGE 10

// Cycle Integrator Limit
#define MCCONF_SL_CYCLE_INT_LIMIT 62

// Phase Advance at BR ERPM
#define MCCONF_SL_PHASE_ADVANCE_AT_BR 0.8

// BR ERPM
#define MCCONF_SL_CYCLE_INT_BR 80000

// BEMF Coupling
#define MCCONF_SL_BEMF_COUPLING_K 600

// Hall Table [0]
#define MCCONF_HALL_TAB_0 -1

// Hall Table [1]
#define MCCONF_HALL_TAB_1 1

// Hall Table [2]
#define MCCONF_HALL_TAB_2 3

// Hall Table [3]
#define MCCONF_HALL_TAB_3 2

// Hall Table [4]
#define MCCONF_HALL_TAB_4 5

// Hall Table [5]
#define MCCONF_HALL_TAB_5 6

// Hall Table [6]
#define MCCONF_HALL_TAB_6 4

// Hall Table [7]
#define MCCONF_HALL_TAB_7 -1

// Sensorless ERPM Hybrid
#define MCCONF_HALL_ERPM 2000

// Current KP
#define MCCONF_FOC_CURRENT_KP 0.00807825

// Current KI
#define MCCONF_FOC_CURRENT_KI 13.9811

// Switching Frequency
#define MCCONF_FOC_F_SW 30000

// Dead Time Compensation
#define MCCONF_FOC_DT_US 0.12

// Encoder Inverted
#define MCCONF_FOC_ENCODER_INVERTED 0

// Encoder Offset
#define MCCONF_FOC_ENCODER_OFFSET 180

// Encoder Ratio
#define MCCONF_FOC_ENCODER_RATIO 7

// Sin/Cos Sine Gain Compensation
#define MCCONF_FOC_ENCODER_SIN_GAIN 1

// Sin/Cos Cosine Gain Compensation
#define MCCONF_FOC_ENCODER_COS_GAIN 1

// Sin/Cos Sine Offset
#define MCCONF_FOC_ENCODER_SIN_OFFSET 1.65

// Sin/Cos Cosine Offset
#define MCCONF_FOC_ENCODER_COS_OFFSET 1.65

// Sin/Cos Filter Constant
#define MCCONF_FOC_ENCODER_SINCOS_FILTER 0.5

// Sensor Mode
#define MCCONF_FOC_SENSOR_MODE 2

// Speed Tracker Kp
#define MCCONF_FOC_PLL_KP 2000

// Speed Tracker Ki
#define MCCONF_FOC_PLL_KI 30000

// Motor Inductance (L)
#define MCCONF_FOC_MOTOR_L 8.07825e-06

// Motor Inductance Difference (Ld - Lq)
#define MCCONF_FOC_MOTOR_LD_LQ_DIFF 0

// Motor Resistance (R)
#define MCCONF_FOC_MOTOR_R 0.0139811

// Motor Flux Linkage (λ)
#define MCCONF_FOC_MOTOR_FLUX_LINKAGE 0.00507544

// Observer Gain (x1M)
#define MCCONF_FOC_OBSERVER_GAIN 3.88197e+07

// Observer Gain At Minimum Duty
#define MCCONF_FOC_OBSERVER_GAIN_SLOW 0.05

// Duty Downramp Kp
#define MCCONF_FOC_DUTY_DOWNRAMP_KP 10

// Duty Downramp Ki
#define MCCONF_FOC_DUTY_DOWNRAMP_KI 200

// Openloop ERPM
#define MCCONF_FOC_OPENLOOP_RPM 700

// Openloop ERPM at Min Current
#define MCCONF_FOC_OPENLOOP_RPM_LOW 0

// D Axis Gain Scaling Start
#define MCCONF_FOC_D_GAIN_SCALE_START 0.9

// D Axis Gain Scaling at Max Mod
#define MCCONF_FOC_D_GAIN_SCALE_MAX_MOD 0.2

// Openloop Hysteresis
#define MCCONF_FOC_SL_OPENLOOP_HYST 0.1

// Openloop Lock Time
#define MCCONF_FOC_SL_OPENLOOP_T_LOCK 0

// Openloop Ramp Time
#define MCCONF_FOC_SL_OPENLOOP_T_RAMP 0.1

// Openloop Time
#define MCCONF_FOC_SL_OPENLOOP_TIME 0.05

// Hall Table [0]
#define MCCONF_FOC_HALL_TAB_0 255

// Hall Table [1]
#define MCCONF_FOC_HALL_TAB_1 24

// Hall Table [2]
#define MCCONF_FOC_HALL_TAB_2 159

// Hall Table [3]
#define MCCONF_FOC_HALL_TAB_3 189

// Hall Table [4]
#define MCCONF_FOC_HALL_TAB_4 88

// Hall Table [5]
#define MCCONF_FOC_HALL_TAB_5 58

// Hall Table [6]
#define MCCONF_FOC_HALL_TAB_6 124

// Hall Table [7]
#define MCCONF_FOC_HALL_TAB_7 255

// Hall Interpolation ERPM
#define MCCONF_FOC_HALL_INTERP_ERPM 500

// Sensorless ERPM
#define MCCONF_FOC_SL_ERPM 4000

// Sample in V0 and V7
#define MCCONF_FOC_SAMPLE_V0_V7 0

// High Current Sampling Mode
#define MCCONF_FOC_SAMPLE_HIGH_CURRENT 0

// Stator Saturation Compensation
#define MCCONF_FOC_SAT_COMP 0

// Temp Comp
#define MCCONF_FOC_TEMP_COMP 0

// Temp Comp Base Temp
#define MCCONF_FOC_TEMP_COMP_BASE_TEMP 25

// Current Filter Constant
#define MCCONF_FOC_CURRENT_FILTER_CONST 0.1

// Current Controller Decoupling
#define MCCONF_FOC_CC_DECOUPLING 2

// Observer Type
#define MCCONF_FOC_OBSERVER_TYPE 0

// HFI Start Voltage
#define MCCONF_FOC_HFI_VOLTAGE_START 20

// HFI Run Voltage
#define MCCONF_FOC_HFI_VOLTAGE_RUN 4

// HFI Max Voltage
#define MCCONF_FOC_HFI_VOLTAGE_MAX 10

// Sensorless ERPM HFI
#define MCCONF_FOC_SL_ERPM_HFI 2000

// HFI Start Samples
#define MCCONF_FOC_HFI_START_SAMPLES 65

// HFI Observer Override Time
#define MCCONF_FOC_HFI_OBS_OVR_SEC 0.001

// HFI Samples
#define MCCONF_FOC_HFI_SAMPLES 1

// Buffer Notification Length
#define MCCONF_GPD_BUFFER_NOTIFY_LEFT 200

// Buffer Sampling Interpolation
#define MCCONF_GPD_BUFFER_INTERPOL 0

// Current Filter Constant
#define MCCONF_GPD_CURRENT_FILTER_CONST 0.1

// Current KP
#define MCCONF_GPD_CURRENT_KP 0.03

// Current KI
#define MCCONF_GPD_CURRENT_KI 50

// Speed PID Kp
#define MCCONF_S_PID_KP 0.004

// Speed PID Ki
#define MCCONF_S_PID_KI 0.004

// Speed PID Kd
#define MCCONF_S_PID_KD 0.0001

// Speed PID Kd Filer
#define MCCONF_S_PID_KD_FILTER 0.2

// Minimum ERPM
#define MCCONF_S_PID_MIN_RPM 900

// Allow Braking
#define MCCONF_S_PID_ALLOW_BRAKING 1

// Ramp eRPMs per second
#define MCCONF_S_PID_RAMP_ERPMS_S -1

// Position PID Kp
#define MCCONF_P_PID_KP 0.03

// Position PID Ki
#define MCCONF_P_PID_KI 0

// Position PID Kd
#define MCCONF_P_PID_KD 0.0004

// Position PID Kd Filer
#define MCCONF_P_PID_KD_FILTER 0.2

// Position Angle Division
#define MCCONF_P_PID_ANG_DIV 1

// Startup boost
#define MCCONF_CC_STARTUP_BOOST_DUTY 0.01

// Minimum Current
#define MCCONF_CC_MIN_CURRENT 0.05

// Current Controller Gain
#define MCCONF_CC_GAIN 0.0046

// Current Control Ramp Step Max
#define MCCONF_CC_RAMP_STEP 0.04

// Fault Stop Time
#define MCCONF_M_FAULT_STOP_TIME 500

// Duty Ramp Step Max
#define MCCONF_M_RAMP_STEP 0.02

// Current Backoff Gain
#define MCCONF_M_CURRENT_BACKOFF_GAIN 0.5

// ABI Encoder Counts
#define MCCONF_M_ENCODER_COUNTS 8192

// Sensor Port Mode
#define MCCONF_M_SENSOR_PORT_MODE 0

// Invert Motor Direction
#define MCCONF_M_INVERT_DIRECTION 0

// DRV8301 OC Mode
#define MCCONF_M_DRV8301_OC_MODE 0

// DRV8301 OC Adjustment
#define MCCONF_M_DRV8301_OC_ADJ 16

// Minimum Switching Frequency
#define MCCONF_M_BLDC_F_SW_MIN 3000

// Maximum Switching Frequency
#define MCCONF_M_BLDC_F_SW_MAX 35000

// Switching Frequency
#define MCCONF_M_DC_F_SW 25000

// Beta Value for Motor Thermistor
#define MCCONF_M_NTC_MOTOR_BETA 3380

// Auxiliary Output Mode
#define MCCONF_M_OUT_AUX_MODE 0

// Motor Temperature Sensor Type
#define MCCONF_M_MOTOR_TEMP_SENS_TYPE 0

// Coefficient for PTC Motor Thermistor
#define MCCONF_M_PTC_MOTOR_COEFF 0.61

// Hall Sensor Extra Samples
#define MCCONF_M_HALL_EXTRA_SAMPLES 1

// Motor Poles
#define MCCONF_SI_MOTOR_POLES 14

// Gear Ratio
#define MCCONF_SI_GEAR_RATIO 6

// Wheel Diameter
#define MCCONF_SI_WHEEL_DIAMETER 0.14

// Battery Type
#define MCCONF_SI_BATTERY_TYPE 0

// Battery Cells Series
#define MCCONF_SI_BATTERY_CELLS 12

// Battery Capacity
#define MCCONF_SI_BATTERY_AH 5

// BMS Type
#define MCCONF_BMS_TYPE 1

// Temperature Limit Start
#define MCCONF_BMS_T_LIMIT_START 45

// Temperature Limit End
#define MCCONF_BMS_T_LIMIT_END 65

// SOC Limit Start
#define MCCONF_BMS_SOC_LIMIT_START 0.05

// SOC Limit End
#define MCCONF_BMS_SOC_LIMIT_END 0

// MCCONF_DEFAULT_H_
#endif

app configuration header

// This file is autogenerated by VESC Tool

#ifndef APPCONF_DEFAULT_H_
#define APPCONF_DEFAULT_H_

// VESC ID
#define APPCONF_CONTROLLER_ID 58

// Timeout
#define APPCONF_TIMEOUT_MSEC 1000

// Timeout Brake Current
#define APPCONF_TIMEOUT_BRAKE_CURRENT 0

// Can Status Message Mode
#define APPCONF_SEND_CAN_STATUS 4

// Can Status Rate
#define APPCONF_SEND_CAN_STATUS_RATE_HZ 50

// CAN Baud Rate
#define APPCONF_CAN_BAUD_RATE 2

// Pairing Done
#define APPCONF_PAIRING_DONE 0

// Enable Permanent UART
#define APPCONF_PERMANENT_UART_ENABLED 1

// Shutdown Mode
#define APPCONF_SHUTDOWN_MODE 7

// CAN Mode
#define APPCONF_CAN_MODE 0

// UAVCAN ESC Index
#define APPCONF_UAVCAN_ESC_INDEX 0

// UAVCAN Raw Throttle Mode
#define APPCONF_UAVCAN_RAW_MODE 0

// APP to Use
#define APPCONF_APP_TO_USE 3

// Control Type
#define APPCONF_PPM_CTRL_TYPE 3

// PID Max ERPM
#define APPCONF_PPM_PID_MAX_ERPM 15000

// Input Deadband
#define APPCONF_PPM_HYST 0.15

// Pulselength Start
#define APPCONF_PPM_PULSE_START 1.072

// Pulselength End
#define APPCONF_PPM_PULSE_END 1.843

// Pulselength Center
#define APPCONF_PPM_PULSE_CENTER 1.456

// Median Filter
#define APPCONF_PPM_MEDIAN_FILTER 1

// Safe Start
#define APPCONF_PPM_SAFE_START 1

// Throttle Expo
#define APPCONF_PPM_THROTTLE_EXP 0

// Throttle Expo Brake
#define APPCONF_PPM_THROTTLE_EXP_BRAKE 0

// Throttle Expo Mode
#define APPCONF_PPM_THROTTLE_EXP_MODE 2

// Positive Ramping Time
#define APPCONF_PPM_RAMP_TIME_POS 0.4

// Negative Ramping Time
#define APPCONF_PPM_RAMP_TIME_NEG 0.2

// Multiple VESCs Over CAN
#define APPCONF_PPM_MULTI_ESC 1

// Traction Control
#define APPCONF_PPM_TC 0

// TC Max ERPM Difference
#define APPCONF_PPM_TC_MAX_DIFF 3000

// Max ERPM for direction switch
#define APPCONF_PPM_MAX_ERPM_FOR_DIR 4000

// Smart Reverse Max Duty Cycle
#define APPCONF_PPM_SMART_REV_MAX_DUTY 0.07

// Smart Reverse Ramp Time
#define APPCONF_PPM_SMART_REV_RAMP_TIME 3

// Control Type
#define APPCONF_ADC_CTRL_TYPE 0

// Input Deadband
#define APPCONF_ADC_HYST 0.15

// ADC1 Min Voltage
#define APPCONF_ADC_VOLTAGE_START 0.9

// ADC1 Max Voltage
#define APPCONF_ADC_VOLTAGE_END 3

// ADC1 Center Voltage
#define APPCONF_ADC_VOLTAGE_CENTER 2

// ADC2 Min Voltage
#define APPCONF_ADC_VOLTAGE2_START 0.9

// ADC2 Max Voltage
#define APPCONF_ADC_VOLTAGE2_END 3

// Use Filter
#define APPCONF_ADC_USE_FILTER 1

// Safe Start
#define APPCONF_ADC_SAFE_START 1

// Invert Cruise Control Button
#define APPCONF_ADC_CC_BUTTON_INVERTED 0

// Invert Reverse Button
#define APPCONF_ADC_REV_BUTTON_INVERTED 0

// Invert ADC1 Voltage
#define APPCONF_ADC_VOLTAGE_INVERTED 0

// Invert ADC2 Voltage
#define APPCONF_ADC_VOLTAGE2_INVERTED 0

// Throttle Expo
#define APPCONF_ADC_THROTTLE_EXP 0

// Throttle Expo Brake
#define APPCONF_ADC_THROTTLE_EXP_BRAKE 0

// Throttle Expo Mode
#define APPCONF_ADC_THROTTLE_EXP_MODE 2

// Positive Ramping Time
#define APPCONF_ADC_RAMP_TIME_POS 0.3

// Negative Ramping Time
#define APPCONF_ADC_RAMP_TIME_NEG 0.1

// Multiple VESCs Over CAN
#define APPCONF_ADC_MULTI_ESC 1

// Traction Control
#define APPCONF_ADC_TC 0

// TC Max ERPM Difference
#define APPCONF_ADC_TC_MAX_DIFF 3000

// Update Rate
#define APPCONF_ADC_UPDATE_RATE_HZ 500

// Baudrate
#define APPCONF_UART_BAUDRATE 115200

// Control Type
#define APPCONF_CHUK_CTRL_TYPE 1

// Input Deadband
#define APPCONF_CHUK_HYST 0.05

// Positive Ramping Time
#define APPCONF_CHUK_RAMP_TIME_POS 2

// Negative Ramping Time
#define APPCONF_CHUK_RAMP_TIME_NEG 0.2

// ERPM Per Second Cruise Control
#define APPCONF_STICK_ERPM_PER_S_IN_CC 3000

// Throttle Expo
#define APPCONF_CHUK_THROTTLE_EXP 0

// Throttle Expo Brake
#define APPCONF_CHUK_THROTTLE_EXP_BRAKE 0

// Throttle Expo Mode
#define APPCONF_CHUK_THROTTLE_EXP_MODE 2

// Multiple VESCs Over CAN
#define APPCONF_CHUK_MULTI_ESC 1

// Traction Control
#define APPCONF_CHUK_TC 0

// TC Max ERPM Difference
#define APPCONF_CHUK_TC_MAX_DIFF 3000

// Use Smart Reverse
#define APPCONF_CHUK_USE_SMART_REV 1

// Smart Reverse Max Duty Cycle
#define APPCONF_CHUK_SMART_REV_MAX_DUTY 0.15

// Smart Reverse Ramp Time
#define APPCONF_CHUK_SMART_REV_RAMP_TIME 3

// Speed
#define APPCONF_NRF_SPEED 1

// TX Power
#define APPCONF_NRF_POWER 3

// CRC
#define APPCONF_NRF_CRC 1

// Retry Delay
#define APPCONF_NRF_RETR_DELAY 0

// Retries
#define APPCONF_NRF_RETRIES 3

// Radio Channel
#define APPCONF_NRF_CHANNEL 76

// Address 0
#define APPCONF_NRF_ADDR_B0 198

// Address 1
#define APPCONF_NRF_ADDR_B1 199

// Address 2
#define APPCONF_NRF_ADDR_B2 0

// Send ACK
#define APPCONF_NRF_SEND_CRC_ACK 1

// P
#define APPCONF_BALANCE_KP 0

// I
#define APPCONF_BALANCE_KI 0

// D
#define APPCONF_BALANCE_KD 0

// Loop Hertz
#define APPCONF_BALANCE_HERTZ 1000

// Pitch Axis Fault Cutoff
#define APPCONF_BALANCE_FAULT_PITCH 20

// Roll Axis Fault Cutoff
#define APPCONF_BALANCE_FAULT_ROLL 45

// Duty Cycle Fault Cutoff
#define APPCONF_BALANCE_FAULT_DUTY 0.9

// ADC1 Switch Voltage
#define APPCONF_BALANCE_FAULT_ADC1 0

// ADC2 Switch Voltage
#define APPCONF_BALANCE_FAULT_ADC2 0

// Pitch Fault Delay
#define APPCONF_BALANCE_FAULT_DELAY_PITCH 0

// Roll Fault Delay
#define APPCONF_BALANCE_FAULT_DELAY_ROLL 0

// Duty Fault Delay
#define APPCONF_BALANCE_FAULT_DELAY_DUTY 0

// Half Switch Fault Delay
#define APPCONF_BALANCE_FAULT_DELAY_SWITCH_HALF 0

// Full Switch Fault Delay
#define APPCONF_BALANCE_FAULT_DELAY_SWITCH_FULL 0

// ADC Half State Fault ERPM
#define APPCONF_BALANCE_FAULT_ADC_HALF_ERPM 1000

// Tiltback Angle
#define APPCONF_BALANCE_TILTBACK_ANGLE 15

// Tiltback Speed
#define APPCONF_BALANCE_TILTBACK_SPEED 5

// Duty Cycle Tiltback
#define APPCONF_BALANCE_TILTBACK_DUTY 0.75

// High Voltage Tiltback
#define APPCONF_BALANCE_TILTBACK_HIGH_V 200

// Low Voltage Tiltback
#define APPCONF_BALANCE_TILTBACK_LOW_V 0

// Constant Tiltback
#define APPCONF_BALANCE_TILTBACK_CONSTANT 0

// Constant Tiltback ERPM
#define APPCONF_BALANCE_TILTBACK_CONSTANT_ERPM 500

// Startup Pitch Axis Angle Tolerance
#define APPCONF_BALANCE_STARTUP_PITCH_TOLERANCE 20

// Startup Roll Axis Angle Tolerance
#define APPCONF_BALANCE_STARTUP_ROLL_TOLERANCE 8

// Startup Centering Speed
#define APPCONF_BALANCE_STARTUP_SPEED 30

// Deadzone
#define APPCONF_BALANCE_DEADZONE 0

// Current Boost
#define APPCONF_BALANCE_CURRENT_BOOST 0

// Multiple VESCs Over CAN
#define APPCONF_BALANCE_MULTI_ESC 0

// Yaw P
#define APPCONF_BALANCE_YAW_KP 0

// Yaw I
#define APPCONF_BALANCE_YAW_KI 0

// Yaw D
#define APPCONF_BALANCE_YAW_KD 0

// Roll Steer KP
#define APPCONF_BALANCE_ROLL_STEER_KP 0

// Roll Steer ERPM KP
#define APPCONF_BALANCE_ROLL_STEER_ERPM_KP 0

// Brake Current
#define APPCONF_BALANCE_BRAKE_CURRENT 0

// Yaw Current Clamp
#define APPCONF_BALANCE_YAW_CURRENT_CLAMP 0

// Setpoint Pitch Low Pass Filter
#define APPCONF_BALANCE_SETPOINT_PITCH_FILTER 0

// Setpoint Target Low Pass Filter
#define APPCONF_BALANCE_SETPOINT_TARGET_FILTER 1

// Setpoint Filter Clamp
#define APPCONF_BALANCE_SETPOINT_FILTER_CLAMP 8

// D term PT1 Filter
#define APPCONF_BALANCE_KD_PT1_FREQUENCY 0

// Control Type
#define APPCONF_PAS_CTRL_TYPE 0

// Sensor Type
#define APPCONF_PAS_SENSOR_TYPE 0

// PAS Max Current
#define APPCONF_PAS_CURRENT_SCALING 0.1

// Pedal RPM Start
#define APPCONF_PAS_PEDAL_RPM_START 10

// Pedal RPM End
#define APPCONF_PAS_PEDAL_RPM_END 180

// Invert Pedal Direction
#define APPCONF_PAS_INVERT_PEDAL_DIRECTION 0

// Sensor Magnets
#define APPCONF_PAS_MAGNETS 24

// Use Filter
#define APPCONF_PAS_USE_FILTER 1

// Positive Ramping Time
#define APPCONF_PAS_RAMP_TIME_POS 0.6

// Negative Ramping Time
#define APPCONF_PAS_RAMP_TIME_NEG 0.3

// Update Rate
#define APPCONF_PAS_UPDATE_RATE_HZ 500

// IMU Type
#define APPCONF_IMU_TYPE 1

// IMU AHRS Mode
#define APPCONF_IMU_AHRS_MODE 0

// Sample Rate
#define APPCONF_IMU_SAMPLE_RATE_HZ 200

// Accelerometer Confidence Decay
#define APPCONF_IMU_ACCEL_CONFIDENCE_DECAY 1

// Mahony KP
#define APPCONF_IMU_MAHONY_KP 0.3

// Mahony KI
#define APPCONF_IMU_MAHONY_KI 0

// Madgwick Beta
#define APPCONF_IMU_MADGWICK_BETA 0.1

// Imu Rotation Roll
#define APPCONF_IMU_ROT_ROLL 0

// Imu Rotation Pitch
#define APPCONF_IMU_ROT_PITCH 0

// Imu Rotation Yaw
#define APPCONF_IMU_ROT_YAW 0

// Accel Offset X
#define APPCONF_IMU_A_OFFSET_0 0

// Accel Offset Y
#define APPCONF_IMU_A_OFFSET_1 0

// Accel Offset Z
#define APPCONF_IMU_A_OFFSET_2 0

// Gyro Offset X
#define APPCONF_IMU_G_OFFSET_0 0

// Gyro Offset Y
#define APPCONF_IMU_G_OFFSET_1 0

// Gyro Offset Z
#define APPCONF_IMU_G_OFFSET_2 0

// Gyro Offset Comp X
#define APPCONF_IMU_G_OFFSET_COMP_FACT_0 0

// Gyro Offset Comp Y
#define APPCONF_IMU_G_OFFSET_COMP_FACT_1 0

// Gyro Offset Comp Z
#define APPCONF_IMU_G_OFFSET_COMP_FACT_2 0

// Gyro Offset Comp Clamp
#define APPCONF_IMU_G_OFFSET_COMP_CLAMP 5

// APPCONF_DEFAULT_H_
#endif

Guess this one isn‘t correct (if you use the vesc to check speed)? Your drum diameter is larger, right?

Seems there isn’t enough torque and with the low battery current output it could be low motor current that is the issue. You could test increasing the motor current to the max the controller can take, does it make a difference in the speed and battery current? If it does make a difference then could be that motor torque wasn’t enough or remote isn’t requesting full throttle.
If it doesn’t make a difference then motor torque might be maxed out, motor is too small.

Do you see 100% throttle command in vesc tool when throttled to the max?
What is the motor current in vesc tool during a pull, is it the expected value?

Apart from that i don’t see any obvious things.

This is it. Up the motor current to 160a and then you should see 80a at the battery…

You could mount the antennae on a small telescopic rod to make transport easier.

Progress Update

Test 5: Skimboarding again.
The test was mostly a fail as the chain fell off again after jerky initial pull. Then, I tightened the chain tensioner a bit too tight, and the next run broke the a quick link holding the chain together fell apart. But, I did get some data on my laptop and did get to do an antenna test.

@Jezza @Foilguy Antenna problem solved.
After reading a bunch about these types of antennas and antennas in general, it turns out that the antenna that comes with the VX3 also uses the cable as part of it which should be oriented perpendicular to the direction of the transmitter. Additionally, even though the antenna is likely omni-directional the radiation pattern is shaped like a fat donut leaving weak spots at the poles. I had the antenna positioned in the worst way possible on the winch. Changing it a bit (see picture), gave even more range than just elevating it. It works fine with low ping times and full bars at 150m, but at that range signal breaks if anything (one human body is enough) is in the way. I wrote Flipsky asking about the specs of the antennas they offer with the VX3, but no reply yet. If additional range is required, it seems like a high gain wifi antenna should yield a substantial improvement.

Motor current -
This is still under investigation. Some comments and questions.

I’m not sure where to check that, but I changed the throttle curve to the most extreme exponent possible, and tested inching up on the remote. It seemed fine as the motor didn’t even budge until 40% was reached on the remote. So, if the max throttle is off, it probably isn’t off by a lot. I also re-ran the VX3 calibration setting, and got basically the same results for a full trigger pull. If nothing else works, I’ll set the vesc power curve to max throttle on a hair trigger to make sure.

Also, the wheel diameter is fine. I’m guessing it is shown there in meters, so 14cm is accurate. I confirmed in the app.

The vesc can only handle 120 amps burst, and 100 amps continuous. As a result, I set motor amps to 120 fearing that 160 could fry something if it works. Is there any reason why we would need to set this value higher than what is wanted? Or, is it some bug? Regardless, the minimal data I got was promising. The graph below shows the line being tensioned, and then the second set of spikes is the start of the pull (the chain falls off right after). The motor current does increase past 80 amps, and the battery current seems to rise to almost 60 amps. The winch was jolted rather violently causing the chain to fall which, unfortunately, didn’t get me a reading of speed or current draw for the run. It is possible that this behavior also existed under the old settings. I’ll be trying this again next time. I wish I got a bluetooth module instead of having to take my laptop to the beach.

One other thing to note is that I had the VX3 set to VESC mode instead of FSESC (Flipsky ESC) which sounds like a trivial change, but I thought it should be mentioned.

Anyway, next steps:

  1. Get current graphs of full runs with new and old settings to compare.
  2. Possibly upgrade VESC firmware in case that is the issue.
  3. Add some sort of stabilizing mechanism to the winch so it doesn’t get whipped around so easily due to the forces involved.

When you setup the remote in vesc tool you can see if you reach 100% command on the screen. You can probably see it in the live readout view also but i never tried this.

Another trial with some more succesful pulls will be interesting.

For range on the remote I would get the BREmote Long Range… its really good.

Hey guys,

Thanks for all the guidance on here. I’ve done a bunch of testing on and off the water, and here are the results.

  1. The low current issue is resolved. I was reading the battery current and not motor current. I learned a bit about ESCs during this process. The constant battery voltage and variable battery current, is converted to lower voltage and higher current when being sent to the motor (keeping wattage constant). So, if the motor can’t spin quickly due to resistance, the voltage to the motor is lower which increases the current. This higher motor current hits the VESC motor current limit, and as a result it pulls less than the motor current limit from the battery. Example: Battery 48V40A = Motor 24V80A (motor spinning at 50%). Those numbers are rounded for clarity, but roughly what I was seeing.

  2. There is something strange with ramping time. When using the break/reverse trigger, ramping time works like a charm with duty cycle rising linearly. On the forward trigger, it appears to be a function of motor current and is about twice as aggressive as in the settings. That is, for a max motor current of 80A, the ramp increases as if the max it was reaching after Xs is ~150A. A couple of graphs included.

  3. The VX3’s high/medium/low settings are also just a max motor current setting with low being 50% and medium 75%. These numbers could be a bit off. I only ran the test once.

  4. Again, remote range is fine after the super basic antenna re-orientation.

So, I guess, mission accomplished… kinda. For foiling it works fine. Actually, the power for foiling is overkill. The bonus scenario of cross shore surfboard drag doesn’t work terribly well for us guys here at around 80kg (15km/h is fun for a bit, but gets old). For women and children, it could be a hoot though.

Next steps:

  1. See if I can perpetually foil doing figure 8s in front of the winch. Basically, you pull yourself at a sharp angle to the winch, then release the power and turn directly away from the winch for as far as you can go, then repeat in the opposite direction. A bit like a long tack. I have successfully tested it on a skateboard gaining ground against the winch. But first, I need to suck a lot less at foiling.

  2. See if I can perpetually foil using the winch to pull me out toward a sea wall away from the beach, then use waves to ride back in and away from the winch. Repeat.
    I think those two options are better than trying to make this bidirectional.

Wish list:

I wish I could reprogram the VESC such that the remote’s break/reverse button also goes forward. It would be a nice addition to have a separate nice and chill ‘tighten rope’ trigger vs gently using the ‘go go go’ option after tweaking the throttle curve. The lack of resistance on the rope really whips it around with even a tiny dose of current.

I’ll post a video once someone here does something not totally embarrassing on the foil. Haha.


1 Like

Great write up. If you can replicate this bug you might have one of your wishes.

https://vesc-project.com/node/1112

And if incorrectly calibrate the brake trigger so that full press is only few % power then it should work quite well.

Another option could be putting a negative in front of a value (brake current maybe) in VESC tool to see if you can make reverse/ brake run forward??