ModalAI Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    Voxl 4 in 1 ESC Smoking on Bench Test after Performing Calibration

    Ask your questions right here!
    2
    5
    462
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • E
      ejohnson01
      last edited by

      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.

      https://gitlab.com/voxl-public/voxl-sdk/utilities/voxl-esc/-/blob/master/voxl-esc-tools/calibration.md

      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?

      1 Reply Last reply Reply Quote 0
      • E
        ejohnson01
        last edited by

        @Eric-Katzfey

        Do you happen to have any advice for setting up the voxl esc with new motors?

        Alex KushleyevA 1 Reply Last reply Reply Quote 0
        • Alex KushleyevA
          Alex Kushleyev ModalAI Team @ejohnson01
          last edited by Alex Kushleyev

          @ejohnson01 ,

          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

          E 1 Reply Last reply Reply Quote 0
          • E
            ejohnson01 @Alex Kushleyev
            last edited by

            @Alex-Kushleyev

            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

            Alex KushleyevA 1 Reply Last reply Reply Quote 0
            • Alex KushleyevA
              Alex Kushleyev ModalAI Team @ejohnson01
              last edited by

              @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

              1 Reply Last reply Reply Quote 0
              • VinnyV Vinny referenced this topic on
              • First post
                Last post
              Powered by NodeBB | Contributors