搜索
bottom↓
回复: 303

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

[复制链接]

出0入0汤圆

发表于 2010-6-4 12:44:47 | 显示全部楼层 |阅读模式
谁有用单片机测量交流电压的程序?220V电压经过处理,电压抬高了2.5V,问各位大侠客有类似的经验。

我现在做的测量的很不准确。
电压一会是220,一会是250,一会是180,一会是012V
我很头疼?
下午大侠帮忙。

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。

如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》

出0入0汤圆

 楼主| 发表于 2010-6-4 12:48:30 | 显示全部楼层
大家帮我看看可以吗?

出0入31汤圆

发表于 2010-6-4 12:52:09 | 显示全部楼层
泛!太宽泛了!别人想回答却不能!

出0入0汤圆

发表于 2010-6-4 14:04:35 | 显示全部楼层
一周波采样多少点?

出0入0汤圆

发表于 2010-6-4 14:38:03 | 显示全部楼层
测量方式等于没说,所以

出0入137汤圆

发表于 2010-6-4 14:47:10 | 显示全部楼层
我用7758加电压互感器测的,比较准

出0入0汤圆

发表于 2010-6-4 15:23:02 | 显示全部楼层
www.atmel.com,   AVR465

出0入0汤圆

发表于 2010-6-4 17:05:34 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-6-4 17:27:47 | 显示全部楼层
上图先

出0入0汤圆

发表于 2010-6-4 19:51:50 | 显示全部楼层
"电压一会是220,一会是250,一会是180,一会是012V
我很头疼? "

that's why it is called AC.

出0入4汤圆

发表于 2010-6-4 19:56:07 | 显示全部楼层
先要说说你的测量电路是什么样的。

出0入0汤圆

发表于 2010-6-4 20:17:08 | 显示全部楼层
回复【5楼】pulan
我用7758加电压互感器测的,比较准
-----------------------------------------------------------------------

计量芯片当然准了啊,

出0入0汤圆

发表于 2010-6-4 21:15:15 | 显示全部楼层
从楼主的意思看,是采用了采样方式的。个人认为,用采样方式,比较麻烦
我建议交流、降压、整流、滤波,再进行AD转换,软件简单,稳定,稍加滤波,就可以平稳

出0入0汤圆

 楼主| 发表于 2010-6-5 09:17:13 | 显示全部楼层
不好意思,现在把电路上传下子。

出0入0汤圆

 楼主| 发表于 2010-6-5 09:22:28 | 显示全部楼层

(原文件名:caiy1.JPG)

出0入0汤圆

 楼主| 发表于 2010-6-5 09:25:01 | 显示全部楼层
