久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5877|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

ADE7758的電力參數(shù)采集芯片,含單片機源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:322688 發(fā)表于 2018-5-5 12:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
說起ADE7758的電力參數(shù)采集芯片,應(yīng)用很多,早幾年用他做了一個產(chǎn)品,
看了現(xiàn)在好像還有人在用,
現(xiàn)在把自己用的源代碼發(fā)上來,希望對大家有幫助,
  1. #include<reg52.h>
  2. #include<stdio.h>
  3. #include<ABSACC.H>
  4. #include<Hardware.H>
  5. #include<ExTimer.H>
  6. #include<12864.H>
  7. #include<MATH.H>
  8. #include<Alarm.H>
  9. #include<ADC.H>
  10. #include<LC.H>
  11. /*
  12. static unsigned char IE_COPY=0;  //進(jìn)入中斷之后保存IE 全局變量
  13. static unsigned char Com_Counter=6;
  14. static unsigned char Capture_1H=0;
  15. static unsigned char Capture_1L=0;
  16. static unsigned char Capture_2H=0;
  17. static unsigned char Capture_2L=0;
  18. static unsigned char Capture_Couter=0;
  19. static unsigned int  T;
  20. static unsigned int  Number_Fre;
  21. static unsigned int  Max,Min,Speed_Filter[10];
  22. static unsigned long Capture_Result;
  23. static unsigned long Accelaration;
  24. */

  25. /*ADC模擬量數(shù)據(jù)修正設(shè)置數(shù)據(jù)定義,位于XRAM.是EEPROM 的映射*/

  26. #define BV_Offset 0x00C2//電池偏移
  27. #define BV_Gain   0x00C3//電池增益

  28. #define ET_Offset 0x00C4//水溫偏移
  29. #define ET_Gain   0x00C5//水溫增益

  30. #define OP_Offset 0x00C6//油壓偏移
  31. #define OP_Gain   0x00C7//油壓增益

  32. #define FL_Offset 0x00C8//油量偏移
  33. #define FL_Gain   0x00C9//油量增益

  34. #define OV_Offset 0x00CA//電壓偏移
  35. #define OV_Gain   0x00CB//電壓增益

  36. #define OC_Offset 0x00CC//電流偏移
  37. #define OC_Gain   0x00CD//電流增益

  38. #define PF_Offset 0x00CE//功率因數(shù)偏移
  39. #define PF_Gain   0x00CF//功率因數(shù)增益

  40. /*ADC 采集的模擬量數(shù)據(jù)   全局變量*/
  41. volatile unsigned int idata BatteryVoltage=0;
  42. volatile unsigned int idata ETVoltage=0;
  43. volatile unsigned int idata OPVoltage=0;
  44. volatile unsigned int idata FLVoltage=0;

  45. /*ADE 采集的模擬量數(shù)據(jù)   全局變量*/
  46. volatile unsigned int idata GenVoltageL1=0;
  47. volatile unsigned int idata GenVoltageL2=0;
  48. volatile unsigned int idata GenVoltageL3=0;

  49. volatile unsigned int idata GenVoltageL12=0;
  50. volatile unsigned int idata GenVoltageL23=0;
  51. volatile unsigned int idata GenVoltageL31=0;

  52. volatile unsigned long idata GenCurrentC1=0;
  53. volatile unsigned long idata GenCurrentC2=0;
  54. volatile unsigned long idata GenCurrentC3=0;

  55. volatile unsigned int idata GenKwL1=0;
  56. volatile unsigned int idata GenKwL2=0;
  57. volatile unsigned int idata GenKwL3=0;

  58. volatile unsigned int idata GenKvarL1=0;
  59. volatile unsigned int idata GenKvarL2=0;
  60. volatile unsigned int idata GenKvarL3=0;

  61. volatile unsigned long idata GenKvaL1=0;
  62. volatile unsigned long idata GenKvaL2=0;
  63. volatile unsigned long idata GenKvaL3=0;

  64. volatile unsigned int idata GenFrequency;

  65. volatile unsigned int idata GenPF1=0;
  66. volatile unsigned int idata GenPF2=0;
  67. volatile unsigned int idata GenPF3=0;

  68. volatile unsigned long idata GenSpeed;

  69. unsigned char idata ad_x=0;
  70. volatile unsigned int value_ET=0;
  71. volatile unsigned int value_OP=0;
  72. volatile unsigned int value_FL=0;
  73. /*定時器2 的變量定義*/
  74. unsigned char bdata mask;

  75. sbit Freq_BIT=mask^0;
  76. sbit INT0_BIT=mask^1;


  77. /*定義可位尋址的寄存器,用于緩沖*/

  78. /*離散輸入緩沖*/
  79. extern unsigned char bdata DI_BUF;
  80. /*離散輸出緩沖*/
  81. extern unsigned char bdata DO_BUF;
  82. /*現(xiàn)場操作模式緩沖*/
  83. extern unsigned char bdata LC_Model_BUF;
  84. /*--------------------------------------------------------------*/
  85. /*偏移、增益修正公共函數(shù)*/
  86. unsigned int AD_OffsetGain(unsigned int DataInput,unsigned int Gain,unsigned int Offset)
  87. {  
  88.         unsigned long Data;
  89. /*偏移修正*/
  90.         Data=XWORD[Offset];//讀取偏移設(shè)置數(shù)據(jù)
  91. /*偏移量計算*/        
  92.         if (Data>=100)
  93.         {
  94.         //BV_Offset>=100,正偏移,修正單位1/LSB(0.1V/LSB)。
  95.                 DataInput=(DataInput+(Data-100));        //屏蔽正負(fù)標(biāo)志,計算真實的正偏移量
  96.         }
  97.         else
  98.         {
  99.         //BV_Offset<100,負(fù)偏移,修正單位1/LSB(0.1V/LSB)。
  100.                
  101.                 //判斷是否大于要修正的負(fù)偏移量
  102.                 if (DataInput>(100-Data))
  103.                 {        
  104.                         DataInput=(DataInput-(100-Data));        //小于100,計算真實的負(fù)偏移量
  105.                 }
  106.                 else
  107.                 {
  108.                 //小于要修正的偏移量
  109.                         DataInput=0;
  110.                 }        
  111.         }
  112. /*增益修正*/
  113.         Data=XWORD[Gain];//讀取增益設(shè)置數(shù)據(jù)        
  114. /*增益計算*/        
  115.         //Gain,正負(fù)增益,修正單位0.001/LSB。
  116.         Data=(Data*DataInput)/1000;
  117.         
  118.         return Data;
  119. }
  120. /*--------------------------------------------------------------*/
  121. /*軟件延時函數(shù)*/
  122. void AD_Delay(unsigned int Delay)
  123. {  
  124.     unsigned int  i;        //時間倍數(shù)。
  125.     for(; Delay>0; Delay--)
  126.     {
  127.     for(i=0; i<100; i++)
  128.             {
  129.             }        //時間倍數(shù)循環(huán)。
  130.     }
  131. }
  132. /*--------------------------------------------------------------*/
  133. /*Timer2 中斷服務(wù)程序*/
  134. void Timer2_Sev(void)
  135. {
  136. //初始化T2
  137.         TF2=0;
  138.         
  139.         RCAP2L = 0x00;
  140.         RCAP2H = 0x00;
  141.         TL2    = 0x00;
  142.         TH2    = 0x00;        
  143.         
  144.         TR2    = 0;                //關(guān)閉T2
  145.         ET2        =0;
  146.         EX0=0;
  147.         
  148.         GenFrequency=0;
  149.         
  150.         INT0_BIT=1;
  151.         Freq_BIT=0;
  152. }
  153. /*--------------------------------------------------------------*/
  154. /*INT0 中斷服務(wù)程序*/
  155. void Int0_Sev(void)
  156. {

  157.         if (Freq_BIT==0)
  158.         {

  159.                 //AD_Delay(10);
  160.                 //while (INT0==1);
  161.                
  162.                 TL2    = 0x00;
  163.                 TH2    = 0x00;        
  164.                 TR2=1;                //T2
  165.                 ET2=1;                //使能中斷

  166.                 Freq_BIT=1;
  167.                                 
  168.                 //nPEN=0;
  169.                 //AD_Delay(20);
  170.                 //while (INT0==0);
  171.                
  172.         }
  173.         else
  174.         {        
  175.                 //AD_Delay(10);
  176.                 //while (INT0==1);
  177.                
  178.                 TR2=0;
  179.                 ET2=0;
  180.                 EX0=0;
  181.                
  182.                 GenFrequency=(((TH2*256)+TL2)/73.67);

  183.                
  184.                 //nPEN=1;
  185.                 Freq_BIT=0;
  186.                 INT0_BIT=1;
  187.                         
  188.         }

  189. }
  190. /*--------------------------------------------------------------*/
  191. /*發(fā)電機電壓數(shù)據(jù)采集*/
  192. void ADE_GenVoltage(void)
  193. {

  194.         unsigned char Mask;
  195.         unsigned int i;

  196.         Power_Measure_Write(LCYCMODE,0x38);//ZXSEL Bit3=1,Bit4=1,Bit5=1,選擇PhaseA、B、C。
  197.         Power_Measure_Write(MASK,0xFC0);   //ZXA=1,ZXB=1,ZXC=1,選擇PhaseA、B、C過零交點標(biāo)志。

  198. //循環(huán)檢測三相

  199.         Power_Measure_Write(ZXTOUT,0x0FFF); //將過零溢出時間。
  200.         Power_Measure_Read(RSTATUS);           //復(fù)位狀態(tài)標(biāo)志寄存器。
  201.         Mask=0;
  202.         i=0;
  203.         while (Mask==0)//等待結(jié)束標(biāo)志位
  204.         {
  205.                 //判斷A相是否有過零標(biāo)志位***************************************************
  206.                 if ((Power_Measure_Read(STATUS)&0x0200)==0x0200)
  207.                 {
  208.                 //A相有過零標(biāo)志位
  209.                         GenCurrentC1=Power_Measure_Read(AIRMS)/10;//讀取ADE7758的電流數(shù)據(jù)
  210.                         GenVoltageL1=Power_Measure_Read(AVRMS)/4700; //讀取ADE7758的電壓數(shù)據(jù)
  211.                         Mask=1;        //標(biāo)志結(jié)束
  212.                 }
  213.                 //A相檢測采集過程中是否有線電壓過零交變故障標(biāo)志位
  214.                 if ((Power_Measure_Read(STATUS)&0x0040)==0x0040)
  215.                 {
  216.                 //A相采集過程中有線電壓過零交變故障標(biāo)志
  217.                    //dengzhen
  218.                         GenVoltageL1=0; //不讀取ADE7758的數(shù)據(jù)
  219.                         Mask=1;        //標(biāo)志結(jié)束
  220.                 }

  221.                 if (i==0x30)
  222.                 {
  223.                         GenVoltageL3=0; //不讀取ADE7758的數(shù)據(jù)
  224.                         Mask=1;        //標(biāo)志結(jié)束
  225.                 }
  226.                 else
  227.                 {
  228.                         i++;
  229.                 }
  230.         }
  231. if (Dianji_flag==1)//啟動成功后采集后兩相發(fā)電電壓
  232. {
  233.         Power_Measure_Write(ZXTOUT,0x0FFF); //將過零溢出時間。
  234.         Power_Measure_Read(RSTATUS);           //復(fù)位狀態(tài)標(biāo)志寄存器。
  235.         Mask=0;
  236.         i=0;

  237.                 while (Mask==0)//等待結(jié)束標(biāo)志位
  238.                 {
  239.                         //判斷B相是否有過零標(biāo)志位***************************************************
  240.                         if ((Power_Measure_Read(STATUS)&0x0400)==0x0400)
  241.                         {
  242.                         //B相有過零標(biāo)志位
  243.                                 GenCurrentC2=Power_Measure_Read(BIRMS)/10;//讀取ADE7758的電流數(shù)據(jù)
  244.                                 GenVoltageL2=Power_Measure_Read(BVRMS)/4700; //讀取ADE7758的電壓數(shù)據(jù)
  245.                                 Mask=1;        //標(biāo)志結(jié)束
  246.                         }
  247.                         //B相檢測采集過程中是否有線電壓過零交變故障標(biāo)志位
  248.                         if((Power_Measure_Read(STATUS)&0x0080)==0x0080)
  249.                         {
  250.                         //B相采集過程中有線電壓過零交變故障標(biāo)志
  251.                         //dengzhen
  252.                                 GenVoltageL2=0; //不讀取ADE7758的數(shù)據(jù)
  253.                                 Mask=1;        //標(biāo)志結(jié)束
  254.                         }
  255.         
  256.                         if (i==0x30)
  257.                         {
  258.                                 GenVoltageL3=0; //不讀取ADE7758的數(shù)據(jù)
  259.                                 Mask=1;        //標(biāo)志結(jié)束
  260.                         }
  261.                         else
  262.                         {
  263.                                 i++;
  264.                         }
  265.                 }        
  266.                 Power_Measure_Write(ZXTOUT,0x0FFF); //將過零溢出時間。
  267.                 Power_Measure_Read(RSTATUS);          //復(fù)位狀態(tài)標(biāo)志寄存器。
  268.                 Mask=0;
  269.                 i=0;
  270.                 while (Mask==0)//等待結(jié)束標(biāo)志位
  271.                 {
  272.                         //判斷C相是否有過零標(biāo)志位***************************************************
  273.                         if ((Power_Measure_Read(STATUS)&0x0800)==0x0800)
  274.                         {
  275.                         //C相有過零標(biāo)志位
  276.                                 GenCurrentC3=Power_Measure_Read(CIRMS)/10;         //讀取ADE7758的電流數(shù)據(jù)
  277.                                 GenVoltageL3=Power_Measure_Read(CVRMS)/4700; //讀取ADE7758的電壓數(shù)據(jù)
  278.                                 Mask=1;        //標(biāo)志結(jié)束
  279.                         }
  280.                         //C相檢測采集過程中是否有線電壓過零交變故障標(biāo)志位
  281.                         if ((Power_Measure_Read(STATUS)&0x0100)==0x0100)
  282.                         {
  283.                         //C相采集過程中有線電壓過零交變故障標(biāo)志
  284.                         //dengzhen
  285.                                 GenVoltageL3=0; //不讀取ADE7758的數(shù)據(jù)
  286.                                 Mask=1;        //標(biāo)志結(jié)束
  287.                         }
  288.         
  289.                         if (i==0x30)
  290.                         {
  291.                                 GenVoltageL3=0; //不讀取ADE7758的數(shù)據(jù)
  292.                                 Mask=1;        //標(biāo)志結(jié)束
  293.                         }
  294.                         else
  295.                         {
  296.                                 i++;
  297.                         }
  298.                 }        
  299. }
  300.         /*廠方修正*/
  301.                 GenVoltageL1=AD_OffsetGain(GenVoltageL1,0x00E5,0x00E4);
  302.                 GenVoltageL2=AD_OffsetGain(GenVoltageL2,0x00E7,0x00E6);
  303.                 GenVoltageL3=AD_OffsetGain(GenVoltageL3,0x00E9,0x00E8);
  304.         /*用戶修正*/
  305.                 GenVoltageL1=AD_OffsetGain(GenVoltageL1,OV_Gain,OV_Offset);
  306.                 GenVoltageL2=AD_OffsetGain(GenVoltageL2,OV_Gain,OV_Offset);
  307.                 GenVoltageL3=AD_OffsetGain(GenVoltageL3,OV_Gain,OV_Offset);

  308. //======================================
  309.         //判斷A相電壓是否小于15伏
  310.         
  311. if (GenVoltageL1<10)
  312.    {
  313.         //A相電壓小于10伏
  314.                
  315.                 GenVoltageL1=0;
  316.                 GenVoltageL2=0;
  317.                 GenVoltageL3=0;                //將三相相電壓強制為0V
  318.                
  319.                 GenVoltageL12=0;
  320.                 GenVoltageL23=0;
  321.                 GenVoltageL31=0;        //將三相線電壓強制為0V
  322.         }
  323.         else
  324.         {
  325.             
  326.    //A相電壓衐大于10伏
  327.                 //計算各相線電壓
  328.         
  329.                 GenVoltageL12= sqrt(((GenVoltageL1*1.5)*(GenVoltageL1*1.5))+((GenVoltageL2*0.866)*(GenVoltageL2*0.866)));
  330.                 GenVoltageL23= sqrt(((GenVoltageL2*1.5)*(GenVoltageL2*1.5))+((GenVoltageL3*0.866)*(GenVoltageL3*0.866)));
  331.                 GenVoltageL31= sqrt(((GenVoltageL3*1.5)*(GenVoltageL3*1.5))+((GenVoltageL1*0.866)*(GenVoltageL1*0.866)));
  332.                
  333.    }
  334. }
  335. /*--------------------------------------------------------------*/
  336. /*發(fā)電機電壓數(shù)據(jù)采集*/
  337. /*
  338. void VoltageDroop(void)
  339. {
  340.                 unsigned int Data;        
  341. //非通用修正 20061010

  342.                 Data=XWORD[0x00AC];
  343.                 Data=GenCurrentC1*100/Data;
  344.                 GenVoltageL1=GenVoltageL1+(GenVoltageL1*(Data*0.03)/100);
  345.                 GenVoltageL12=GenVoltageL12+(GenVoltageL12*(Data*0.03)/100);

  346.                 Data=XWORD[0x00AC];
  347.                 Data=GenCurrentC2*100/Data;
  348.                 GenVoltageL2=GenVoltageL2+(GenVoltageL2*(Data*0.03)/100);
  349.                 GenVoltageL23=GenVoltageL23+(GenVoltageL23*(Data*0.03)/100);

  350.                 Data=XWORD[0x00AC];
  351.                 Data=GenCurrentC3*100/Data;
  352.                 GenVoltageL3=GenVoltageL3+(GenVoltageL3*(Data*0.03)/100);
  353.                 GenVoltageL31=GenVoltageL31+(GenVoltageL31*(Data*0.03)/100);
  354. }
  355. */
  356. /*--------------------------------------------------------------*/
  357. /*發(fā)電機電流數(shù)據(jù)采集*/
  358. void ADE_GenCurrent(void)
  359. {
  360.         //判斷A相電壓是否大于80伏
  361.         if (GenVoltageL1>70)
  362.         {        
  363.         //CT比例
  364.                 GenCurrentC1=GenCurrentC1/(10000/XWORD[0x00AC]);
  365.                 GenCurrentC2=GenCurrentC2/(10000/XWORD[0x00AC]);
  366.                 GenCurrentC3=GenCurrentC3/(10000/XWORD[0x00AC]);
  367.         //廠方修正
  368.                 GenCurrentC1=AD_OffsetGain(GenCurrentC1,0x00EB,0x00EA);
  369.                 GenCurrentC2=AD_OffsetGain(GenCurrentC2,0x00ED,0x00EC);
  370.                 GenCurrentC3=AD_OffsetGain(GenCurrentC3,0x00EF,0x00EE);        
  371.         //用戶修正
  372.                 GenCurrentC1=AD_OffsetGain(GenCurrentC1,OC_Gain,OC_Offset);
  373.                 GenCurrentC2=AD_OffsetGain(GenCurrentC2,OC_Gain,OC_Offset);
  374.                 GenCurrentC3=AD_OffsetGain(GenCurrentC3,OC_Gain,OC_Offset);
  375.                
  376.                 if ((GenCurrentC1/10)<(XWORD[0x00AC]*0.01))
  377.                 {
  378.                                 //C1小于3A,三相電流為0
  379.                                 GenCurrentC1=0;
  380.                 }
  381.                 if ((GenCurrentC2/10)<(XWORD[0x00AC]*0.01))
  382.                 {
  383.                                 //C1小于3A,三相電流為0
  384.                                 GenCurrentC2=0;
  385.                 }
  386.                 if ((GenCurrentC3/10)<(XWORD[0x00AC]*0.01))
  387.                 {
  388.                                 //C1小于3A,三相電流為0
  389.                                 GenCurrentC3=0;
  390.                 }
  391.         }
  392.   else
  393.         {
  394.         //相電壓小于150V
  395.                 GenCurrentC1=0;
  396.                 GenCurrentC2=0;
  397.                 GenCurrentC3=0;        
  398.         }
  399.         //dengzhen 20101026
  400.         if (GenCurrentC1>54000)
  401.         {
  402.                         GenCurrentC1=54000;
  403.                         GenCurrentC2=54000;
  404.                         GenCurrentC3=54000;
  405.         }
  406. }
  407. /*--------------------------------------------------------------*/
  408. /*發(fā)電機頻率數(shù)據(jù)采集*/
  409. void ADE_GenFrequency(void)
  410. {
  411. ////////////////////////////////////////////////guoyajun-08.7.24/////////////////////////////////////////
  412.         if(XWORD[0x00F7]==0) //==0 >220V  ==1>110V  //電網(wǎng)選擇
  413.           {  
  414.                                          ////燃油閥門
  415.             if((GenVoltageL1<15)||((DO_BUF&0x02)==0x00))
  416.                      GenFrequency=0; //將頻率數(shù)據(jù)強制為0;                                    
  417.             else if(GenVoltageL1<180)  //頻率在40赫茲內(nèi)使用電壓計算頻率
  418.              GenFrequency=(GenVoltageL1*10)/4.4;            
  419.                     else
  420.                     {
  421.              Power_Measure_Write(LCYCMODE,0x38);//ZXSEL Bit3=1,Bit4=1,Bit5=1,選擇PhaseA、B、C。        
  422.              GenFrequency=(Power_Measure_Read(FREQ)*0.625); //讀取ADE7758的頻率數(shù)
  423.                     }
  424.          }
  425.                  else //110v //電網(wǎng)選擇
  426.                  {
  427.                     if((GenVoltageL1<15)||((DO_BUF&0x02)==0x00))
  428.                      GenFrequency=0; //將頻率數(shù)據(jù)強制為0;
  429.                     else if(GenVoltageL1<74)  //頻率在40赫茲內(nèi)使用電壓計算頻率
  430.              GenFrequency=(GenVoltageL1*10)/1.83;            ////燃油閥門
  431.                     else
  432.                     {
  433.              Power_Measure_Write(LCYCMODE,0x38);//ZXSEL Bit3=1,Bit4=1,Bit5=1,選擇PhaseA、B、C。        
  434.              GenFrequency=(Power_Measure_Read(FREQ)*0.625); //讀取ADE7758的頻率數(shù)
  435.                     }
  436.                  }
  437. }

  438. /*--------------------------------------------------------------*/
  439. /*發(fā)電機視在功率數(shù)據(jù)采集*/
  440. void ADE_GenKVA(void)
  441. {

  442.         unsigned long VData;
  443.         VData=GenVoltageL1;
  444.         VData=VData*GenCurrentC1;
  445.         /*
  446.         SBUF=GenVoltageL1>>8; while (TI==0){};TI=0;
  447.         SBUF=GenVoltageL1; while (TI==0){};TI=0;
  448.         SBUF=VData>>24; while (TI==0){};TI=0;
  449.         SBUF=VData>>16; while (TI==0){};TI=0;
  450.         SBUF=VData>>8; while (TI==0){};TI=0;
  451.         SBUF=VData; while (TI==0){};TI=0;
  452.         SBUF=0xAA; while (TI==0){};TI=0;
  453.         SBUF=0x55; while (TI==0){};TI=0;
  454.         */
  455.         if((VData%100)>=500)
  456.         {
  457.                 VData=(VData/1000)+1;
  458.         }
  459.         else
  460.         {
  461.                 VData=VData/1000;
  462.         }
  463.         GenKvaL1=VData;
  464.         if (GenKvaL1>29999) GenKvaL1=29999;

  465.         VData=GenVoltageL2;
  466.         VData=VData*GenCurrentC2;
  467.         if((VData%100)>=500)
  468.         {
  469.                 VData=(VData/1000)+1;
  470.         }
  471.         else
  472.         {
  473.                 VData=VData/1000;
  474.         }
  475.         GenKvaL2=VData;
  476.         if (GenKvaL2>29999) GenKvaL2=29999;

  477.         VData=GenVoltageL3;
  478.         VData=VData*GenCurrentC3;
  479.         if((VData%100)>=500)
  480.         {
  481.                 VData=(VData/1000)+1;
  482.         }
  483.         else
  484.         {
  485.                 VData=VData/1000;
  486.         }
  487.         GenKvaL3=VData;
  488.         if (GenKvaL3>29999) GenKvaL3=29999;
  489. }
  490. /*--------------------------------------------------------------*/
  491. /*發(fā)電機功率因數(shù)數(shù)據(jù)采集*/
  492. void ADE_GenPF(void)
  493. {
  494.         unsigned long Data;
  495.         unsigned char Mask;
  496.         unsigned char i;


  497. /*ADE配置*/        
  498.         Power_Measure_Write(LCYCMODE,0xBF);
  499.         Power_Measure_Write(LINECYC        ,20);
  500.         Power_Measure_Write(MASK,0x1000);   //LENERGY=1

  501.         Power_Measure_Read(RSTATUS);          //復(fù)位狀態(tài)標(biāo)志寄存器。
  502.         Mask=0;
  503.         i=0;
  504.         while (Mask==0)//等待結(jié)束標(biāo)志位
  505.         {
  506.                 //判斷是否有計量完畢標(biāo)志位***************************************************
  507.                 if ((Power_Measure_Read(STATUS)&0x1000)==0x1000)
  508.                 {
  509.                 //
  510.                         Data=Power_Measure_Read(AWATTHR)*100/Power_Measure_Read(AVAHR);
  511.                         GenPF1=Data;
  512.                         Data=Power_Measure_Read(BWATTHR)*100/Power_Measure_Read(BVAHR);
  513.                         GenPF2=Data;
  514.                         Data=Power_Measure_Read(CWATTHR)*100/Power_Measure_Read(CVAHR);
  515.                         GenPF3=Data;
  516.                         Mask=1;        //標(biāo)志結(jié)束
  517.                 }
  518.                 if (i==0x40)
  519.                 {
  520.                         GenPF1=100; //不讀取ADE7758的數(shù)據(jù)
  521.                         GenPF2=100; //不讀取ADE7758的數(shù)據(jù)
  522.                         GenPF3=100; //不讀取ADE7758的數(shù)據(jù)
  523.                         Mask=1;        //標(biāo)志結(jié)束
  524.                 }
  525.                 else
  526.                 {
  527.                         i++;
  528.                 }
  529.         }
  530.         GenPF1=AD_OffsetGain(GenPF1,PF_Gain,PF_Offset);
  531.         GenPF2=AD_OffsetGain(GenPF2,PF_Gain,PF_Offset);
  532.         GenPF3=AD_OffsetGain(GenPF3,PF_Gain,PF_Offset);
  533. //====================================
  534.         if (GenPF1>110)
  535.         {
  536.                 if (GenPF1>120) GenPF1=0;
  537.                  else GenPF1=110;
  538.         }

  539.         if (GenPF1<30) GenPF1=000;
  540.         if (GenCurrentC1==0) GenPF1=100;
  541. //====================================
  542.         if (GenPF2>110)
  543.         {
  544.                 if (GenPF2>120) GenPF2=0;
  545.                  else GenPF2=110;
  546.         }

  547.         if (GenPF2<30) GenPF2=000;
  548.         if (GenCurrentC2==0) GenPF2=100;
  549. //====================================
  550.         if (GenPF3>110)
  551.         {
  552.                 if (GenPF3>120) GenPF3=0;
  553.                  else GenPF3=110;
  554.         }

  555.         if (GenPF3<30) GenPF3=000;
  556.         if (GenCurrentC3==0) GenPF3=100;
  557. }
  558. /*--------------------------------------------------------------*/
  559. /*發(fā)電機有功功率數(shù)據(jù)采集*/
  560. void ADE_GenKW(void)
  561. {
  562.         if (GenCurrentC1!=0)
  563.         {
  564.                 GenKwL1=GenKvaL1*GenPF1/100;
  565.                 GenKwL2=GenKvaL2*GenPF2/100;
  566.                 GenKwL3=GenKvaL3*GenPF3/100;
  567.                 /*
  568.                 SBUF=GenKvaL1>>8; while (TI==0){};TI=0;
  569.                 SBUF=GenKvaL1; while (TI==0){};TI=0;
  570.                 SBUF=GenPF1>>8; while (TI==0){};TI=0;
  571.                 SBUF=GenPF1; while (TI==0){};TI=0;
  572.                 SBUF=GenKwL1>>8; while (TI==0){};TI=0;
  573.                 SBUF=GenKwL1; while (TI==0){};TI=0;
  574.                 SBUF=0x0D; while (TI==0){};TI=0;
  575.                 SBUF=0x0A; while (TI==0){};TI=0;
  576.                 */
  577.         }
  578.         else
  579.         {
  580.                 GenKwL1=0;GenKwL2=0;GenKwL3=0;
  581.         }
  582. /*用戶修正*/        
  583. /*        GenKwL1=AD_OffsetGain(GenKwL1,Kw_Gain,Kw_Offset);
  584.         GenKwL2=AD_OffsetGain(GenKwL2,Kw_Gain,Kw_Offset);
  585.         GenKwL3=AD_OffsetGain(GenKwL3,Kw_Gain,Kw_Offset);
  586. */
  587. }
  588. /*--------------------------------------------------------------*/
  589. /*發(fā)電機無功功率數(shù)據(jù)采集*/
  590. void ADE_GenKVAR(void)
  591. {
  592.         if (GenCurrentC1!=0)
  593.         {
  594.                 if (10000>(GenPF1*GenPF1))
  595.                 {
  596.                         GenKvarL1=GenKvaL1*(sqrt(10000-GenPF1*GenPF1))/100;
  597.                 }
  598.                 if (10000>(GenPF2*GenPF2))
  599.                 {
  600.                         GenKvarL2=GenKvaL2*(sqrt(10000-GenPF2*GenPF2))/100;
  601.                 }
  602.                 if (10000>(GenPF3*GenPF3))
  603.                 {
  604.                         GenKvarL3=GenKvaL3*(sqrt(10000-GenPF3*GenPF3))/100;
  605.                 }
  606.         }
  607.         else
  608.         {
  609.                 GenKvarL1=0;GenKvarL2=0;GenKvarL3=0;
  610.         }
  611. }
  612. /*--------------------------------------------------------------*/
  613. /*蓄電池電壓數(shù)據(jù)采集在通道3*/
  614. void ADC_BV(void)
  615. {
  616.         unsigned int Data;
  617.         unsigned Count;
  618.         
  619.         Data=0;
  620.         
  621.         for (Count=0;Count<10;Count++)
  622.         {        
  623.                 Data=Data+(ADC_Read(0x06)/2.687);
  624.         }
  625.         
  626.         //硬件計算
  627.         BatteryVoltage=(Data/10);
  628.         
  629.         /*偏移、增益修正公共函數(shù)*/
  630.         BatteryVoltage=AD_OffsetGain(BatteryVoltage,BV_Gain,BV_Offset);

  631. }

  632. /*
  633. 上海耀通電子儀表公司:銷售負(fù)責(zé)人:姚先生 經(jīng)理
  634. 聯(lián)系電話:021-69625513
  635. 電阻溫度傳感器:306J
  636. 溫度        電阻  AD電壓

  637. 40                287          395
  638. 60                134         
  639. 80                69
  640. 95                44.3
  641. 100                38.5
  642. 120                22.7        
  643. */
  644. //AD采樣電壓值,溫度
  645. unsigned int code Tempreture_Div[13][2]=  
  646. {
  647. {468,0},                    
  648. {458,10},
  649. //{453,13},
  650. //{450,16},
  651. {446,20},
  652. //{431,26},
  653. {422,28},
  654. //{405,33},
  655. {397,37},
  656. // {378,43},
  657. {365,46},
  658. // {348,52},
  659. {328,58},
  660. {300,67},
  661. {265,80},
  662. //{246,84},
  663. //{242,86},
  664. //{233,88},
  665. {227,90},                 //阻值41.8
  666. //{222,95},  //阻值39    // 電壓值為:0.39v  //  (1.8/1024)* 222 = 0.39V     // 0.39v/(1.8/1024)= 222
  667. {218,100},         //阻值36.9
  668. //{214,105},
  669. {210,110},
  670. {201,120}
  671. };

  672. /*--------------------------------------------------------------*/
  673. /*發(fā)動機溫度數(shù)據(jù)采集在通道1*/
  674. void ADC_ET(void)
  675. {
  676.         unsigned int Data;
  677.         unsigned Count;
  678.   Data=0;
  679.         for (Count=0;Count<20;Count++)
  680.         {        
  681.           //Data=Data+(207-ADC_Read(0x02)*0.49);
  682.           Data=Data+ADC_Read(0x02);
  683.         }
  684.         //硬件計算
  685.         ETVoltage=(Data/20);
  686.         if(ETVoltage>470) //判斷是否接有溫度傳感器
  687.           {
  688.            ETVoltage=0;
  689.      return;
  690.      }
  691.   if((ETVoltage<=Tempreture_Div[0][0])&&(ETVoltage>=Tempreture_Div[1][0])) //0--10
  692.           {
  693.             Data=(Tempreture_Div[0][0]-ETVoltage)*10/(Tempreture_Div[0][0]-Tempreture_Div[1][0])+Tempreture_Div[0][1];
  694.           }
  695.         else if((ETVoltage<=Tempreture_Div[1][0])&&(ETVoltage>=Tempreture_Div[2][0])) //10--20
  696.           {
  697.             Data=(Tempreture_Div[1][0]-ETVoltage)*10/(Tempreture_Div[1][0]-Tempreture_Div[2][0])+Tempreture_Div[1][1];
  698.           }      
  699.   else if((ETVoltage<=Tempreture_Div[2][0])&&(ETVoltage>=Tempreture_Div[3][0])) //20--28
  700.           {
  701.             Data=(Tempreture_Div[2][0]-ETVoltage)*8/(Tempreture_Div[2][0]-Tempreture_Div[3][0])+Tempreture_Div[2][1];
  702.           }
  703.         else if((ETVoltage<=Tempreture_Div[3][0])&&(ETVoltage>=Tempreture_Div[4][0])) //28--37
  704.           {
  705.             Data=(Tempreture_Div[3][0]-ETVoltage)*9/(Tempreture_Div[3][0]-Tempreture_Div[4][0])+Tempreture_Div[3][1];
  706.           }
  707.   else if((ETVoltage<=Tempreture_Div[4][0])&&(ETVoltage>=Tempreture_Div[5][0])) //37--46
  708.       {
  709.             Data=(Tempreture_Div[4][0]-ETVoltage)*9/(Tempreture_Div[4][0]-Tempreture_Div[5][0])+Tempreture_Div[4][1];
  710.           }
  711.   else if((ETVoltage<=Tempreture_Div[5][0])&&(ETVoltage>=Tempreture_Div[6][0])) //46--58
  712.           {
  713.             Data=(Tempreture_Div[5][0]-ETVoltage)*12/(Tempreture_Div[5][0]-Tempreture_Div[6][0])+Tempreture_Div[5][1];
  714.           }
  715.         else if((ETVoltage<=Tempreture_Div[6][0])&&(ETVoltage>=Tempreture_Div[7][0])) //58--67
  716.           {
  717.             Data=(Tempreture_Div[6][0]-ETVoltage)*9/(Tempreture_Div[6][0]-Tempreture_Div[7][0])+Tempreture_Div[6][1];
  718.           }
  719.         else if((ETVoltage<=Tempreture_Div[7][0])&&(ETVoltage>=Tempreture_Div[8][0])) //67--80
  720.           {
  721.             Data=(Tempreture_Div[7][0]-ETVoltage)*13/(Tempreture_Div[7][0]-Tempreture_Div[8][0])+Tempreture_Div[7][1];
  722.           }
  723.   else if((ETVoltage<=Tempreture_Div[8][0])&&(ETVoltage>=Tempreture_Div[9][0])) //80--90
  724.           {
  725.             Data=(Tempreture_Div[8][0]-ETVoltage)*10/(Tempreture_Div[8][0]-Tempreture_Div[9][0])+Tempreture_Div[8][1];
  726.           }
  727.         else if((ETVoltage<=Tempreture_Div[9][0])&&(ETVoltage>=Tempreture_Div[10][0])) //90--100
  728.           {
  729.             Data=(Tempreture_Div[9][0]-ETVoltage)*10/(Tempreture_Div[9][0]-Tempreture_Div[10][0])+Tempreture_Div[9][1];
  730.           }
  731.         else if((ETVoltage<=Tempreture_Div[10][0])&&(ETVoltage>=Tempreture_Div[11][0])) //100--110
  732.           {
  733.             Data=(Tempreture_Div[10][0]-ETVoltage)*10/(Tempreture_Div[10][0]-Tempreture_Div[11][0])+Tempreture_Div[10][1];
  734.           }
  735.         else if((ETVoltage<=Tempreture_Div[11][0])&&(ETVoltage>=Tempreture_Div[12][0])) //110--120
  736.           {
  737.             Data=(Tempreture_Div[11][0]-ETVoltage)*10/(Tempreture_Div[11][0]-Tempreture_Div[12][0])+Tempreture_Div[11][1];
  738.           }
  739.   else
  740.      {
  741.             ETVoltage=0;
  742.         return;
  743.            }
  744.   ETVoltage=Data;
  745.         ETVoltage=AD_OffsetGain(ETVoltage,ET_Gain,ET_Offset);

  746. }
  747. /*******************************************
  748. 機油壓力傳感器:303J

  749. 壓力(mpa) 電阻(歐姆)
  750. 0                           20                                258        
  751. 0.1                          36                16                  336
  752. 0.2               50                14                400
  753. 0.3               65            15            465.63
  754. 0.4               80                15
  755. 0.5               95            15
  756. */

  757. /*發(fā)動機油壓數(shù)據(jù)采集在通道0*/
  758. void ADC_OP(void)
  759. {
  760.         unsigned int Data;
  761.         unsigned Count;               
  762.         Data=0;        

  763.         for (Count=0;Count<20;Count++)
  764.         {        
  765.                 Data=Data+(ADC_Read(0x00)*0.164-46);
  766.                 if ((ADC_Read(0x00)*0.164-46)<=00) Data=0;                        
  767.         }
  768.         //硬件計算
  769.         OPVoltage=(Data/20);
  770.     /*偏移、增益修正公共函數(shù)*/
  771.         OPVoltage=AD_OffsetGain(OPVoltage,OP_Gain,OP_Offset);
  772.     if(OPVoltage<5||OPVoltage>100)
  773.       OPVoltage=0;
  774. }

  775. /*油溫檢測---與水溫相同*/
  776. void ADC_FL(void)
  777. {
  778.         unsigned int Data;
  779.         unsigned Count;
  780.         Data=0;
  781.         
  782.         for (Count=0;Count<20;Count++)
  783.         {
  784.           Data=Data+ADC_Read(0x04);
  785.         }
  786.         FLVoltage=(Data/20);

  787.         if(FLVoltage>470) //判斷是否接有溫度傳感器
  788.           {
  789.            FLVoltage=0;
  790.      return;
  791.     }
  792.   if((FLVoltage<=Tempreture_Div[0][0])&&(FLVoltage>=Tempreture_Div[1][0])) //0--10
  793.           {
  794.             Data=(Tempreture_Div[0][0]-FLVoltage)*10/(Tempreture_Div[0][0]-Tempreture_Div[1][0])+Tempreture_Div[0][1];
  795.           }
  796.         else if((FLVoltage<=Tempreture_Div[1][0])&&(FLVoltage>=Tempreture_Div[2][0])) //10--20
  797.           {
  798.             Data=(Tempreture_Div[1][0]-FLVoltage)*10/(Tempreture_Div[1][0]-Tempreture_Div[2][0])+Tempreture_Div[1][1];
  799.           }      
  800.   else if((FLVoltage<=Tempreture_Div[2][0])&&(FLVoltage>=Tempreture_Div[3][0])) //20--28
  801.           {
  802.             Data=(Tempreture_Div[2][0]-FLVoltage)*8/(Tempreture_Div[2][0]-Tempreture_Div[3][0])+Tempreture_Div[2][1];
  803.           }
  804.         else if((FLVoltage<=Tempreture_Div[3][0])&&(FLVoltage>=Tempreture_Div[4][0])) //28--37
  805.           {
  806.             Data=(Tempreture_Div[3][0]-FLVoltage)*9/(Tempreture_Div[3][0]-Tempreture_Div[4][0])+Tempreture_Div[3][1];
  807.           }
  808.   else if((FLVoltage<=Tempreture_Div[4][0])&&(FLVoltage>=Tempreture_Div[5][0])) //37--46
  809.       {
  810.             Data=(Tempreture_Div[4][0]-FLVoltage)*9/(Tempreture_Div[4][0]-Tempreture_Div[5][0])+Tempreture_Div[4][1];
  811.           }
  812.   else if((FLVoltage<=Tempreture_Div[5][0])&&(FLVoltage>=Tempreture_Div[6][0])) //46--58
  813.           {
  814.             Data=(Tempreture_Div[5][0]-FLVoltage)*12/(Tempreture_Div[5][0]-Tempreture_Div[6][0])+Tempreture_Div[5][1];
  815.           }
  816.         else if((FLVoltage<=Tempreture_Div[6][0])&&(FLVoltage>=Tempreture_Div[7][0])) //58--67
  817.           {
  818.             Data=(Tempreture_Div[6][0]-FLVoltage)*9/(Tempreture_Div[6][0]-Tempreture_Div[7][0])+Tempreture_Div[6][1];
  819.           }
  820.         else if((FLVoltage<=Tempreture_Div[7][0])&&(FLVoltage>=Tempreture_Div[8][0])) //67--80
  821.           {
  822.             Data=(Tempreture_Div[7][0]-FLVoltage)*13/(Tempreture_Div[7][0]-Tempreture_Div[8][0])+Tempreture_Div[7][1];
  823.           }
  824.   else if((FLVoltage<=Tempreture_Div[8][0])&&(FLVoltage>=Tempreture_Div[9][0])) //80--90
  825.           {
  826.             Data=(Tempreture_Div[8][0]-FLVoltage)*10/(Tempreture_Div[8][0]-Tempreture_Div[9][0])+Tempreture_Div[8][1];
  827.           }
  828.         else if((FLVoltage<=Tempreture_Div[9][0])&&(FLVoltage>=Tempreture_Div[10][0])) //90--100
  829.           {
  830.             Data=(Tempreture_Div[9][0]-FLVoltage)*10/(Tempreture_Div[9][0]-Tempreture_Div[10][0])+Tempreture_Div[9][1];
  831.           }
  832.         else if((FLVoltage<=Tempreture_Div[10][0])&&(FLVoltage>=Tempreture_Div[11][0])) //100--110
  833.           {
  834.             Data=(Tempreture_Div[10][0]-FLVoltage)*10/(Tempreture_Div[10][0]-Tempreture_Div[11][0])+Tempreture_Div[10][1];
  835.           }
  836.         else if((FLVoltage<=Tempreture_Div[11][0])&&(FLVoltage>=Tempreture_Div[12][0])) //110--120
  837.           {
  838.             Data=(Tempreture_Div[11][0]-FLVoltage)*10/(Tempreture_Div[11][0]-Tempreture_Div[12][0])+Tempreture_Div[11][1];
  839.           }
  840.     else
  841.       {
  842.             FLVoltage=0;
  843.         return;
  844.            }
  845.     FLVoltage=Data;
  846.    
  847.     //偏移、增益修正公共函數(shù)
  848.         FLVoltage=AD_OffsetGain(FLVoltage,FL_Gain,FL_Offset);
  849. }
  850. //---------------捕獲中斷
  851. /*
  852. void Capture_Fuc() interrupt 6
  853. {
  854.   if(Capture_Couter==0)
  855.          {
  856.            Capture_1H=CCAP0H;
  857.      Capture_1L=CCAP0L;
  858.      Capture_Couter=Capture_Couter+1;
  859.          }
  860.   else
  861.          {
  862.      Capture_2H=CCAP0H;
  863.      Capture_2L=CCAP0L;
  864.            CCON=0X00;
  865.            Capture_Couter++;
  866.            EA=0;
  867.          }
  868.   CCF0=0;//清除中斷標(biāo)志
  869. }

  870. //mpu頻率檢測函數(shù)
  871. unsigned long Speed_Capture()
  872. {
  873. unsigned char Count0;
  874. unsigned char sample_counter;
  875. char cha_zhi;
  876. /////////////////////////////////////////////////////////////////////////
  877.   CMOD=0;
  878.   CCON=0;   //0X40啟動計數(shù)器  //0X00關(guān)閉計數(shù)器
  879.   CCAPM0=0X21;//上升沿下降沿捕獲,開捕獲中斷
  880.   IE_COPY=IE; //保存IE

  881. for(sample_counter=0;sample_counter<10;sample_counter++)
  882. {
  883.     /////////////////////////////////////////////////////////////////////////
  884.     CH=0;
  885.     CL=0;
  886.     T=5000;
  887.         Capture_Couter=0;
  888.     IE=0XC0;   //只打開捕獲中斷
  889.     CCON=0X40;//啟動計數(shù)器
  890.     ///////////////////////////////////等待捕獲中斷///////////////////////////
  891.     while(T--)
  892.      {
  893.        if(Capture_Couter==2)
  894.             {
  895.               EA=0;
  896.           Capture_Result=(Capture_2H-Capture_1H)*256+(Capture_2L-Capture_1L);
  897.           Capture_Result=1843200/Capture_Result;
  898.           Speed_Filter[sample_counter]=Capture_Result;
  899.                   CCON=0;
  900.           break;
  901.         }
  902.        if(T==1)
  903.             {
  904.          IE=IE_COPY; //保存IE
  905.          return 0;
  906.         }
  907.      }
  908. }
  909. Accelaration=0;
  910. Max=Min=Speed_Filter[0];
  911. for(Count0=0;Count0<10;Count0++)
  912. {
  913.    if(Max>Speed_Filter[Count0])
  914.        Max=Speed_Filter[Count0];
  915.    else if(Speed_Filter[Count0]<Min)
  916.        Min=Speed_Filter[Count0];
  917.    Accelaration+=Speed_Filter[Count0];                                                                                                                        
  918. }      
  919. Capture_Result=(Accelaration-Max-Min)>>3;
  920. cha_zhi=Capture_Result-Number_Fre;
  921. cha_zhi=fabs(cha_zhi);

  922. if(cha_zhi>20)
  923. {
  924.   Com_Counter--;
  925.   if(Com_Counter==0)
  926.   {
  927.         Com_Counter=6;
  928.     Number_Fre=Capture_Result;
  929.   }
  930.   Capture_Result=Number_Fre;
  931. }
  932. else
  933. {
  934.   Com_Counter=6;
  935. }
  936. IE=IE_COPY; //保存IE
  937. return Capture_Result;
  938. }
  939. //=====================================================================
  940. /*發(fā)動機轉(zhuǎn)速數(shù)據(jù)采集*/
  941. void ADC_GenSpeed(void)
  942. {
  943.         unsigned long frequency=0;
  944. // dengzhen 20100621
  945. if(XWORD[0x00AD]<2) //飛輪齒數(shù)為0
  946.   {
  947.     if(GenFrequency==0)
  948.       GenSpeed=0;                                                                                                        //飛輪齒數(shù)為零且發(fā)電頻率為零將速度設(shè)置為零
  949.     else
  950.       GenSpeed=GenFrequency*3;                                                //飛輪齒數(shù)為零且發(fā)電頻率不為零使用頻率換算轉(zhuǎn)速         
  951.   }
  952.   if(XWORD[0x00AD]>2) //飛輪齒數(shù)不為0
  953.   {
  954.      //frequency=Speed_Capture();
  955.                   if(frequency<31)   //mpu頻率低于31Hz 轉(zhuǎn)速強制為0
  956.                           {
  957.         GenSpeed=0;
  958.       }
  959.      else
  960.              {
  961.               GenSpeed=frequency*60/XWORD[0x00AD];
  962.               if(GenSpeed>4000) GenSpeed=0;
  963.             }
  964.    }
  965. }
  966. ////////////////////////////////////////////////數(shù)據(jù)采集/////////////////////////////////////////////////
  967. // ============= AD數(shù)據(jù)軟件濾波  =====================
  968. void filter_ET(unsigned int Temp1)
  969. {
  970.    unsigned int  new_value;
  971.    
  972.    new_value = Temp1;
  973.    if ( ( new_value - value_ET > 3 ) || ( value_ET - new_value > 3 ))
  974.            {
  975.       ETVoltage = value_ET;
  976.     }
  977.     else
  978.     {
  979.       ETVoltage = new_value;
  980.     }
  981. }
  982. void filter_OP(unsigned int Temp1)
  983. {
  984.    unsigned int new_value;
  985.    
  986.    new_value = Temp1;
  987.    if ( ( new_value - value_OP > 3 ) || ( value_OP - new_value > 3 ))
  988.            {
  989.       OPVoltage = value_OP;
  990.     }
  991.     else
  992.     {
  993.       OPVoltage = new_value;
  994.     }
  995. }
  996. void filter_FL(unsigned int Temp1)
  997. {
  998.    unsigned int new_value;
  999.    
  1000.    new_value = Temp1;
  1001.    if ( ( new_value - value_FL > 3 ) || ( value_FL - new_value > 3 ))
  1002.            {
  1003.       FLVoltage = value_FL;
  1004.     }
  1005.     else
  1006.     {
  1007.       FLVoltage = new_value;
  1008.     }
  1009. }

  1010. //------------數(shù)據(jù)采集--------------------//
  1011. void ADC_Collection(void)
  1012. {
  1013.     /*各種數(shù)據(jù)采集*/
  1014.   ADE_GenVoltage();            //發(fā)電機組各相的相電壓、線電壓
  1015.         ADE_GenCurrent();            //發(fā)電機組各相電流
  1016.         if (Dianji_flag==1)                //啟動成功后采集
  1017.         {
  1018.                 ADE_GenPF();                                //功率因數(shù)
  1019.                 ADE_GenKVA();             //發(fā)電機組各相的視在功率
  1020.                 ADE_GenKW();             //發(fā)電機組各相的有功功率
  1021.                 ADE_GenKVAR();             //發(fā)電機組各相的無功功率
  1022.         }
  1023.           ad_x++;
  1024.          if(ad_x==3)
  1025.           {
  1026.                         ADC_BV();                     //蓄電池組的電壓        
  1027.                         ADC_ET();                     //發(fā)動機溫度
  1028.                         value_ET=ETVoltage;
  1029.                         ADC_OP();                     //發(fā)動機油壓
  1030.                         value_OP=OPVoltage;
  1031.                         ADC_FL();                     //燃油容量
  1032.                         value_FL=FLVoltage;
  1033.                 }
  1034.                 if(ad_x==6)
  1035.                 {
  1036.                         ADC_ET();
  1037.                         filter_ET(ETVoltage);

  1038.                         ADC_OP();        
  1039.                         filter_OP(OPVoltage);
  1040.         
  1041.                         ADC_FL();
  1042.                         filter_FL(FLVoltage);
  1043.                    ad_x=0;        
  1044.                 }
  1045.                         
  1046.   ADE_GenFrequency();         //發(fā)電機組的頻率(使用ADE7758)的數(shù)據(jù)
  1047.   ADC_GenSpeed();      //if((LC_Model_BUF&0x04)==0x04)  //發(fā)電機組的轉(zhuǎn)速
  1048. }
  1049. //-----------end-------------//
