Voxl 4 in 1 ESC Smoking on Bench Test after Performing Calibration
-
Greetings!
I bought the m0117 4 in 1 ESC to use with my build. I am replacing a previous configuration of my aircraft with the voxl2 and voxl ESC. I am using the same motors as the last iteration and in bench testing I noticed that my motors where not reaching the same top end RPM as with the old ESC. This lead me to this page that describes how to tune the Voxl ESC.
I ran the calibration as described in the document. I then uploaded the updated parameters to the board. I then ran an intial test targeting 1 esc too 5000 rpm and that seemed to work fine. I wanted to make sure the motors could now reach the previous top end output so I armed my aircraft idled the motors for a moment then brought the ESC up to full power. this Caused the ESC to smoke. Smoke was observer-ed emitting from the TVS Diode as shown in the datasheet
https://docs.modalai.com/modal-esc-datasheet/
As far as I can tell all the other components on the board look fine, but I thought I saw smoke from multiple places.
I unfortunately lost the px4 log because I forgot to set the time on the voxl before the test. I also powered the voxl down during the test because of the smoke. On QGC the last log ID that shows is from a few days ago so I am not even sure px4 dumped any data to disk from the test anyways.
below are the parameters I loaded to the ESCs
<?xml version="1.0" encoding="UTF-8"?> <!-- Copyright (c) 2020 ModalAI Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 4. The Software is used solely in conjunction with devices provided by ModalAI Inc. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. For a license to use on non-ModalAI hardware, please contact license@modalai.com --> <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="250000"/> <!-- 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="11100"/> <!-- used for sanity checking and limiting of voltage-dependent funcions --> <param name="num_cycles_per_rev" value="12"/> <!-- number of pole pairs in the motor. used for converting electrical frequency to mechanical rpm --> <param name="min_rpm" value="2000"/> <!-- minimum RPM that will be attempted, otherwise capped --> <param name="max_rpm" value="12920"/> <!-- maximum RPM that will be attempted, otherwise capped --> <param name="min_pwm" value="70"/> <!-- 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="56.75969786442005"/> <!-- this is actually motor_voltage vs rpm curve.. using legacy naming --> <param name="pwm_vs_rpm_curve_a1" value="0.774771262278483"/> <!-- updated for 1806 2280kv flight test motors--> <param name="pwm_vs_rpm_curve_a2" value="1.5719880266635158e-06"/> <param name="kp" value="0"/> <!-- RPM controller proportional gain --> <param name="ki" value="0"/> <!-- RPM controller proportional gain --> <param name="max_kpe" value="0"/> <!-- maximum proportional erorr term (max is 999) --> <param name="max_kie" value="0"/> <!-- maximum integral error term (max is 999) --> <param name="max_rpm_delta" value="2000"/> <!-- 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="70"/> <!-- 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="0"/> <!-- 0: disable, 1:enable back-emf compensation in sinusoidal spin-up procedure --> <param name="motor_kv" value="2280"/> <!-- 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="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>
this was the end of the tuning output
POW: 94, RPM: 12893.00, Voltage: 10.99V, Current: 0.61A POW: 94, RPM: 12899.00, Voltage: 10.99V, Current: 0.63A POW: 94, RPM: 12920.00, Voltage: 10.99V, Current: 0.58A INFO: Test took 20.58 seconds Quadratic fit: motor_voltage = a2*rpm_desired^2 + a1*rpm_desired + a0 a0 = 56.75969786442005 a1 = 0.774771262278483 a2 = 1.5719880266635158e-06 ESC Params (after scaling): pwm_vs_rpm_curve_a0 = 56.75969786442005 pwm_vs_rpm_curve_a1 = 0.774771262278483 pwm_vs_rpm_curve_a2 = 1.5719880266635158e-06 WARNING: In order to plot the results, install the Python "matplotlib" module
this is the motor I am using
https://store.flitetest.com/ft-radial-1806-2280kv-brushless-motor-v-2/I had the esc and voxl connected to a bench top power supply at 11V with a 20A current limit for the test.
is there something obviously wrong with my set up?
Let me know what changes you all would recommend. Also would it be possible to expedite a replacement ESC as my project needs to end before Christmas?
-
Do you happen to have any advice for setting up the voxl esc with new motors?
-
I am sorry this happened to you.
The TVS diode on the ESC burned out most likely due to regenerative voltage spikes from transitioning from high to low rpms. Normally, when battery is connected, this is fine, because the battery is able to absorb these spikes. TVS diode is there to protect the board from some voltage spikes, but not during very aggressive testing with a power supply. The power supply cannot sink current, so the voltage generated by regenerative braking, keeps increasing and the TVS protection diode starts conducting, trying to clamp the voltage. But there is too much power that is being generated and the voltage keeps climbing, causing destruction of the TVS diode.
Our instructions on
voxl-esc
tools page on gitlab currently instruct users to do initial testing with a power supply. We are sorry for not putting more emphasis on this particular issue and we will update the instructions with latest guidelines.Please do all further testing of the ESC with a battery only. Power supply can be used but in only some advanced use cases.
Meanwhile, we will replace your ESC free of charge. Please submit an RMA request here : https://modalai.com/rma . Since your current ESC is damaged, you do not need to send it back.
Regards,
Alex
-
I appreciate the above response. I had an extra voxl-esc lying around so I re ran the test a few times plugged into battery and there was no fire this time around!
Thank you for the insightful response. I will submit my RMA tomorrow.
Best
-
@ejohnson01 , i created a document that should help understand the issue that you ran into : https://gitlab.com/voxl-public/voxl-sdk/utilities/voxl-esc/-/blob/dev/voxl-esc-tools/doc/regenerative_braking.md and updated the main instructions to warn against using a power supply: https://gitlab.com/voxl-public/voxl-sdk/utilities/voxl-esc/-/tree/dev/voxl-esc-tools#hardware-requirements
Please take a look and let me know if you find this information easy to understand and if you have any other questions about this documentation - we will add more details.
Alex
-