微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ADE7758驱动程序

ADE7758驱动程序

时间:11-11 来源:互联网 点击:
  1. 视在
  2. temp_data[ADD_AVAHR-1]=ADE_Read(ADD_AVAHR,16);
  3. temp_data[ADD_BVAHR-1]=ADE_Read(ADD_BVAHR,16);
  4. temp_data[ADD_CVAHR-1]=ADE_Read(ADD_CVAHR,16);
  5. for(i=0;i<9;i++)
  6. {
  7. if(temp_data[i]>0x7fff)
  8. temp_data[i]=0xffff-temp_data[i]+1;
  9. }
  10. if(divider>1)
  11. {
  12. for(i=0;i<9;i++)
  13. temp_data[i]=temp_data[i]*divider;//乘上分频器的值
  14. }
  15. //能量的计算
  16. for(i=0;i<9;i++)
  17. energy[i]+=temp_data[i];//累加电能值,单位为 WS(瓦秒)
  18. //转换成千瓦时
  19. for(i=0;i<3;i++)
  20. {
  21. working.watt_hour[i]+=(energy[i]/3600000);//转换成千瓦时
  22. energy[i]=energy[i]%3600000;
  23. }
  24. working.watt_hour[3]=working.watt_hour[0]+working.watt_hour[1]+working.watt_hour[2];//总和
  25. //转换成千伏安时
  26. for(i=0;i<3;i++)
  27. {
  28. working.va_hour[i]+=(energy[i+6]/3600000);//转换成千瓦时
  29. energy[i+6]=energy[i+6]%3600000;
  30. }
  31. working.va_hour[3]=working.va_hour[0]+working.va_hour[1]+working.va_hour[2];//总和
  32. for(working.watt[3]=0,i=0;i<3;i++)
  33. {
  34. working.watt[i]=temp_data[i]/1000;//千瓦
  35. working.watt[3]+=working.watt[i];
  36. }
  37. for(working.var[3]=0,i=0;i<3;i++)
  38. {
  39. working.var[i]=temp_data[i+3]/1000;
  40. working.var[3]+=working.var[i];
  41. }
  42. for(working.va[3]=0,i=0;i<3;i++)
  43. {
  44. working.va[i]=temp_data[i+6]/1000;//千伏安
  45. if(working.va[i]
  46. working.va[i]=working.watt[i];
  47. working.va[3]+=working.va[i];
  48. }
  49. }
  50. /**
  51. *功能:实时读取电流电压值
  52. */
  53. void ADE_ReadVC(void)
  54. {
  55. unsigned char i,j;
  56. for(i=0;i<3;i++)
  57. {
  58. working.voltage[i]=0;
  59. working.current[i]=0;
  60. }
  61. for(i=0;i<3;i++)
  62. {
  63. for(j=0;j<5;j++)
  64. {
  65. working.voltage[i]+=vo_buffer[j][i];
  66. working.current[i]+=io_buffer[j][i];
  67. }
  68. }
  69. for(i=0;i<3;i++)
  70. {
  71. working.voltage[i]=working.voltage[i]/5;
  72. working.current[i]=working.current[i]/5;
  73. }
  74. //电压电流的三相平均值
  75. working.voltage[3]=(working.voltage[0]+working.voltage[1]+working.voltage[2])/3;
  76. working.current[3]=(working.current[0]+working.current[1]+working.current[2])/3;
  77. printf(" voltage=%d current=%d\n",working.voltage[3],working.current[3]);
  78. }
  79. /**
  80. *校准模式下 每秒读取功率
  81. */
  82. void ADE_AdjustHR(void)
  83. {
  84. unsigned char i;
  85. unsignedinttemp_data[9];//存放运算过程的中间变量
  86. //有功
  87. temp_data[ADD_AWATTHR-1]=ADE_Read(ADD_AWATTHR,16);
  88. temp_data[ADD_BWATTHR-1]=ADE_Read(ADD_BWATTHR,16);
  89. temp_data[ADD_CWATTHR-1]=ADE_Read(ADD_CWATTHR,16);
  90. //无功
  91. temp_data[ADD_AVARHR-1]=ADE_Read(ADD_AVARHR,16);
  92. temp_data[ADD_BVARHR-1]=ADE_Read(ADD_BVARHR,16);
  93. temp_data[ADD_CVARHR-1]=ADE_Read(ADD_CVARHR,16);
  94. //视在
  95. temp_data[ADD_AVAHR-1]=ADE_Read(ADD_AVAHR,16);
  96. temp_data[ADD_BVAHR-1]=ADE_Read(ADD_BVAHR,16);
  97. temp_data[ADD_CVAHR-1]=ADE_Read(ADD_CVAHR,16);
  98. for(i=0;i<3;i++)
  99. {
  100. adjusting.read_data.watt[i]=temp_data[i+0]&0x0000ffff;
  101. adjusting.read_data.var[i]=temp_data[i+3]&0x0000ffff;//没有校准有功功率
  102. adjusting.read_data.va[i]=temp_data[i+6]&0x0000ffff;
  103. }
  104. }
  105. /**
  106. *校准模式下实时读取电流电压值
  107. */
  108. void ADE_AdjustVC(void)
  109. {
  110. unsigned char i,j;
  111. for(i=0;i<3;i++)
  112. {
  113. adjusting.read_data.voltage[i]=0;
  114. adjusting.read_data.current[i]=0;
  115. }
  116. for(i=0;i<3;i++)
  117. {
  118. for(j=0;j<5;j++)
  119. {
  120. adjusting.read_data.voltage[i]+=vo_buffer[j][i];
  121. adjusting.read_data.current[i]+=io_buffer[j][i];
  122. }
  123. }
  124. for(i=0;i<3;i++)
  125. {
  126. adjusting.read_data.voltage[i]=adjusting.read_data.voltage[i]/5;
  127. adjusting.read_data.current[i]=adjusting.read_data.current[i]/5;
  128. }
  129. }
  130. /**
  131. *功能:从ADE7758中取出三相电压电流功率等电参量
  132. */
  133. void ADE_GetData(void)
  134. {
  135. static unsigned char bit_3s=0;
  136. unsigned char j;
  137. if(!bWorkModel)//正常工作模式
  138. {
  139. if(bit_1s)
  140. {
  141. bit_1s=0;
  142. ADE_ReadHR();
  143. if((bit_3s++)>=3)/*三秒检测一次异常*/
  144. {
  145. ADE_AuCheck();
  146. bit_3s=0;
  147. }
  148. }
  149. for(j=0;j<3;j++)
  150. {
  151. vo_buffer[sample_cycle][j]=ADE_Read(ADD_AVRMS+j,24)>>12;//voltage
  152. io_buffer[sample_cycle][j]=ADE_Read(ADD_AIRMS+j,24)>>13;//current
  153. }
  154. if(sample_cycle==4)/*读取5次取平均值*/
  155. ADE_ReadVC();
  156. }
  157. else
  158. {
  159. if(bit_1s)
  160. {
  161. bit_1s=0;
  162. ADE_AdjustHR();
  163. }
  164. for(j=0;j<3;j++)
  165. {
  166. vo_buffer[sample_cycle][j]=ADE_Read(ADD_AVRMS+j,24);
  167. io_buffer[sample_cycle][j]=ADE_Read(ADD_AIRMS+j,24);
  168. }
  169. if(sample_cycle==4)
  170. ADE_AdjustVC();
  171. //save_set_to_e2prom();//===
  172. }
  173. if(sample_cycle<4)
  174. sample_cycle+=1;
  175. else
  176. sample_cycle=0;
  177. }
  178. /**
  179. *校准数据保存至缓冲区
  180. */
  181. void ADE_WriteByte(unsigned short

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top