//CD WXL
#include <ioCC2430.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
typedef unsigned long int Lint;
//register name address length
//read only register
#define ADD_AWATTHR 0X01 //16 Phase A Watt-Hour accumulation
#define ADD_BWATTHR 0X02 //16 Phase B Watt-Hour accumulation
#define ADD_CWATTHR 0X03 //16 Phase C Watt-Hour accumulation
#define ADD_AVARHR 0X04 //16 Var-Hour accumulation register for phase A
#define ADD_BVARHR 0X05 //16 Var-Hour accumulation register for phase b
#define ADD_CVARHR 0X06 //16 Var-Hour accumulation register for phase c
#define ADD_AVAHR 0X07 //16
#define ADD_BVAHR 0X08 //16
#define ADD_CVAHR 0X09 //16
#define ADD_AIRMS 0X0A //24 Current register
#define ADD_BIRMS 0X0B //24
#define ADD_CIRMS 0X0C //24
#define ADD_AVRMS 0X0D //24 Voltage register
#define ADD_BVRMS 0X0E //24
#define ADD_CVRMS 0X0F //24
//end of read only register
#define ADD_WFORM 0x12
#define ADD_OPMODE 0X13
#define ADD_WAVMODE 0X15 //8位波形模式寄存器
#define ADD_COMPMODE 0x16 //8 R/W DEFAULT VALUE 0x1C
//#define ADD_COMPMODE 0xFF //8 R/W DEFAULT VALUE 0x1C
#define ADD_MASK 0X18 //24 R/W IRQ Mask register,determines if an interrup event will generate an active-low output at IRQ pin
#define ADD_RSTATUS 0X1A //24 READ ONLY,CLEANED ZERO after a read operation
#define ADD_GAIN 0X23 //8 R/W 0~1bit used to select the Gain of the current channels inputs
#define ADD_AVRMSGAIN 0X24 //12位
#define ADD_BVRMSGAIN 0X25 //12位
#define ADD_CVRMSGAIN 0X26 //12位
#define ADD_AIGAIN 0X27
#define ADD_BIGAIN 0X28
#define ADD_CIGAIN 0X29
#define ADD_AVARG 0X2D
#define ADD_BVARG 0X2E
#define ADD_CVARG 0X2F
#define ADD_AVRMSOS 0X33
#define ADD_BVRMSOS 0X34
#define ADD_CVRMSOS 0X35
#define ADD_AIRMSOS 0X36
#define ADD_BIRMSOS 0X37
#define ADD_CIRMSOS 0X38
#define ADD_APCFNUM 0X45
#define ADD_APCFDEN 0X46
#define ADD_VARCFNUM 0X47
#define ADD_VARCFDEN 0X48
#define ADD_WDIV 0X42 //8 R/W Active Energy register divider
#define ADD_VARDIV 0X43 //8 R/W Apparent Energy register divider
#define ADD_VADIV 0X44 //8 R/W Apparent Energy register divider
#define ADD_FREQ 0X10 //12 Read only,frequency of the line input estimated by zero-crossing processing
#define ADD_APHCAL 0X3F
#define ADD_BPHCAL 0X40
#define ADD_CPHCAL 0X41
#define ADD_LCYCMODE 0X17 //8 R/W bit7
#define ADD_MMODE 0X14 //8 R/W bit01
#define TEMP 0X11 //temperature register address
#define IO_IN 0
#define IO_OUT 1
#define IO_DIR_PORT_PIN1(port, pin, dir) \
do { \
if (dir == IO_OUT) \
P##port##DIR |= (0x01<<(pin)); \
else \
P##port##DIR &= ~(((0x01<<(pin)) & 0xf0)); \
}while(0)
//定义SPI端口
#define CS_ADE7758 P1_4
#define SCK P1_5
#define MOSI P1_6
#define MISO P1_7
//函数声明
void Delay20us(uint uu);
void UartTX_Send_String(uchar *Data,uint leng );
unsigned long read7758(unsigned char type,unsigned char databit);
unsigned long read7758a(unsigned char type,unsigned char databit);
void write7758a(unsigned char type,unsigned int wdata,unsigned char databit);
void write7758(unsigned char type,unsigned int wdata,unsigned char databit);
void write7758byte(unsigned char type,unsigned int wdata,unsigned char databit);
void write7758abyte(unsigned char type,unsigned int wdata,unsigned char databit);
void ADE7758VoltageARMS(void);
void ADE7758VoltageBRMS(void);
void ADE7758VoltageCRMS(void);
void ADE7758convertXd(unsigned long int val);
void ADE7758covertDc(uint value);
void ADE7758Var(Lint var , uint vatalge);
void initUARTtest(void);
void Init_ADE7758(void);
void IO_Init(void);
//定义A ,B,C三相电压
struct votalge
{
uint Avotalge;
uint Bvotalge;
uint Cvotalge;
}DIANY;
//定义参数
uchar ADE7758value1[] ={0};
Lint TXDataa[] = {0};
uint a;
uint SANVotalge;
void main(void)
{
IO_Init();
Init_ADE7758();
initUARTtest();
while(1)
{
ADE7758VoltageARMS( );
ADE7758VoltageBRMS( );
ADE7758VoltageCRMS( );
}
}
/******************************************************************************
*函数功能:初始化IO
******************************************************************************/
void IO_Init(void)
{
IO_DIR_PORT_PIN1(1, 4, IO_OUT);//CS_TC77
IO_DIR_PORT_PIN1(1, 5, IO_OUT);//SCK
IO_DIR_PORT_PIN1(1, 6, IO_OUT);//MOSI
IO_DIR_PORT_PIN1(1, 7, IO_IN);//MISO
P1INP = 0X00;
P2INP = 0X40; //设置P1引脚为下拉
}
/****************************************************************************
函数功能:取电压样本20次 求平均值;
****************************************************************************/
void ADE7758VoltageARMS(void)
{
ulong ADE7758DataA = 0;
ulong ADE7758valueA = 0;
write7758abyte(ADD_WAVMODE,0x44,8);
ADE7758valueA = read7758a(ADD_AVRMS,24);
//ADE7758value2[i] = 0XFEA80; //测试值
TXDataa[0] = ( ADE7758valueA & 0x000f) * 1;
TXDataa[1] = ((ADE7758valueA & 0x00ff) >> 4) *16;
TXDataa[2] = ((ADE7758valueA & 0x0fff) >> 8) * 16*16;
TXDataa[3] = ((ADE7758valueA & 0X0ffff) >> 12) *16*16*16;
TXDataa[4] = ((ADE7758valueA & 0x0fffff)>>16)*16*16*16*16;
TXDataa[5] = ((ADE7758valueA & 0x0ffffff) >> 20) *16*16*16*16*16;
ADE7758DataA = TXDataa[0] + TXDataa[1]+ TXDataa[2] +TXDataa[3] + TXDataa[4] + TXDataa[5];
ADE7758Var(ADE7758DataA ,1);
Delay20us(2000);
}
void ADE7758VoltageBRMS(void)
{
ulong ADE7758DataB;
ulong ADE7758valueB = 0;
write7758abyte(ADD_WAVMODE,0x45,8);
ADE7758valueB = read7758a(ADD_BVRMS,24);
//ADE7758value2[i] = 0XFEA80; //测试值
TXDataa[0] = ( ADE7758valueB & 0x000f) * 1;
TXDataa[1] = ((ADE7758valueB & 0x00ff) >> 4) *16;
TXDataa[2] = ((ADE7758valueB & 0x0fff) >> 8) * 16*16;
TXDataa[3] = ((ADE7758valueB & 0X0ffff) >> 12) *16*16*16;
TXDataa[4] = ((ADE7758valueB & 0x0fffff)>>16)*16*16*16*16;
TXDataa[5] = ((ADE7758valueB & 0x0ffffff) >> 20) *16*16*16*16*16;
ADE7758DataB = TXDataa[0] + TXDataa[1]+ TXDataa[2] +TXDataa[3] + TXDataa[4] + TXDataa[5];
ADE7758Var(ADE7758DataB , 2);
Delay20us(2000);
}
void ADE7758VoltageCRMS(void)
{
ulong ADE7758DataC;
ulong ADE7758valueC = 0;
write7758abyte(ADD_WAVMODE,0x46,8);
ADE7758valueC = read7758a(ADD_CVRMS,24);
//ADE7758value2[i] = 0XFEA80; //测试值
TXDataa[0] = ( ADE7758valueC & 0x000f) * 1;
TXDataa[1] = ((ADE7758valueC & 0x00ff) >> 4) *16;
TXDataa[2] = ((ADE7758valueC & 0x0fff) >> 8) * 16*16;
TXDataa[3] = ((ADE7758valueC & 0X0ffff) >> 12) *16*16*16;
TXDataa[4] = ((ADE7758valueC & 0x0fffff)>>16)*16*16*16*16;
TXDataa[5] = ((ADE7758valueC & 0x0ffffff) >> 20) *16*16*16*16*16;
ADE7758DataC = TXDataa[0] + TXDataa[1]+ TXDataa[2] +TXDataa[3] + TXDataa[4] + TXDataa[5];
ADE7758Var(ADE7758DataC ,3);
Delay20us(2000);
}
/****
SANXIANGDIAN.rar_三相_三相 电压_三相电压_电压测量
版权申诉
41 浏览量
2022-09-24
19:31:40
上传
评论
收藏 38KB RAR 举报
JonSco
- 粉丝: 77
- 资源: 1万+
最新资源
- ParaStor300S 对象存储服务接口参考V1.0(V4.0.X).pdf
- ParaStor300S产品FAQ.doc
- SBM模型、超效率SBM模型代码(原始面板数据、MATLAB)
- 基于汇川AM系列PLC做的CNC加工
- ParaStor300S技术培训PPT-面向售前-V1.4.pptx
- 在MATLAB中,你可以使用多种函数和工具来创建各种类型的图形 以下是一些基本的MATLAB绘图命令和示例:
- 1_网络2204班 30 王磊 open flow 协议分析实践.docx
- 探索 v-on 之奥秘二:事件及各类修饰符的深度剖析与案例展示
- k8s基础教程与相关面试
- TerraScan中文用户指南
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