⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ade7758_dx.c.svn-base

📁 一个基于UCOS/2操作系统开发的实际产品(电力负控)的代码
💻 SVN-BASE
📖 第 1 页 / 共 4 页
字号:
	                        }
	   key_z = 0;
	   	   
	   for (phase=0;phase<3;phase++)	//第一步:去除偏移 
	       {
				if (phase==0){reg1 = AIRMS; reg2 = AIRMSOS;curr[8]=0x41;}
				if (phase==1){reg1 = BIRMS; reg2 = BIRMSOS; curr[8]=0x42;}
				if (phase==2){reg1 = CIRMS; reg2 = CIRMSOS; curr[8]=0x43;}
												
				spi_buf[0] = 0;		//恢复为初始状态 
				spi_buf[1] = 0;
	    		Write_ADE7758(reg2,2); 
	    	
	    	    temp = 0;	
	    	    bs   = 1;	    			    		
	    		key_z = 0;
	    		while (key_z != KEY3)
	    		   {  
	    		      key_z = 0;
	    		      while (key_z == 0) 
	    		         {
	    		            Process_PCF8574(); 
	    		            Clrwdt();
	    		            
	    		            ww = Read_Reg(reg1);
	    		      		ww = (15*ww*1000)/Current_AD_Ref;	
	    		      		sum = ww;
	    		      		 Xiao_Biao2();
		             
	    		         }
	    		      
	    		      if (key_z == KEY4)
	    		         {
	    		            if (bs==1)  bs = 10;
	    		                  else if (bs==10)  bs = 20;
	    		                            else if (bs==20)  bs = 1;
	    		         }
	    		      if (key_z == KEY1)
	    		        {
	    		      	    if(bs==1)
	    		      	    {
	    		      	    	temp += 1*bs;
	    		      	    }
	    		      	    else
	    		      	    {
	    		      	        temp += 2*bs;	
	    		      	    }
	    		        }	    		      
	    		        if (key_z == KEY2) 
	    		        {
	    		      	    if(bs==1)
	    		      	    {
	    		      	      temp -= 1*bs;  	
	    		      	    }
	    		      	    else
	    		      	    {
	    		      	    	temp -= 2*bs;
	    		      	    }
	    		        }
	    		        
	    		      Save_Reg(temp,reg2,(phase*2+IRMSOS_ADDR));		//保存IRMSOS值
	    		   }
	  	   }
       
	   //---第二步:调整增益------
	   /* 理论显示 1.50000A 
	    *----------------------------- */
	   Beep(1000);
   Beep(1000);
        
       Xiao_Biao12();					//显示电流 2步 相
	   
	   while(key_z != KEY4) {Process_PCF8574(); 
	                           Clrwdt();}
	   key_z = 0;
	    
	   for (phase=0;phase<3;phase++)	
	       {
				if (phase==0){reg1 = AIRMS; reg2 = AIGAIN;curr[8]=0x41;}
				if (phase==1){reg1 = BIRMS; reg2 = BIGAIN; curr[8]=0x42;}
				if (phase==2){reg1 = CIRMS; reg2 = CIGAIN; curr[8]=0x43;}
								
				spi_buf[0] = 0;		//恢复为初始状态 
				spi_buf[1] = 0;
	    		Write_ADE7758(reg2,2);
	    		
	    		temp = 0;	
	    	    bs   = 1;		    			    		
	    		key_z = 0;
	    		while (key_z != KEY3)
	    		   {  
	    		      key_z = 0;
	    		      while (key_z == 0) 
	    		         {
	    		            Process_PCF8574(); 
	    		            Clrwdt();
	    		            
	    		            ww = Read_Reg(reg1);
	    		      		ww = (15*ww*1000)/Current_AD_Ref;	
	    		      		sum = ww;
	    		      		Xiao_Biao2();
	    		         }
	    		      
	    		      if (key_z == KEY4)
	    		         {
	    		            if (bs==1)  bs = 10;
	    		                  else if (bs==10)  bs = 20;
	    		                            else if (bs==20)  bs = 1;
	    		         }
	    		      if (key_z == KEY1)
	    		        {
	    		      	    if(bs==1)
	    		      	    {
	    		      	    	temp += 1*bs;
	    		      	    }
	    		      	    else
	    		      	    {
	    		      	        temp += 2*bs;	
	    		      	    }
	    		        }	    		      
	    		        if (key_z == KEY2) 
	    		        {
	    		      	    if(bs==1)
	    		      	    {
	    		      	      temp -= 1*bs;  	
	    		      	    }
	    		      	    else
	    		      	    {
	    		      	    	temp -= 2*bs;
	    		      	    }
	    		        }
	    		      Save_Reg(temp,reg2,(phase*2+IGAIN_ADDR));		//保存IGAIN值
	    		   }
	       } 
     Beep(1000);
