Hi Carl
The South oxford Nostalgistas encountered exactly the same problem a few years ago. I assembled a small 8-leg Picaxe chip as a gizmo that goes between the Rx and the ESC. It has an onboard trimpot whereby you can limit the top value of the signal sent to the ESC.
Picaxe uses all BASIC code but the onboard device is very small and light.
I am sure that readers such as afb could code this much more elegantly than me but it performed the desired function.
Twitcher may have a spare one (still unused ??)
' =======================================
' ELECTRIC MOTOR ONBOARD "VOLUME CONTROL"
' =======================================
' THROTTLE LIMITER for Rx signal to ESC
' For models using Phil G.'s Button-pushing Tx Emulator
'======================================================================================
' Last edited 27 Nov 2016 ? M. Spencer 2016
' Version 1.03(revised IC leg assignment) hardware validated 28/11/16 [91 bytes used]
'
' Previous mods:
' Version 1.02(reversed trimpot sense) 27/11/16
' Version 1.01(first hardware prototype) 11/11/16
'======================================================================================
' FUNCTION
' --------
' This module limits the output of an ESC output to emulate 'backing off' the compression screw of a
' Diesel engine. For use when trimming a 'Guided-Free-Flight' E-power model using Single Channel
' button Tx emulation where no suitable adjustment for servo 'Travel Volume' is available at the Tx
'
' The Thr servo output from receiver to ESC (Electronic Speed Controller) is intercepted and a top-limited
' demand signal is passed to the ESC
' An onboard potentiometer allows the user to top-limit the maximum motor speed anywhere between
' 50% and 100%
' The ESC responds to Transmitter demands up to that preset limit
'
' Signal integrity checking is carried out and any out of range input sets the throttle
' to zero demand (1.0mSec).
' When the signal reverts into range, ten further 'good' pulses must be received before
' resuming normal operation.
' NOTE 1: Failsafe function activates when input pulses fall out of limits
' NOTE 2: 2.4GHZ Rx or 35MHz DSM Rx may continue to output 'last good signal' if Tx input is lost
'======================================================================================
' Based on model boat "Throttle Tamer" code [version 1.01] devised by A Bond
'======================================================================================
'
' PICAXE 08M or 08M2 CONNECTIONS (some functions in this code not available in earlier 08 PIC)
' ------------------------------
' leg 01 (Vdd) +5v
' leg 02 (serial in) connect to 0v
' leg 03 (IN C.4) wiper of pot which is connected across 5v supply
' leg 04 (IN C.3) PPM input (from Rx Throttle channel)
' leg 05 (OUT C.2) PPM output to ESC
' leg 06 (OUT C.1) nc
' leg 07 (C0) nc
' leg 08 (Vss) 0v
'
'======================================================================================
'--------------------------------------------------------------------------------------
' MAIN PROGRAM LOOP STARTS HERE
'--------------------------------------------------------------------------------------
main:
pulsin C.3,1,w0 'read r/x input(looking for positive pulse, no signal inverter reqd)
'NOTE: confirmed working OK with target Rx
'(Futaba 35MHz, Futaba 2.4G, Spectrum DSM2)
if w0>225 then outtalimit 'take action if signal out of range
if w0<75 then outtalimit 'take action if signal out of range
readadc C.4,w1 'read the tamer pot
w2=w1/5 'scale the pot reading
'w2=150+w2 max 200 'generate top-limited pulselength (within range 150 to 200)
'Next line produces same w2 product from reverse direction of trimpot
w2=200-w2 min 150 'generate top-limited pulselength (within range 200 to 150)
if w0>w2 then 'if pulsin greater than potlimit, apply potlimit
pulsout C.2,w2 'and issue it
else
pulsout C.2,w0 'demand was not limited - pass through unchanged
endif
goto main
'--------------------------------------------------------------------------------------
'--------------------------------------------------------------------------------------
' DEAL WITH OUT OF LIMIT SIGNALS [A.Bond code snippet]
'--------------------------------------------------------------------------------------
outtalimit:
w3=0 'reset 'good' frames counter
servo C.2,100 'assert continuously running zero demand pulse train
skip:
pulsin C.3,1,w0 'read r/x input
if w0=<225 then 'upper range check
if w0>75 then 'lower range check
w3=w3+1 'a 'good' pulse received, increment counter
if w0>225 then outtalimit 'Zero/restart counter if bad pulse received
if w0<75 then outtalimit 'Zero/restart counter if bad pulse received
if w3>9 then 'have ten 'good pulses been received?
low C.2 'yes, switch off zero demand pulse train
goto main 'and resume normal operation
endif
endif
endif
goto skip 'less than ten 'good' pulses so far, loop back
'--------------------------------------------------------------------------------------
end
'--------------------------------------------------------------------------------------
' VOLUME CONTROL v1.03
'--------------------------------------------------------------------------------------