Hi there,
we are using a VOXL 2 Mini along with the Mini ESC and T-Motor F1404 2900KV Motors with GF-3028-3 propellers.
After calibrating, when running the ESC with the "--power 100" flag, the RPM reports to about 35200 rpm. In the ESC config, we have set the maximum RPM to around 36000 and the max_rpm_delta to 20000 to avoid cut outs.
In PX4, we have set the maximum RPM to 35000.
But when spinning the motors to a high throttle, the ESCs begin to cut out and the motors try to restart spinning. The cut outs seem to happen around an indicated RPM of ~32000.
When setting the limit in PX4 to exactly 32000, everything works fine, except that there is a lot less thrust availabe. it almost seems as the VOXL-ESC is kind of limited to that RPM, even when changing the config file.
Our ESC Config is posted at the end of this post.
But there is also one other thing we notices (maybe it could be important):
The indicated RPM value on the VOXL-ESC does not seem to be real. For example, our motor was bench tested in our lab with a maximum value of 31300 RPM at the above configuration. Also, when comparing the thrust (in grams) at a specific RPM on the bench with the same RPM setting via ./voxl-esc-spin.py --rpm, the thrust is much lower on the VOXL-ESC than on the bench at the same indicated RPM. Therefore the RPM tracking on the VOXL-ESC seems not to be working right. I believe that our ESC configuration is right, but please double check.
Any help would be highly appreachiated since we want to finalize prototyping and start production soon.
Best regards
Tom
ESC Config for T-Motor F1404 2900KV with GF-3028-3:
<EscParameters>
<IdParams>
<param name="id" value="127"/> <!-- 0-7 .. 127 means use hardware ID pins to read ID-->
<param name="dir" value="2"/> <!-- 0=fwd, 1=rev, 2=fwd id-based, 3=rev id-based -->
</IdParams>
<UartParams>
<param name="protocol_version" value="2"/> <!-- reserved for future use -->
<param name="input_mode" value="0"/> <!-- reserved for future use -->
<param name="baud_rate" value="2000000"/> <!-- communication bit rate -->
<param name="char_timeout_ns" value="0"/> <!-- not used -->
<param name="cmd_timeout_ns" value="100000000"/> <!-- timeout for incoming commands before ESC will stop the motor -->
</UartParams>
<TuneParams>
<param name="pwm_frequency" value="48000"/> <!-- switching freqency of PWM signal going to motors. 24Khz and 48Khz are only options for now -->
<param name="vbat_nominal_mv" value="14800"/> <!-- used for sanity checking and limiting of voltage-dependent funcions -->
<param name="num_cycles_per_rev" value="6"/> <!-- number of pole pairs in the motor. used for converting electrical frequency to mechanical rpm -->
<param name="min_rpm" value="5000"/> <!-- minimum RPM that will be attempted, otherwise capped -->
<param name="max_rpm" value="36000"/> <!-- maximum RPM that will be attempted, otherwise capped -->
<param name="min_pwm" value="50"/> <!-- cap for minimum power to be ever applied. max is 999 -->
<param name="max_pwm" value="999"/> <!-- cap for maximum power to be ever applied. max is 999 -->
<param name="pwm_vs_rpm_curve_a0" value="202.34228349901161"/> <!-- this is actually motor_voltage vs rpm curve.. using legacy naming -->
<param name="pwm_vs_rpm_curve_a1" value="0.32139836115838644"/>
<param name="pwm_vs_rpm_curve_a2" value="3.1167552427764777e-06"/>
<param name="kp" value="100"/> <!-- RPM controller proportional gain -->
<param name="ki" value="30"/> <!-- RPM controller proportional gain -->
<param name="max_kpe" value="300"/> <!-- maximum proportional erorr term (max is 999) -->
<param name="max_kie" value="100"/> <!-- maximum integral error term (max is 999) -->
<param name="max_rpm_delta" value="20000"/> <!-- cap for maximum rpm error used in RPM controller -->
<param name="spinup_type" value="1"/> <!-- 0: traditional, 1: sinusoidal -->
<param name="spinup_power" value="70"/> <!-- power used to during spin-up procedure -->
<param name="latch_power" value="80"/> <!-- power used during latching stage of spin-up (out of 999)-->
<param name="spinup_power_ramp" value="8"/> <!-- it will take ( 4096 / (spinup_power_ramp*10000) ) seconds to ramp sinusoidal start-up power from 0 to spinup_power -->
<param name="spinup_rpm_target" value="5000"/> <!-- Desired RPM at the end of the sinusoidal spin-up procedure -->
<param name="spinup_time_ms" value="1000"/> <!-- Duration of the sinusoidal spin-up procedure -->
<param name="spinup_bemf_comp" value="1"/> <!-- 0: disable, 1:enable back-emf compensation in sinusoidal spin-up procedure -->
<param name="motor_kv" value="2900"/> <!-- kV value of the motor. used in back-emf compensation during spin-up -->
<param name="min_num_cross_for_closed_loop" value="100"/> <!-- exit latching mode of fixed power after this number of zero crossings -->
<param name="protection_stall_check_rpm" value="1000"/> <!-- if motor spins below this RPM, stall check will trigger and stop / restart the motor -->
<param name="brake_to_stop" value="1"/> <!-- apply brake when stopping motor (or not) -->
<param name="stall_timeout_ns" value="20000000"/> <!-- after spin-up, if no zero crossing is not detected for this amount of time, motor is considered stalled -->
<param name="require_reset_if_stalled" value="0"/> <!-- require sending an array of zero commands to reset before next spin-up, if motor stalled -->
<!--simple defualt chime-->
<param name="tone_freqs" value="[200, 215, 225, 250, 0,0,0,0, 0,0,0,0]"/> <!-- 200 is 2000Hz, max 255 -->
<param name="tone_durations" value="[10, 10, 10, 10, 0,0,0,0, 0,0,0,0]"/> <!-- duration of each tone in units of 10 milli-seconds. Poor naming!!! -->
<param name="tone_powers" value="[60, 60, 60, 60, 0,0,0,0, 0,0,0,0]"/> <!-- max is 255 -->
<param name="dt_threshold_ns" value="150000"/> <!-- during start up, ignore inter-commutation times less than this val, probably noise -->
<param name="max_dt_ns" value="2500000"/> <!-- min and max values for time between two commutations. these are used as caps -->
<param name="min_dt_ns" value="10000"/>
<param name="dt_bootstrap_ns" value="2000000"/> <!-- filter bootstrap value for commutation dt during start up -->
<param name="spinup_stall_dt_ns" value="6000000"/> <!-- during spin-up, if no zero crossing is not detected for this amount of time, motor is considered stalled -->
<param name="spinup_stall_check_ns" value="30000000"/> <!-- time after beginning of spinup to start checking for spinup stall -->
<param name="timing_advance" value="0"/>
<param name="sense_advance" value="0"/>
<param name="demag_timing" value="0"/> <!-- unused -->
</TuneParams>
</EscParameters>