Quantcast
Channel: Motor drivers forum - Recent Threads
Viewing all 22062 articles
Browse latest View live

DRV8323R: I think I found major defect on DRV8323RS.

$
0
0

Part Number: DRV8323R

Hi this is David!

I am currently developing motor driver board with ti's drv8323rs chip(btw, I love this chip xD)

Anyways, I am using 1x PWM mode and there's a problem with this.

Whenever I put ENABLE to high it goes back to the initial value which is 6x PWM mode.(which is normal operation)

The problem here I think here is that the hall sensor line goes directly into INLA, INHB, INLB and do something with 6x PWM mode(might short since hall sensor INHB, INLB can get high on the same time)

So the motor makes some quite a loud noise before I turn into 1x PWM mode through SPI.(sometimes so large amount of current go through even the battery BMS cut the power)..

is it a defect?

if not, how can I solve this problem

Thank you for your help


RE: BOOSTXL-DRV8301: Motor identification works, running the motor does not

$
0
0

Yes, when controlling the speed after the motor is identified in lab2c results in noise and vibration. I have tried lab3a to avoid calibration and using my own parameters, but it is not working better than before. I have not tried changing the PI controllers parameters in the next labs.

Thanks for the answer.

RE: BOOSTXL-DRV8305EVM: c2000 28379D delfino launchpad unable to accurately sense voltage and current outputs

$
0
0
Thank you for the suggestion. Will go through it

BOOSTXL-DRV8305EVM: c2000 28379D delfino launchpad unable to accurately sense voltage and current outputs

$
0
0

Part Number: BOOSTXL-DRV8305EVM

Setup: I am using C2000 28379D launchpad with the booster pack DRV8305EVM to implement my own control algorithms. The launchpad is powered by the EVM (i have removed all the JP1,2,3 jumpers). I use C2000ware for programming the launchpad. I have implemented a chopper using the upper switch of phase-A leg and lower switch of the phase-B leg.

Problem: I am unable to accurately sense DC link voltage of the booster pack (ENGATE is high and nfault led is low ). It shows 4095 instead of the correct value. However, the same program works well when the launchpad is powered by USB and the corresponding pin is connected to VSENPVDD of 8305EVM (ground pins of both the boards are connected).

I would appreciate any help in solving this problem. Please find the program below

//
// Included Files
//
#include "driverlib.h"
#include "device.h"

//
// Defines
//
// these are for ADC
#define EX_ADC_RESOLUTION   ADC_RESOLUTION_12BIT    // or ADC_RESOLUTION_16BIT
#define EX_ADC_SIGNAL_MODE  ADC_MODE_SINGLE_ENDED   // or ADC_MODE_DIFFERENTIAL

#define TB_CLK  DEVICE_SYSCLK_FREQ / 2              // Time base clock is SYCLK / 2
#define PWM_CLK 5000

#define PRD_VAL (TB_CLK / (PWM_CLK * 2))


// these are for EPWM
#define EPWM1_TIMER_TBPRD   2000U
#define EPWM1_CMP           1000U

#define EPWM2_TIMER_TBPRD   2000U
#define EPWM2_CMP           1000U

//
// GLOBALS
//
uint16_t adcAResult_Vdd;
uint16_t interruptCount = 0;
uint16_t loopcount = 0;
//
//Function Prototypes
//
// these are for adc
void initADCs(void);
void initADCSOCs(void);

// these are for EPWM
void initEPWM1(void);
void initEPWM2(void);
__interrupt void epwm1ISR(void);
__interrupt void epwm2ISR(void);

