/*
* 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;
}