/**********************
**名称: 标定电压
 	   **第一步:去除偏移 
	   **		1、测试条件:C相电压200V;三相电流0A;三相功率因数1.0
	   **		2、测试条件:AB相电压200V;三相电流0A;三相功率因数1.0
	   **第二步:调整增益
	   ** 		测试条件:三相电压200V;三相电流0A;三相功率因数1.0	       
***********************/	
//------------------
//理论显示 0.00000V
//------------------
		Beep(1000);
	Dian_Ya11();	//显示电压 1步
        
        while(key_z != KEY4) {Process_PCF8574(); Delay_Ms_Stop(100); Clrwdt();}
	    key_z = 0;
 
       for (phase=0;phase<3;phase++)	//第一步:去除偏移 
	       {
			if (phase==0){reg1 = AVRMS; reg2 = AVRMSOS; curr[8]=0x41;}
			if (phase==1){reg1 = BVRMS; reg2 = BVRMSOS; curr[8]=0x42;}     
			if (phase==2){reg1 = CVRMS; reg2 = CVRMSOS; curr[8]=0x43;}
			if (phase==2)
			{
				   Beep(500);				   					   		Change_Vol();	
				   while(key_z != KEY4) {Process_PCF8574(); Delay_Ms_Stop(100); Clrwdt();}
	   			   key_z = 0; //等待切换电压
			}
				
								
				spi_buf[0] = 0;		//恢复为初始状态 
				spi_buf[1] = 0;
	    		Write_ADE7758(reg2,2); 
	    		
	    		temp = 0;	
	    	    bs   = 1;		    			    		
	    		key_z = 0;
	    		while (key_z != KEY3)
	    		   {  
	    		      key_z = 0;
	    		      while (key_z == 0) 
	    		         {
	    		            Process_PCF8574(); 
	    		            Clrwdt();
	    		            
	    		            ww = Read_Reg(reg1);
	    		      		ww = (220*ww*10000)/Voltage_AD_Ref;	
	    		      		sum = ww;	    		      		
	    		      		Xiao_Biao2();
	    		         }		
	    		            
	    		      if (key_z == KEY4)
	    		         {
	    		            if (bs==1)  bs = 10;
	    		                  else if (bs==10)  bs = 20;
	    		                            else if (bs==20)  bs = 1;
	    		         }
	    		      if (key_z == KEY1)
	    		        {
	    		      	    if(bs==1)
	    		      	    {
	    		      	    	temp += 0.5*bs;
	    		      	    }
	    		      	    else
	    		      	    {
	    		      	        temp += 1*bs;	
	    		      	    }
	    		        }	    		      
	    		        if (key_z == KEY2) 
	    		        {
	    		      	    if(bs==1)
	    		      	    {
	    		      	      temp -= 0.5*bs;  	
	    		      	    }
	    		      	    else
	    		      	    {
	    		      	    	temp -= 1*bs;
	    		      	    }
	    		        }
	    		      Save_Reg(temp,reg2,(phase*2+VRMSOS_ADDR));		//保存VRMSOS值
	    		   }
	       }
       
       //---第二步:调整增益------
       //理论显示 220.00V
	   //-------------------------
	    Beep(1000);
		Dian_Ya2();			//显示电压 2步
        
        while(key_z != KEY4) {Process_PCF8574(); 
                              Clrwdt();}
	    key_z = 0;
            
	   for (phase=0;phase<3;phase++)	
	       {
				if (phase==0){reg1 = AVRMS; reg2 = AVRMSGAIN; curr[8]=0x41; }
				if (phase==1){reg1 = BVRMS; reg2 = BVRMSGAIN;  curr[8]=0x42;}
				if (phase==2){reg1 = CVRMS; reg2 = CVRMSGAIN;  curr[8]=0x43;}				
							
				spi_buf[0] = 0;		//恢复为初始状态 
				spi_buf[1] = 0;
	    		Write_ADE7758(reg2,2); 
	    		
	    		temp = 0;	
	    	    bs   = 1;			    			    		
	    		key_z = 0;
	    		while (key_z != KEY3)
	    		   {  
	    		      key_z = 0;
	    		      while (key_z == 0) 
	    		         {
	    		            Process_PCF8574(); 
	    		            Clrwdt();
	    		            
	    		            ww = Read_Reg(reg1);
	    		      		ww = (220*ww*10000)/Voltage_AD_Ref;
	    		      		sum = ww;
	    		      		;      
	    		      		Dian_Ya();
	    		         }		
	    		            
	    		      if (key_z == KEY4)
	    		         {
	    		            if (bs==1)  bs = 10;
	    		                  else if (bs==10)  bs = 20;
	    		                            else if (bs==20)  bs = 1;
	    		         }
	    		      if (key_z == KEY1)
	    		        {
	    		      	    if(bs==1)
	    		      	    {
	    		      	    	temp += 0.5*bs;
	    		      	    }
	    		      	    else
	    		      	    {
	    		      	        temp += 1*bs;	
	    		      	    }
	    		        }	    		      
	    		        if (key_z == KEY2) 
	    		        {
	    		      	    if(bs==1)
	    		      	    {
	    		      	      temp -= 0.5*bs;  	
	    		      	    }
	    		      	    else
	    		      	    {
	    		      	    	temp -= 1*bs;
	    		      	    }
	    		        }
	    		      Save_Reg(temp,reg2,(phase*2+VRMSGAIN_ADDR));		//保存VRMSGAIN值
	    		   }
	       } 
	  Beep(1000);     
