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

DRV8302: Brushless Sensorless Motor speed oscillates, which causes it to lose sync and shut off once it goes too fast.

$
0
0

Part Number: DRV8302

Hello motor control gurus. I am not one of you.

I made a BLDC control board to control an RC airplane motor- and it works well enough below 4k RPM, but goes unstable at higher RPM and loses sync. The type of control is sensorless trapezoidal high side PWM. This is the one where you use the ADC to sense the floating phase during the PWM "ON" duty, and then linear interpolate between the samples to find the exact time the signal would have crossed the Vin / 2 mark. That time is used to predict the commutation time. Inspiration came heavily from Dave Wilsons blog, TI appnotes, and Microchip appnotes.

I am using a 4 sample binary filter where each bit is either < or > the Vin / 2 and the filter looks for 0011 or 1100. Then linear interpolation to find the exact zero crossing time between sample 2 and 3. If I run the motor open loop at a fixed pwm and commutation cycle combo, I can adjust the power supply voltage until the motor is running ultra smooth and whisper quiet. So the instability is coming from my control algorithm somehow.

Per the theory the zero crossing occurs 30 degrees into a 60 degree commutation step, so if I identified the time of the zero cross TZCD, the proper commutation step time under steady state conditions would be 2 * TZCD. But that doesn't work. What works is to take the difference between the current commutation period and 2 * TZCD and add a fraction of it to the current commutation time:

Tnew = Tcurrent + B * (2 * TZCD - Tcurrent), where B is some fraction, like 1/8 or something. If B is over .5 it doesn't work, and if B is less than .1 it doesn't work. But all the values of B which let the motor run also has it oscillating and the motor loses sync at over 4000rpm.

Has anyone made a sensorless BLDC motor controller and had a similar problem? Is there a better commutation or filter algorithm? I tried keeping track of previous Tcommutation with a running average but that doesn't seem to work unless the running average is less than 4 samples, and even then the oscillation is the same.


DRV10983: Current limit function

$
0
0

Part Number: DRV10983

Hi

Does DRV10983 have current limit function those like DRV11873 has?

The current limit of DRV11873 can limit the current to motor.

It would be helpful because motor speed can be controlled just by PWM without increasing current flows.

Our motor can spin with DRV11873EVM up to 9000rpm.

However, it could not spin up to 9000rpm with DRV10983 because of overcurrent protection (triggered at 3.2A).

Do you think it is possible to spin our motor using DRV10983 up to 9000rpm depending on motor tuning?

BestRegards

RE: DRV8302: Brushless Sensorless Motor speed oscillates, which causes it to lose sync and shut off once it goes too fast.

$
0
0
Hi,

I think you should capture this image when motor is coasting to find the hall sensor errors or you can capture by sniping motor freely with hand (without commutation).
To find the commutation point, in zero crossing event, start a timer with period value equals to half the time between two zero crossing (half the time between previous and current zero crossing event). In timer period match ISR do the commutation. Adjust offset if any due to software latency etc.
At higher speed make sure zero crossing detection is proper to avoid the speed oscillation. Because at higher speed number of PWM in one commutation will be less and during PWM off time you will not get zero crossing, it will lead to position (commutation) error. If number of PWM cycles is very few (< 2 or 3) in one commutation, increase the PWM switching frequency.

Thanks
Abhishek

RE: DRV8711: Predriver Fault(XPDF) condtion

$
0
0

Hi Matsumoto-san,

The predriver fault monitors proper operation of the x1LS/x2LS/x1HS/x2HS outputs of the DRV8711. If incorrect operation is detected the PDF fault is activated.

Examples of detectable predriver faults are gate to source short, gate to drain short, pin short to adjacent pin.

RE: Trinamic TMC2130-LA-T replacement

$
0
0
Hi Vincenzo,

You may want to look at something like DRV8886AT (if 40V max is ok) or DRV8880 (if you need 50V max).

However we are not going to have as many "TM" features as Trinamic.

Thanks,
Matt

Trinamic TMC2130-LA-T replacement

$
0
0

hi all,

I'm looking for a replacement of the part in subject.

I looked at the DRV8825 and DRV8841, but I hope you can provide a better advice.