void        Deal_AD(void)
{
        unsigned        char        HI,Low,i;
        //static      uchar        k;
        unsigned        long        data,j,a,b;
        unsigned        int            c,m1,Adresult_avg;
        //float       m2;
//        double            m;

       
//        for(i=0;i<20;i++)                   // 20
//                AD_Reseve=AD_Sample;            // 读采样值,以免在计算时被新的采样值覆盖
       
        ///*       
        for(i=0;i<20;i++)                   // 读采样值,以免在计算时被新的采样值覆盖
                {
                        if(AD_Sample>512)
                        {
                                AD_Reseve=AD_Sample-512;
                        }
                       
                        else
                        {
                                AD_Reseve=512-AD_Sample;
                        }
                }
        //*/       
        data=0;                             // data先清零
        for(i=0;i<20;i++)                                        // 计算16[20]点采样值平方和
                {
                        HI=AD_Reseve>>8;                    // 高2位
                        Low=AD_Reseve&0xff;            // 低8位,隐形转换Low=AD_Reseve;
                        a=HI*HI;               
                        a=a<<16;
                        b=(HI*Low);
                        b=b<<9;
                        c=Low*Low;
                        j=a+c+b;
                    /* a为高2位,b为低8位,j=(a<<8+b)*(a<<8+b)= (a*a)<<16+2*(a<<8*b)+b*b=(a*a)<<16+(a*b)<<9+b*b.  */
                        data+=j;                    // 累加平方和
                }

        data=data*0.05;                                        // data除以20
       
        //data=262144;       
        //m=sqrt(data);                                        // 开平方根
        //m=576.123;
        //m=data*0.001953125;
        //data=2600;
       
        data=(data*10000);                  // 放大一万倍
        m1=sqrt_16(data);                   // m1是unsigned int类型数据,等于扩大了100倍
       
        //m2=m1*0.01;                       // 缩小一百倍
        //m1=Adresult;
        //Adresult=(unsigned int)m;             // 转换为整形数据
        //Adresult=(unsigned int)m2;             // 转换为整形数据
       
        Adresult=(m1*5)>>10;                    /* 将AD采样结果转换为两位数表示的值,即放大10倍,乘以满该度值5V,除以满刻度转换值10位(1024) */
/*

    //取采样值的平均值
        for(k=0;k<20;k++)
        {
                AD_Reseve_Average=Adresult;
                AD_Average_Point++;
        }

        if(AD_Average_Point>20)
        {
                AD_Average_Point=0;
                AD_Average_Finish_Flag=1;
        }
       
//=================================================
       
        for(k=0;k<20;k++)
        {
                AD_Average_Reseve_Progression+=Adresult;//累加AD采样值
                AD_Average_Point++;
        }

        if(AD_Average_Point>20)
        {
                AD_Average_Point=0;
                AD_Average_Finish_Flag=1;
        }
       
*/

//=====================================

/*
        for(k=0;k<20;k++)
        {
                AD_Average_Reseve_Progression+=Adresult;//累加AD采样值
                AD_Average_Point++;
                break;
        }

        if(AD_Average_Point>20)
        {
                k=0;
                AD_Average_Point=0;
                AD_Average_Finish_Flag=1;
        }
*/
        //for(k=0;k<20;k++)
        //{
                AD_Average_Reseve_Progression+=Adresult;//累加AD采样值
                AD_Average_Point++;
        //        break;
        //}

        if(AD_Average_Point>32)
        {
                //k=0;
                AD_Average_Point=0;
                AD_Average_Finish_Flag=1;
        }
        //Adresult=(((Adresult/10)<<4)&0xf0)+(Adresult % 10);/* 转换为带一位小数的BCD码实际值如25表示2.5V */
                                                       
}

/*         **************************************************************
**        函 数 名: AD_Average_Deal()
**        功    能:AD转换完成结果取平均值处理数据子程序
**        编    制: 大兵
**        日    期: 2010-5-29
****************************************************************** */
void AD_Average_Deal(void)
{
        //AD_Average_Reseve_End = (AD_Average_Reseve_Progression>>5);
        AD_Average_Reseve_End = (AD_Average_Reseve_Progression/32);
        AD_Average_Reseve_End_Transfer=AD_Average_Reseve_End;
        AD_Average_Reseve_Progression = 0;
        AD_Average_Reseve_End=0;
}

出0入0汤圆

 楼主| 发表于 2010-6-5 09:29:25 | 显示全部楼层
我没有采样0点

采样时,50HZ的波,一个周期采样20个点,定时器定时1个MS,正好采样20次。
程序处理部分在上面,用MCD仿真了,数据是有的。值在29-40之间。为什么都取平均值数据还是不稳定呢?

恳请大虾帮助我下,因为这个关过不去,就不能进行下面的工作。
现在就只能看看模拟部分。
晕啊

如果大家有经验的话,把程序上传下可以吗?

出0入0汤圆

 楼主| 发表于 2010-6-5 09:32:02 | 显示全部楼层
补充:
那个运放输出用数字万用表测量:

DC档时:2.5V

AC档时:0.17V

请问这个怎么测量呢?

这个电压时经过上面的电路处理得到的。

输入电压时220,线电压380

出0入0汤圆

 楼主| 发表于 2010-6-5 09:32:26 | 显示全部楼层
不知道我说明白了没有、

