adc采样交流信号数据处理

要使用ADC采集交流电压并计算有效值,需要进行一些特定的步骤。以下是一个基本的流程:

  1. 采集交流电压:使用ADC将交流电压转换为数字量。在进行ADC采集之前,需要确保采样频率足够高,以便能够准确地采集交流信号的波形。

  2. 计算均方根(RMS)值:通过对采集到的数字量进行处理,可以计算出交流电压的有效值。有效值通常使用均方根(RMS)来表示,其计算公式如下:

    [ V_{\text{RMS}} = \sqrt{\frac{1}{N} \sum_{i=1}^{N} V_i^2} ]

    其中,( V_i ) 是每次采样得到的电压值,( N ) 是采样点的数量。

  3. 考虑波形的周期性:由于交流电压是周期性变化的,因此在计算有效值时需要考虑整个周期内的采样数据。通常可以采集多个周期的数据,并对这些数据进行处理以获得更准确的有效值。

一下为一个12位的adc采集电压值的代码

由于adc无法采集负电压,此处为把整个正弦波抬离了负半轴之后,把ADC值转化为电压值的代码

首先定义全局变量:

#define   CURRENT_ADC_OFFSET   2048   电压为0时adc的值

#define   Reference_voltage           3.3   //定义参考电压值

/*adc值转换为电流值,连续采样5000次,Cur_AdcValue为采集到的adc值*/
 void CurAdcValue_2_iRMS(uint32_t Cur_AdcValue,uint8_t i)
{	
		uint16_t CurrentAVG_Bak;

	   if(Cur_AdcValue > CURRENT_ADC_OFFSET)
		{
			Cur_AdcValue = Cur_AdcValue - CURRENT_ADC_OFFSET;
		}

		else
		{
			Cur_AdcValue = CURRENT_ADC_OFFSET - Cur_AdcValue;
		}
		
		Cur_AdcValue *= Cur_AdcValue;
		CurrentSquSum += Cur_AdcValue;
		CurrentSampleCnt ++;
		
		if((CurrentSampleCnt % 1000)==0)
		{
			CurrentAVG += CurrentSquSum/1000;
			CurrentSquSum = 0;
			
			if(CurrentSampleCnt == 5000)
			{
				CurrentSampleCnt = 0;
				CurrentAVG = CurrentAVG/5;
				CurrentAVG = sqrt(CurrentAVG);
				CurrentAVG_Bak = CurrentAVG;
                
                i_RMS[i] = Reference_voltage*(CurrentAVG - CURRENT_ADC_OFFSET)/2048;//通过RMS值计算电流值,并存在全局变量i_RMS中
							
	            printf("L%d Current is %.1f A,CurrentAVG ADC Value is %d @Full=4096\r\n",i+1,i_RMS[i],CurrentAVG_Bak);				

			}	
		
		}
       
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值