Part Number: DRV8320
Hello everyone,
This is a followup to a problem I had earlier, which was sort of - but not really fixed by e2e.ti.com/.../2433911
My problem is that I cannot get my sensored brushless DC motor to spin with the DRV8320S chip.
I have followed the recommended startup procedure.
PWM = 0;
MBRAKE = 0; // The brake
MDIR = 0; // Motor Direction
ENABLEHALL = 0; // All Hall Sensors at 0v
ENABLE = 0; // Chip is off
waitms(1);
waitms(255); // Wait time
ENABLE = 1; // Turn on DRV8320s
waitms(10); // Wait for things to settle
drv2_write(); // Write the settings below
waitms(100); // Wait
ENABLEHALL = 1; //Enable the hall sensors
MBRAKE = 1; // Enable braking
MDIR = 1; // Set motor Direction
then I turn on the PWM at 10kHz
Let me describe again to you in point form what I have done, and when my result is.
This whole testing is being conducted on a breadboard. Before jumping to conclusions, at one point in time I had my motor spinning on this breadboard. The only difference, was that it was being powered by a DRV8320H chip, not the SPI (S) version. At some point in time that configuration stopped working (while I was making the conversion over to the SPI chip version).
SO here we are. I am powering everything with a 35v source 5a power supply. I have over 1000uF of bulk capacitance between my ground and VM lines. I use the required ceramic capacitors for the circuit, as indicated on the DRV8320 datasheet, page 22, figure 11. My motor is connected as it should be to the SHA, SHB, and SHC lines.
The DRV8320S works flawlessly with SPI, everything from setting registers, to reading registers. In my code, I write to all registers twice to make sure that the SDO on the second write is the same as SDI (data in the current register is shifted out when new data is written). This is the case.
These are my setting for the Chip:
//Register 3
SPI0DAT = 0b0_0011_011; //first 8 bits
SPI0DAT = 0b0010_0010; //next 8 bits
waitms(1);
//Register 2
SPI0DAT = 0b0_0010_000;
SPI0DAT = 0b0100_0000;
//Register 4
SPI0DAT = 0b0_0100_101;
SPI0DAT = 0b0010_0010;
//Register 5
SPI0DAT = 0b0_0101_0111;
SPI0DAT = 0b0110_1001;
Basically as my N-Fets are very low Rds (0.018 ohms), I can get away with using a pretty low drive current. I use 1x PWM mode as I have the feedback from my motor hall sensors (which output correctly).
The chip reads no errors until I turn on the PWM (the signal is 40% duty cycle at 10khz from a 3.3v pin). The motor makes a brief small noise during the time (1/4 second), and then stops making the noise and the chip faults. At this point I get an error on register 0 and 1. Register 0 reads 0b0000010110000000 (FAULT, GDF, UVLO) and Register 1 reads 0b000000000010100 (VGS_LB and VGS_LA).
When I scope the pins of my mosfets (for the frist 1/4 second while it makes noise), I get the following: GHA = 35v GSA = 35v , GLA = 0v then some time passes after which GHA = 0v GSA = 0v , GLA = 12v and then back to GHA = 35v GSA = 35v , GLA = 0v.
I do not know what my problem is. Please help.