出0入0汤圆

 楼主| 发表于 2010-6-5 09:33:16 | 显示全部楼层
大家请不吝赐教

出0入0汤圆

发表于 2010-6-5 10:05:06 | 显示全部楼层
LZ如果只是为了测电压的话,12楼说的办法最好了。

出0入0汤圆

发表于 2010-6-5 10:14:56 | 显示全部楼层
补充:
那个运放输出用数字万用表测量:

DC档时:2.5V

AC档时:0.17V

请问这个怎么测量呢?

这个电压时经过上面的电路处理得到的。

输入电压时220,线电压380


2。5是用来检测过0点的,单片机最高是0-5V信号,2点5伏的直流电正对应交流电的0点。
0点17伏你是用万用表测的吗?如果是,这个是电压的有效值,你用单片机读出来的数据用你上面的程序来处理肯定是不对的!

出0入0汤圆

发表于 2010-6-5 11:09:51 | 显示全部楼层
本人刚渡过此难关
楼主慢慢弄吧

出0入0汤圆

 楼主| 发表于 2010-6-5 14:22:55 | 显示全部楼层
回复【24楼】xcodes
-----------------------------------------------------------------------

楼主的经验可以分享下吗?

出0入0汤圆

 楼主| 发表于 2010-6-5 14:24:47 | 显示全部楼层
这个阶段的真的很难受,下午24楼大公无私,帮下忙吧,我被这个东西搞的快疯了。没有办法了。

救救我吧。24楼

出0入0汤圆

发表于 2010-6-5 14:40:21 | 显示全部楼层
若要进步必先经过苦苦探索
仔细研读手册吧

出0入0汤圆

发表于 2010-6-5 14:46:52 | 显示全部楼层
唉,看了一下图是个一阶差分电路,把电压抬高。但这么简单的电路把电阻阻值都抹掉不必要吧。
你用均方根算法应该是可以的,另外建议一下软件上没有做滤波处理抗干扰能力很差的。

出0入0汤圆

 楼主| 发表于 2010-6-5 14:53:03 | 显示全部楼层
回复【22楼】qinhya
-----------------------------------------------------------------------

用万用表测量运放输出脚:
0.17V
是用万用表交流档位测量的,2.5V是用直流档测量的。

现在我用AD采样,通过均方根后,这个值还是不稳定。

取平均值以后还是不稳定,函数在上面的程序里。

我真的不知道该怎么做了?

试问,大侠有过这个方面的经验吗?请指教下可以吗?

24楼不太厚道呀。

出0入0汤圆

发表于 2010-6-5 14:54:19 | 显示全部楼层
哎,建议你用个电压互感器吧,

出0入0汤圆

 楼主| 发表于 2010-6-5 15:00:34 | 显示全部楼层
回复【28楼】huyunfei0923
-----------------------------------------------------------------------

这个不是我的原因,擦掉。

我现在采样的值很不稳定。经过程序处理后,电压一会是220,一会是250,一会是180,一会是12V

我现在的要求应该是得到一个比较稳定的采样值,并不一定测量经过运放处理的信号有效值是什么。


大侠说的,一阶差分原理能说下?我模拟不是很好!

请问一般采取上面样的滤波比较好,能不能提供个给参考下呢?

出0入0汤圆

 楼主| 发表于 2010-6-5 15:02:15 | 显示全部楼层
回复【27楼】xcodes
-----------------------------------------------------------------------

请问研读什么手册啊?

出0入0汤圆

发表于 2010-6-5 15:18:44 | 显示全部楼层
当然是单片机芯片的手册

出0入0汤圆

发表于 2010-6-5 15:40:49 | 显示全部楼层
你弄几个数字,简单的平均下,不能算叫滤波的。
交流采样如果不是做产品是非常简单的,不滤波。你的问题是你第一步保证你的采样准么,把你的采样的点用matlab还原一下波形,保证最最基本的采样比较准,然后用你的均方根就可以了,当然你这是对付恒定50hz的正弦信号是可以的。
像这个电路+这个程序也只能再试验室里玩玩,380V上有点干扰就搞不定,另外你的采样频率区区只有1k,采样定理告诉500HZ以上的信号你都采不到,而且对你的采样值干扰还比较大,你的1阶滤波搞不定,如果非常节省硬件成本,软件上得下功夫,设计个FIR滤波器是常规的做法。所以最省事的办法用了测量芯片最省事,这些问题他都设计好了。