thanks a lot in advance

KR

Vincenzo

RE: DRV10975EVM: Motor Speed digital input and read back

$
0
0
Hello Rob,

Thanks for giving a good amount of information for context. Let me address your questions below:

For your first question, the GUI actually doesn’t have an automatic conversion to RPM from electrical frequency in Hz. There is a box towards the top of the display tab that requires user input of the number of poles (in your case, 8 because 4 pole pairs).

The equation of the conversion is:
RPM=60*Hz/(#polepairs)

Your second question is a bit more complex. To start, there is undeniably some lag in the reads for RPM on the GUI which gives a general RPM. A more accurate way to track it would be FG or monitoring the current waveform.

As for the decrease in speed, the drop occurs because the presence of water increases the load that the motor is driving. This would be like comparing the speed of fan with and without its fan blades.

Essentially, the presence of a speed command will translate into some amount of current. And load determines how easy it is to translate that current into motion. Higher load with same current means lower speed that is kind of close to the RPM conversion I have earlier.

This behavior is expected. Designers will often decide that the speed is “good enough” or some sort of feedback is needed in the form of speed regulation (e.g. PI Loop by monitor the frequency generated by FG).

Hope this help,
-Cole

DRV10975EVM: Motor Speed digital input and read back

$
0
0

Part Number: DRV10975EVM

Hi,

I'm having an issue with the reported speed using the DRV10975 EVM GUI. Here are my motor parameters:

Nominal Voltage: 9v
Nominal Current: 1.06A; Stall Current: 3.06A
No Load Speed; 3720RPM; Nominal Speed: 2060RPM
Phase-Phase Resistance: 2.87 ohm
Phase-Phase Inductance: 1.61mH
Kt: 56.3RPM/V = 35.8mV/HZ
Number of Pole Pairs: 4

My first question is that the automatic conversion from Hz to RPM seems wildly off. For example, I've set the Speed Control register to 100. When I poll the Motor Speed register it comes back as 62.4Hz, which according to the GUI equals 7164.18RPM. The RPM isn't even close to the actual speed (936 using a conversion factor of 15). What is the GUI using to do this conversion?

My second question is in regards to the reported Motor Speed and actual RPM. I'm comparing the actual RPM using a alternative motor controller, which is known good, and the reported speed is off by ~150RPMs. For example, the conversion factor to go from Hz to RPM should be 15, however, it dropped to 14.12 when pumping water. I verified this by comparing flow rates to the alternative motor controller. Any idea what's going on here?


RE: DRV10983: Current limit function

$
0
0

Na Na,

Yes, DRV10983 has software current limit that can be set through the I2C interface.  This limit can be set below the over current protection so you should be able to spin up your motor similar to DRV11873.

Thanks,

Brian

RE: DRV11873: Cut-out at certain duty cycles - why?

$
0
0
Chris,

I don't believe I encountered this behavior. Given that you are ~4x the fundamental frequency where the false lock occurs I would have expected varying the PWM by something like 0.05% would have been sufficient to move away from the false lock.

How invested in DRV11873 are you? A newer 12V device in our products in DRV10975, however, it does require I2C interface to configure the motor controller.

I'll think about it a little more and see if I can find any reason that you are having to vary the PWM so much.

Thanks,
Brian

CCS/DRV8711: DRV8711 with MSP430g2553

$
0
0

Part Number: DRV8711

Tool/software: Code Composer Studio

Hi all,

I am using DRV8711 for my stepper motor control project. First i tried with MSP430g2553 controller and DRV8711 evaluation kit, its working fine.

Based on that i developed new own board with MSP430G2553 28 pin package and DRV8711. I wrote code for that, my issue is Motor not run even single step.

SPI communication between DRV and MSP is working fine and other I/O's are also working good.

I attached my schematic and program also. I put pullup resistor for nSTALL and RESET pins and i removed all series resistor connected between MSP and DRV8711.

Help anyone to solve this.

Regards

Yuvaraj

int main(void)
{
    Initialize();

    unsigned int i=0,j=5500,x=0;

    P2OUT &= ~nSLEEP;
    P2OUT |= RESET;
    for(i=0;i<1000;i++);
    P2OUT |= nSLEEP;
    P2OUT &= ~RESET;

    P2DIR = (RESET | STEP_AIN1 | nSLEEP);
    P2DIR &= ~nFAULT;
    P3DIR = (CS | DIR_AIN2);//0xff;

    P2OUT |= (RESET | STEP_AIN1 | nSLEEP);
    P3OUT |= (CS | DIR_AIN2);

    P2OUT &= ~RESET;

    while(1)
    {
        if ((nFAULT & P2IN) == 0)
        {
            P2OUT &= ~nSLEEP;
            P2OUT |= RESET;
            for(i=0;i<1000;i++);
            for(i=0;i<1000;i++);
            P2OUT |= nSLEEP;
            for(i=0;i<1000;i++);
            ReadAllRegisters();
            P2OUT &= ~RESET;
        }

        ReadAllRegisters();

        for(i=0;i<j;i++);

        P2OUT |= STEP_AIN1;

        for(i=0;i<j;i++);

         P2OUT &= ~STEP_AIN1;

         if(j<1000)
             j=1000;

    }
}

void Initialize()
{

    WDTCTL = WDTPW | WDTHOLD;
    DCOCTL = 0x00;
    DCOCTL = CALDCO_16MHZ;
    BCSCTL1 = CALBC1_16MHZ;
    BCSCTL2 |= DIVS_3;
    BCSCTL3 |= LFXT1S_2;

    // Configure GPIO
    P2SEL  &= ~(POT | nSLEEP);
    P2SEL2 &= ~(POT | nSLEEP);

    P2DIR = RESET | STEP_AIN1 | nSLEEP;
    P2DIR &= ~nFAULT;
    P3DIR = CS | DIR_AIN2;//0xff;

    P2OUT |= RESET | STEP_AIN1 | nSLEEP;
    P3OUT |= CS | DIR_AIN2;

    UCB0CTL1 = UCSWRST;
    P3DIR |= CS;
    P3OUT &= ~CS;
    P1SEL |= SCLK | SDATO |  SDATI;
    P1SEL2 |= SCLK | SDATO |  SDATI;

    UCB0CTL0 |= UCCKPH | UCMSB | UCMST | UCSYNC;
    UCB0CTL1 |= UCSSEL_2;   // SMCLK
    UCB0CTL1 &= ~UCSWRST;
    // End SPI Configure

    __bis_SR_register(GIE);

    // GUI Composer Monitor Initialization
    ClearBufferRelatedParam();

    // CTRL Register
    G_CTRL_REG.Address     = 0x00;
    G_CTRL_REG.DTIME     = 0x03;
    G_CTRL_REG.ISGAIN     = 0x03;
    G_CTRL_REG.EXSTALL     = 0x00;
    G_CTRL_REG.MODE     = 0x01; //0x03;
    G_CTRL_REG.RSTEP     = 0x00;
    G_CTRL_REG.RDIR     = 0x00;
    G_CTRL_REG.ENBL     = 0x01;

    // TORQUE Register
    G_TORQUE_REG.Address = 0x01;
    G_TORQUE_REG.SIMPLTH = 0x00;
    G_TORQUE_REG.TORQUE  = 0x7f;

    // OFF Register
    G_OFF_REG.Address     = 0x02;
    G_OFF_REG.PWMMODE     = 0x00;
    G_OFF_REG.TOFF         = 0x30;

    // BLANK Register
    G_BLANK_REG.Address = 0x03;
    G_BLANK_REG.ABT     = 0x01;
    G_BLANK_REG.TBLANK     = 0x08;

    // DECAY Register.
    G_DECAY_REG.Address = 0x04;
    G_DECAY_REG.DECMOD  = 0x03;
    G_DECAY_REG.TDECAY     = 0x10;

    // STALL Register
    G_STALL_REG.Address = 0x05;
    G_STALL_REG.VDIV     = 0x03;
    G_STALL_REG.SDCNT     = 0x03;
    G_STALL_REG.SDTHR     = 0x40;

    // DRIVE Register
    G_DRIVE_REG.Address = 0x06;
    G_DRIVE_REG.IDRIVEP = 0x00;
    G_DRIVE_REG.IDRIVEN = 0x00;
    G_DRIVE_REG.TDRIVEP = 0x01;
    G_DRIVE_REG.TDRIVEN = 0x01;
    G_DRIVE_REG.OCPDEG     = 0x01;
    G_DRIVE_REG.OCPTH     = 0x01;

    // STATUS Register
    G_STATUS_REG.Address = 0x07;
    G_STATUS_REG.STDLAT  = 0x00;
    G_STATUS_REG.STD     = 0x00;
    G_STATUS_REG.UVLO    = 0x00;
    G_STATUS_REG.BPDF    = 0x00;
    G_STATUS_REG.APDF    = 0x00;
    G_STATUS_REG.BOCP    = 0x00;
    G_STATUS_REG.AOCP    = 0x00;
    G_STATUS_REG.OTS     = 0x00;

    WriteAllRegisters();
}

void WriteAllRegisters()
{
    unsigned char dataHi = 0x00;
    unsigned char dataLo = 0x00;

    // Write CTRL Register
    dataHi = REGWRITE | (G_CTRL_REG.Address << 4) | (G_CTRL_REG.DTIME << 2) | (G_CTRL_REG.ISGAIN);
    dataLo = (G_CTRL_REG.EXSTALL << 7) | (G_CTRL_REG.MODE << 3) | (G_CTRL_REG.RSTEP << 2) | (G_CTRL_REG.RDIR << 1) | (G_CTRL_REG.ENBL);
    SPI_DRV8711_ReadWrite(dataHi, dataLo);

    // Write TORQUE Register
    dataHi = REGWRITE | (G_TORQUE_REG.Address << 4) | (G_TORQUE_REG.SIMPLTH);
    dataLo = G_TORQUE_REG.TORQUE;
    SPI_DRV8711_ReadWrite(dataHi, dataLo);

    // Write OFF Register
    dataHi = REGWRITE | (G_OFF_REG.Address << 4) | (G_OFF_REG.PWMMODE);
    dataLo = G_OFF_REG.TOFF;
    SPI_DRV8711_ReadWrite(dataHi, dataLo);

    // Write BLANK Register
    dataHi = REGWRITE | (G_BLANK_REG.Address << 4) | (G_BLANK_REG.ABT);
    dataLo = G_BLANK_REG.TBLANK;
    SPI_DRV8711_ReadWrite(dataHi, dataLo);

    // Write DECAY Register
    dataHi = REGWRITE | (G_DECAY_REG.Address << 4) | (G_DECAY_REG.DECMOD);
    dataLo = G_DECAY_REG.TDECAY;
    SPI_DRV8711_ReadWrite(dataHi, dataLo);

    // Write STALL Register
    dataHi = REGWRITE | (G_STALL_REG.Address << 4) | (G_STALL_REG.VDIV << 2) | (G_STALL_REG.SDCNT);
    dataLo = G_STALL_REG.SDTHR;
    SPI_DRV8711_ReadWrite(dataHi, dataLo);

    // Write DRIVE Register
    dataHi = REGWRITE | (G_DRIVE_REG.Address << 4) | (G_DRIVE_REG.IDRIVEP << 2) | (G_DRIVE_REG.IDRIVEN);
    dataLo = (G_DRIVE_REG.TDRIVEP << 6) | (G_DRIVE_REG.TDRIVEN << 4) | (G_DRIVE_REG.OCPDEG << 2) | (G_DRIVE_REG.OCPTH);
    SPI_DRV8711_ReadWrite(dataHi, dataLo);

    // Write STATUS Register
    dataHi = REGWRITE | (G_STATUS_REG.Address << 4);
    dataLo = (G_STATUS_REG.STDLAT << 7) | (G_STATUS_REG.STD << 6) | (G_STATUS_REG.UVLO << 5) | (G_STATUS_REG.BPDF << 4) | (G_STATUS_REG.APDF << 3) | (G_STATUS_REG.BOCP << 2) | (G_STATUS_REG.AOCP << 1) | (G_STATUS_REG.OTS);
    SPI_DRV8711_ReadWrite(dataHi, dataLo);
}

RE: CCS/DRV8711: DRV8711 with MSP430g2553

$
0
0
Hi Yuvaraj,

What steps have you taken to compare the evaluation kit to your board?
Do you have similar settings in your DRV8711 compared to the evaluation kit?
Have you examined the fault pin, the reset pin and registers?
Have you examined the high side and low side gate signals once the device is enabled?

RE: Looking for 24V BLDC motor driver

$
0
0
Hi Anil,

What do you mean "drive 24V BLDC motor with the help 3 PWM signal and hall sensor feedback"?

Do you mean the driver should control the BLDC without the help of the TM4C123?
If so, please look at the DRV8308.

If you mean the TM4C123 should receive the hall signals from the BLDC and control the driver, please look at the DRV8320. The DRV8320 also has a mode (1-X PWM mode) that accepts the hall signals directly and commutates.

RE: Looking for 24V BLDC motor driver

$
0
0
Hi Rick,
Thanks for your quick reply.
Actually i want to run 24V BLDC motor with the help of PWM siganls generated from TM4C123 controller.
Three Phase signal of BLDC motor should be directly connected to driver module. Driver module should take PWM inputs from TM4C123 controller and generate phase signals for BLDC motor.
These PWM signals are generated from commutation logic (sinusoidal/Trapezoidal) written in controller with the help of hall sensor signal.

Looking for 24V BLDC motor driver

$
0
0

Hello all,

      I want to drive 24V BLDC motor with the help of TM4C123 tiva c controller.

I am looking for a driver which can drive 24V BLDC motor with the help 3 PWM signal and hall sensor feedback.

I have attached motor datasheet.

Any help would be highly appreciated. Thanks in advance.

[View:/cfs-file/__key/communityserver-discussions-components-files/38/EC-flat-60.pdf:1230:0]


RE: DRV8833: Regenerative braking

$
0
0
Hi Rick,

Thank you for your response. I'll keep testing. For now, I'm using the SN754410.

DRV8833: Regenerative braking

$
0
0

Part Number: DRV8833

Hi there,

I'm building a motor driver circuit capable of regenerative braking. Is it possible to achieve this with the DRV8833 chip (i.e. current flow from AOUT1 to VM), or does the chip only allow current to flow from VM to the output?

Thank you,

Ben Hudson

150W 12V automotive sensorless BLDC motor component selection help

$
0
0

Hello everybody,

I could use some help selecting some components for a new project we are working on. I am stuck with a NDA so can't share too much about but it is a 12V around 150W automotive sensorless BLDC motor we need to control. Max RPM is around 3000 rpm.

I have not used TI before in BLDC motor control before so I am kinda lost here. I have looked around and see there are several ways to accomplish this but of course, I am looking for the most economic solution.  Considered MCU F28027 Launchpad + BOOSTXL-DRV8305EVM to get started but not sure if this is the smartest way.

Could somebody help me to get going?

Thanks,

Jan

RE: DRV8302: Brushless Sensorless Motor speed oscillates, which causes it to lose sync and shut off once it goes too fast.

$
0
0

Thank you for responding Prashant- I am pretty new to motors. I will work harder on my filtering and linear interpolation. It seems plausible that small inconsistencies could cause big problems at higher speeds.

Let me clarify my ignorance about the difference between sensored and sensorless mode. So here is the same motor running approximately the same speed in sensored and sensorless mode. From the sensorless mode capture, it looks like the sensors are triggering on the BEMF zero (or power supply 50%) crossing. In sensored mode, the current is switching when the sensor switches!

I think that means in sensored mode the coils are switching 30 degrees late, during which time it is slowing down the motor. Sensorless operation is qualitatively quieter and uses a little less current, indicating it is more efficient. Is it common to create a 'phase-shift' for sensored motors to try and get them to switch closer to the right time?

Sensorless:

Sensored:

RE: 150W 12V automotive sensorless BLDC motor component selection help

$
0
0
Hi Jan,

The BOOSTXL-DRV8305EVM + Launchpad is a good starting point. There is also the www.ti.com/.../DRV8305-Q1EVM which has the automotive version of the device on the EVM.

In both cases, you can connect connect a different mcu. In some cases you can change the FETs assuming the same footprint.
Viewing all 21639 articles
Browse latest View live