This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

InstaSPIN; DRV8302-HC-C2-KIT and a Brushless DC Suitched Reluctance motor

Other Parts Discussed in Thread: INSTASPIN-BLDC, TMDXRM46HDK, MOTORWARE, RM46L852, HALCOGEN, DRV8301

I'm in the design phase of building a Brushless DC Switched Reluctance motor.  The design consists of a 3 phase (six field winding) stator and a 4 pole iron oxide rotor.

Can I achieve sensorless commutation using only a DRV8301-HC-C2-KIT and InstaSPIN software or must I also make provision for a Hall Sensor to determine rotor position.  Also, would you recommend the use of a DRV8301-HC-C2-KIT or DRV8302-HC-C2-KIT and if not what other solution would you suggest ?

Tom

  • Hi Thomas,

    The software that comes with the DRV8301-RM46-KIT includes a project for sensorless trapezoidal commutation.  It should spin your motor as-is but you can change the flux threshold variable to tune it once using the GUI.  

    A sinusoidal, FOC example is also included and it includes a sliding mode observer (SMO) technique for sensorless feedback.  However, the SMO example technique is not acceptable for low speeds.  

    Both projects are also part of the download that you can also find on the TI web (besides the DVD) at: www.ti.com/tool/drv8301-rm46-kit

    Good Luck!  

    Brian

  • Brian,

    Thanks for responding to my inquiry.  In your response you mentioned the DRV8301-RM46-Kit.  If possible, I would like to use a DRV8301-HC-C2-KIT or a DRV8302-HC-C2-KIT for sensorless motor control.  Would either of these be a suitable substitute for the DRV8301-RM46-Kit?

    Thanks

    Tom

  • Hi Thomas,

    The baseboard (blue) is the same for both kits (...RM46-KIt and ...C2-KIT).  However, since you posted in the RM4 Microcontroller Forum, I assumed that you want to use the RM4 MCU.  If you do, then you need an TMDXRM46CNCD control card.  If you plan to use the example software that runs on the RM46CNCD then you will need to download that appropriate code.  You should be able to use the RM46 InstaSPIN-BLDC example to begin EC of your motor.

     

  • Not quite true.

    I have ordered these two cards(DRV8301-RM46-KIT and TMDXRM46HDK) as previous mentioned.

    And also the SRM driver program I have migrated from the TI technical doscument "SPRA420".

    No any source code exists about the InstaSPIN-BLDC in the motorware DVD.

    In two examples instaspin_bldc and foc_encoder_speed projects, the ADC channels are not consistent for the phase and DCBus voltage feedback signals.

    Their datasheets (RM46x 16/32-Bit RISC Flash Microcontroller Technical Reference Manual and RM46L852 16/32-Bit RISC Flash Microcontroller) are draft-level documents, no any sample code for the crucial peripherals(ADC, PWM, SCI, SPI, Interrupt Request, etc.).  The motorware is an ugly and buggy source code. 

    Further technical supports are needed.

    If using the GUI program with GUI composer, the memory leakage problem (never released as launcher.exe program stopped) exists in the Windows7.

    In addition, TI has no any solution about SRM driver up to now.

    The InstaSPIN-BLDC package is included.

  • Richard,

    I'm not following some of your points. 

    The TMDXRM46HDK IS a completely different development kit than the TMDXRM46CNCD.  The TMDXRM46CNCD comes with the DRV8301-RM46-KIT.

    The InstaSPIN-BLDC project is installed by the DVD installer or the web-based installer and can be found at: <install drive>:\ti\hercules\MotorWare\v1.0.3.03\sw\solutions\instaspin_bldc\boards\drv8301kit_revD\hercules\rm46l852\projects\ccs5\project01.  It is example code.

    Sample code and configuration for the peripherals is found in HALCoGen, which could be made more explicit in our software drop, I admit.

    I am using Windows 7 with the GUI composer-based demos and not seeing an issue with the launcher.  Can you share more with the specific error you are seeing?

     

     

  • I know that "The TMDXRM46HDK IS a completely different development kit than the TMDXRM46CNCD.  The TMDXRM46CNCD comes with the DRV8301-RM46-KIT."

    The problems are: 

    1. the example code "Hercules Safety MCU Demos.exe"" of TMDXRM46HDK I can not access this kit via USB always. But in command line of "nowFlash.exe", it is ok.

    2. I have DRV8301-RM46-KIT with TMDXRM46CNCD. If running the launcher.exe like this "C:\ti\guicomposer\webapps\DRV8301_RM46_BLDC\launcher.exe", and stop this program via the GUI, this program becomes a big background process (about 100MB) in the Windows 7(task manager can find it), never released.

    I need to kill it by windows 7 task manager. 

    3. Some pieces code in my SRM driver program as the following:

    And in the page 10 of "drv830x_hwguide.pdf" included in the motorware DVD the most important feedback signals via ADC different channels as following:

    59 ADC-A1 IA-FB Current sense phase A
    61 ADC-A2 I-TOTAL DC Bus current sense 
    63 ADC-A3 IC-FB Current sense phase C 
    67 ADC-A5 IC-FB Current sense phase C 
    71 ADC-A7 ADC-Vhb2 Phase Voltage sense B 
    7 ADC-B0 TSI Tach/Pot input 
    9 ADC-B1 IB-FB Current sense phase B 
    11 ADC-B2 VDCBUS DC Bus voltage sense 
    13 ADC-B3 IA-FB Current sense phase A 
    15 ADC-B4 ADC-Vhb3 Phase Voltage sense C 
    17 ADC-B5 IB-FB Current sense phase B 
    21 ADC-B7 ADC-Vhb1 Phase Voltage sense A

    But in the code section existing in the drv.h of the project of "RM46L852_sensored_speed_smo"

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    // Update ADC object

    adcGetData(adcREG1, adcGROUP1, obj->AdcResults1);

    //!13 ADC-B3 IA-FB Current sense phase A
    //!59 ADC-A1 IA-FB Current sense phase A

    obj->adcData.I.value[0] = ((obj->AdcResults1[0].value<<4)-obj->cal_offset_A)*obj->adc_current_gain_A; //ileg1.ImeasA_f;

    //!9 ADC-B1 IB-FB Current sense phase B
    //!17 ADC-B5 IB-FB Current sense phase B

    obj->adcData.I.value[1] = ((obj->AdcResults1[2].value<<4)-obj->cal_offset_B)*obj->adc_current_gain_B; //ileg1.ImeasB_f;

    //!63 ADC-A3 IC-FB Current sense phase C
    //!67 ADC-A5 IC-FB Current sense phase C

    obj->adcData.I.value[2] = 0;

    Why is zero?

    The adcData.I.value[2] is a non-zero value and has to be the form of "((obj->AdcResults1[0].value<<4)-obj->cal_offset_C)*obj->adc_current_gain_C;"

    but changing AdcResults1[0] to AdcResults1[4], I guess maybe, where add the "cal_offset_C" and "adc_current_gain_C" to be the member of the structure _DRV_Obj_.

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    obj->currentAB.value[0] = obj->adcData.I.value[0];
    obj->currentAB.value[1] = obj->adcData.I.value[1];

    // Change the currentAB to be MATH_vec3 in the struct _DRV_Obj_ of drv.h

    MATH_vec3 currentAB;

    //Add the following line

    obj->currentAB.value[2] = obj->adcData.I.value[2];

    //DC bus voltage
    obj->adcData.dcBusV = (obj->AdcResults1[1].value)*0.00024414;

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    In the code section existing in the drv.h of the project of "RM46L852_instaspin_bldc"

     //Get the DC Bus Volage 

    obj->vDCBus = (((float32_t)obj->AdcResults1[2].value) * 0.00024414);

    At different ADC channels but sampling the same DC bus value.

    why?

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    //DC bus voltage

    obj->adcData.dcBusV = (obj->AdcResults1[1].value)*0.00024414;

    // Get B-phase BEMF Value

    obj->iqVbIn = (((float32_t)obj->AdcResults1[1].value) * 0.00024414) - obj->instaHandle->vbOffset;

    At the same ADC channel but sampling the different value.

    why?

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    //!21 ADC-B7 ADC-Vhb1 Phase Voltage sense A
    obj->iqVaIn = ((float32_t)obj->AdcResults1[5].value) * 0.00024414;

    //!71 ADC-A7 ADC-Vhb2 Phase Voltage sense B
    obj->iqVbIn = ((float32_t)obj->AdcResults1[1].value) * 0.00024414;

    //!15 ADC-B4 ADC-Vhb3 Phase Voltage sense C
    obj->iqVcIn = ((float32_t)obj->AdcResults1[3].value) * 0.00024414;

    Why are the ADC channels not relative to the  AdcResults1[1,3,5]?

     ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    Could you please tell me what problems are?

    And where can I find the technical support?

    Thanks.