TI中文支持网
TI专业的中文技术问题搜集分享网站

DRV10987: 电机驱动问题,实际电路开发步骤

Part Number:DRV10987

DRV10987不使用EVM和GUI,直接在自己电路环境中进行软件开发,整体步骤如何?

第一步,还是需要确定电机相关参数:部分参数从点击手册获取,一部分实际测量吗?

第二步,根据参数写0x90~0x96 eeprom寄存器的值

第三步,映射影子寄存器

第四步,设置0x30设置速度

第四步,读取0x01速度反馈

第五步,电机转动

按照以上步骤,可以顺利驱动电机吗?谢谢,盼复

Cherry Zhou:

您好,您的问题我们需要升级到英文论坛看下,有答复尽快给您。

,

jia xu:

您好,请问后续有什么进展跟踪

,

Cherry Zhou:

没太理解您的问题,您是希望在没有 EVM 和 GUI 支持的情况下使用 DRV10987对电机进行调优吗? 

,

jia xu:

是的,在没有 EVM 和 GUI 支持的情况下使用 DRV10987对电机进行调优,顺利驱动电机转动,可通过IIC的方式控制速度

,

Cherry Zhou:

好的,我们跟进给工程师了。

,

jia xu:

uint16_t reg_data[16] = {0x8000,0x8000,0x0000,0xC0DE,\0xC04B,0x0049,0x00C0,0x3788,0x3BAF,0x7840,0x007A,0x1006,\0x1002,0x0000,0xFF};uint16_t close_reg_data[16] = {0x8000,0x8000,0x0000,0xC0DE,\0xD04B,0x00BB,0x00C0,0x3788,0x3B0F,0x7840,0x007A,0x1006,\0x1002,0x0000,0xFF};int reg30_data = 0x8000,default_speed = 0x812C,speed = 0,stop_speed = 0,speed_read = 0;/*开环控制参数*/BSP.bldc.method->write(&BSP.bldc.attribute,0x60,&reg_data[0],2);//禁用电机驱动BSP.bldc.method->write(&BSP.bldc.attribute,0x31,&reg_data[2],2);BSP.bldc.method->write(&BSP.bldc.attribute,0x31,&reg_data[3],2);BSP.bldc.method->read(&BSP.bldc.attribute,0x32,&read_data[2],2);BSP.bldc.method->write(&BSP.bldc.attribute,0x90,&reg_data[4],2);//0x004BBSP.bldc.method->write(&BSP.bldc.attribute,0x91,&reg_data[5],2);//0x49BSP.bldc.method->write(&BSP.bldc.attribute,0x92,&reg_data[6],2);BSP.bldc.method->write(&BSP.bldc.attribute,0x93,&reg_data[7],2);BSP.bldc.method->write(&BSP.bldc.attribute,0x94,&reg_data[8],2);BSP.bldc.method->write(&BSP.bldc.attribute,0x95,&reg_data[9],2);BSP.bldc.method->write(&BSP.bldc.attribute,0x96,&reg_data[10],2);BSP.bldc.method->write(&BSP.bldc.attribute,0x35,&reg_data[11],2);BSP.bldc.method->read(&BSP.bldc.attribute,0x32,&read_data[2],2);BSP.bldc.method->write(&BSP.bldc.attribute,0x60,&reg_data[13],2); //启用电机BSP.bldc.method->write(&BSP.bldc.attribute,0x30,&reg30_data,2); //override位置1,开启i2c控制模式BSP.bldc.method->write(&BSP.bldc.attribute,0x30,&default_speed,2); //写默认速度BSP.bldc.method->read(&BSP.bldc.attribute,0x30,&speed_read,2);//读速度BSP.bldc.method->write(&BSP.bldc.attribute,0x60,&reg_data[13],2); //启用电机/*闭环控制*/BSP.bldc.method->write(&BSP.bldc.attribute,0x60,&close_reg_data[0],2);//禁用电机驱动BSP.bldc.method->write(&BSP.bldc.attribute,0x31,&close_reg_data[2],2);BSP.bldc.method->write(&BSP.bldc.attribute,0x31,&close_reg_data[3],2);BSP.bldc.method->read(&BSP.bldc.attribute,0x32,&close_reg_data[2],2);BSP.bldc.method->write(&BSP.bldc.attribute,0x90,&close_reg_data[4],2);//0x004BBSP.bldc.method->write(&BSP.bldc.attribute,0x91,&close_reg_data[5],2);//0x49BSP.bldc.method->write(&BSP.bldc.attribute,0x92,&close_reg_data[6],2);BSP.bldc.method->write(&BSP.bldc.attribute,0x93,&close_reg_data[7],2);BSP.bldc.method->write(&BSP.bldc.attribute,0x94,&close_reg_data[8],2);BSP.bldc.method->write(&BSP.bldc.attribute,0x95,&close_reg_data[9],2);BSP.bldc.method->write(&BSP.bldc.attribute,0x96,&close_reg_data[10],2);BSP.bldc.method->write(&BSP.bldc.attribute,0x35,&close_reg_data[11],2);BSP.bldc.method->read(&BSP.bldc.attribute,0x32,&close_reg_data[2],2);BSP.bldc.method->write(&BSP.bldc.attribute,0x60,&close_reg_data[13],2); //启用电机/*锁检测*/BSP.bldc.method->read(&BSP.bldc.attribute,0x00,&read_data[7],2);if(read_data[7] != 0x4){BSP.bldc.method->write(&BSP.bldc.attribute,0x00,&reg_data[14],2);//clear错误寄存器BSP.bldc.method->read(&BSP.bldc.attribute,0x00,&read_data[7],2);}sscanf(optarg,"%x",&speed);BSP.bldc.method->write(&BSP.bldc.attribute,0x30,&reg30_data,2); //override位置1,开启i2c控制模式BSP.bldc.method->write(&BSP.bldc.attribute,0x30,&default_speed,2); //写默认速度BSP.bldc.method->read(&BSP.bldc.attribute,0x30,&speed_read,2);//读速度BSP.bldc.method->write(&BSP.bldc.attribute,0x60,&reg_data[13],2); //启用电机 

,

jia xu:

请问后续跟进情况如何?

,

Cherry Zhou:

抱歉,今天是美国的假期,我们先把您更新的信息跟进给工程师,周四之前如果还没有答复的话我们来催促下看看。

,

jia xu:

好的谢谢,麻烦您了

,

Cherry Zhou:

能否请您对每行代码进行注释? 

,

jia xu:

BSP.bldc.method->init(&BSP.bldc.attribute); //初始化 os_msleep(10);

/*开环控制参数*/ BSP.bldc.method->write(&BSP.bldc.attribute,0x60,&reg_data[0],2);//禁用电机驱动 BSP.bldc.method->write(&BSP.bldc.attribute,0x31,&reg_data[2],2);//往0x31写0x0000 BSP.bldc.method->write(&BSP.bldc.attribute,0x31,&reg_data[3],2);//往0x31写0xC0DE BSP.bldc.method->read(&BSP.bldc.attribute,0x32,&read_data[2],2);//读0x32为eereadstatus为1

BSP.bldc.method->write(&BSP.bldc.attribute,0x90,&reg_data[4],2); //0x90写入0xC04B BSP.bldc.method->write(&BSP.bldc.attribute,0x91,&reg_data[5],2); //0x91写入0x0049 BSP.bldc.method->write(&BSP.bldc.attribute,0x92,&reg_data[6],2); //0x92写0x00C0 BSP.bldc.method->write(&BSP.bldc.attribute,0x93,&reg_data[7],2); //0x93写0x3788 BSP.bldc.method->write(&BSP.bldc.attribute,0x94,&reg_data[8],2); //0x94写0x3BAF BSP.bldc.method->write(&BSP.bldc.attribute,0x95,&reg_data[9],2); //0x95写0x7840 BSP.bldc.method->write(&BSP.bldc.attribute,0x96,&reg_data[10],2); //0x96写0x007A BSP.bldc.method->write(&BSP.bldc.attribute,0x35,&reg_data[11],2); //0x35写0x1006 BSP.bldc.method->read(&BSP.bldc.attribute,0x32,&read_data[2],2); //读0x32 BSP.bldc.method->write(&BSP.bldc.attribute,0x60,&reg_data[13],2); //启用电机,0x60写0x0000

BSP.bldc.method->write(&BSP.bldc.attribute,0x30,&reg30_data,2); //override位置1,开启i2c控制模式 BSP.bldc.method->write(&BSP.bldc.attribute,0x30,&default_speed,2); //写默认速度 BSP.bldc.method->read(&BSP.bldc.attribute,0x30,&speed_read,2); //读速度 BSP.bldc.method->write(&BSP.bldc.attribute,0x60,&reg_data[13],2); //启用电机

/*锁检测*/ // BSP.bldc.method->read(&BSP.bldc.attribute,0x00,&read_data[7],2); // while(read_data[7] != 0x4 || read_data[7] != 0x0){ // BSP.bldc.method->write(&BSP.bldc.attribute,0x00,&reg_data[14],2);//clear错误寄存器 // BSP.bldc.method->read(&BSP.bldc.attribute,0x00,&read_data[7],2); // } BSP.bldc.method->read(&BSP.bldc.attribute,0x00,&read_data[7],2); while(read_data[7] == 0x1 || read_data[7] == 0x2 || read_data[7] == 0x4 || read_data[7] == 0x5){ BSP.bldc.method->write(&BSP.bldc.attribute,0x00,&reg_data[14],2);//clear错误寄存器 BSP.bldc.method->read(&BSP.bldc.attribute,0x00,&read_data[7],2); }

/*闭环控制*/ BSP.bldc.method->write(&BSP.bldc.attribute,0x60,&close_reg_data[0],2);//禁用电机驱动 BSP.bldc.method->write(&BSP.bldc.attribute,0x31,&close_reg_data[2],2);//往0x31写0x0000 BSP.bldc.method->write(&BSP.bldc.attribute,0x31,&close_reg_data[3],2);//往0x31写0xC0DE BSP.bldc.method->read(&BSP.bldc.attribute,0x32,&close_reg_data[2],2);//读0x32为eereadstatus为1

BSP.bldc.method->write(&BSP.bldc.attribute,0x90,&close_reg_data[4],2);//0x90写入0xD04B BSP.bldc.method->write(&BSP.bldc.attribute,0x91,&close_reg_data[5],2);//0x91写入0x00BB BSP.bldc.method->write(&BSP.bldc.attribute,0x92,&close_reg_data[6],2);//0x92写0x00C0 BSP.bldc.method->write(&BSP.bldc.attribute,0x93,&close_reg_data[7],2);//0x93写0x3788 BSP.bldc.method->write(&BSP.bldc.attribute,0x94,&close_reg_data[8],2);//0x94写0x3B0F BSP.bldc.method->write(&BSP.bldc.attribute,0x95,&close_reg_data[9],2);//0x95写0x7840 BSP.bldc.method->write(&BSP.bldc.attribute,0x96,&close_reg_data[10],2);//0x96写0x007A BSP.bldc.method->write(&BSP.bldc.attribute,0x35,&close_reg_data[11],2);//0x35写0x1006 BSP.bldc.method->read(&BSP.bldc.attribute,0x32,&close_reg_data[2],2);//读0x32 BSP.bldc.method->write(&BSP.bldc.attribute,0x60,&close_reg_data[13],2); //启用电机

sscanf(optarg,"%x",&speed); BSP.bldc.method->write(&BSP.bldc.attribute,0x30,&reg30_data,2); //override位置1,开启i2c控制模式 BSP.bldc.method->write(&BSP.bldc.attribute,0x30,&default_speed,2); //写默认速度 BSP.bldc.method->read(&BSP.bldc.attribute,0x30,&speed_read,2); //读速度 BSP.bldc.method->write(&BSP.bldc.attribute,0x60,&reg_data[13],2); //启用电机

,

Cherry Zhou:

好的收到了,我们跟进给工程师看下。

,

Cherry Zhou:

写入 EEPROM 并旋转电机的整个过程是没有问题的。 在运行此代码之前,请确保电源电压介于6.2V 和28V 之间就好。 

,

jia xu:

可是仍旧不行,闭环转不起来

,

jia xu:

买了官方的开发板,能否提供相关的FAE支持

,

Cherry Zhou:

您好,

jia xu said:可是仍旧不行,闭环转不起来

电机在开环中是否可以旋转? 器件是否会触发任何故障? 您能否读回故障状态寄存器?

jia xu said:买了官方的开发板,能否提供相关的FAE支持

您可以寻求local FAE的支持。

,

jia xu:

可开环旋转,0x01寄存器读出有值,可判断为会触发lock等故障。如何寻求localFAE支持?有何渠道?

,

jia xu:

请问eeprom寄存器的0x94、0x95这两个地址为何会与我写入的参数寄存器值不一致?其余5个eeprom寄存器读出值与写入值一致

,

Cherry Zhou:

0x01寄存器读回速度。 0x00寄存器读回故障。 您应该要进行批量 EEPROM 写入。 在这种情况下,编程到所有用户可配置寄存器(0x90至0x96)的值应保存到 EEPROM 中。 请确保遵循datasheet第8.3.6节中所述的所有说明。 

jia xu said:如何寻求localFAE支持?有何渠道?

这个需要看您的公司哈。目前论坛只提供线上支持。

赞(0)
未经允许不得转载:TI中文支持网 » DRV10987: 电机驱动问题,实际电路开发步骤
分享到: 更多 (0)