TLV5617步进细分源代码 点击:1358 | 回复:0



q2512262471

    
  • 精华:1帖
  • 求助:0帖
  • 帖子:71帖 | 62回
  • 年度积分:1
  • 历史总积分:135
  • 注册:2014年2月11日
发表于:2017-09-02 17:06:45
楼主

/*

* file: tlv5617.c

* name: poweron

* corp: poweron

* date: 2008-1-2

* desc: IO操作TLV5617设备实现文件

变频伺服驱动及PLC&HMI产品生产企业技术方案提供商

深圳市伊瑞软件技术有限公司   

Shenzhen Erik Software Technology Co., Ltd 

Web: http://www.inovanceinvt.com

TEL:13823137464   

Q Q:2512262471 

*/



#include "TLV5617.h"



#define CS_IN_DAC_0  (I/O=0) // CS 

#define CS_IN_DAC_1  (I/O=1)


#define SDA_IN_DAC_0 (I/O=0)// SDI 

#define SDA_IN_DAC_1 (I/O=1)


#define SCLK_IN_DAC_0 (I/O=0)// SCLK 

#define SCLK_IN_DAC_1 (I/O=1)


#define CPU_phase1_L (I/O=0)// CPU_phase1

#define CPU_phase1_H (I/O=1)


#define CPU_phase2_L (I/O=0)// CPU_phase2

#define CPU_phase2_H (I/O=1)


/*

* function:

*   TLV5617_Delay()

* description:

*   TLV5617, 时钟信号控制延时.

* parameters:

*   void

* return:

*   void

*/

static void TLV5617_Delay(void)

{

//unsigned char delay;

//for(delay=0;delay<2;delay++);

;

}



/*

* function:

*   TLV5617_WriteU()

* description:

*   写TLV5617_0寄存器函数.

* parameters:

*   addr --- input, 寄存器地址(6bits)

* value --- input, 值(8bits)

* return:

*   void

*/

static void TLV5617_Write(unsigned char mode,unsigned int write_data)

{

unsigned int dat;

unsigned int i,j;

CS_IN_DAC_0;

switch(mode)

    {

   case 0:dat=0x2000; break;           //掉电方式

   case 1:dat=0xc000|(write_data<<2);break; //快速方式 DAC A 输出

   case 2:dat=0x4000|(write_data<<2);break;//快速方式 DAC  B 输出

   case 3:dat=0x1000|(write_data<<2);break; //慢速方式  写数据到B  BUFFER //mode 3和4必须配合使用

   case 4:dat=0x8000|(write_data<<2);break; //慢速方式  写数据到A  BUFFER 并同时更新两通道的值

   case 5:dat=0xd000|(write_data<<2);break; //慢速方式  写数据到A  BUFFER 并同时更新两通道的值

   case 6:dat=0x0000|(write_data<<2);break; //慢速方式  写数据到A  BUFFER 并同时更新两通道的值

   

   default:break;   

    }

    for (i=0;i<16;i++)

    {

        j=15-i;

    if ((dat >> j) & 0x01)

SDA_IN_DAC_1;

else

SDA_IN_DAC_0;

    SCLK_IN_DAC_1;

TLV5617_Delay();

SCLK_IN_DAC_0;

}

    

    

    

    /*

for(i=0;i<16;i++)

{

if(dat&0x8000)

{

SDA_IN_DAC_1;

}

else

{

SDA_IN_DAC_0;

}

SCLK_IN_DAC_1;

dat<<1;

TLV5617_Delay();

SCLK_IN_DAC_0;

}*/

CS_IN_DAC_1;

}

/*

* function:

*   TLV5617Init()

* description:

*   初始化TLV5617 AD转换器控制IO.

* parameters:

* void

* return:

*   void

*/

void TLV5617Init(void)

{

// CS_IN_DAC

//set input port;


// SDA_IN_DAC

//set output port;


// SCLK_IN_DAC

//set input port;

// CPU_phase1

//set input port;

// CPU_phase2

//set input port;


}


/*

* function:

*   TLV5617Stop()

* description:

*   关闭TLV5617 AD转换器.

* parameters:

* void

* return:

*   void

*/

void TLV5617Stop(void)

{

TLV5617_Write(0,0x2000);

}

//////////////////////////////////////////////////////////////

//马达根据细分ID输出电流

/////////////////////////////////////////////////////////////

void MotorPhase(unsigned char mode)

{  

   

     switch(mode)

     {

           case 1:                  //+iA,+iB

            CPU_phase1_H();

            CPU_phase2_H();                

                break;

           case 2:                  //-iA,+iB

                CPU_phase1_L();

            CPU_phase2_H();                

                break;                 

           case 3:                  //-iA,-iB

                CPU_phase1_L();

            CPU_phase2_L();                

                break;                 

           case 4:                  //+iA,-iB

                CPU_phase1_H();

            CPU_phase2_L();                

                break;                 

           default:

                 break;

     }   

  

}

/*

* function:

*   TLV5617Test()

* description:

*   测试TLV5617 AD转换器.

* parameters:

* void

* return:

*   void

*/

unsigned char TLV5617Test(void)

{

unsigned int i,k,p;

MotorADCON();

CPU_i01_L();

CPU_i02_L();

CPU_i11_L();

CPU_i12_L();

//1024 1;512=1/2,256(1/4) 128(1/8) 64(1/16) 32(1/32) //可以自己制作细分表

p=4;

for(i=0;i<1500;i++)

{

for(k=511;k<1024;k=k+10)

{

TLV5617_Write(1,k);

TLV5617_Write(2,k);

TLV5617_Write(3,k);

TLV5617_Write(4,k);

//TLV5617_Write(5,k);

}

for(k=1023;k>511;k=k-10)

{

TLV5617_Write(1,k);

TLV5617_Write(2,k);

TLV5617_Write(3,k);

TLV5617_Write(4,k);

//TLV5617_Write(5,k);

}

MotorPhase(p);

//udelay(100);

p--;

if(p==0) p=4;

}

//TLV5617Stop();

//MotorADCOFF();

p=1;

for(i=0;i<1500;i++)

{

for(k=511;k<1024;k=k+10)

{

TLV5617_Write(1,k);

TLV5617_Write(2,k);

TLV5617_Write(3,k);

TLV5617_Write(4,k);

}

for(k=1023;k>511;k=k-10)

{

TLV5617_Write(1,k);

TLV5617_Write(2,k);

TLV5617_Write(3,k);

TLV5617_Write(4,k);

}

MotorPhase(p);

p++;

if(p==5) p=1;

}

TLV5617Stop();

MotorADCOFF();

TLV5617Stop();

MotorADCOFF();

i=i+1;

return;

}




热门招聘
相关主题

官方公众号

智造工程师