//
// Main
//
void main(void)
{
    //
    // Initiate device clock and periperals
    //
    Device_init();

    //
    // Disable pin locks and enable internal pullups.
    //
    Device_initGPIO();

    //
    // Initialize PIE and clear PIE registers. Disables CPU interrupts.
    //
    Interrupt_initModule();

    //
    //Initialize the PIE vector table with pointers to the shell interrupt Interrupt Service Routines (ISR)
    //
    Interrupt_initVectorTable();


    //
    // Set up ADCs, initializing the SOCs to be triggered by software
    //
    initADCs();
    initADCSOCs();

    //
    // Enable an GPIO output on GPIO124 to clear the ENGATE on booster pack
    //
    GPIO_setPadConfig(124, GPIO_PIN_TYPE_PULLUP);   // Enable pullup on GPIO6
    GPIO_writePin(124, 1);                          // Load output latch
    GPIO_setPinConfig(GPIO_124_GPIO124);              // GPIO124 = GPIO124
    GPIO_setDirectionMode(124, GPIO_DIR_MODE_OUT);  // GPIO124 = output
    DEVICE_DELAY_US(10000);


    //
    // Interrupts that are used in this example are re-mapped to ISR functions
    // found within this file
    //
    Interrupt_register(INT_EPWM1, &epwm1ISR);
    Interrupt_register(INT_EPWM2, &epwm2ISR);

    //
    // Configure GPIO0/1, GPIO2/3, and GPIO4/5 as ePWM1A/1B, ePWM2A/2B and ePWM3A/3B
    //
    GPIO_setPadConfig(0, GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_0_EPWM1A);
    /*GPIO_setPadConfig(1, GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_1_EPWM1B);*/

    /*GPIO_setPadConfig(2, GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_2_EPWM2A);*/
    GPIO_setPadConfig(3, GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_3_EPWM2B);


    //
    // Disable sync(Freeze clock to PWM as well)
    //
    SysCtl_disablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);
    initEPWM1();
    initEPWM2();

    //
    // Enable sync and clock to PWM
    //
    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);


    //
    // Enable ePWM interrupts
    //
    Interrupt_enable(INT_EPWM1);
    Interrupt_enable(INT_EPWM2);

    //
    // Enable Global Interrupt (INTM) and real time interrupt (DBGM)
    //
    EINT ;
    ERTM ;

    //
    // Loop indefinitely
    //
    while(1)
    {
        //
        // Convert, wait for completion, and store results
        //
        ADC_forceSOC(ADCA_BASE, ADC_SOC_NUMBER0);

        //
        //Wait for ADCA to complete, then acknowledge flag
        //
        while(ADC_getInterruptStatus(ADCA_BASE,ADC_INT_NUMBER1)==false)
        {
        }
        ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);

        //
        // store results
        //

        adcAResult_Vdd = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER0);
        if(loopcount > 8000)
        {
            ESTOP0;
            loopcount = 0;
        }

        loopcount = loopcount + 1;

    }

}

// End of main


void initADCs(void)
{
    //
    // Set ADCCLK divider to /4
    //
    ADC_setPrescaler(ADCA_BASE, ADC_CLK_DIV_4_0);

    //
    // Set resolution and signal mode (see #defines above) and load corresponding trims.
    //
    ADC_setMode(ADCA_BASE, EX_ADC_RESOLUTION, EX_ADC_SIGNAL_MODE);
    //
    // Set pulse positions to late
    //
    ADC_setInterruptPulseMode(ADCA_BASE, ADC_PULSE_END_OF_CONV);

    //
    // Powerup the ADCs and then delay for 1 ms
    //
    ADC_enableConverter(ADCA_BASE);
    DEVICE_DELAY_US(1000);

}


void initADCSOCs(void)
{
    //
    // configure SOCs of ADCA

#if(EX_ADC_RESOLUTION == ADC_RESOLUTION_12BIT)
    ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER0, ADC_TRIGGER_SW_ONLY, ADC_CH_ADCIN3, 15);  // A_v

#elif(EX_ADC_RESOLUTION == ADC_RESOLUTION_16BIT)
    ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER0, ADC_TRIGGER_SW_ONLY,ADC_CH_ADCIN3,64);
#endif

    //
    // set SOC0 to set the interrupt 1 flag. Enable the interrupt and make sure its flag is cleared.
    //
    ADC_setInterruptSource(ADCA_BASE, ADC_INT_NUMBER1, ADC_SOC_NUMBER0);
    ADC_enableInterrupt(ADCA_BASE,ADC_INT_NUMBER1);
    ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);

}


