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

📄 dmm_r_v_lr_test.c

📁 ARM7 lpc2132 利用快速傅里叶算法实现电容测量功能源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
		max134_register |=(MAX134_DRIVER_SENSE); //10-0到10-4 & current source
	//	max134_register |=(MAX134_OHMS_R2);
		hostTodmm(3,max134_register);

		/*registor 3*/
		max134_register=0;
	//	max134_register |=(MAX134_CURRENT);
	//	max134_register |=(MAX134_X2);
	//	max134_register |=(MAX134_READ_ZERO);
	//	max134_register |=(MAX134_FILTER_ON);
		hostTodmm(4,max134_register);
	
		S_range=1;
		DelayNS(20);
	}
	
	
	
	sum=0;
	for(i=0;i<5;i++){
		for(cnt=0;cnt<55000;cnt++){
			if(IO0PIN&DMM_DATA_READY){
				tdat=(unsigned short)dmmTohost(4)*10000 + (unsigned short)dmmTohost(3)*1000 + \
						(unsigned short) dmmTohost(2)*100  + (unsigned short)dmmTohost(1)*10 + \
							(unsigned short)dmmTohost(0);
				if(tdat>50000) tdat-=100000;
				dat=dmmTohost(5);
				sum+=(tdat/5);
				for(dat=0;dat<100;dat++){
					if((IO0PIN&DMM_DATA_READY) == 0)
						break;
					DelayNS(1);
				}		
				if(dat==100){
					UART0_SendStr("err5!\r\n");
				}			
				break;
			}
		}
		if(cnt==55000)	
			UART0_SendStr("err6!\r\n");		
	}
	tdat=sum;
	/*range of voltage*/
	if(tdat<0) tdat*=-1;
	chg=0;
	org_S_range=S_range;
	if((tdat < 3000) && (S_range==1)) {
		S_range=2; chg=1;
	}else if((tdat <3000) && (S_range==2)){
	 	S_range=3; chg=1;
	}else if((tdat <3000) && (S_range==3)){
	 	S_range=4; chg=1;
	}else if((tdat > 40000) && (S_range==4)){
	 	S_range=3; chg=1;
	}else if((tdat > 40000) && (S_range==3)){
	 	S_range=2; chg=1;
	}else if((tdat > 40000) && (S_range==2)){
	 	S_range=1; chg=1;
	}
	tdat=sum;//store test result
/*read zero*/
	{
		max134_register=0;
	//	max134_register |=(MAX134_CURRENT);
	//	max134_register |=(MAX134_X2);
		max134_register |=(MAX134_READ_ZERO);
	//	max134_register |=(MAX134_FILTER_ON);
		hostTodmm(4,max134_register);
		DelayNS(15);
		sum=0;
		for(i=0;i<5;i++){
			for(cnt=0;cnt<55000;cnt++){
				if(IO0PIN&DMM_DATA_READY){
					zero=(unsigned short)dmmTohost(4)*10000 + (unsigned short)dmmTohost(3)*1000 + \
							(unsigned short) dmmTohost(2)*100  + (unsigned short)dmmTohost(1)*10 + \
								(unsigned short)dmmTohost(0);
					if(zero>50000) zero-=100000;
					dat=dmmTohost(5);
					sum+=(zero/5);
					for(dat=0;dat<100;dat++){
						if((IO0PIN&DMM_DATA_READY) == 0)
							break;
						DelayNS(1);
					}		
					if(dat==100){
						UART0_SendStr("err7!\r\n");
					}			
					break;
				}
			}
			if(cnt==55000)	
				UART0_SendStr("err8!\r\n");		
		}
	}
	tdat-=sum; //result = (Vx+a)/Vref - (a/Vref)
	if(ac_ndc==AC_TEST)
		tdat=tdat*2;
	Volt=tdat;
	/*registor 3*/
	max134_register=0;
	if(ac_ndc==DC_TEST){
		max134_register |=(MAX134_DC); 
	}else{
		max134_register |=(MAX134_EXT_AC);
	}
	max134_register |=(MAX134_DRIVER_SENSE); //10-0到10-4 & current source
