VOXL ESC 4 in 1 Fire
-
We had the voxl 4 in 1 mini esc catch on fire immediately after arming the vehicle. Initial default px4 params had max rpm at 7000 which was not enough to fly. I upped it to 12000 which was less than the 14300 max determined from the calibration procedure. It seems like maybe the idle RPM was kinda high and the ESC very aggressively ramps up to that speed.
- Motor and propeller used. Did you calibrate with propeller mounted? Brother Hobby Avenger 2806.5-1300kv and 7x4.5 2 blade prop
- Which esc you are using (Mxxxx number) - M0129-63-01
- which esc firmware was installed? - Can't find out now. Whatever it shipped with.
- Input voltage. Battery or power supply - Charged 4S lipo
- What test was actually run? Do you have exact command? - I armed the vehicle. All other pre tests for the calibration worked without issue.
- Do you have output of the calibration script? - pwm_vs_rpm_curve_a0 = -227.46924724435763, pwm_vs_rpm_curve_a1 = 0.9427038691914541, pwm_vs_rpm_curve_a2 = 5.562406707957121e-06
- did you load any params on the esc before the test? loaded param file below
- Can you describe the behavior in more detail. - Specifically at which point of the test the ESC started misbehaving - beginning of the test, middle, or end. What was the current drae reported by the test script - Immediately on arm sparks and flames. The ramp up to idle RPM seemed extremely aggressive. Previously had flown without fire but the initial arming still didn't sound great. One time arming caused vehicle to brown out.

- Can you send a picture of the esc with damage? Attached. Pretty sure board had huge inrush starting motors, got too hot and positive lead desoldered itself and then shorted with gnd. Hard to tell what damage is from initial problem and being next to battery shorting.
Param file:
<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"/> <!-- SLOW for old SDK for now --> <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="7"/> <!-- number of pole pairs in the motor. used for converting electrical frequency to mechanical rpm --> <param name="min_rpm" value="1900"/> <!-- minimum RPM that will be attempted, otherwise capped --> <param name="max_rpm" value="14300"/> <!-- 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="-227.46924724435763"/> <!-- this is actually motor_voltage vs rpm curve.. using legacy naming --> <param name="pwm_vs_rpm_curve_a1" value="0.9427038691914541"/> <!-- Emax RS1306 3300KV with tri-blade 3x3x3 --> <param name="pwm_vs_rpm_curve_a2" value="5.562406707957121e-06"/> <param name="kp" value="250"/> <!-- 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="3000"/> <!-- cap for maximum rpm error used in RPM controller --> <param name="spinup_type" value="0"/> <!-- 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="1000"/> <!-- 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="1300"/> <!-- kV value of the motor. used in back-emf compensation during spin-up --> <param name="min_num_cross_for_closed_loop" value="50"/> <!-- exit latching mode of fixed power after this number of zero crossings --> <param name="protection_stall_check_rpm" value="750"/> <!-- if motor spins below this RPM, stall check will trigger and stop / restart the motor --> <param name="brake_to_stop" value="0"/> <!-- 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 --> <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="alignment_time_ns" value="0"/> <!-- alignment time before spin-up --> <param name="timing_advance" value="0"/> <param name="sense_advance" value="0"/> <param name="demag_timing" value="0"/> <!-- unused --> </TuneParams> </EscParameters>