出0入0汤圆

发表于 2010-6-5 15:44:45 | 显示全部楼层
另外说一下12楼的办法是最最不可取的。谐波干扰。

出0入0汤圆

 楼主| 发表于 2010-6-5 17:00:25 | 显示全部楼层
回复【34楼】huyunfei0923
-----------------------------------------------------------------------

刚开始搞,经验不足。RIR滤波器没有听过

matlab这个是什么?不了解。

出0入0汤圆

发表于 2010-6-5 17:02:23 | 显示全部楼层
回复【9楼】millwood0
"电压一会是220,一会是250,一会是180,一会是012v  
我很头疼? "
that's why it is called ac.

-----------------------------------------------------------------------

that's why it is called ac.
来顶 millwood 的这句话!

出0入0汤圆

发表于 2010-6-5 19:17:09 | 显示全部楼层
我和楼主差不多一样的算法, 差不多的电路.MCU是16位PIC的,只不过我一个周期20MS采样32次,累加和结果<<5,再开方 ,结果和万用表测相差不大,楼主硬件电路有问题没,比如说运放输入内阻太小,而你输入串的电阻太大,这们就要互感器了

出0入0汤圆

发表于 2010-6-6 01:34:00 | 显示全部楼层
"救救我吧。24楼"

fundamentally, you do not understand the nature of the problem you are dealing with.

Until and unless you do that, you will not find a sure cure for the problem.

出0入0汤圆

发表于 2010-6-6 02:16:49 | 显示全部楼层
迂腐
就用12楼的方法最精确,最安全,最稳定,最便宜,最容易实现

出0入0汤圆

发表于 2010-6-6 05:56:16 | 显示全部楼层
"就用12楼的方法最精确,最安全,最稳定,最便宜,最容易实现 "

google "ideal diode", or "precision rectifier".

出0入0汤圆

发表于 2010-6-6 08:51:45 | 显示全部楼层
这个电路不合适

出0入0汤圆

发表于 2010-6-6 15:16:03 | 显示全部楼层
用PT会好点,加双运放,一个放大,一个保持。1个周波20个点够了,校个直流偏置,零点与满度。

出0入0汤圆

发表于 2010-6-6 15:18:32 | 显示全部楼层
回复【36楼】jacky1982512 大兵
回复【34楼】huyunfei0923  
-----------------------------------------------------------------------
刚开始搞,经验不足。rir滤波器没有听过
matlab这个是什么?不了解。
-----------------------------------------------------------------------

FIR有限冲击响应滤波器,单片机上没必要搞这个,运算速度没那么快的,平均值滤波足矣

出0入0汤圆

 楼主| 发表于 2010-6-7 08:15:43 | 显示全部楼层
昨天试验发现新的问题:

我将要采样的信号不加在AD采样引脚上面,液晶屏还继续显示原来的数据。这个不知道是为什么呢?

我是用PIC877片子做的,是不是哪里设置不对呢?

我用数字万用表测AD0,电压有1.5V左右(要采样的电压我还没有加),大家说有可能是上面问题?

还是PIC本身就有的问题呢?

郁闷中!

出0入0汤圆

 楼主| 发表于 2010-6-7 08:17:44 | 显示全部楼层
回复【43楼】zhide99
-----------------------------------------------------------------------

楼主能留个联系方式,比如QQ。

下午能想你请教。

出0入0汤圆

 楼主| 发表于 2010-6-7 08:22:11 | 显示全部楼层
回复【38楼】odqqdo
-----------------------------------------------------------------------

请问大侠有QQ吗?这样说不方便。最近很郁闷,遇到的问题一直没有解决。