復(fù)制代碼



評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2018-5-5 15:26 | 只看該作者
好資料 工程壓縮包能分享下嗎?沒有頭文件
回復(fù)

使用道具 舉報

板凳
ID:278236 發(fā)表于 2018-5-5 17:15 | 只看該作者
能分享protues仿真圖嗎
回復(fù)

使用道具 舉報

地板
ID:322688 發(fā)表于 2018-5-7 00:39 | 只看該作者
頭文件

Hardware.rar

2.27 KB, 下載次數(shù): 70, 下載積分: 黑幣 -5

頭文件

回復(fù)

使用道具 舉報

5#
ID:322688 發(fā)表于 2018-5-7 00:40 | 只看該作者
沒有protues仿真圖,是電路圖
回復(fù)

使用道具 舉報

6#
ID:403213 發(fā)表于 2018-9-27 16:01 | 只看該作者
親,問下你用過ADE7763這款芯片嗎? 和這個ADE7758類似。我這邊硬件都有,目前就是想知道ADE7763這款芯片如何測量能耗和功率的。 需要有個人幫我講一下原理,不需要你幫我寫任何代碼。如果可以,希望能提供一些指導(dǎo),謝謝! 我這邊可以付一定費用,如果感興趣的話,加我的QQ528115186聯(lián)系。
回復(fù)

