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

📄 dmm_r_v_lr_test.c

📁 ARM7 lpc2132 利用快速傅里叶算法实现电容测量功能源代码
💻 C
📖 第 1 页 / 共 2 页
字号:


//////////////////////////////////////////
#include "config.h"
#include "pin.h"
#include "data.h"
#include "function.h"
#include "max134cpl.h"
#include <math.h>	
#include <stdio.h>

float vol_det(void)
{
	unsigned short k,i,dat,cnt; int max134_register; float tdat,sum;
	tdat=0;
{
		/*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_1); //select 40V档
		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);

		DelayNS(20);
}
	for(k=0;k<2;k++){
		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");		
		}
		if(sum > 25000 || sum < -25000)
			return sum;
	    if(k==1){
		    /*registor 3*/
			max134_register=0;
			max134_register |=(MAX134_EXT_AC);
			max134_register |=(MAX134_DRIVER_SENSE); //10-0到10-4 & current source
			hostTodmm(3,max134_register);
			DelayNS(20);
		}
	}
	return sum;
}


void S_res_test(void)
{
	unsigned short chg,i,dat,cnt; int org_S_range,max134_register; float tdat,sum,zero;
	char requst[64]; static S_range;
	
	tdat=0;
	if(tst_run.s_res_run == STOP){
		N200V_OFF;DelayNS(5); MAIN_POWER_ON; VOL_TEST;
		tdat=vol_det();
		if(tdat>25000 || tdat < -25000){
			sprintf(requst,"err! s_resistor test result: %0.2fmV\r\n",tdat);
			to_host(requst);
			return;
		}
		N200V_OFF;DelayNS(5); MAIN_POWER_ON; S_RES_TEST;
	
		tst_run.s_res_run=RUNNING;
		tst_run.l_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_1); //select 400R档
		hostTodmm(2,max134_register);	
		
		/*registor 3*/
		max134_register=0;
		max134_register |=(MAX134_DC);
	//	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);

		/*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=4;
		DelayNS(20);
	}
	sum=0;
	for(i=0;i<10;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/10);
				for(dat=0;dat<100;dat++){
					if((IO0PIN&DMM_DATA_READY) == 0)
						break;
					DelayNS(1);
				}		
				if(dat==100){
					UART0_SendStr("err1!\r\n");
				}			
				break;
			}
		}	
		if(cnt==55000)	
			UART0_SendStr("err2!\r\n");
	}
	tdat=sum;//save (Rx+a)/Ro
	/*range of voltage*/
	chg=0;
	org_S_range=S_range;
	if(tdat<0) tdat*=-1;
	if((tdat > 40000) && (S_range==1)) {
		S_range=2; chg=1;
	}else if((tdat >40000) && (S_range==2)){
	 	S_range=3; chg=1;
	}else if((tdat >40000) && (S_range==3)){
	 	S_range=4; chg=1;
	}else if((tdat < 3000) && (S_range==4)){
	 	S_range=3; chg=1;
	}else if((tdat < 3000) && (S_range==3)){
	 	S_range=2; chg=1;
	}else if((tdat < 1000) && (S_range==2)){
	 	S_range=1; chg=1;
	}
	tdat=sum;//还原符号
/*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("err3!\r\n");
					}							
					break;
				}
			}
			if(cnt==55000)	
				UART0_SendStr("err4!\r\n");		
		}
	}
	tdat-=sum; //result = (Rx+a)/Ro - (a/Ro)
	
	tdat/=50000;
	max134_register=0;
	switch(S_range){
		case 1: max134_register |=(MAX134_10_4);    break; //unit R
		case 2: max134_register |=(MAX134_10_3);    break; //unit K
		case 3: max134_register |=(MAX134_10_2);    break; //unit K
		case 4: max134_register |=(MAX134_10_1);    break; //unit K
	}
	hostTodmm(2,max134_register);
	switch(org_S_range){
		case 1:  tdat*=500;   break; //unit R
		case 2:  tdat*=10;    break; //unit K
		case 3:  tdat*=100;   break; //unit K
		case 4:  tdat*=1000;  break; //unit K
	}
	
	/*restore to read (Rx+a)/Ro*/
	{
		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(S_range==1){
//		if(sum > -140 && sum<140)
//			tdat+=3.19;
		tdat-=0.75; //tdat+=2.2;
		sprintf(requst,"S %d %0.2f s_resistor test result: %0.1fR\r\n",S_range,sum,tdat);
	}else if(S_range==4){
	 	if(tdat>999) tdat = -1;
	 	sprintf(requst,"S %d %0.2f s_resistor test result: %0.2fK\r\n",S_range,sum,tdat); 
	}else if(S_range==2){
		sprintf(requst,"S %d %0.2f s_resistor test result: %0.3fK\r\n",S_range,sum,tdat);
	}else
	  	sprintf(requst,"S %d %0.2f s_resistor test result: %0.2fK\r\n",S_range,sum,tdat);
	to_host(requst);
	if(chg)
		DelayNS(20);
}












void vol_test(int ac_ndc)
{
	unsigned short chg,i,dat,cnt; int max134_register, org_S_range; float tdat,sum,zero,Volt;
	char requst[64]; static S_range;
	tdat=0;
	if(tst_run.vol_run==STOP){
		tst_run.vol_run=RUNNING;
		tst_run.s_res_run=STOP;
		tst_run.l_res_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_4); //select 4000V档
		hostTodmm(2,max134_register);	
		
		/*registor 3*/
		max134_register=0;
		if(ac_ndc==DC_TEST){
			max134_register |=(MAX134_DC);
		}else{
			max134_register |=(MAX134_EXT_AC);
		}

⌨️ 快捷键说明

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