ADE7758驱动程序
时间:11-11
来源:互联网
点击:
- 视在
- temp_data[ADD_AVAHR-1]=ADE_Read(ADD_AVAHR,16);
- temp_data[ADD_BVAHR-1]=ADE_Read(ADD_BVAHR,16);
- temp_data[ADD_CVAHR-1]=ADE_Read(ADD_CVAHR,16);
- for(i=0;i<9;i++)
- {
- if(temp_data[i]>0x7fff)
- temp_data[i]=0xffff-temp_data[i]+1;
- }
- if(divider>1)
- {
- for(i=0;i<9;i++)
- temp_data[i]=temp_data[i]*divider;//乘上分频器的值
- }
- //能量的计算
- for(i=0;i<9;i++)
- energy[i]+=temp_data[i];//累加电能值,单位为 WS(瓦秒)
- //转换成千瓦时
- for(i=0;i<3;i++)
- {
- working.watt_hour[i]+=(energy[i]/3600000);//转换成千瓦时
- energy[i]=energy[i]%3600000;
- }
- working.watt_hour[3]=working.watt_hour[0]+working.watt_hour[1]+working.watt_hour[2];//总和
- //转换成千伏安时
- for(i=0;i<3;i++)
- {
- working.va_hour[i]+=(energy[i+6]/3600000);//转换成千瓦时
- energy[i+6]=energy[i+6]%3600000;
- }
- working.va_hour[3]=working.va_hour[0]+working.va_hour[1]+working.va_hour[2];//总和
- for(working.watt[3]=0,i=0;i<3;i++)
- {
- working.watt[i]=temp_data[i]/1000;//千瓦
- working.watt[3]+=working.watt[i];
- }
- for(working.var[3]=0,i=0;i<3;i++)
- {
- working.var[i]=temp_data[i+3]/1000;
- working.var[3]+=working.var[i];
- }
- for(working.va[3]=0,i=0;i<3;i++)
- {
- working.va[i]=temp_data[i+6]/1000;//千伏安
- if(working.va[i]
- working.va[i]=working.watt[i];
- working.va[3]+=working.va[i];
- }
- }
- /**
- *功能:实时读取电流电压值
- */
- void ADE_ReadVC(void)
- {
- unsigned char i,j;
- for(i=0;i<3;i++)
- {
- working.voltage[i]=0;
- working.current[i]=0;
- }
- for(i=0;i<3;i++)
- {
- for(j=0;j<5;j++)
- {
- working.voltage[i]+=vo_buffer[j][i];
- working.current[i]+=io_buffer[j][i];
- }
- }
- for(i=0;i<3;i++)
- {
- working.voltage[i]=working.voltage[i]/5;
- working.current[i]=working.current[i]/5;
- }
- //电压电流的三相平均值
- working.voltage[3]=(working.voltage[0]+working.voltage[1]+working.voltage[2])/3;
- working.current[3]=(working.current[0]+working.current[1]+working.current[2])/3;
- printf(" voltage=%d current=%d\n",working.voltage[3],working.current[3]);
- }
- /**
- *校准模式下 每秒读取功率
- */
- void ADE_AdjustHR(void)
- {
- unsigned char i;
- unsignedinttemp_data[9];//存放运算过程的中间变量
- //有功
- temp_data[ADD_AWATTHR-1]=ADE_Read(ADD_AWATTHR,16);
- temp_data[ADD_BWATTHR-1]=ADE_Read(ADD_BWATTHR,16);
- temp_data[ADD_CWATTHR-1]=ADE_Read(ADD_CWATTHR,16);
- //无功
- temp_data[ADD_AVARHR-1]=ADE_Read(ADD_AVARHR,16);
- temp_data[ADD_BVARHR-1]=ADE_Read(ADD_BVARHR,16);
- temp_data[ADD_CVARHR-1]=ADE_Read(ADD_CVARHR,16);
- //视在
- temp_data[ADD_AVAHR-1]=ADE_Read(ADD_AVAHR,16);
- temp_data[ADD_BVAHR-1]=ADE_Read(ADD_BVAHR,16);
- temp_data[ADD_CVAHR-1]=ADE_Read(ADD_CVAHR,16);
- for(i=0;i<3;i++)
- {
- adjusting.read_data.watt[i]=temp_data[i+0]&0x0000ffff;
- adjusting.read_data.var[i]=temp_data[i+3]&0x0000ffff;//没有校准有功功率
- adjusting.read_data.va[i]=temp_data[i+6]&0x0000ffff;
- }
- }
- /**
- *校准模式下实时读取电流电压值
- */
- void ADE_AdjustVC(void)
- {
- unsigned char i,j;
- for(i=0;i<3;i++)
- {
- adjusting.read_data.voltage[i]=0;
- adjusting.read_data.current[i]=0;
- }
- for(i=0;i<3;i++)
- {
- for(j=0;j<5;j++)
- {
- adjusting.read_data.voltage[i]+=vo_buffer[j][i];
- adjusting.read_data.current[i]+=io_buffer[j][i];
- }
- }
- for(i=0;i<3;i++)
- {
- adjusting.read_data.voltage[i]=adjusting.read_data.voltage[i]/5;
- adjusting.read_data.current[i]=adjusting.read_data.current[i]/5;
- }
- }
- /**
- *功能:从ADE7758中取出三相电压电流功率等电参量
- */
- void ADE_GetData(void)
- {
- static unsigned char bit_3s=0;
- unsigned char j;
- if(!bWorkModel)//正常工作模式
- {
- if(bit_1s)
- {
- bit_1s=0;
- ADE_ReadHR();
- if((bit_3s++)>=3)/*三秒检测一次异常*/
- {
- ADE_AuCheck();
- bit_3s=0;
- }
- }
- for(j=0;j<3;j++)
- {
- vo_buffer[sample_cycle][j]=ADE_Read(ADD_AVRMS+j,24)>>12;//voltage
- io_buffer[sample_cycle][j]=ADE_Read(ADD_AIRMS+j,24)>>13;//current
- }
- if(sample_cycle==4)/*读取5次取平均值*/
- ADE_ReadVC();
- }
- else
- {
- if(bit_1s)
- {
- bit_1s=0;
- ADE_AdjustHR();
- }
- for(j=0;j<3;j++)
- {
- vo_buffer[sample_cycle][j]=ADE_Read(ADD_AVRMS+j,24);
- io_buffer[sample_cycle][j]=ADE_Read(ADD_AIRMS+j,24);
- }
- if(sample_cycle==4)
- ADE_AdjustVC();
- //save_set_to_e2prom();//===
- }
- if(sample_cycle<4)
- sample_cycle+=1;
- else
- sample_cycle=0;
- }
- /**
- *校准数据保存至缓冲区
- */
- void ADE_WriteByte(unsigned short
ADE7758驱动程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)