//
// initEPWM1 - Configure ePWM1
//
void initEPWM1()
{
    //
    // Set-up TBCLK
    //
    EPWM_setTimeBasePeriod(EPWM1_BASE, EPWM1_TIMER_TBPRD);
    EPWM_setPhaseShift(EPWM1_BASE, 0U);
    EPWM_setTimeBaseCounter(EPWM1_BASE, 0U);

    // code for SYNC
    EPWM_setSyncOutPulseMode(EPWM1_BASE, EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);

    //
    // Set Compare values
    //
    EPWM_setCounterCompareValue(EPWM1_BASE, EPWM_COUNTER_COMPARE_A, EPWM1_CMP);
    //EPWM_setCounterCompareValue(EPWM1_BASE, EPWM_COUNTER_COMPARE_B, EPWM1_MAX_CMPB);

    //
    // Set-up counter mode
    //
    EPWM_setTimeBaseCounterMode(EPWM1_BASE, EPWM_COUNTER_MODE_UP_DOWN);
    EPWM_disablePhaseShiftLoad(EPWM1_BASE);
    EPWM_setClockPrescaler(EPWM1_BASE, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);

    //
    // Set-up shadowing
    //
    EPWM_setCounterCompareShadowLoadMode(EPWM1_BASE, EPWM_COUNTER_COMPARE_A,
                                         EPWM_COMP_LOAD_ON_CNTR_ZERO);
    /*EPWM_setCounterCompareShadowLoadMode(EPWM1_BASE, EPWM_COUNTER_COMPARE_B,
                                         EPWM_COMP_LOAD_ON_CNTR_ZERO);*/

    //
    // Set actions
    //
    EPWM_setActionQualifierAction(EPWM1_BASE,
                                  EPWM_AQ_OUTPUT_A,
                                  EPWM_AQ_OUTPUT_HIGH,
                                  EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
    EPWM_setActionQualifierAction(EPWM1_BASE,
                                  EPWM_AQ_OUTPUT_A,
                                  EPWM_AQ_OUTPUT_LOW,
                                  EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
    /*EPWM_setActionQualifierAction(EPWM1_BASE,
                                  EPWM_AQ_OUTPUT_B,
                                  EPWM_AQ_OUTPUT_HIGH,
                                  EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
    EPWM_setActionQualifierAction(EPWM1_BASE,
                                  EPWM_AQ_OUTPUT_B,
                                  EPWM_AQ_OUTPUT_LOW,
                                  EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);*/

    //
    // Intrrupt where we will change the compare values
    // select INT on TIme base counter zero event,
    // Enable INT, generate INT on 3rd event
    //
    EPWM_setInterruptSource(EPWM1_BASE, EPWM_INT_TBCTR_ZERO);
    EPWM_enableInterrupt(EPWM1_BASE);
    EPWM_setInterruptEventCount(EPWM1_BASE, 3U);

}



//
// initEPWM2 - Configure ePWM2
//
void initEPWM2()
{
    //
    // Set-up TBCLK
    //
    EPWM_setTimeBasePeriod(EPWM2_BASE, EPWM2_TIMER_TBPRD);
    EPWM_setPhaseShift(EPWM2_BASE, 0U);
    EPWM_setTimeBaseCounter(EPWM2_BASE, 0U);

    // code for SYNC
    EPWM_setCountModeAfterSync(EPWM2_BASE, EPWM_COUNT_MODE_UP_AFTER_SYNC) ;
    EPWM_setSyncOutPulseMode(EPWM2_BASE, EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);

    //
    // Set Compare values
    //
    //EPWM_setCounterCompareValue(EPWM2_BASE, EPWM_COUNTER_COMPARE_A, EPWM2_CMP);
    EPWM_setCounterCompareValue(EPWM2_BASE, EPWM_COUNTER_COMPARE_B, EPWM2_CMP);

    //
    // Set-up counter mode
    //
    EPWM_setTimeBaseCounterMode(EPWM2_BASE, EPWM_COUNTER_MODE_UP_DOWN);
    EPWM_enablePhaseShiftLoad(EPWM2_BASE);
    EPWM_setClockPrescaler(EPWM2_BASE, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);

    //
    // Set-up shadowing
    //
    /*EPWM_setCounterCompareShadowLoadMode(EPWM2_BASE, EPWM_COUNTER_COMPARE_A,
                                         EPWM_COMP_LOAD_ON_CNTR_ZERO);*/
    EPWM_setCounterCompareShadowLoadMode(EPWM2_BASE, EPWM_COUNTER_COMPARE_B,
                                         EPWM_COMP_LOAD_ON_CNTR_ZERO);
    //
    // Set actions
    //
    /*EPWM_setActionQualifierAction(EPWM2_BASE,
                                  EPWM_AQ_OUTPUT_A,
                                  EPWM_AQ_OUTPUT_HIGH,
                                  EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
    EPWM_setActionQualifierAction(EPWM2_BASE,
                                  EPWM_AQ_OUTPUT_A,
                                  EPWM_AQ_OUTPUT_LOW,
                                  EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);*/
    EPWM_setActionQualifierAction(EPWM2_BASE,
                                  EPWM_AQ_OUTPUT_B,
                                  EPWM_AQ_OUTPUT_HIGH,
                                  EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
    EPWM_setActionQualifierAction(EPWM2_BASE,
                                  EPWM_AQ_OUTPUT_B,
                                  EPWM_AQ_OUTPUT_LOW,
                                  EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);

    //
    // Intrrupt where we will change the compare values
    // select INT on TIme base counter zero event,
    // Enable INT, generate INT on 3rd event
    //
    EPWM_setInterruptSource(EPWM2_BASE, EPWM_INT_TBCTR_ZERO);
    EPWM_enableInterrupt(EPWM2_BASE);
    EPWM_setInterruptEventCount(EPWM2_BASE, 3U);


}


//
// epwm1ISR-- ePWM 1 ISR
//
__interrupt void epwm1ISR(void)
{

    //
    // Clear INT flag for this timer
    //
    EPWM_clearEventTriggerInterruptFlag(EPWM1_BASE);

    //
    // Acknowledge interrupt group
    //
    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP3);


}

//
// epwm2ISR-- ePWM 2 ISR
//
__interrupt void epwm2ISR(void)
{
    //
    // Clear INT flag for this timer
    //
    EPWM_clearEventTriggerInterruptFlag(EPWM2_BASE);

    //
    // Acknowledge interrupt group
    //
    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP3);
}

   

DRV8834: Decay mode

$
0
0

Part Number: DRV8834

Hello,

Our customer use the DRV8834 with STEP/DIR control and mixed decay(50% fast).

The customer have a question.

The mixed decay is applied at increasing current and remaining constant.

How about the decay mode after power on reset?

The customer check decay mode at initial position, then it is slow decay.

Is it correct?

Best Regards,

Naoki Aoyama

RE: DRV8871: motor driver only giving output current of 500mA untill it reaches 7.2v

$
0
0
Hi Rick,

I have tried with different values of resistors at ILIM. like 22k,15k,18k etc.. and the power was given from HTC DC3003 DC power supply which could give the mentioned current.

The VM was above 6.5V.

DRV8871: motor driver only giving output current of 500mA untill it reaches 7.2v

$
0
0

Part Number: DRV8871

I was working with DRV8871 for driving brushed DC motor which should work on 7v with a nominal current 300mA and stall current 1200mA.

when I tested the DRV8871it was not providing the current more than 500mA at 7v during stall. when I tried increasing the voltage the output current that the driver is giving also increased, but it have been mentioned in the datasheet that the driver works from 6.5 .

please help me to understand why this is happening.

RE: DRV8825EVM: Supporting of Win 10 PC

$
0
0
Hi Shimizu-san,

Can you provide additional details?
What issue did the customer have?
Do you have screen captures of error messages?

DRV8825EVM: Supporting of Win 10 PC

$
0
0

Part Number: DRV8825EVM

Hi,

My customer has a issue during installation of DRV8825EVM GUI.
He uses Win 10 PC.
He can not install GUI of DRV8825EVM for occurring error during installing.
Is DRV8825EVM GUI supported Win 10 PC?

Best regards,
Shimizu

RE: DRV8308: Rotor Lock (RLOCK) Protection Feature in the new datasheet

$
0
0
Hi Kursad,

Sorry for the delay.

"In the DRV8308 datasheet released at 13 Nov 2017, it seems that rotor lock protection feature is removed. We have some old stock that we are currently using in our application and we can see that rotor lock protection feature is active in these chips and cannot be disabled. The device part numbers seem to be same in both the new datasheet and the older one. If we order the same device, how can we be sure that it doesn't have this RLOCK feature? Is there a way to disable this feature by editing some reserved registers in the older devices? Or the architecture of the newer devices are different from the previous versions?"

The revision history describes the changes made to the datasheet. Sections associated with locked rotor detection section were deleted, and the direction change behavior was updated.

For more information, please contact your local TI sales team to request more info.

RE: DRV8844EVM: Motor Drivers Forum

$
0
0
Hi Mehmet,

Before I can answer questions 1 and 2, can you tell me about the VM supply for the board? What supply voltages are you connecting to VM+ and VM-?

3) The test points on the board are designed for spring-loaded hooks. These are sometimes called "minigrabbers."