大侠犹如救命的稻草!


请问大侠能上传你的电路图和你的程序吗?跪求!

出0入0汤圆

发表于 2010-6-7 08:44:41 | 显示全部楼层
毕业设计贴?

出0入0汤圆

 楼主| 发表于 2010-6-7 08:56:41 | 显示全部楼层
回复【48楼】szduan
-----------------------------------------------------------------------

不是

出0入0汤圆

发表于 2010-6-7 09:19:13 | 显示全部楼层
平均化三,采用前5个周期的平均值显示,0.1s,显示频率足够高了,其实1s显示一次也够了

出0入0汤圆

 楼主| 发表于 2010-6-7 09:55:02 | 显示全部楼层
回复【38楼】odqqdo
-----------------------------------------------------------------------

大侠能上传你的电路吗?

出0入0汤圆

 楼主| 发表于 2010-6-7 10:01:07 | 显示全部楼层
回复【38楼】odqqdo
-----------------------------------------------------------------------

大侠能上传你的电路吗?
大侠能上传你的电路吗?
大侠能上传你的程序吗?

我想看看我的电路是不是真的有问题?

现在在AD0口,不加采样电压,电压也有1.5V,这个是什么原因?

去掉采样电压和不加采样电压显示一样。
都有值不稳定的情况。

出0入0汤圆

发表于 2010-6-7 10:18:26 | 显示全部楼层
如果不是毕业设计,或对波形有特殊要求,用我说的方法,12楼,很简单,如果还想滤波好些,可以做有源滤波,曾在工业控制中使用过,简单实用,就是反映稍微迟钝些,对速度没有严格要求的地方可以使用

如果严格要求波形,或客户专门要求,那就没有办法了,慢慢头痛吧

出0入0汤圆

 楼主| 发表于 2010-6-7 13:57:58 | 显示全部楼层
回复【38楼】odqqdo
-----------------------------------------------------------------------

大侠怎么不回复了呢?
电路,应该没有问题,这个应用在我们公司产品上都没有问题。

出0入0汤圆

 楼主| 发表于 2010-6-8 08:10:32 | 显示全部楼层
这些东西看手册有什么用啊,忽悠我是吧。

出0入31汤圆

发表于 2010-6-8 08:31:55 | 显示全部楼层
悬空的话不好判断了,最好接上输入,用示波器器看一下AD的输入端电压到底是什么样的波形;硬件部分没有问题了,那就说明是软件部分了,要么是哪里设置不对(比如采样率),要么是算法有问题。一步一步排除,很快就能搞定了。

出0入0汤圆

 楼主| 发表于 2010-6-8 08:40:05 | 显示全部楼层
回复【56楼】zchong
------------------------------------------------------------------

感谢你的回复。

出0入0汤圆

 楼主| 发表于 2010-6-8 15:26:42 | 显示全部楼层
波形知道是什么:是一正弦波被抬高了2.5V。就是这个波形。

出0入0汤圆

发表于 2010-6-8 16:17:34 | 显示全部楼层
不知道这个AD怎么用,我原来用51+ad1674(ad574)+ PT+运放;用中断方式去采样,才出来,不加滤波,直接打点显示,确实波形不太好,不知道楼主现在做的怎么样了,定时器方式也是可取的,如果没有对相位什么的有特殊要求,原来的东西是加了比较器,和倍频电路

出0入0汤圆

发表于 2010-6-8 18:05:23 | 显示全部楼层
请问楼主, 你的测试中, 固定AD输入在 1.0V, 2.0V , 5.0V 时, 程序能正确显示这些值吗?
如果不能, 修改程序, 直到能正确显示为止,
如果能,   试一下手动调压在 1.0V .. 2.0V 之间不断变化, 能否正确显示
电路图中, 有负压给到单片机吗?
另外你给出程序, 还不如给出程序框图(或编程思路说明), 别人更能理解你的思路

出0入0汤圆

发表于 2010-6-8 20:35:40 | 显示全部楼层
引用图片【楼主位】qing999
-----------------------------------------------------------------------

