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

2020-02-06 09:46发布

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

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

感谢你的回复。
jacky1982512
2楼-- · 2020-02-12 19:06
波形知道是什么:是一正弦波被抬高了2.5V。就是这个波形。
szduan
3楼-- · 2020-02-12 21:11
 精彩回答 2  元偷偷看……
my2009
4楼-- · 2020-02-12 22:33
请问楼主, 你的测试中, 固定AD输入在 1.0V, 2.0V , 5.0V 时, 程序能正确显示这些值吗?
如果不能, 修改程序, 直到能正确显示为止,
如果能,   试一下手动调压在 1.0V .. 2.0V 之间不断变化, 能否正确显示
电路图中, 有负压给到单片机吗?
另外你给出程序, 还不如给出程序框图(或编程思路说明), 别人更能理解你的思路
odqqdo
5楼-- · 2020-02-13 03:35
引用图片【楼主位】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 */


}




/***************************************************************/
odqqdo
6楼-- · 2020-02-13 06:58
没发完,上面那个是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直流,看程序算出的结果正确不,先要搞清楚是程序算法问题,还是硬件电路问题

一周热门 更多>