RE: DRV8844EVM: Motor Drivers Forum

$
0
0

Hi James,

I will be using a power supply with output 24V DC at 2.5A.

Thank you very much.

Mehmet

RE: DRV8834: Decay mode

$
0
0
Hi Aoyama-san,

When the current in the coil increases in magnitude, the DRV8834 will use slow decay regardless of the decay setting. After resetting the DRV8834, the internal indexer for the microstep table returns to the home position (marked in yellow on Table 4). Depending on the next STEP and DIR signals, the DRV8834 phases will have slow decay or mixed decay depending on whether the current at that level increased or decreased from the previous current.

RE: DRV8844EVM: DRV8844EVM

$
0
0
Hi Shanmukesh,

It sounds like the DRV8844EVM may be damaged. Did you remove the jumpers from the MSP430 signals before connecting the CC3200?

To debug the EVM, you may have to check important pins on the ICs to isolate the problem. To check the MSP430, remove the jumper on the board, then operate the GUI and see if the MSP430 provides the outputs you expect. Use this same idea to debug the DRV8844. Check the charge pump pins to see if the devices is operational. Send logic control signals to the inputs and see if the output signals correspond to the inputs.

DRV8844EVM: DRV8844EVM

$
0
0

Part Number: DRV8844EVM

I am using DRV8844 EVM and initially I tested it using the DRV8844 GUI,by connecting a brushed DC geared motor which ran perfectly.

