Part Number:DRV10983
Hi folks,
We're trying this IC for the first time on a custom PCB. Schematic and layout are pretty identical to the ones shown in the datasheet, however our setup seems not to work as it should.
Let me describe the situation:
- Communications lines have been tested and work OK
- Supply lines have been tested and work OK
- Microcontroller works OK
- All pads in the PCB are properly soldered to the DRV and there's no shorts in the IC.
Motor parameters (acquired following SLOU395D (DRV10983 and DRV10975 Tuning Guide)):
- Operation voltage: 24V
- Number of poles: 4 stops hand rotating with an energized phase = 8 poles
- Max speed: 3000RPM
- Phase Resistance: 1.4 Ohms
- Kt: 196mv/Hz? Ac calculated, however, i don't fully comprehend this value.
- LR: not calculated
- Intertia: Not calculated
When we apply power to the board current consumption climbs up to 25mA or so (OK), then we use the TWI to program the DRV :
#include <Arduino.h> #include <Wire.h> #include "DRV10983.h" #define PWM 6 #define DIR 5 #define DRV_address 0b1010010 void twi_write (uint8_t slave, uint8_t reg, uint8_t data){ Wire.beginTransmission(slave); Wire.write(reg); delayMicroseconds(50); Wire.write(data); Wire.endTransmission(); } uint8_t twi_read (uint8_t slave, uint8_t reg, uint8_t bytes){ Wire.beginTransmission(slave); Wire.write(reg); Wire.endTransmission(); delayMicroseconds(50); uint8_t c = Wire.requestFrom(slave,bytes); return c; } void setup() { pinMode(PWM,OUTPUT); pinMode(DIR,OUTPUT); digitalWrite(PWM,0); digitalWrite(DIR,1); TCCR0B = 0x01; Serial.begin(115200); Wire.begin(); twi_write(DRV_address,0x03,0xC0); // Disable sleep, enable the Sidata bit to enable writing to registers 0b11000000 twi_write(DRV_address,0x20,0b11001001); // Motor Param1 50KHz output freq + motor resistance 1.4R twi_write(DRV_address,0x21,0b01001101); // Motor Param2 Half cycle + V constant 192mv/Hz //Default values from datasheet loaded twi_write(DRV_address,0x22,0x2A); // Motor Param3 No idea what this is... twi_write(DRV_address,0x23,0x00); // SYSOPT1 twi_write(DRV_address,0x24,0x98); // SYSOPT2 twi_write(DRV_address,0x25,0xE4); // SYSOPT3 twi_write(DRV_address,0x26,0x7A); // SYSOPT4 twi_write(DRV_address,0x27,0xFC); // SYSOPT5 twi_write(DRV_address,0x28,0x69); // SYSOPT6 twi_write(DRV_address,0x29,0xB7); // SYSOPT7 twi_write(DRV_address,0x2A,0xAD); // SYSOPT8 twi_write(DRV_address,0x2B,0xcC); // SYSOPT9 analogWrite(6,125); // PWM ~50% duty cycle to DRV } void loop() { }
As seen in the logic analyzer, communication is sucessful and the device returns ACK to all the written configurations:
Time [s],Packet ID,Address,Data,Read/Write,ACK/NAK 0.000111500000000,0,0xA4,0x03,Write,ACK // Disable sleep, enable the Sidata bit to enable writing to registers 0b11000000 0.000207000000000,0,0xA4,0xC0,Write,ACK 0.000543500000000,1,0xA4,0x20,Write,ACK // Motor Param1 50KHz output freq + motor resistance 1.4R 0.000639000000000,1,0xA4,0xC9,Write,ACK 0.000976000000000,2,0xA4,0x21,Write,ACK // Motor Param2 Half cycle + V constant 192mv/Hz 0.001071500000000,2,0xA4,0x4D,Write,ACK 0.001408000000000,3,0xA4,0x22,Write,ACK // Motor Param3 No idea what this is... 0.001503500000000,3,0xA4,0x2A,Write,ACK 0.001840000000000,4,0xA4,0x23,Write,ACK // SYSOPT1 0.001935500000000,4,0xA4,0x00,Write,ACK 0.002272500000000,5,0xA4,0x24,Write,ACK // SYSOPT2 0.002367500000000,5,0xA4,0x98,Write,ACK 0.002704500000000,6,0xA4,0x25,Write,ACK // SYSOPT3 0.002800000000000,6,0xA4,0xE4,Write,ACK 0.003136500000000,7,0xA4,0x26,Write,ACK // SYSOPT4 0.003232000000000,7,0xA4,0x7A,Write,ACK 0.003568500000000,8,0xA4,0x27,Write,ACK // SYSOPT5 0.003664000000000,8,0xA4,0xFC,Write,ACK 0.004001000000000,9,0xA4,0x28,Write,ACK // SYSOPT6 0.004096000000000,9,0xA4,0x69,Write,ACK 0.004433000000000,10,0xA4,0x29,Write,ACK // SYSOPT7 0.004528500000000,10,0xA4,0xB7,Write,ACK 0.004865000000000,11,0xA4,0x2A,Write,ACK // SYSOPT8 0.004960500000000,11,0xA4,0xAD,Write,ACK 0.005297000000000,12,0xA4,0x2B,Write,ACK // SYSOPT9 0.005392500000000,12,0xA4,0xCC,Write,ACK
The only thing i can get the motor to do is to hum a little, spin for a second or so and then stop. This is repeated until i remove power from the board. The motor gets really hot and so does the IC. IT's becoming a bit frustrating. Most of the documentation is oriented towards the EVM, could someone provide some insights on this issue?
Motor Noise
(Please visit the site to view this audio)
Layout placement:
Motor: