单片机-FTU制作八

来源:本站
导读:目前正在解读《单片机-FTU制作八》的相关信息,《单片机-FTU制作八》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《单片机-FTU制作八》的详细说明。
简介:以下是cs5464初始化的过程,在初始化完成后CS5464就可以使用了。

以下是cs5464初始化的过程,在初始化完成后CS5464就可以使用了。

//CS5464寄存器

//寄存器0页

#define PAGE_REG 0X1F //页寄存器

#define CONFIG_REG 0X00 //配置寄存器

#define I1_REG 0X01 // 00001 通道1瞬时电流

#define V1_REG 0X02 // 00010 通道1瞬时电压

#define P1_REG 0x03 //00011 通道1瞬时功率

#define P1AVG_REG 0X04 //00100 通道1有功功率

#define I1RMS_REG 0X05 // 00101 通道1电流有效值

#define V1RMS_REG 0X06 //00110 通道1电压有效值

#define I2_REG 0X07 //00111 通道2瞬时电流

#define V2_REG 0X08 //01000 通道2瞬时电压

#define P2_REG 0X09 //01001 通道2瞬时功率

#define P2_AVG 0X0A //01010 通道2有功功率

#define I2RMS_REG 0X0B //01011 通道2电流有效值

#define V2RMS_REG 0X0C //01100 通道2电压有效值

#define Q1AVG_REG 0X0D //01101 通道1平均无功功率

#define Q1_REG 0X0E //01110 通道1瞬时无功功率

#define STATUS_REG 0X0F //01111 状态寄存器

#define Q2AVG_REG 0X10 //10000 通道2平均无功功率

#define Q2_REG 0X11 //10001 通道2瞬时无功功率

#define I1PEAK_REG 0X12 //10010 通道1峰值电流

#defineV1PEAK_REG 0X13 //10011 通道1峰值电压

#define S1_REG 0X14 //10100 通道1视在功率

#define PF1_REG 0X15 //10101 通道1功率因数

#defineI2PESK_REG 0X16 //10110 通道2峰值电流

#define V2PESK_REG 0X17 //10111 通道2峰值电压

#define S2_REG 0X18 //11000 通道2视在功率

#define PF2_REG 0X19 //11001 通道2功率因数

#define MASK_REG 0X1A //11010 中断屏蔽

#define T_REG 0X1B //11011 温度

#defineCTRL_REG 0X1C //11100 控制

#define EPULSE_REG 0X1D //11101 有功功率脉冲输出

#define SPULSE_REG 0X1E //11110 视在功率脉冲输出

#//define SPULSE_REG 0X1F //11111 无功功率脉冲输出

//寄存器1页

#define I1DCOFF_REG 0x00 //00000 通道1电流通道DC偏移

#define I1GAIN_REG 0X01 //00001 通道1电流通道增益

#define V1DCOFF_REG 0X02 //00010 通道1电压通道DC偏移

#define V1GAIN_REG 0X03 //00011 通道1电压通道增益

#define P1OFF_REG 0X04 //00100 通道1功率偏移

#define I1ACOFF_REG 0X05 //00101 通道1电流通道AC偏移

#define V1ACOFF_REG 0X06 //00110 通道1电压通道AC偏移

#define I2DCOFF_REG 0X07 //00111 通道2电流通道DC偏移

#define I2GAIN_REG 0X08 //01000 通道2电流通道增益

#define V2DCOFF_REG 0X09 //01001 通道2电压通道DC偏移

#define V2GAIN_REG 0X0A //01010 通道2电压通道增益

#define P2OFF_REG 0X0B //01011 通道2功率偏移

#define I2ACOFF_REG 0X0C //01100 通道2电流通道AC偏移

#define V2ACOFF_REG 0X0D //01101 通道2电压通道AC偏移

#define PW_REG 0X0E // 01110 脉冲输出宽度

#define PULSERATE_REG 0X0F //01111 脉冲输出速率

#define MODE_REG 0X10 //10000 模式控制

#define EPSILON_REG 0X11 //10001 在线电压频率的一个比率值

#define ICHANLEVEL_REG 0X12 //10010 Irms或能量通道选择转换电平

#define CYCLE_COUT_REG 0x13 //10011 一个计算周期的A/D转换数

#define Q1WB_REG 0X14 //10100 通道1三角无功功率

#define Q2WB_REG 0X15 //10101 通道2三角无功功率

#define TGAIN_REG 0X16 //10110 温度传感器增益

#define TOFF_REG 0X17 //10111 温度传感器偏移

#define EMIN_REG 0X18 //11000 能量通道选择最小运转电平

#define TSETTEL_REG 0X19 //11001 Tsettle 转换启动滤波器的处理时间

#define LOADMIN_REG 0X1A //11010 LoadMin 无负载门限

#define VFRMS_REG 0X1B //11011 电压RMS固定参考值

#define GAIN_RMS 0X1C //11100 G 系统增益

#define TIME_REG 0X1D //11101 Time 采样中的系统时间

#define V1SAGDUR_REG 0X00 //00000 通道1电压下跌持续时间

#define V1SAGLEVEL_REG 0X01 //00001 V1SAGlevel 通道1电压下跌电平

#define I1FAULTDUR_REG 0X04 //00100 通道1电流故障持续时间

#define I1FAULTLEVEL_REG 0X05 //00101 通道1电流故障电平

#define V2SAGDUR_REG 0X08 //01000 通道2电压下跌持续时间

#define V2SAGLEVEL_REG 0X09 //01001 通道2电压下跌电平

#define I2FAULTDUR_REG 0X0C //01100 I2Faultdur 通道2电流故障持续时间

#define I2FAULTLEVEL_REG 0X0D // 01101 I2Faultlevel 通道2电流故障电平

sbit CS5464_SDI = P2^3;

sbit CS5464_SDO = P2^2;

sbit CS5464_CLK = P2^1;

sbit CS5464_CS = P0^3;

sbit CS5464_INT = P0^7;

sbit CS5464_RET = P3^2;

void Init_CS5464(unsigned int n)

{

unsigned char dat[4];

CS5464_OFF_ST CS5464_OFFSET;

CS5464_CS=1;

_nop_();

_nop_();

CS5464_CS=0;

_nop_();

_nop_();

CS5464_RET = 0; //复位CS5460A

cs5464_para_read(&CS5464_OFFSET, sizeof(CS5464_OFFSET));

CS5464_MEA.meaPeriod = 400;

CS5464_RET = 1;

_nop_();

_nop_();

//写同步信号

dat[0] = 0xff; //SYNC1

dat[1] = 0xff;//SYNC1

dat[2] = 0xff;//SYNC1

dat[3] = 0xfe;//SYNC0

Write_CS5464(dat,4); //写同步 参见手册第4.3.2节,串口初始化

//写page0寄存器 0x1F值置为0

dat[0] = (PAGE_REG<<1)|0x40;

dat[1] = 0x00;

dat[2] = 0x00;

dat[3] = 0x00;

Write_CS5464(dat,4); //页寄存器置0

dat[0] = (CONFIG_REG<<1)|0x40; //写配置寄存器,配置寄存器地址0x00,写地址第6为置1。所以或0x40

dat[1] = 0x00;

dat[2] = 0x11; //中断形式:00-高电平、08-低电平、10-下降沿、18-上升沿

dat[3] = 0x01; //DCLK-MCLK/1

//写状态寄存器,清除所有状态

dat[0] = (STATUS_REG<<1)|0x40;

dat[1] = 0xFF;

dat[2] = 0xFF;

dat[3] = 0xFF;

Write_CS5464(dat,4); //清除状态寄存器

//写中断屏蔽寄存器

dat[0] = (MASK_REG<<1)|0x40;

dat[1] = 0xFF;

dat[2] = 0xFF;

dat[3] = 0xFF;

Write_CS5464(dat,4); //写屏蔽寄存器

dat[0] =(CTRL_REG<<1)|0x40; //控制寄存器

dat[1] = 0x00; //通道2电流相位补偿

dat[2] = 0x01; //增益范围250mV,停止E2PROM操作

dat[3] = 0x04; //

Write_CS5464(dat,4); //写控制寄存器

dat[0] = (PAGE_REG<<1)|0x40;

dat[1] = 0x00;

dat[2] = 0x00;

dat[3] = 0x01;

Write_CS5464(dat,4);

dat[0] = (CYCLE_COUT_REG<<1)|0x40;//周期寄存器

dat[1] = 0x00;

dat[2] = n>>8 ;

dat[3] = n&0x00FF; //每秒计算10次,N=400

Write_CS5464(dat,4); //写cycle count寄存器

//写通道1电流增益寄存器

dat[0]=(I1GAIN_REG<<1)|0x40;

dat[1] = 0x40; //增益1

dat[2] = 0x00;

dat[3] = 0x00;

Write_CS5464(dat,4);

//写通道1电压增益寄存器

dat[0] = (V1GAIN_REG<<1)|0x40;

dat[1] = 0x40; //增益1

dat[2] = 0x00;

dat[3] = 0x00;

Write_CS5464(dat,4);

//写通道2电流增益寄存器

dat[0]=(I2GAIN_REG<<1)|0x40;

dat[1] = 0x40; //增益1

dat[2] = 0x00;

dat[3] = 0x00;

Write_CS5464(dat,4);

//写通道2电压增益寄存器

dat[0] = (V2GAIN_REG<<1)|0x40;

dat[1] = 0x40; //增益1

dat[2] = 0x00;

dat[3] = 0x00;

Write_CS5464(dat,4);

//通道1电压通道DC偏移

dat[0] = (V1DCOFF_REG<<1)|0x40;

dat[1] = CS5464_OFFSET.V1_DCOFFSET[0];

dat[2] = CS5464_OFFSET.V1_DCOFFSET[1];

dat[3] = CS5464_OFFSET.V1_DCOFFSET[2];

Write_CS5464(dat,4);

//写通道1电压通道AC偏移

dat[0] = (V1ACOFF_REG<<1)|0x40;

dat[1] = CS5464_OFFSET.V1_ACOFFSET[0];

dat[2] = CS5464_OFFSET.V1_ACOFFSET[1];

dat[3] = CS5464_OFFSET.V1_ACOFFSET[2];

Write_CS5464(dat,4);

//写通道1电流通道DC偏移

dat[0] = (I1DCOFF_REG<<1)|0x40;

dat[1] = CS5464_OFFSET.I1_DCOFFSET[0];

dat[2] = CS5464_OFFSET.I1_DCOFFSET[1];

dat[3] = CS5464_OFFSET.I1_DCOFFSET[2];

Write_CS5464(dat,4);

//写通道1电流通道AC偏移

dat[0] = (I1ACOFF_REG<<1)|0x40;

dat[1] = CS5464_OFFSET.I1_ACOFFSET[0];

dat[2] = CS5464_OFFSET.I1_ACOFFSET[1];

dat[3] = CS5464_OFFSET.I1_ACOFFSET[2];

Write_CS5464(dat,4);

//写通道2电流通道DC偏移

dat[0] = (I2DCOFF_REG<<1)|0x40;

dat[1] = CS5464_OFFSET.I2_DCOFFSET[0];

dat[2] = CS5464_OFFSET.I2_DCOFFSET[1];

dat[3] = CS5464_OFFSET.I2_DCOFFSET[2];

Write_CS5464(dat,4);

//通道2电压通道DC偏移

dat[0] = (V2DCOFF_REG<<1)|0x40;

dat[1] = CS5464_OFFSET.V2_DCOFFSET[0];

dat[2] = CS5464_OFFSET.V2_DCOFFSET[1];

dat[3] = CS5464_OFFSET.V2_DCOFFSET[2];

Write_CS5464(dat,4);

//写通道2电流通道AC偏移

dat[0] = (I1ACOFF_REG<<1)|0x40;

dat[1] = CS5464_OFFSET.I2_ACOFFSET[0];

dat[2] = CS5464_OFFSET.I2_ACOFFSET[1];

dat[3] = CS5464_OFFSET.I2_ACOFFSET[2];

Write_CS5464(dat,4);

//写通道2电压通道AC偏移

dat[0] = (V2ACOFF_REG<<1)|0x40;

dat[1] = CS5464_OFFSET.V2_ACOFFSET[0];

dat[2] = CS5464_OFFSET.V2_ACOFFSET[1];

dat[3] = CS5464_OFFSET.V2_ACOFFSET[2];

Write_CS5464(dat,4);

}

1,首先CS5464必须首先复位,CS5464_CS=0使能,CS5464_RET=0然后CS5464_RET=1.校正同步信号,写3个0XFF和1个0xfe。校正了CS5464的读写时序的同步信号。

2,写CONFIG_REG寄存器,

3,清除STATUS_REG状态寄存器

4,写MASK_REG寄存器

5,写CTRL_REG寄存器

6,写CYCLE_COUT_REG寄存器,这个非常重要,cs5464每秒40000个采样点。

7,写电流增益I1GAIN_REG寄存器

8,写电压增益V1GAIN_REG寄存器

9,写电流I2GAIN_REG寄存器

10,写通道2电压增益寄存器

11,通道1电压通道DC偏移

12,写通道1电压通道AC偏移

13,写通道1电流通道DC偏移

14,写通道1电流通道AC偏移

15,写通道2电流通道DC偏移

16,通道2电压通道DC偏移

17,写通道2电流通道AC偏移

18,写通道2电压通道AC偏移

提醒:《单片机-FTU制作八》最后刷新时间 2024-03-14 01:12:20,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《单片机-FTU制作八》该内容的真实性请自行鉴别。