/**********************
**名称: 标定有功电量
 	   **第一步:条件:220V,1.5A,COS0 
	   
***********************/

	     Beep(1000);
		
	 YG1();			//显示  有功电能  1步
		 
		 while(key_z != KEY4) {Process_PCF8574(); 
		                         //Delay_Ms_Stop(100); 
		                         Clrwdt();}
	     key_z = 0;

         spi_buf[0] = 0;		//恢复为初始状态 
		 spi_buf[1] = 0x3F;
	     Write_ADE7758(APCFDEN,2); 	

	     spi_buf[0] = 0;
	     spi_buf[1] = 0x0A;
	     Write_ADE7758(APCFNUM,2);		
	      
		 for (phase=0;phase<3;phase++)	
	       {
				if (phase==0){reg1 = AWG; reg2 = 0x04; curr[8]=0x41;}
				if (phase==1){reg1 = BWG; reg2 = 0x08; curr[8]=0x42;}
				if (phase==2){reg1 = CWG; reg2 = 0x10; curr[8]=0x43;}
												
				spi_buf[0] = 0;		//恢复为初始状态 
				spi_buf[1] = 0;
	    		Write_ADE7758(reg1,2); 
	    		
	    		spi_buf[0] = reg2;					//3P4L
				Write_ADE7758(COMPMODE,1);
	    		
	    		if (phase==0)
	    		   {
	    		      sum = Read_Period(0,2);
					  if (sum == 0) sum = 1;
					  temp = 3409 * 0x3F / sum;///1/3409=3200*1.5*220/1000/3600 
					  if (temp>0xFFF) temp = 0xFFF;  			//12bit
					  Save_Reg(temp,APCFDEN,APCFDEN_ADDR);		//保存APCFDEN值
	    		   }
	    		
	    		temp = 0;	
	    	    bs   = 1;		    			    		
	    		key_z = 0;
	    		while (key_z != KEY3)
	    		   {  
	    		      key_z = 0;
	    		      while (key_z == 0) 
	    		         {
	    		            Process_PCF8574(); 
	    		            Clrwdt();
	    		            
	    		            sum = Read_Period(0,2);
	    		            Dian_Neng();
	    		         }		
	    		      if (key_z == KEY4)
	    		         {
	    		            if (bs==1)  bs = 10;
	    		                  else if (bs==10)  bs = 20;
	    		                            else if (bs==20)  bs = 1;
	    		         }
	    		      if (key_z == KEY1)
	    		        {
	    		      	    if(bs==1)
	    		      	    {
	    		      	    	temp += 1*bs;
	    		      	    }
	    		      	    else
	    		      	    {
	    		      	        temp += 2*bs;	
	    		      	    }
	    		        }	    		      
	    		        if (key_z == KEY2) 
	    		        {
	    		      	    if(bs==1)
	    		      	    {
	    		      	      temp -= 1*bs;  	
	    		      	    }
	    		      	    else
	    		      	    {
	    		      	    	temp -= 2*bs;
	    		      	    }
	    		        }
	    		      Save_Reg(temp,reg1,(phase*2+WG_ADDR));		//保存WG值 
	    		   }
	       } 
  
/**********************
**名称: 标定有功电量
 	   **第二步:条件:220V,1.5A,COS=0.8C 
***********************/	
		 Beep(1000);
	YG2();    			//显示  有功电能  2步
		 
		 while(key_z != KEY4) {Process_PCF8574(); Delay_Ms_Stop(100); Clrwdt();}
	     key_z = 0;
		 
	   for (phase=0;phase<3;phase++)	
	       {
				if (phase==0){reg1 = APHCAL; reg2 = 0x04; curr[8]=0x41;}
				if (phase==1){reg1 = BPHCAL; reg2 = 0x08; curr[8]=0x42;}
				if (phase==2){reg1 = CPHCAL; reg2 = 0x10; curr[8]=0x43;}
			
				spi_buf[0] = 0;		//恢复为初始状态 
				Write_ADE7758(reg1,1); 
	    		
	    		spi_buf[0] = reg2;					//3P4L
				Write_ADE7758(COMPMODE,1);
				
				temp = 0;	
	    	    bs   = 1;			    			    		
	    		key_z = 0;
	    		while (key_z != KEY3)
	    		   {  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -