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:电路开发步骤

Guru**** 2478765 points
Other Parts Discussed in Thread: DRV10987

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1228497/drv10987-steps-for-circuit-development

器件型号:DRV10987

大家好、

DRV10987在不使用 EVM 和 GUI 的情况下在自有电路环境中开发软件时需要执行哪些总体步骤?

第1步:还需要确定与电机相关的参数:一些参数来自于手册、另一个参数需要实际测量?

步骤2:根据参数写入寄存器0x90–0x96 EEPROM 的值

第3步:映射影子寄存器

步骤4:第四步、设置0x30以设置速度

第5步:读取0x01速度反馈

第6步:电机旋转  

是否可以按照上述步骤驱动电机?  您能帮助检查这个问题吗? 谢谢。

此致、

切里

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Cherry:

    我明天会回到你的身边。

    此致、

    维什努

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Cherry:

    我没有完全抓住您的问题。 您是否希望在没有 EVM 和 GUI 支持的情况下使用 DRV10987来调优电机?  

    此致、

    维什努

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 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,&reg_data[0],2);//Disable motor drive 
                    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);   //0x004B
                    BSP.bldc.method->write(&BSP.bldc.attribute,0x91,&reg_data[5],2);   //0x49
                    BSP.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); //Enable the motor 
    
                    BSP.bldc.method->write(&BSP.bldc.attribute,0x30,&reg30_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,&reg_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,&reg_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,&reg30_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,&reg_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,&reg_data[0],2);//Disable motor drive 
    BSP.bldc.method->write(&BSP.bldc.attribute,0x31,&reg_data[2],2);//Write 0x0000 to 0x31 
    BSP.bldc.method->write(&BSP.bldc.attribute,0x31,&reg_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,&reg_data[4],2); //0x90 Write 0xC04B 
    BSP.bldc.method->write(&BSP.bldc.attribute,0x91,&reg_data[5],2); //0x91 write 0x0049
    BSP.bldc.method->write(&BSP.bldc.attribute,0x92,&reg_data[6],2); //0x92 write 0x00C0
    BSP.bldc.method->write(&BSP.bldc.attribute,0x93,&reg_data[7],2); //0x93 write 0x3788
    BSP.bldc.method->write(&BSP.bldc.attribute,0x94,&reg_data[8],2); //0x94 write 0x3BAF
    BSP.bldc.method->write(&BSP.bldc.attribute,0x95,&reg_data[9],2); //0x95 write 0x7840
    BSP.bldc.method->write(&BSP.bldc.attribute,0x96,&reg_data[10],2); //0x96 write 0x007A
    BSP.bldc.method->write(&BSP.bldc.attribute,0x35,&reg_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,&reg_data[13],2); //enable motor,0x60 write 0x0000
    
    BSP.bldc.method->write(&BSP.bldc.attribute,0x30,&reg30_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,&reg_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,&reg_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,&reg_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,&reg30_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,&reg_data[13],2); //enable motor

    谢谢。此致、

    切里

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Cherry:

    我明天会回到你的身边。

    Br

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Cherry:

    您共享的写入 EEPROM 并旋转电机的过程看起来不错。 运行该代码之前、确保电源电压介于6.2V 和28V 之间。  

    此致、

    维什努

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Vishnu 

    电机 仍然无法正常工作、也不会进入闭环状态。

    谢谢。此致、

    切里

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    樱桃、

    提及"电机不工作"并不能帮助我们调试问题。 电机是否以开环方式旋转? 器件是否会触发任何故障? 您可以读回故障状态寄存器吗?

    此致、

    维什努  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 ,Vishnu,

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

    是的、电机能够在开环中旋转、并且0x01寄存器读取的值可被确定、从而触发诸如锁定之类的故障。  

    另外、为什么 EEPROM 寄存器中的地址0x94、0x95与写入的参数寄存器值不相同? 其余5个 EEPROM 寄存器读取与写入值相同的值。  

    谢谢。此致、

    切里

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Cherry:  

    Vishnu 是 OOO,下周回来-请预计一个延迟的回应,我们会尽快回到您的设备专家办公室。  

    此致、  
    安德鲁  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    樱桃、

    0x01寄存器回读速度。 0x00寄存器回读故障。 我相信您是在执行批量 EEPROM 写入。 在这种情况下、您编程到所有用户可配置寄存器(0x90至0x96)的值应保存到 EEPROM。 请确保遵循数据表第8.3.6节中所述的所有指令。  

    此致、

    维什努