使用道具 舉報

7#
ID:494823 發(fā)表于 2019-3-30 16:02 | 只看該作者
想看看電路圖
回復(fù)

使用道具 舉報

8#
ID:574118 發(fā)表于 2023-4-26 19:45 | 只看該作者
dengzhen11 發(fā)表于 2018-5-7 00:40
沒有protues仿真圖,是電路圖

能分享一下電路圖嗎
回復(fù)

使用道具 舉報

9#
ID:969272 發(fā)表于 2023-4-30 20:53 | 只看該作者
電路圖沒有?
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国外成人在线视频网站 | 国产精品成人一区二区三区 | 国产免费一级一级 | 久久精品亚洲精品国产欧美 | 亚洲444kkkk在线观看最新 | 亚洲国产欧美精品 | 免费成人毛片 | 一级在线| 色www精品视频在线观看 | 国产极品车模吞精高潮呻吟 | 国产毛片视频 | 涩涩99| 婷婷亚洲综合 | 国产精品爱久久久久久久 | 国产精品极品美女在线观看免费 | 青青艹在线视频 | 精品欧美乱码久久久久久 | 亚洲国产精品日韩av不卡在线 | 女人牲交视频一级毛片 | 免费在线日韩 | 天天操夜夜骑 | 午夜精品一区二区三区在线观看 | 老司机深夜福利网站 | 欧美国产日韩在线观看 | 精品国产一级 | 国产传媒毛片精品视频第一次 | 亚洲最大av | 高清视频一区 | 麻豆av电影网 | 亚洲精品视频免费观看 | 午夜三级视频 | 久久这里只有精品首页 | 巨大荫蒂视频欧美另类大 | 4h影视| 国产成人免费视频网站高清观看视频 | 亚洲啊v在线 | 成人网视频 | 中文精品视频 | 午夜精品网站 | 亚洲网站免费看 | 欧美一区二不卡视频 |