Part Number:DRV10983-Q1
Hello, friends.
We have gained the DRV10983Q IC, and make our PCB board to tune a BLDC motor with 5 pin (U V W COM GND). BLDC motor's COM pin is unconnected. DRV10983Q PCB's voltage of V1P8, V3P3, VREG, VCC is correctly 1.8V, 3.3V, 5V, 24V. DRV10983Q PCB's SPEED pin is connected to 3.3V to exit sleep mode. All the registers can be correctly read and write through IIC, and its value is stored in EEPROM as default value or some other value. But I still can't correctly use DRV10983Q.
I want to use IIC mode to control motor speed with register 0x30. After I read back the EEPROM register (0x90~0x96) and verify correctly. I write 0x8090 into register 0x30. I think the BLDC motor should be spin more and more quickly, finally spin at the special speed. But actually, the BLDC motor always spin for a while and then stop. A few times later, the BLDC motor repeat spin for a while and then stop. This appearance seems like user wenjun sun's question named "DRV10983-Q1: Can't control speed, spin from stop to max then repeat". I have changed registers value according to the picture below (Basic settings + Advanced settings),and measure the RM and Kt myself. But the BLDC motor still repeatly spin for a while and then stop.
The following is U pin and FG pin wave. It seems like the BLDC motor dithers during aligntime, then spins during openloop, finally brake. When the motor accelerates to Op2ClsThr[4:0]=38.4Hz, the following closeloop disappeared, because of FG pin is always HI level.
I want to use IIC mode to control motor speed with register 0x30. The code is as follows. It is the first time for our company to use TI's motor diver IC. I'm not familier with DRV10983Q and BLDC motor deeply. And I can't fine the error.
main()
{
char vhi=0, vlo=0;
IIC_GP_Init();//config IIC SDA and SCL pull-up 3.3V
SPEED_Init(1);//SPEED pin input 3.3V to avoid goto sleep mode
DIR_Init(0);//DIR pin input 0V and FG is not used
//Config register 0x90~0x96 with default value
Eeprom_Wr_Bytes_API(0x60,0x80,0x00); //STA A4 60 80 00 STP (MTR_DIS=1)
Eeprom_Wr_Bytes_API(0x31,0x00,0x00); //STA A4 31 00 00 STP (ENPROGKEY=clear)
Eeprom_Wr_Bytes_API(0x31,0xC0,0xDE); //STA A4 31 C0 DE STP (ENPROGKEY=CODE)
Eeprom_Rd_Bytes_API(0x32,&vhi,&vlo); //STA A4 32 STP STA A5 00 01 STP (eeReadyStatus=1)
Eeprom_Wr_Bytes_API(0x90,0x10,0x3B); //STA A4 90 10 3B STP (LSU=1.8ohm/2)
Eeprom_Wr_Bytes_API(0x91,0x2F,0x3B); //STA A4 91 2F 3B STP (I'm not sure Kt value, so use default)
Eeprom_Wr_Bytes_API(0x92,0x00,0x50); //STA A4 92 00 50 STP
Eeprom_Wr_Bytes_API(0x93,0x1B,0x8A); //STA A4 93 1B 8A STP
Eeprom_Wr_Bytes_API(0x94,0x3F,0xAF); //STA A4 94 3F AF STP
Eeprom_Wr_Bytes_API(0x95,0xBC,0x43); //STA A4 95 BC 43 STP
Eeprom_Wr_Bytes_API(0x96,0x01,0x6A); //STA A4 96 01 6A STP
Eeprom_Wr_Bytes_API(0x35,0x00,0x06); //STA A4 35 00 06 STP (eeWRnEn=1)
while(1)
{
Eeprom_Rd_Bytes_API(0x32,&vhi,&vlo); //STA A4 32 STP STA A5 00 01 STP
if(vlo==1) break;
else sleep(10ms);
}
Eeprom_Wr_Bytes_API(0x35,0x00,0x02); //STA A4 35 00 02 STP (eeWRnEn=0)
while(1)
{
Eeprom_Rd_Bytes_API(0x32,&vhi,&vlo); //STA A4 32 STP STA A5 00 01 STP
if(vlo==1) break;
else sleep(10ms);
}
Eeprom_Rd_Bytes_API(0x90,&vhi,&vlo); //STA A4 90 STP STA A5 10 3B STP (verify correct)
Eeprom_Rd_Bytes_API(0x91,&vhi,&vlo); //STA A4 91 STP STA A5 2F 3B STP
Eeprom_Rd_Bytes_API(0x92,&vhi,&vlo); //STA A4 92 STP STA A5 00 50 STP
Eeprom_Rd_Bytes_API(0x93,&vhi,&vlo); //STA A4 93 STP STA A5 1B 8A STP
Eeprom_Rd_Bytes_API(0x94,&vhi,&vlo); //STA A4 94 STP STA A5 3F AF STP
Eeprom_Rd_Bytes_API(0x95,&vhi,&vlo); //STA A4 95 STP STA A5 BC 43 STP
Eeprom_Rd_Bytes_API(0x96,&vhi,&vlo); //STA A4 96 STP STA A5 01 6A STP
Eeprom_Wr_Bytes_API(0x60,0x00,0x00); //STA A4 60 00 00 STP (MTR_DIS=0)
//config BLDC motor into sleep mode to stop for a while, and the U V W signals are quiet indeed
Eeprom_Wr_Bytes_API(0x30,0x80,0x00); //STA A4 30 80 00 STP (OverRide=1 speed=0)
Eeprom_Rd_Bytes_API(0x30,&vhi,&vlo); //STA A4 30 STP STA A5 80 00 STP (motor stop)
sleep(5000ms);
//start BLDC motor with specifical speed, and the U V W output signals, I'm not sure the signal is 180 sine commutation or 120 hall commutation
Eeprom_Wr_Bytes_API(0x30,0x80,0x90); //STA A4 30 80 90 STP (OverRide=1 speed=90)
Eeprom_Rd_Bytes_API(0x30,&vhi,&vlo); //STA A4 30 STP STA A5 80 90 STP (config right)
//now the motor repeatedly spin for a while then stop. And at the same time, the U V W signals repeatedly appear for a while then disappear.
//check error every second, and no error happen while power is on
while(1)
{
Eeprom_Rd_Bytes_API(0x00,&vhi,&vlo); //STA A4 00 STP STA A5 00 00 STP
sleep(1000ms);
}
}
I'm an engineer for developing laser printer , DRV10983Q is userd for drive LSU of printer. And I have not enough experience about BLDC motor and DRV10983Q EVM. Would you like to support some recommendation or directly all registers value?
Thanks and regards