(原文件名:AD检测电路.JPG)












/*************************************************************************************/

void __attribute__((__interrupt__)) _ADCInterrupt( void )
{

        //  static    unsigned int i;
        unsigned int j;
        IFS0bits.T3IF = 0;
        IFS0bits.ADIF = 0;     //清中断标志

        i++;

        adresult[0]=ADCBUF0;   //2次RB4转换的结果和,AN4基准电压输入
        //adresult[0]=adresult[0]>>1;                    //平均值
        temp=adresult[0];
        adresult[1]=ADCBUF1;
        //adresult[1]=adresult[1]>>1;

        adresult[2]=ADCBUF2;



        adresult[3]=ADCBUF3;
        //adresult[3]=adresult[3]>>1;

        adresult[4]=ADCBUF4;

        if (adresult[2]>adresult[0])j= adresult[2]-adresult[0];     //
        else j= adresult[0]-adresult[2];  //计算绝对值

        if (da<j)da=j;     //取最大值

        Sum1=j*j+Sum1;
        if (i>=32)
        {
                Sum=Sum1;
                flag.bits.AD_ok=1;
                Sum1=0;
                youxiao=da*7;       //有郊值等于峰值的0.707倍.两种算法
                youxiao=youxiao/10;
                da=0;
                i=0;

                time1++;
                if (time1>=50)  {
                        time1=0;    //50HZ时间测试
                        time2++;
                }


        }

        /* 设置标志更新LCD */


}




/***************************************************************/

出0入0汤圆

发表于 2010-6-8 20:38:16 | 显示全部楼层
没发完,上面那个是AD中断程序
下面是主程序处理部份
                if (flag.bits.AD_ok)
                {
                        Sum=Sum>>5 ;   //除以32
                        result=(int)sqrt( Sum );
                        result-=2;    //修正结果误差
                        result=(result*625)>>7;    //乘以5000/1024
                        flag.bits.AD_ok=0;
                }


另外,你用万用表量下运放输入端交直流电压,和运放输出端交直流电压.

还有把AD输入端接2.5V直流,看程序算出的结果正确不,先要搞清楚是程序算法问题,还是硬件电路问题

出0入0汤圆

 楼主| 发表于 2010-6-9 08:42:33 | 显示全部楼层
回复【62楼】odqqdo
-----------------------------------------------------------------------

大侠无私啊,常来OURDEV网站吗?
还是就是晚上有空来此。

5V时,查AD寄存器采样正确;
0V时,查AD寄存器采样正确;
2.5V,暂时电压源还没有;没有测试

输入交直流,查AD寄存器采样值夜是有的,;

怎么测试这个采样点可对呢?好像楼上说过。

出0入0汤圆

 楼主| 发表于 2010-6-9 09:00:19 | 显示全部楼层
回复【62楼】odqqdo
-----------------------------------------------------------------------

result=(int)sqrt( Sum );

大侠PICC库函数可以用的吗?我测试过,除了0和1是对的,其他都不对。

大侠谈谈高见!

出0入0汤圆

 楼主| 发表于 2010-6-9 09:07:00 | 显示全部楼层
回复【61楼】odqqdo
-----------------------------------------------------------------------

TO: odqqdo
能解释下大侠上传的电路原理吗?

出0入0汤圆

发表于 2010-6-9 09:33:38 | 显示全部楼层
这个不复杂吧

1 220v输入的时候运放的输出是不是正确

没有输入的时候运放是不是输出直流2.5v,交流档量应该是0v

输入220用示波器看ad输入波形,对不对估计你一看就知道,不过照你这样的电路要不用电池供电的示波器,要不就弄个隔离变压器接示波器前头,没有就算了

2 AD采样是不是正确

采样直流0, 5v 2.5v, 不要说没有2.5的电压,这个不是问题,看采样数值是不是正确

3 采样间隔对吗?
   还有你采样间隔,用示波器看看是不是1ms,在AD中断中点个灯看看


4 检查一下数据波形 和 程序计算 结果
     输入220v,把数组里面的数据抄出来,画出来看是不是个正弦波的样子,matlab excel 还是坐标纸手画,自己看着办,正确的话用里面的数值算出有效值,看看和程序计算的是不是一样


另外 还有220输入时你用万用表交流档量0.17v,感觉小一些

出0入0汤圆

发表于 2010-6-9 09:38:46 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2010-6-9 13:32:53 | 显示全部楼层
回复【66楼】chenerbox
-----------------------------------------------------------------------

看了大侠的回复,感慨万千。

大侠说的又条有理。佩服啊。

要是本坛多几位这样的大侠。

世界变的更会美好!

出0入0汤圆

发表于 2010-6-9 14:02:12 | 显示全部楼层
我是16位的DSPIC30F的,C编译器是MPLABC30C,库函数开方的结果也是对的,PICC库函数开方对不对我试过,开方的结果要是不对,算出来还有意义吗。上面我的电路图也发过来了。

  我的运放接成的1倍放大,输入交流0—300MV,输出也是0—300MV,要是运放输出端超过300MV,结果就不对了,不知是我的运放LM358不好还是什么原因,因为超过300MV后直流电压也会低于2.5V

这是我一个业余没有最后完成的一个项目,对方没交定金,不知什么原因老板后来没联系我

出0入0汤圆

 楼主| 发表于 2010-6-10 08:08:09 | 显示全部楼层
回复【69楼】odqqdo
-----------------------------------------------------------------------

在此感谢楼主!正在研究中-------------------

出0入0汤圆

 楼主| 发表于 2010-6-10 13:43:44 | 显示全部楼层
高手们请大量的回帖,谈谈经验。

另外怎么找过零点? 测功率因数,视在功率,相位,等等的参数。

出0入0汤圆

 楼主| 发表于 2010-6-12 08:19:01 | 显示全部楼层
纳闷   ,怎么没有高手进了呢?

出0入0汤圆

 楼主| 发表于 2010-6-13 08:23:50 | 显示全部楼层
郁闷!

出0入0汤圆

 楼主| 发表于 2010-6-13 14:03:50 | 显示全部楼层
郁闷! 高手进来!

出0入0汤圆

发表于 2010-6-13 16:01:03 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2010-6-14 08:46:47 | 显示全部楼层
思考中!

出0入0汤圆

 楼主| 发表于 2010-6-17 13:59:31 | 显示全部楼层
新遇到了一个问题:如果用采样电压的方法去采样电流是不是可以呢?

电流信号和电压信号是一样的。

但是具体不知道怎么操作起来。

出0入0汤圆

发表于 2010-6-17 14:03:38 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2010-6-18 14:31:57 | 显示全部楼层
大家来讨论啊?
怎么不来了呢

出0入0汤圆

 楼主| 发表于 2010-6-19 08:24:43 | 显示全部楼层
为什么人气那么差?

出0入0汤圆

发表于 2010-6-19 08:40:41 | 显示全部楼层
电流信号,用CT,二次侧并上电阻,电阻两端就是电压了

出0入0汤圆

 楼主| 发表于 2010-6-21 09:42:36 | 显示全部楼层
大家好,如果1A时我采样是的AD值是AD1,那么2A时的AD值可以怎么表示呢?

2AD1  ?

怎么将锁得AD值,转换成实际的电流值?

出0入0汤圆

 楼主| 发表于 2010-6-21 09:45:31 | 显示全部楼层
AD1*K=1A

可以算出K值;

那么2A对应的AD值AD2;

AD2*K=2A吗?

这样是对的吗?

出0入0汤圆

 楼主| 发表于 2010-6-21 09:49:21 | 显示全部楼层
回复【83楼】jacky1982512
-----------------------------------------------------------------------

没有人回答:
自己来。

加入1A是采样的AD值是10

那么K=0.1

2A对应的AD值应该是20

20*0.1=2A

同理:30*0.1=3A
40*0.1=4A

依次类推

是这样吗?

各位大侠请指正!

出0入0汤圆

发表于 2010-6-21 09:57:29 | 显示全部楼层
看不懂呢怎么,

        
             -----        
-Iin------- |  R  |------------|
             _____             |
                               |         
__Iout_________________________|


R两端是电压吧,电压除以电阻就是电流了

出0入0汤圆

发表于 2010-6-21 10:02:02 | 显示全部楼层
变成电压,确定你的量程,每一路的额定量程和最大量程,采样电阻,和标准准源都很重要的

出0入0汤圆

发表于 2010-6-21 11:09:53 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-21 17:41:05 | 显示全部楼层
回复【84楼】jacky1982512
-----------------------------------------------------------------------

你的算法基本正确,  但要考虑是否有一个基值,  比如, 无电流时 AD=2, 电流1A时,AD=10,
则电流2A时 AD=18时,不清楚你的AD在0A时是否有非零值, 要考虑这种情况

出0入0汤圆

 楼主| 发表于 2010-6-22 13:04:24 | 显示全部楼层
回复【88楼】my2009
-----------------------------------------------------------------------

无电流时好像AD值是1。

怎么处理?

出0入0汤圆

 楼主| 发表于 2010-6-22 13:12:38 | 显示全部楼层
现在同标准电流测试:

1A时候,对应AD值是13

2A时候,26

3A------39

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

请问各位大侠,在各位做项目中,
都是怎么把AD值转换成要显示的电流值的呢?

出0入0汤圆

发表于 2010-6-22 14:45:02 | 显示全部楼层
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;//复位采样次数
}

出0入0汤圆

发表于 2010-6-22 14:51:35 | 显示全部楼层
以上是我从我的 程序里面扣出来的

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

出0入0汤圆

发表于 2010-6-22 15:54:41 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2010-6-22 23:14:25 | 显示全部楼层
回复【90楼】jacky1982512
-----------------------------------------------------------------------
PIC的AD测出的值,不完全是线性的,有一些误差,调整电路, 最大电流时, 尽量做到满刻度(即AD值接近1023),
这样可以减少误差, 我用PIC18F4520做的数控电源, 也是有一些误差,不过不算大, 你的电路, 3A电流, AD值才39, 太小了吧?
  你准备测多大的电流---> (3A/39)*1023=78A  ?

出0入0汤圆

 楼主| 发表于 2010-6-23 16:59:02 | 显示全部楼层
回复【92楼】xcodes
-----------------------------------------------------------------------

thans

出0入0汤圆

 楼主| 发表于 2010-6-24 08:43:42 | 显示全部楼层
回复【94楼】my2009
-----------------------------------------------------------------------

(3A/39)*1023=78A  ?

请问这个式子是什么意思?解释下可以吗?

实际测量的AD值怎么转换实际的电路值。
3A的AD值是39,我采的是电压的有效值。

出0入0汤圆

发表于 2010-6-24 08:49:45 | 显示全部楼层
取大于20mS的电压峰峰值,二分之根二

出0入0汤圆

发表于 2010-6-24 12:31:41 | 显示全部楼层
你得先把公式弄好了,把AD寄存器的值,采样电阻值,瞬时值,有效值值关系弄好了,也就是说,你有了公式,再去弄别的就比较好办。
具体到显示,你可以把计算所得浮点数显示出来就可以了。我没看你程序,我只是说我原来做的时候就是这么做的

出0入0汤圆

 楼主| 发表于 2010-6-24 16:43:12 | 显示全部楼层
回复【98楼】szduan
-----------------------------------------------------------------------

AD寄存器的值,采样电阻值,瞬时值,有效值值是什么关系?

出0入0汤圆

 楼主| 发表于 2010-6-24 16:45:03 | 显示全部楼层
回复【99楼】jacky1982512
-----------------------------------------------------------------------

有效值等于瞬时值0.707。与采样电阻,AD寄存器是什么关系呢?

出0入0汤圆

发表于 2010-6-24 20:02:35 | 显示全部楼层
MARK
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 00:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表