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.

[参考译文] CCS/DRV8711:具有MSP430g2553的DRV8711

Guru**** 2366860 points
Other Parts Discussed in Thread: DRV8711, MSP430G2553
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/656082/ccs-drv8711-drv8711-with-msp430g2553

部件号:DRV8711
主题中讨论的其他部件: MSP430G2553

工具/软件:Code Composer Studio

大家好,

我正在使用DRV8711进行步进电机控制项目。 首先,我尝试使用MSP430g2553控制器和DRV8711评估套件,它工作正常。

在此基础上,我开发了具有MSP430G2553 28引脚封装和DRV8711的新主板。 我为此编写了代码,我的问题是电机即使一步也无法运行。

DRV和MSP之间的SPI通信正常,其他I/O也正常工作。

我还附上了我的示意图和方案。 我为nstall和reset引脚放置了上拉电阻器,并拆除了MSP和DRV8711之间连接的所有串联电阻器。

帮助任何人解决此问题。

此致

YUvaraj

内部主(无效)

   initialize();

   unsigned int i=0,j=5500,x=0;

   P2OUT &=~nSLEEP;
   P2OUT |=重置;
   对于(i=0;i<1000;i++);
   P2OUT |= nSLEEP;
   P2OUT &=~Ω 重置;

   P2DIR =(RESET | STEP_AIN1 | nSLEEP);
   P2DIR &=~nFAULT;
   P3DIR =(CS | DIR_AIN2);//0xff;

   P2OUT ||(RESET | STEP_AIN1 | nSLEEP);
   P3OUT ||(CS | DIR_AIN2);

   P2OUT &=~Ω 重置;

   同时(1)
   {
      如果((nFAULT和P2IN)= 0)
      {
         P2OUT &=~nSLEEP;
         P2OUT |=重置;
         对于(i=0;i<1000;i++);
         对于(i=0;i<1000;i++);
         P2OUT |= nSLEEP;
         对于(i=0;i<1000;i++);
         ReadAllRegisters();
         P2OUT &=~Ω 重置;
      }

      ReadAllRegisters();

      用于(i=0;i<j;i++);

      P2OUT |= STEAM_AIN1;

      用于(i=0;i<j;i++);

      P2OUT &=~STEAM_AIN1;

      如果(j<1000)
         J=1000;

   }
}

void Initialize()


   WDTCTL = WDTPW | WDTHOLD;
   DCOCTL = 0x00;
   DCOCTL = CALDCO_16MHz;
   BCSCTL1 = CALC1_16MHz;
   BCSCTL2 |= divs_3;
   BCSCTL3 |= LFXT1S_2;

   //配置GPIO
   P2SEL &=~(POT | nSLEEP);
   P2SEL2 &=~(POT | nSLEEP);

   P2DIR = RESET | STEP_AIN1 | nSLEEP;
   P2DIR &=~nFAULT;
   P3DIR = CS | DIR_AIN2;//0xff;

   P2OUT |= RESET | STEP_AIN1 | nSLEEP;
   P3OUT || CS | DIR_AIN2;

   UCB0CTL1 = UCSWRST;
   P3DIR |= CS;
   P3OUT &=~CS;
   P1SEL || SCLK | SDATO | SDATI;
   P1SEL2 || SCLK | SDATO | SDATI;

   UCB0CTL0 || UCCKPH | UCMSB | UCMST | UCSYNC;
   UCB0CTL1 |= UCSSEL_2;  // SMCLK
   UCB0CTL1 &=~UCSWRST;
   //结束SPI配置

   __bis_sr_register (GIE);

   // GUI编辑器监视器初始化
   ClearBufferRelatedParam();

   // CTRL寄存器
   G_CTRL_REG.Address   = 0x00;
   G_CTRL_REG.DTIME   = 0x03;
   G_CTRL_REG.ISGAIN   = 0x03;
   G_CTRL_REG.EXSTALL   = 0x00;
   G_CTRL_REG.mode   = 0x01;//0x03;
   G_CTRL_REG.RSTEP   = 0x00;
   G_CTRL_REG.RDIR   = 0x00;
   G_CTRL_REG.ENBL   = 0x01;

   //扭矩寄存器
   G_GULATT_REG.Address = 0x01;
   G_GULATT_REG.SIMPLTH = 0x00;
   G_Torto_REG.Torque = 0x7f;

   //取消注册
   G_OFF_REG.Address   = 0x02;
   G_OFF_REG.PWMMODE   = 0x00;
   G_OFF_REG.toff      = 0x30;

   //空白寄存器
   G_BLANK_REG.Address = 0x03;
   G_BLANK_REG.ABT   = 0x01;
   G_BLANK_REG.TBLANK   = 0x08;

   //衰减寄存器。
   G_REG_REG.Address = 0x04;
   G_REG_REG.DECMOD = 0x03;
   G_REG_REG.TDECAY   = 0x10;

   //失速寄存器
   G_START_REG.Address = 0x05;
   G_START_REG.VDIV   = 0x03;
   G_START_REG.SDCNT   = 0x03;
   G_START_REG.SDTHR   = 0x40;

   //驱动器寄存器
   G_DRIVE_REG.Address = 0x06;
   G_DRIVE_REG.IDRIVEP = 0x00;
   G_DRIVE_REG.IDRIVEN = 0x00;
   G_DRIVE_REG.TDRIVEP = 0x01;
   G_DRIVE_REG.TDRIVEN = 0x01;
   G_DRIVE_REG.OCPDEG   = 0x01;
   G_DRIVE_REG.OCPTH   = 0x01;

   //状态寄存器
   G_STATUS_REG.Address = 0x07;
   G_STATUS_REG.STDLAT = 0x00;
   G_STATUS_REG.STD    = 0x00;
   G_STATUS_REG.UVLO   = 0x00;
   G_STATUS_REG.BPDF   = 0x00;
   G_STATUS_REG.APDF   = 0x00;
   G_STATUS_REG.BOCP   = 0x00;
   G_STATUS_REG.AOCP   = 0x00;
   G_STATUS_REG.OTS    = 0x00;

   WriteAllRegisters();
}

void WriteAllRegisters()

   unsigned char dataHi = 0x00;
   unsigned char dataLo = 0x00;

   //写入CTRL寄存器
   dataHi = REGWRITE |(G_CTRL_REG.Address <<4)|(G_CTRL_REG.DTIME <<2)|(G_CTRL_REG.ISGAIN);
   DataLo =(G_CTRL_REG.EXSTALL << 7)|(G_CTRL_REG.MODE << 3)|(G_CTRL_REG.RSTEP << 2)|(G_CTRL_REG.RDIR << 1)|(G_CTRL_REG.ENBL);
   SPI_DRV8711_ReadWrite (dataHi,dataLo);

   //写入扭矩寄存器
   dataHi = REGWRITE |(G_TRUST_REG.Address << 4)|(G_TRUST_REG.SIMPLTH);
   dataLo = G_Torto_REG.Torque;
   SPI_DRV8711_ReadWrite (dataHi,dataLo);

   //勾销寄存器
   dataHi = REGWRITE |(G_OFF_REG.Address <<4)|(G_OFF_REG.PWMMODE);
   dataLo = G_OFF_REG.toff;
   SPI_DRV8711_ReadWrite (dataHi,dataLo);

   //写入空白寄存器
   dataHi = REGWRITE |(G_Blank_REG.Address << 4)|(G_Blank_REG.ABT);
   dataLo = G_Blank_REG.TBLANK;
   SPI_DRV8711_ReadWrite (dataHi,dataLo);

   //写入衰减寄存器
   dataHi = REGWRITE |(G_Decy_REG.Address <<4)|(G_Decy_REG.DECMOD);
   dataLo = G_Decrey_REG.TDECAY;
   SPI_DRV8711_ReadWrite (dataHi,dataLo);

   //写入失速寄存器
   dataHi = REGWRITE |(G_STOR_REG.Address <<4)|(G_STOR_REG.VDIV <<2)|(G_STOR_REG.SDCNT);
   dataLo = G_STOR_REG.SDTHR;
   SPI_DRV8711_ReadWrite (dataHi,dataLo);

   //写入驱动器寄存器
   dataHi = REGWRITE |(G_DRIVE_REG.Address <<4)|(G_DRIVE_REG.IDRIVEP <<2)|(G_DRIVE_REG.IDRIVEN);
   dataLo =(G_DRIVE_REG.TDRIVEP << 6)|(G_DRIVE_REG.TDRIVEN << 4)|(G_DRIVE_REG.OCPDEG <2)|(G_DRIVE_REG.OCPTH);
   SPI_DRV8711_ReadWrite (dataHi,dataLo);

   //写入状态寄存器
   dataHi = REGWRITE |(G_STATUS_REG.Address <<4);
   DataLo =(G_STATUS_REG.STDLAT << 7)|(G_STATUS_REG.STD << 6)|(G_STATUS_REG.UVLO << 5)|(G_STATUS_REG.BPDF << 4)|(G_STATUS_REG.APDF <3)|(G_STATUS_REG.BOCP <_2.G_1)|(G_STATUS_G_STATUS_TE<_G_状态)
   SPI_DRV8711_ReadWrite (dataHi,dataLo);
}

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

    您采取了哪些步骤将评估套件与您的主板进行比较?
    与评估套件相比,DRV8711中的设置是否相似?
    您是否检查了故障针脚,重置针脚和调风器?
    启用设备后,您是否检查过高侧和低侧安全门信号?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Rick:

    我在 DRV板中使用了类似的评估套件设置,并且还验证了故障和重置引脚以及所有寄存器。 故障引脚为高,重置引脚为低,寄存器状态与评估板相同。

    现在,还没有来自DRV8711的MOSFET栅极驱动信号。

    此致

    YUvaraj

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

    部件号:DRV8711

    工具/软件:Code Composer Studio

    大家好,  

    我 正在 使用 DRV8711 进行  步进 电机 控制 项目。  首先 ,我 尝试 使用 MSP430g2553 控制器 和 DRV8711 评估 套件, 它 工作 正常。

    在此基础上   ,我 开发    了具有 MSP430G2553 28 引脚 封装 和 DRV8711的新主板。  我 为此编写 了代码  ,  我的问题 是 电机  即使  一 步也无法运行。

       DRV 和 MSP之间的SPI通信  正常,   其他 I/O   也正常 工作。

    我 还附上  了我的示意图 和 方案 。  我 为    nstall   和reset引脚放置了上拉电阻 器,并  拆除      了MSP 和 DRV8711之间连接的所有串联电阻器。

    帮助 任何人  解决 此问题。

    此致

    YUvaraj

    内部 主(无效)

        initialize();

        unsigned int i=0,j=5500,x=0;

        P2OUT &= ~nSLEEP;
        P2OUT |= 重置;
        对于(i=0;i<1000;i++);
        P2OUT |= nSLEEP;
        P2OUT &= ~Ω 重置;

        P2DIR = (RESET | STEP_AIN1 | nSLEEP);
        P2DIR &= ~nFAULT;
        P3DIR = (CS | DIR_AIN2);//0xff;

        P2OUT || (RESET | STEP_AIN1 | nSLEEP);
        P3OUT || (CS | DIR_AIN2);

        P2OUT &= ~Ω 重置;

        同时(1)
        {
            如果 ((nFAULT 和 P2IN) = 0)
            {
                P2OUT &= ~nSLEEP;
                P2OUT |= 重置;
                对于(i=0;i<1000;i++);
                对于(i=0;i<1000;i++);
                P2OUT |= nSLEEP;
                对于(i=0;i<1000;i++);
                ReadAllRegisters();
                P2OUT &= ~Ω 重置;
            }

            ReadAllRegisters();

            用于(i=0;i<j;i++);

            P2OUT |= STEAM_AIN1;

            用于(i=0;i<j;i++);

             P2OUT &= ~STEAM_AIN1;

             如果(j<1000)
                 J=1000;

        }
    }

    void Initialize()


        WDTCTL = WDTPW | WDTHOLD;
        DCOCTL = 0x00;
        DCOCTL = CALDCO_16MHz;
        BCSCTL1 = CALC1_16MHz;
        BCSCTL2 |= divs_3;
        BCSCTL3 |= LFXT1S_2;

        // 配置 GPIO
        P2SEL  &= ~(POT | nSLEEP);
        P2SEL2 &= ~(POT | nSLEEP);

        P2DIR = RESET | STEP_AIN1 | nSLEEP;
        P2DIR &= ~nFAULT;
        P3DIR = CS | DIR_AIN2;//0xff;

        P2OUT |= RESET | STEP_AIN1 | nSLEEP;
        P3OUT || CS | DIR_AIN2;

        UCB0CTL1 = UCSWRST;
        P3DIR |= CS;
        P3OUT &= ~CS;
        P1SEL || SCLK | SDATO |  SDATI;
        P1SEL2 || SCLK | SDATO |  SDATI;

        UCB0CTL0 || UCCKPH | UCMSB | UCMST | UCSYNC;
        UCB0CTL1 |= UCSSEL_2;   // SMCLK
        UCB0CTL1 &= ~UCSWRST;
        // 结束 SPI 配置

        __bis_sr_register (GIE);

        // GUI 编辑 器监视器 初始化
        ClearBufferRelatedParam();

        // CTRL 寄存器
        G_CTRL_REG.Address     = 0x00;
        G_CTRL_REG.DTIME     = 0x03;
        G_CTRL_REG.ISGAIN     = 0x03;
        G_CTRL_REG.EXSTALL     = 0x00;
        G_CTRL_REG.mode     = 0x01; //0x03;
        G_CTRL_REG.RSTEP     = 0x00;
        G_CTRL_REG.RDIR     = 0x00;
        G_CTRL_REG.ENBL     = 0x01;

        // 扭矩 寄存器
        G_GULATT_REG.Address = 0x01;
        G_GULATT_REG.SIMPLTH = 0x00;
        G_Torto_REG.Torque  = 0x7f;

        // 取消 注册
        G_OFF_REG.Address     = 0x02;
        G_OFF_REG.PWMMODE     = 0x00;
        G_OFF_REG.toff         = 0x30;

        // 空白 寄存器
        G_BLANK_REG.Address = 0x03;
        G_BLANK_REG.ABT     = 0x01;
        G_BLANK_REG.TBLANK     = 0x08;

        // 衰减 寄存器。
        G_REG_REG.Address = 0x04;
        G_REG_REG.DECMOD  = 0x03;
        G_REG_REG.TDECAY     = 0x10;

        // 失速 寄存器
        G_START_REG.Address = 0x05;
        G_START_REG.VDIV     = 0x03;
        G_START_REG.SDCNT     = 0x03;
        G_START_REG.SDTHR     = 0x40;

        // 驱动 器寄存器
        G_DRIVE_REG.Address = 0x06;
        G_DRIVE_REG.IDRIVEP = 0x00;
        G_DRIVE_REG.IDRIVEN = 0x00;
        G_DRIVE_REG.TDRIVEP = 0x01;
        G_DRIVE_REG.TDRIVEN = 0x01;
        G_DRIVE_REG.OCPDEG     = 0x01;
        G_DRIVE_REG.OCPTH     = 0x01;

        // 状态 寄存器
        G_STATUS_REG.Address = 0x07;
        G_STATUS_REG.STDLAT  = 0x00;
        G_STATUS_REG.STD     = 0x00;
        G_STATUS_REG.UVLO    = 0x00;
        G_STATUS_REG.BPDF    = 0x00;
        G_STATUS_REG.APDF    = 0x00;
        G_STATUS_REG.BOCP    = 0x00;
        G_STATUS_REG.AOCP    = 0x00;
        G_STATUS_REG.OTS     = 0x00;

        WriteAllRegisters();
    }

    void WriteAllRegisters()

        unsigned char dataHi = 0x00;
        unsigned char dataLo = 0x00;

        // 写入 CTRL 寄存器
        dataHi = REGWRITE | (G_CTRL_REG.Address <<4)  | (G_CTRL_REG.DTIME <<2)  | (G_CTRL_REG.ISGAIN);
        DataLo = (G_CTRL_REG.EXSTALL << 7) | (G_CTRL_REG.MODE << 3) | (G_CTRL_REG.RSTEP << 2) | (G_CTRL_REG.RDIR << 1) | (G_CTRL_REG.ENBL);
        SPI_DRV8711_ReadWrite(dataHi, dataLo);

        // 写入 扭矩 寄存器
        dataHi = REGWRITE | (G_TRUST_REG.Address << 4) | (G_TRUST_REG.SIMPLTH);
        dataLo = G_Torto_REG.Torque;
        SPI_DRV8711_ReadWrite(dataHi, dataLo);

        // 勾销  寄存器
        dataHi = REGWRITE | (G_OFF_REG.Address <<4)  | (G_OFF_REG.PWMMODE);
        dataLo = G_OFF_REG.toff;
        SPI_DRV8711_ReadWrite(dataHi, dataLo);

        // 写入 空白 寄存器
        dataHi = REGWRITE | (G_Blank_REG.Address << 4) | (G_Blank_REG.ABT);
        dataLo = G_Blank_REG.TBLANK;
        SPI_DRV8711_ReadWrite(dataHi, dataLo);

        // 写入 衰减 寄存器
        dataHi = REGWRITE | (G_Decy_REG.Address <<4)  | (G_Decy_REG.DECMOD);
        dataLo = G_Decrey_REG.TDECAY;
        SPI_DRV8711_ReadWrite(dataHi, dataLo);

        // 写入 失速 寄存器
        dataHi = REGWRITE | (G_STOR_REG.Address <<4)  | (G_STOR_REG.VDIV <<2)  | (G_STOR_REG.SDCNT);
        dataLo = G_STOR_REG.SDTHR;
        SPI_DRV8711_ReadWrite(dataHi, dataLo);

        // 写入 驱动 器寄存器
        dataHi = REGWRITE | (G_DRIVE_REG.Address <<4)  | (G_DRIVE_REG.IDRIVEP <<2)  | (G_DRIVE_REG.IDRIVEN);
        dataLo = (G_DRIVE_REG.TDRIVEP << 6) | (G_DRIVE_REG.TDRIVEN << 4) | (G_DRIVE_REG.OCPDEG <2 ) | (G_DRIVE_REG.OCPTH);
        SPI_DRV8711_ReadWrite(dataHi, dataLo);

        // 写入 状态 寄存器
        dataHi = REGWRITE | (G_STATUS_REG.Address <<4) ;
        DataLo = (G_STATUS_REG.STDLAT << 7) | (G_STATUS_REG.STD << 6) | (G_STATUS_REG.UVLO << 5) | (G_STATUS_REG.BPDF << 4) | (G_STATUS_REG.APDF <3 ) | (G_STATUS_REG.BOCP <_2.G_1  )|     (G_STATUS_G_STATUS_TE<_G_状态)
        SPI_DRV8711_ReadWrite(dataHi, dataLo);
    }

     

    我 在          DRV 板中使用了类似的评估套件设置 ,  并且 还验证 了故障 和 重置 引脚 以及 所有 寄存器。  故障 引脚  为高, 重置 引脚  为低 , 寄存 器状态  与   评估 板相同。

    现在,           还没有来自DRV8711的MOSFET栅极驱动信号。

    此致,

    YUvaraj

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

    对延迟回复表示歉意。 请勿为同一问题启动新线程。 这只会使跟踪更加困难。

    让我们重点关注让任何FET运行。

    请断开电机的连接并打开您的主板电源。
    接下来,让DRV8711退出睡眠模式,并确认调节器是否正常工作(VINT,V5和VCP)。 电压是多少?
    如果调节器工作正常且nFAULT信号较高,请通过SPI寄存器启用DRV8711。
    检查FET的门。 是否有FET?
    如果没有,nFAULT信号是否过低?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Rick:

    我会检查一下,然后再回来。

    YUvaraj