主题中讨论的其他部件: 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);
}