急:谁有用单片机测量交流电压的程序?

2020-02-06 09:46发布

谁有用单片机测量交流电压的程序?220V电压经过处理,电压抬高了2.5V,问各位大侠客有类似的经验。

我现在做的测量的很不准确。
电压一会是220,一会是250,一会是180,一会是012V
我很头疼?
下午大侠帮忙。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
98条回答
xcodes
2020-02-17 06:49
typedef struct _Current_
{
        uchar OffSet;                        //偏置
        uchar Channel;                        //通道
        uint Max;                                //峰值
        uint Min;                                //谷值
        float Gain;                                //增益
        uint ADCSum;                        //ADC和
        uint  ADCVar;                        //本次ADC值
        uint  ADCAver;                        //平均值
        uint RealVar;                        //实际电流值
        uchar ADC_Times;                //ADC_采样次数
}Current;

Current PhaseA,PhaseB,PhaseC;

void Get_Current_ADC_Var(Current *SelectPhase)
{
        uint Temp;
        Temp=Get_ADC_Result(SelectPhase->Channel);
       
        if(Temp<SelectPhase->Min)
        SelectPhase->Min=Temp;
        if(Temp>SelectPhase->Max)
        SelectPhase->Max=Temp;
        SelectPhase->ADCVar=Temp;
        SelectPhase->ADCSum+=Temp;
        SelectPhase->ADC_Times++;
        SelectPhase->ADCAver=(SelectPhase->ADCSum-SelectPhase->Max-SelectPhase->Min)/(SelectPhase->ADC_Times-2);//去除峰值,谷值 后得到平均值
         if(SelectPhase->ADCAver<=SelectPhase->OffSet)//小于偏置 为0
        {
                SelectPhase->ADCAver=0;
        }
        else
        {
                SelectPhase->ADCAver-=SelectPhase->OffSet;        //减去零偏
        }
        SelectPhase->RealVar=SelectPhase->ADCAver/SelectPhase->Gain;//乘以增益得到真实值
        SelectPhase->Max=0;//复位最大值
        SelectPhase->Min=0x3ff;//复位最小值
        SelectPhase->ADCSum=0;//复位ADC和
        SelectPhase->ADC_Times=0;//复位采样次数
}

一周热门 更多>