//	max134_register |=(MAX134_OHMS_R2);
	hostTodmm(3,max134_register);
	
	max134_register=0;
	switch(S_range){
		case 1: max134_register |=(MAX134_10_4);break;
		case 2: max134_register |=(MAX134_10_3);break;
		case 3: max134_register |=(MAX134_10_2);break;
		case 4: max134_register |=(MAX134_10_1);break;
	}
	hostTodmm(2,max134_register);
	
	switch(org_S_range){
		case 1: tdat=(Volt*2.0001)/10;break; //1M && 10M
		case 2: tdat=(Volt*1.001)/100;break; //100K && 10M
		case 3: tdat=(Volt*1.01)/1000;break; //10K && 10M
		case 4: tdat=(Volt*1.1)/10000;break; //1K && 10M
	}
	/*restore to read (Vx+a)/Rref*/
	{
		max134_register=0;
		//	max134_register |=(MAX134_CURRENT);
		//	max134_register |=(MAX134_X2);
		//  max134_register |=(MAX134_READ_ZERO);
		//	max134_register |=(MAX134_FILTER_ON);
		hostTodmm(4,max134_register);
	}
	if(ac_ndc==AC_TEST)
		  sprintf(requst,"S %d t_v %0.2f ac_voltage test result: %0.2fV\r\n",S_range,Volt,tdat);
	 else 
	 	  sprintf(requst,"S %d t_v %0.2f dc_voltage test result: %0.2fV\r\n",S_range,Volt,tdat);
	to_host(requst);
	if(chg)
		DelayNS(20);
}


void L_res_test(void)
{
	unsigned short chg,i,dat,cnt; int org_S_range,max134_register; float Tdat,tdat,sum,zero,Irx,Iro;
	char requst[64]; static S_range;
	tdat=0;
	if(tst_run.l_res_run==STOP){
		tst_run.l_res_run=RUNNING;
		tst_run.s_res_run=STOP;
		tst_run.vol_run=STOP;
		/*registor 0*/
		hostTodmm(0,0); //register 0
		
		/*registor 1*/
		max134_register=0;
	//	max134_register |=(MAX134_10_0);
		max134_register |=(MAX134_FILTER_SHORT);
	//	max134_register |=(MAX134_DIVIDE_5);//结果/5;
		max134_register |=(MAX134_50HZ);//50Hz
		hostTodmm(1,max134_register);
		
		/*registor 2*/
		max134_register=0;
		max134_register |=(MAX134_10_2); //select 4V档
		hostTodmm(2,max134_register);	
		
		/*registor 3*/
		max134_register=0;
		max134_register |=(MAX134_DC);
		max134_register |=(MAX134_DRIVER_SENSE); //10-0到10-4 & current source
	//	max134_register |=(MAX134_OHMS_R2);
		hostTodmm(3,max134_register);

		/*registor 3*/
		max134_register=0;
	//	max134_register |=(MAX134_CURRENT);
	//	max134_register |=(MAX134_X2);
	//	max134_register |=(MAX134_READ_ZERO);
	//	max134_register |=(MAX134_FILTER_ON);
		hostTodmm(4,max134_register);
		L_RES_RANGE10K;
		S_range=1;
		DelayNS(20);
	}
	sum=0;
	for(i=0;i<5;i++){
		for(cnt=0;cnt<55000;cnt++){
			if(IO0PIN&DMM_DATA_READY){
				tdat=(unsigned short)dmmTohost(4)*10000 + (unsigned short)dmmTohost(3)*1000 + \
						(unsigned short) dmmTohost(2)*100  + (unsigned short)dmmTohost(1)*10 + \
							(unsigned short)dmmTohost(0);
				if(tdat>50000) tdat-=100000;
				dat=dmmTohost(5);
				sum+=(tdat/5);
				for(dat=0;dat<100;dat++){
					if((IO0PIN&DMM_DATA_READY) == 0)
						break;
					DelayNS(1);
				}		
				if(dat==100){
					UART0_SendStr("err9!\r\n");
				}			
				break;
			}
		}
		if(cnt==55000)	
			UART0_SendStr("err10!\r\n");		
	}
	Tdat=tdat=sum;
	/*range of voltage*/

/*read zero*/
	{
		max134_register=0;
	//	max134_register |=(MAX134_CURRENT);
	//	max134_register |=(MAX134_X2);
		max134_register |=(MAX134_READ_ZERO);
	//	max134_register |=(MAX134_FILTER_ON);
		hostTodmm(4,max134_register);
		DelayNS(15);
		sum=0;
		for(i=0;i<5;i++){
			for(cnt=0;cnt<55000;cnt++){
				if(IO0PIN&DMM_DATA_READY){
					zero=(unsigned short)dmmTohost(4)*10000 + (unsigned short)dmmTohost(3)*1000 + \
							(unsigned short) dmmTohost(2)*100  + (unsigned short)dmmTohost(1)*10 + \
								(unsigned short)dmmTohost(0);
					if(zero>50000) zero-=100000;
					dat=dmmTohost(5);
					sum+=(zero/5);
					for(dat=0;dat<100;dat++){
						if((IO0PIN&DMM_DATA_READY) == 0)
							break;
						DelayNS(1);
					}		
					if(dat==100){
						UART0_SendStr("err11!\r\n");
					}			
					break;
				}
			}
			if(cnt==55000)	
				UART0_SendStr("err12!\r\n");		
		}
	}
	zero=sum;
	tdat-=sum; //result = (Vx+a)/Vref - (a/Vref)
	
//	
	if(Tdat<0) Tdat*=-1;
	chg=0;
	org_S_range=S_range;
	if((Tdat < 3000) && (S_range==1)) {
		S_range=2; chg=1;
		L_RES_RANGE100K;
	}else if((Tdat <3000) && (S_range==2)){
	 	L_RES_RANGE1000K;
	 	S_range=3; chg=1;
	}else if((Tdat <3000) && (S_range==3)){
	 	L_RES_RANGE10000K;
	 	S_range=4; chg=1;
	}else if((Tdat > 35000) && (S_range==4)){
	 	S_range=3; chg=1;
	 	L_RES_RANGE1000K;
	}else if((Tdat > 35000) && (S_range==3)){
	 	S_range=2; chg=1;
	 	L_RES_RANGE100K;
	}else if((Tdat > 35000) && (S_range==2)){
	 	S_range=1; chg=1;
	 	L_RES_RANGE10K;
	}
	
	/* Rx=((200-Vr)/Vr)xR0 */
	tdat=(tdat*(1.1))/10000; /*I(Rx)=I(Ro) + I(R10M)=Vt/Ro + I(R10M)  Rx=200V/((I(Ro)+ I(R10M))=200V/(I(Ro)+1/10*I(Ro)*/
	if(tdat<0) 
		tdat=0;
	switch(org_S_range){/*0.002-2.2M shuld be chaged in V3*/
		case 1:  Iro=((tdat / 0.01)); 	break; //0.01M
		case 2:  Iro=((tdat / 0.1));  	break; //0.1M
		case 3:  Iro=((tdat / 1));   	break; //1M
		case 4:  Iro=((tdat / 10));   	break; //10M
	}
	Irx=Iro*1*(1+0.1); /*current of 1M//10M*/
	if(Irx<0.00001)
		Irx=0.00001;
	sum=tdat;
	tdat=(200-Iro*1)/Irx;
	if(tdat>2000) tdat=-1;
	/*restore to read (Vx+a)/Rref*/
	{
		max134_register=0;
		//	max134_register |=(MAX134_CURRENT);
		//	max134_register |=(MAX134_X2);
		//  max134_register |=(MAX134_READ_ZERO);
		//	max134_register |=(MAX134_FILTER_ON);
		hostTodmm(4,max134_register);
	}
	sprintf(requst,"S %d vol:%0.2f l_resistor test result: %0.2fM\r\n",S_range,sum,tdat);
	to_host(requst);
	if(chg)
		DelayNS(20);
}

⌨️ 快捷键说明

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