cap_test.c

来自「ARM7 lpc2132 利用快速傅里叶算法实现电容测量功能源代码」· C语言 代码 · 共 68 行

C
68
字号


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

#define FOUT 1000
#define PI 3.1415926535897932384626433832795
#define WOG 2*PI*FOUT

float ftemp[1024];

void cap_test(void)
{	char requst[64];  float Vol_Zx,Zx,cap; short i;
	static short ref_r=1;
	if(turn_flags==FINISH_TURN){
		for(i=0;i<1024;i++){
			ftemp[i]=timer0_getdata.Zx_data[i];
		}
		fft(ftemp,1024,0);
		Vol_Zx=ftemp[10];
		
		for(i=0;i<1024;i++){
			ftemp[i]=timer0_getdata.R0_data[i];
		}
		fft(ftemp,1024,0);
		switch(ref_r){
			case 1: Zx=Vol_Zx/(ftemp[10]/100); break; //unit R
			case 2: Zx=Vol_Zx/(ftemp[10]); 	   break; //unit K
			case 3: Zx=Vol_Zx/(ftemp[10]/10);  break; //unit K
			case 4: Zx=Vol_Zx/(ftemp[10]/100); break; //unit K
		}
		
		cap=1/(Zx*WOG) * 1000000; //unit nf
		if(ref_r==1)
			sprintf(requst,"S%d Z:%0.4f capacitance test result: %0.3fuF\r\n",ref_r,Zx,cap);
		 else if(cap<1.0)
		 	sprintf(requst,"S%d Z:%0.4f capacitance test result: %0.3fpF\r\n",ref_r,Zx,cap*1000);
		 else
		 	sprintf(requst,"S%d Z:%0.4f capacitance test result: %0.3fnF\r\n",ref_r,Zx,cap);		 	
		if(ref_r==1 && Zx>500){//>500R 换档
			SEL_CAP_1K;
			ref_r=2;
		}else if(ref_r==2 && Zx>5){
			SEL_CAP_10K;  //>5K 换10K档
			ref_r=3;
		}else if(ref_r==3 && Zx>50){
			SEL_CAP_100K; //>50K 换100K档
			ref_r=4;
		}else if(ref_r==4 && Zx<50){
			SEL_CAP_10K;   //<50K 换10K档
			ref_r=3;
		}else if(ref_r==3 && Zx<5){
			SEL_CAP_1K;  //<5K 换1K档
			ref_r=2;
		}else if(ref_r==2 && Zx<0.5){
			SEL_CAP_100R; //<500R 换100R档
			ref_r=1;
		}
		
		to_host(requst);
		turn_flags=WAIT_TURN;
	}	
}

⌨️ 快捷键说明

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