大家好、
DRV10987在不使用 EVM 和 GUI 的情况下在自有电路环境中开发软件时需要执行哪些总体步骤?
第1步:还需要确定与电机相关的参数:一些参数来自于手册、另一个参数需要实际测量?
步骤2:根据参数写入寄存器0x90–0x96 EEPROM 的值
第3步:映射影子寄存器
步骤4:第四步、设置0x30以设置速度
第5步:读取0x01速度反馈
第6步:电机旋转
是否可以按照上述步骤驱动电机? 您能帮助检查这个问题吗? 谢谢。
此致、
切里
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好、
DRV10987在不使用 EVM 和 GUI 的情况下在自有电路环境中开发软件时需要执行哪些总体步骤?
第1步:还需要确定与电机相关的参数:一些参数来自于手册、另一个参数需要实际测量?
步骤2:根据参数写入寄存器0x90–0x96 EEPROM 的值
第3步:映射影子寄存器
步骤4:第四步、设置0x30以设置速度
第5步:读取0x01速度反馈
第6步:电机旋转
是否可以按照上述步骤驱动电机? 您能帮助检查这个问题吗? 谢谢。
此致、
切里
尊敬的 Vishnu :
感谢您的支持。
您是否打算在不获得 EVM 和 GUI 支持的情况下使用 DRV10987调整电机? [/报价]是的、DRV10987用于在没有 EVM 和 GUI 支持的情况下进行电机调优、然后可以平稳驱动电机、它能够通过 IIC 控制速度。
谢谢。此致、
切里
尊敬的 Vishnu:
提供一些更新:
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;
/*Open-loop control parameters*/
BSP.bldc.method->write(&BSP.bldc.attribute,0x60,®_data[0],2);//Disable motor drive
BSP.bldc.method->write(&BSP.bldc.attribute,0x31,®_data[2],2);
BSP.bldc.method->write(&BSP.bldc.attribute,0x31,®_data[3],2);
BSP.bldc.method->read(&BSP.bldc.attribute,0x32,&read_data[2],2);
BSP.bldc.method->write(&BSP.bldc.attribute,0x90,®_data[4],2); //0x004B
BSP.bldc.method->write(&BSP.bldc.attribute,0x91,®_data[5],2); //0x49
BSP.bldc.method->write(&BSP.bldc.attribute,0x92,®_data[6],2);
BSP.bldc.method->write(&BSP.bldc.attribute,0x93,®_data[7],2);
BSP.bldc.method->write(&BSP.bldc.attribute,0x94,®_data[8],2);
BSP.bldc.method->write(&BSP.bldc.attribute,0x95,®_data[9],2);
BSP.bldc.method->write(&BSP.bldc.attribute,0x96,®_data[10],2);
BSP.bldc.method->write(&BSP.bldc.attribute,0x35,®_data[11],2);
BSP.bldc.method->read(&BSP.bldc.attribute,0x32,&read_data[2],2);
BSP.bldc.method->write(&BSP.bldc.attribute,0x60,®_data[13],2); //Enable the motor
BSP.bldc.method->write(&BSP.bldc.attribute,0x30,®30_data,2); //The override bit is set to 1 to enable i2c control mode
BSP.bldc.method->write(&BSP.bldc.attribute,0x30,&default_speed,2); //Write default speed
BSP.bldc.method->read(&BSP.bldc.attribute,0x30,&speed_read,2); //read speed
BSP.bldc.method->write(&BSP.bldc.attribute,0x60,®_data[13],2); //Enable the motor
/*Closed loop control */
BSP.bldc.method->write(&BSP.bldc.attribute,0x60,&close_reg_data[0],2);//Disable motor drive
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); //0x004B
BSP.bldc.method->write(&BSP.bldc.attribute,0x91,&close_reg_data[5],2); //0x49
BSP.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); //Enable the motor
/*Lock detection */
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,®_data[14],2);//Clear error register
BSP.bldc.method->read(&BSP.bldc.attribute,0x00,&read_data[7],2);
}
sscanf(optarg,"%x",&speed);
BSP.bldc.method->write(&BSP.bldc.attribute,0x30,®30_data,2); //The override bit is set to 1 to enable i2c control mode
BSP.bldc.method->write(&BSP.bldc.attribute,0x30,&default_speed,2); //Write default speed
BSP.bldc.method->read(&BSP.bldc.attribute,0x30,&speed_read,2); //read speed
BSP.bldc.method->write(&BSP.bldc.attribute,0x60,®_data[13],2); //Enable the motor
谢谢。此致、
切里
尊敬的 Vishnu :
您能评论每行代码吗?
请在此处查看:
BSP.bldc.method->init(&BSP.bldc.attribute); //initialization
os_msleep(10);
/*open loop control parameters */
BSP.bldc.method->write(&BSP.bldc.attribute,0x60,®_data[0],2);//Disable motor drive
BSP.bldc.method->write(&BSP.bldc.attribute,0x31,®_data[2],2);//Write 0x0000 to 0x31
BSP.bldc.method->write(&BSP.bldc.attribute,0x31,®_data[3],2);//Write 0xC0DE to 0x31
BSP.bldc.method->read(&BSP.bldc.attribute,0x32,&read_data[2],2);//Read 0x32 for ereadstatus = 1
BSP.bldc.method->write(&BSP.bldc.attribute,0x90,®_data[4],2); //0x90 Write 0xC04B
BSP.bldc.method->write(&BSP.bldc.attribute,0x91,®_data[5],2); //0x91 write 0x0049
BSP.bldc.method->write(&BSP.bldc.attribute,0x92,®_data[6],2); //0x92 write 0x00C0
BSP.bldc.method->write(&BSP.bldc.attribute,0x93,®_data[7],2); //0x93 write 0x3788
BSP.bldc.method->write(&BSP.bldc.attribute,0x94,®_data[8],2); //0x94 write 0x3BAF
BSP.bldc.method->write(&BSP.bldc.attribute,0x95,®_data[9],2); //0x95 write 0x7840
BSP.bldc.method->write(&BSP.bldc.attribute,0x96,®_data[10],2); //0x96 write 0x007A
BSP.bldc.method->write(&BSP.bldc.attribute,0x35,®_data[11],2); //0x35 write 0x1006
BSP.bldc.method->read(&BSP.bldc.attribute,0x32,&read_data[2],2); //read 0x32
BSP.bldc.method->write(&BSP.bldc.attribute,0x60,®_data[13],2); //enable motor,0x60 write 0x0000
BSP.bldc.method->write(&BSP.bldc.attribute,0x30,®30_data,2); //The override bit is set to 1 to enable i2c control mode
BSP.bldc.method->write(&BSP.bldc.attribute,0x30,&default_speed,2); //Write default speed
BSP.bldc.method->read(&BSP.bldc.attribute,0x30,&speed_read,2); //read speed
BSP.bldc.method->write(&BSP.bldc.attribute,0x60,®_data[13],2); //enable motor
/*锁检测*/
// 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,®_data[14],2);//Clear error register
// 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,®_data[14],2);//Clear error register
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);//disable motor drive
BSP.bldc.method->write(&BSP.bldc.attribute,0x31,&close_reg_data[2],2);//Write 0x0000 to 0x31
BSP.bldc.method->write(&BSP.bldc.attribute,0x31,&close_reg_data[3],2);//Write 0xC0DE to 0x31
BSP.bldc.method->read(&BSP.bldc.attribute,0x32,&close_reg_data[2],2);//Read 0x32 for ereadstatus = 1
BSP.bldc.method->write(&BSP.bldc.attribute,0x90,&close_reg_data[4],2);//0x90 write 0xD04B
BSP.bldc.method->write(&BSP.bldc.attribute,0x91,&close_reg_data[5],2);//0x91 write 0x00BB
BSP.bldc.method->write(&BSP.bldc.attribute,0x92,&close_reg_data[6],2);//0x92 write 0x00C0
BSP.bldc.method->write(&BSP.bldc.attribute,0x93,&close_reg_data[7],2);//0x93 write 0x3788
BSP.bldc.method->write(&BSP.bldc.attribute,0x94,&close_reg_data[8],2);//0x94 write 0x3B0F
BSP.bldc.method->write(&BSP.bldc.attribute,0x95,&close_reg_data[9],2);//0x9 write 0x7840
BSP.bldc.method->write(&BSP.bldc.attribute,0x96,&close_reg_data[10],2);//0x96 write 0x007A
BSP.bldc.method->write(&BSP.bldc.attribute,0x35,&close_reg_data[11],2);//0x35 write 0x1006
BSP.bldc.method->read(&BSP.bldc.attribute,0x32,&close_reg_data[2],2);//read 0x32
BSP.bldc.method->write(&BSP.bldc.attribute,0x60,&close_reg_data[13],2); //enable motor
sscanf(optarg,"%x",&speed);
BSP.bldc.method->write(&BSP.bldc.attribute,0x30,®30_data,2); //The override bit is set to 1 to enable i2c control mode
BSP.bldc.method->write(&BSP.bldc.attribute,0x30,&default_speed,2); //Write default speed
BSP.bldc.method->read(&BSP.bldc.attribute,0x30,&speed_read,2); //Read speed
BSP.bldc.method->write(&BSP.bldc.attribute,0x60,®_data[13],2); //enable motor
谢谢。此致、
切里
您好 ,Vishnu,
电机是否以开环方式旋转? 器件是否会触发任何故障? 您是否可以读回故障状态寄存器?
是的、电机能够在开环中旋转、并且0x01寄存器读取的值可被确定、从而触发诸如锁定之类的故障。
另外、为什么 EEPROM 寄存器中的地址0x94、0x95与写入的参数寄存器值不相同? 其余5个 EEPROM 寄存器读取与写入值相同的值。
谢谢。此致、
切里