Part Number:DRV10987
Hi,
I am using DRV10987 with my smart car application.,I have done what I can with Turning Guide.However,i can't spun my motor with under configurations.Here is my motor parameter and tested data:
void DRV_init(void) { i2c_init(i2c0,100*1000); i2c_init(i2c1,100*1000); systick_delay_ms(1); //Wait for set up 1ms do { i2c_write_reg(i2c0,DRV10987_Address,EECRTL,0x80,0x00); //Setting EEPROM Access permission and DISABLE!!!!!!!! the motor i2c_write_reg(i2c0,DRV10987_Address,EEPROM1,0x00,0x00); //clearer EEPROM Access code i2c_write_reg(i2c0,DRV10987_Address,EEPROM1,0xC0,0xDE); //Setting EEPROM Access code gpio_init(G0,GPO,0); // systick_delay_ms(1); //Wait for set up 1ms }while(i2c_read_reg(i2c0,DRV10987_Address,EEPROM2) != 0x0001); //Setting EEPROM able to read gpio_init(G0,GPO,1); i2c_write_reg(i2c0,DRV10987_Address,CONFIG1,0 | p5_SpectrumControl_MASK | FG_both_open_and_close | FG_Only_Close | FG_POLES(16), 0 | CLK_ADJ_SELECT(0) //0:FULL 1:HALF | 0x5B ); //Setting to 3.5R i2c_write_reg(i2c0,DRV10987_Address,CONFIG2,0 | 0x0A, //Page 24 0 | CommAdvMode(0) | 0x02 ); //Page 37 i2c_write_reg(i2c0,DRV10987_Address,CONFIG3,0 | ISDThr_80ms | BrkCurThrSel(0) | BEMF_HYS(0) | ISDEn(0) | RvsDrEn(0) | RvsDrThr_6P3, 0 | OplCurr_0p4 | OplCurrRt_6 | BrkDoneThr_0 ); i2c_write_reg(i2c0,DRV10987_Address,CONFIG4,0 | AccRangeSec(0) | StAccel2(0) | StAccel(1), 0 | Op2ClsThr(1,10) | AlignTime(6) ); i2c_write_reg(i2c0,DRV10987_Address,CONFIG5,0 | OTWarmingLimit(0) | CloseLoopStuckLock(0) | OpenLoopStuckLook(0) | NoMotorLock(0) | AbnormalKtLock(0) | AbnormalSpeedLook(0), 0 | SWiLimitThr(0) | HWiLinitThr(0) | IPDasHWlLimit(0) ); i2c_write_reg(i2c0,DRV10987_Address,CONFIG6,0 | SpdCtrlMd(1) | PWMFreq(0) | KtLckThr(0) | AVSIndEn(0) | AVSMMd(0) | IPDRIsMd(0), 0 | CLoopDis(0) | CIsLpAccel(0) | DutyCycleLimit(0) | SlewRate(0) ); i2c_write_reg(i2c0,DRV10987_Address,CONFIG7,0 | IPDAdvcAg(0) | IPDCurrThr(0) | IPDClk(0), 0 | CtrlCoef(4) | Deadtime(10) ); i2c_write_reg(i2c0,DRV10987_Address,EEPROM5,0x00,0x06); while(i2c_read_reg(i2c0,DRV10987_Address,EEPROM2) != 0x0001); i2c_write_reg(i2c0,DRV10987_Address,EEPROM5,0x00,0x02); while(i2c_read_reg(i2c0,DRV10987_Address,EEPROM2) != 0x0001); i2c_write_reg(i2c0,DRV10987_Address,EECRTL,0x00,0x00); systick_delay_ms(5); //Wait for set up /***********************************************************************************************************************************************/ do { i2c_write_reg(i2c1,DRV10987_Address,EECRTL,0x80,0x00); //Setting EEPROM Access permission and DISABLE!!!!!!!! the motor i2c_write_reg(i2c1,DRV10987_Address,EEPROM1,0x00,0x00); //clearer EEPROM Access code i2c_write_reg(i2c1,DRV10987_Address,EEPROM1,0xC0,0xDE); //Setting EEPROM Access code gpio_init(G0,GPO,0); // // systick_delay_ms(1); //Wait for set up 1ms }while(i2c_read_reg(i2c1,DRV10987_Address,EEPROM2) != 0x0001); //Setting EEPROM able to read gpio_init(G0,GPO,1); i2c_write_reg(i2c1,DRV10987_Address,CONFIG1,0 | p5_SpectrumControl_MASK | FG_both_open_and_close | FG_Only_Close | FG_POLES(2), 0 | CLK_ADJ_SELECT(0) //0:FULL 1:HALF | 0x5B ); //Setting to 3.5R i2c_write_reg(i2c1,DRV10987_Address,CONFIG2,0 | 0x0A, //Page 24 0 | CommAdvMode(0) | 0x02 ); //Page 37 i2c_write_reg(i2c1,DRV10987_Address,CONFIG3,0 | ISDThr_80ms | BrkCurThrSel(0) | BEMF_HYS(0) | ISDEn(0) | RvsDrEn(0) | RvsDrThr_6P3, 0 | OplCurr_0p4 | OplCurrRt_6 | BrkDoneThr_0 ); i2c_write_reg(i2c1,DRV10987_Address,CONFIG4,0 | AccRangeSec(0) | StAccel2(0) | StAccel(1), 0 | Op2ClsThr(1,10) | AlignTime(6) ); i2c_write_reg(i2c1,DRV10987_Address,CONFIG5,0 | OTWarmingLimit(0) | CloseLoopStuckLock(0) | OpenLoopStuckLook(0) | NoMotorLock(0) | AbnormalKtLock(1) | AbnormalSpeedLook(1), 0 | SWiLimitThr(0) | HWiLinitThr(0) | IPDasHWlLimit(0) ); i2c_write_reg(i2c1,DRV10987_Address,CONFIG6,0 | SpdCtrlMd(1) | PWMFreq(0) | KtLckThr(0) | AVSIndEn(0) | AVSMMd(0) | IPDRIsMd(0), 0 | CLoopDis(0) | CIsLpAccel(4) | DutyCycleLimit(0) | SlewRate(4) ); i2c_write_reg(i2c1,DRV10987_Address,CONFIG7,0 | IPDAdvcAg(0) | IPDCurrThr(0) | IPDClk(0), 0 | CtrlCoef(4) | Deadtime(10) ); i2c_write_reg(i2c1,DRV10987_Address,EEPROM5,0x00,0x06); while(i2c_read_reg(i2c1,DRV10987_Address,EEPROM2) != 0x0001); i2c_write_reg(i2c1,DRV10987_Address,EEPROM5,0x00,0x02); while(i2c_read_reg(i2c1,DRV10987_Address,EEPROM2) != 0x0001); i2c_write_reg(i2c1,DRV10987_Address,EECRTL,0x00,0x00); systick_delay_ms(50); //Wait for set up