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

2020-02-06 09:46发布

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

我现在做的测量的很不准确。
电压一会是220,一会是250,一会是180,一会是012V
我很头疼?
下午大侠帮忙。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
97条回答
lsw0136
1楼-- · 2020-02-17 02:03
mark
my2009
2楼-- · 2020-02-17 03:52
回复【84楼】jacky1982512
-----------------------------------------------------------------------

你的算法基本正确,  但要考虑是否有一个基值,  比如, 无电流时 AD=2, 电流1A时,AD=10,
则电流2A时 AD=18时,不清楚你的AD在0A时是否有非零值, 要考虑这种情况
jacky1982512
3楼-- · 2020-02-17 04:42
 精彩回答 2  元偷偷看……
jacky1982512
4楼-- · 2020-02-17 06:34
现在同标准电流测试:

1A时候,对应AD值是13

2A时候,26

3A------39

就这样,到了4.7A就不成线性了。

请问各位大侠,在各位做项目中,
都是怎么把AD值转换成要显示的电流值的呢?
xcodes
5楼-- · 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;//复位采样次数
}
xcodes
6楼-- · 2020-02-17 07:53
以上是我从我的 程序里面扣出来的

去基本上是 去除 峰值 谷值 后得到平均值 然后减去零偏 然后乘以增益 就得到实际值

一周热门 更多>