Later,I tried to control IN lines and EN lines from a external CC3200 Launchpad through the test stakes to control the same Brushed DC motor. At  the first try there was communication between CC3200 and DRV8844 EVM and the motor started rotating, but then the motor did not run. I tried to go back to using the built in MSP 430 and tried to control through the DRV8844 GUI but no result. What can be done. How can I check?


RE: BOOSTXL-DRV8301: Motor identification works, running the motor does not

$
0
0
UPDATE: I have advanced through the labs to lab5b, where the speed ref is set to 0. The motor never truly stops, and it is just randomly oscillating. It its not working as a spring as said in the lab5b, although I have tried changing the PI parameters. I'm guessing the angle calculation is wrong in some way.

RE: DRV8825EVM: Supporting of Win 10 PC

$
0
0

Hi Shimizu,

DRV8825EVM GUI supports Win 10 system. Can you provide the error message?

Thanks.

Betty

RE: DRV8844EVM: Motor Drivers Forum

$
0
0
Mehmet,

1) The ground for the NI DAQ can connect to LGND or VM- since these should both connect to your power supply ground. If you supply a negative voltage to VM-, then only connect the NI DAQ to LGND.

2) You can connect your valves between the OUTx pins and your power supply ground if you are only turning the valves on and off. If you need to run the current in both directions through the valve coil, then connect the coil between two OUTx pins and provide the proper signal inputs to the IN pins to change direction of current flow.

RE: DRV10970: Driving Motor at speed lower than can be achieved at 10% duty using unorthodox means.

$
0
0
Garrett,

Sounds like an interesting solution to the 10% duty cycle limit on DRV10970. There will be no issue with alternating the PWM input signal between 0 and 100% over the lifetime of the device.

Thanks,
Brian

RE: DRV10970: Driving Motor at speed lower than can be achieved at 10% duty using unorthodox means.

Viewing all 22062 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>