介绍一种简单的交流电压测量方法
通常,在测量220V或380V工频电压时,并不要求非常高的精度,一般的控制系统中,能精确到1%就足够了。在这里向大家介绍一种我设计的非常简单的测量方法,实践证明,该方法实用、可靠,成本低廉,完全能够满足一般监控系统的要求。硬件电路:仅用一个220V/6V-1W的普通电源变压器,经过全波整流,小电容滤波,滤除其高频干扰谐波,然后电阻分压成适合A/D转换的带有纹波的电压。直接连接到A/D输入脚。如果测量380V的电压,将两只220V的变压器串联使用即可。
软件设计:
1、先进行一次A/D转换,存入一个变量x中,作为参考值;
2、再进行一次A/D转换,与上次比较,如果小于x,说明正处于交流电压的下降沿,存入 x中;继续A/D转换,至到大于前次的转换值,说明已经进入了交流电压的上升沿,存入x;
3、继续A/D转换,如果转换结果大于x,存入x;直到转换结果小于x,说明x中保存的就是交流电压的最大值!
4、然后把x除以一个常数,得出你想显示出的值即可。完成一次测量。
这样完成一次测量最长时间是10ms,最短时间只需三次A/D转换时间。如果软件还执行其它操作,便转入其它子程序,之后继续1-4的步骤,将每次结果累加。
测量n次后,求算术平均值。也可以采取其它数字滤波的方法。
为避免测量0电压程序进入死循环,可以设置一个A/D转换次数计数器,转换一定次数之后退出。
校准电压可以在分压电阻中设置一个电位器,也可以软件校准。软件校准的方法:例如在380V点校准,把结果乘以380,再除以380,假如得382。那么,把除数变成382即可。
这样测量交流电压,在宽范围内的线性不是太好,主要原因是全波整流的二极管电压降是一个常数(约1.4V)。但针对220V或380V的电压测量来讲,电压波动不可能超过30%,在此范围内的线性误差还是可以接受的。我曾以一只0.5级的电压表与采取该方法的测量显示值相比较,基本一致。
附一段测量程序:
//电压测量程序
int mesure(void)
{
uchar m_cAdccount; //ADC转换次数
uint m_nAdcValue; //当前ADC转换值
uint m_nPreAdcValue;//前次ADC转换值
// enum condition eX;
//定义A口为输入,A0无上拉电阻,A1~A7有上拉电阻
DDRA=0X00;
PORTA=0XFE;
//有关变量初始化
m_nAdcValue=0;
m_nPreAdcValue=0;
//内部2.56V参考电压,0通道
ADMUX=0Xc0;
//使能ADC, 时钟:ck/32
ADCSRA=_BV(ADEN)|_BV(ADPS2)|_BV(ADPS0);
//开始第一次转换
ADCSRA|=_BV(ADSC);
//等待转换结束
while(ADCSRA&_BV(ADSC))
;
//读取第一次转换值
m_nAdcValue=ADCL;
m_nAdcValue|=(uint)(ADCH<<8);
for(m_nPreAdcValue=m_nAdcValue,m_cAdccount=0;
(m_nAdcValue<=m_nPreAdcValue)&&(m_cAdccount<100);
m_cAdccount++)
{
m_nPreAdcValue=m_nAdcValue;
ADCSRA|=_BV(ADSC);
//等待转换结束
while(ADCSRA&_BV(ADSC))
;
m_nAdcValue=ADCL;
m_nAdcValue|=(uint)(ADCH<<8);
}
for(m_nPreAdcValue=m_nAdcValue,m_cAdccount=0;
(m_nAdcValue>=m_nPreAdcValue)&&(m_cAdccount<100);
m_cAdccount++)
{
m_nPreAdcValue=m_nAdcValue;
ADCSRA|=_BV(ADSC);
//等待转换结束
while(ADCSRA&_BV(ADSC))
;
m_nAdcValue=ADCL;
m_nAdcValue|=(uint)(ADCH<<8);
}
if(g_nBaseVoltage==100)
m_nPreAdcValue=m_nPreAdcValue/4;
else
m_nPreAdcValue=m_nPreAdcValue/2;
return(m_nPreAdcValue);
}
-----此内容被lvhoujun于2005-10-17,22:55:32编辑过
-----此内容被lvhoujun于2005-10-17,23:11:29编辑过 的确是一个比较好的思路,请问楼主精度如何? 下一步正要做电子监控,还望楼主能提供些帮助。 能不能把电路图也提供出来,最好源程序详细一点,谢谢! 一般用大电容转换成直流效果也不错 这么复杂啊,你变压器输出直接整流滤波成一个直流电平,再分压进行AD转换不行吗? 楼主,有个顾虑:如果电压受到干扰比如工厂中大负荷电机,电压会发生畸变,再用这种方法还行吗? 哼哼,就这方法?你先量量给直流变频空调供电的线路上的波形看看,保证你眼珠子都掉下来。 楼上的看看搂主说的:在测量220V或380V工频电压时,并不要求非常高的精度,一般的控制系统中,能精确到1%就足够了。
搂主又没说什么条件都适合。 楼主,电路图能看看么?这样做大概花到多少钱呢? 楼主,你想过这种方法,你做出来的东西有多大体积吗?就几个变压器就不得了了! 互感器的体积其实不是很大的,长宽就2~3cm。 开始时我做项目也是这个方法,当市电波形并不是理想的波形,精度极其差,后来参考RMS的计算公式,采用10mS采样32个点来做RMS运算发现结果才可以精确到1%。 何必这么麻烦???
用电阻分压将交流信号分压并直流偏置1.27V
交流电压另外用三极管做一个过零脉冲
程序控制电压过零开始采样,每隔20ms/64间隔采样一次,累加。
最后该累加值/64就是平均值+1.27v 感觉结果不可能像楼主想象的精确到1%,也就能精确到10%。
交流电压测量是个很严谨的话题,普通的变压器、硅桥、电容又哪能担当的了??
尤其是变压器的误差非常大,还受负载影响,所以楼主的方法用来判断电压大致范围还可以,想显示出来的话就让人疑惑了。 都是高手呀!人家只是抛砖引玉一下,没有引来玉却引来你们一顿砖头。 不如直接用峰值电路,最好加一个同步信号(过零)
这种方法是基于波形不歧变的基础,用峰值*波形转换系数 不知道用真有效值芯片做出来会怎么样?我正要做一个工频多用表,计划使用AD637来试试 这个我以前就帮人设计时就用过,不过精度不高, 还是用运放做比较好 我研究过这种电路,我的电路只用了一个限流电阻和一个取样电阻,实现测量220V或380V工频电压,当市电波形理想时测量较准,当市电波形并不理想时,能高出30V.我认为12楼的做法值得参考,很想学一学啊。我的电路是最简线路。
我的产品非常小,不能用硬件实现有效值计算,哪位高手能提供软件有效值计算,非常感谢。 用互感器,我上次用了一个EI19的变压器原副边各2000匝。初级220通过100k电阻限流,副边接一个电阻采电压。就是变压器用作电流互感器,感觉性能比变压器性能高。最后出来的电压通过有效值算法计算出来。初步校准了一下,100V时偏低1V,270V时偏高2V。已经比较准了。 12楼的:关于rms算法能不能详细的讲解一下,好想了解呀! mark 挺新的一个思路呢,不过如果电源不干净谐波太多的话恐怕测不准哦。 mark 互感器+Low Cost, Low Power,True RMS-to-DC Converter+单片机自带AD,最简单可靠
点击此处下载 ourdev_571383.pdf(文件大小:256K) (原文件名:ad736.pdf)
书册是0-0.2V,实际上可以0-5V输入。 楼主方法似乎不可行,交流电经变压器后畸变严重,如电源不纯净误差更大。正如【14楼】 hankw所说,感觉结果不可能像楼主想象的精确到1%,也就能精确到10%。 mark 有这么好使吗 mark MARK 体积太大了,如果做一个自己用用还行!!! mark mark 应该就是搞了玩下还可以,真正做产品的时候,就。。。。 mark 【26楼】 hali
你成本太贵了,用AD737 用CS5463交流电所有参数都可以产量,价格便宜8元 【27楼】 cowboy
楼主方法似乎不可行,交流电经变压器后畸变严重,如电源不纯净误差更大。正如【14楼】 hankw所说,感觉结果不可能像楼主想象的精确到1%,也就能精确到10%。
同意这个说法,我做可控硅调压时试过这方法,因经过可控硅后电压波形畸变太大,测量出来的数值非常不准确,现在还在思索测量交流电什么方法比较好,有没有高手解答下。 在20ms时间内每1ms测一个数据,20个数据之和作为测量值,有电压平均值的意思 记号 mark 记号 mark 原边的220V或380V串电阻和电压互感器,串的电阻可以切换成二个档位,以适应测量不同电压。副边的输出如你所说,进行全波整流,分压后直接用AD采,采样频率最好到500Hz以上,平均两个半波能采到10个点,在单片机里可以获得电压最大值了,再计算10个点的平均值就能得到电压的有效值。 LS的平均值不能代表有效值,尽管实际上可能比较接近,但波型畸变严重时误差就显现。 学习! 变压器加上,体积得多大啊~~。还有电涌咋整。 太复杂了 学习! 学习! mark 用电压互感器,不知道谁用过 mark mark 一种容易实现的检测方法! 看到楼主这个方案我说两句。
关于全波整流二极管的压降,一个比较巧妙的解决方法是用一大电阻跨接在AD的地和变压器的公共端之间,这种方法直接从波形上就能看出结果。
我做的电网示波器和这个方案基本大同小异,包括沿触发的判断和最大值判断。
不过楼主的方法是用来做快速检测的,软件开销小很多。
该示波器所有开源资料如下:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3896204&bbs_page_no=1&bbs_id=9999
欢迎楼主拍砖~ 这种方案,几乎是没有实际应用价格。但用变压器二次侧取电压可取如果算法合适基本可以做2%,但交流采样最好用RMS,然后均方根。像测交测电最好用电压互感器,这个精度很高,可以轻松做到0.5级 记号。 mark mark Atmega128,ADC为差分输入方式,采样率10ksps,然后将采样的结果进行5点算术平均值方式平滑波形,再以5点导数方式求出波形上每一点的斜率,在斜率绝对值最大的地方为交流波形的过零点,找出2个过零点,即可计算出频率,多次平均可以计算出较为精确的频率。
由此可见1L的方法是到点子上了,但还是比较粗糙的。 mark 我来说个相对科学的方法,最简单的RMS方法。
按 1.6k 采样速率对正弦波采样,首次采样时间间隔为625us.对采样的32点找出过零点,然后对零点附件前一点和后一点进行插值计算,可以算出相对精确的频率。(楼上的采样10点按过零点直接算或者多次平均的方法,不可行,实际这样做几乎是没有精度可言的)。测频是算有效值的第一步,然后根据测得的频率调整采样时间间隔。,采够一个周波后即可按均方根算法。如果只算基波,可以用傅里叶变换,把实部和虚部算出来,然后求出幅值,这样会有滤波作用,抗干扰能力较好。
当然测交流电是很复杂的(我个人觉得),如果想更科学就要用到数字滤波器,进行fir冲击了,然后算出基波和各次谐波的幅值即可。一般我们只需要算基波即可。
半夜睡不着,说个思路。具体的网上可以查关键词: 交流采样 模拟测量输入端需要耦合差模和共模的浪涌,EFT,衰减震荡波这些简单的EMC测试,如果是直流采样的方法来测交流电我觉得很难通过这些实验的,举个最简单的例子,网内有大型马达,电感类的设备通断时产生的震荡波通过变压器进来后,直流采样我不知道该如何搞定,模拟滤波器,可能需要很高的阶数才可以。 http://cache.amobbs.com/bbs_upload782111/files_27/ourdev_537998.png
全波整流器和平均值滤波器 (原文件名:QQ截图未命名.png)
这个是以前做的一个电路,电路的功能是把交流变换成直流的有效值,电路变换的速度基本上能做到实时变换,220V/380V部分用一个电压互感器变换,电路的输出进入AD采集, 见过不要AD的
就三个IO口,实现电压的测量 唉,真是要无语了。交流电,就是要交流采样。为什么都喜欢弄些整流的变成直流来呢,如果不是做玩具或者实验室自己玩的话,测交流电请不要用直流采样。 16点交流采样,傅氏变换即可 mark mark! 我测220V交流电用一个106的贴片电阻加一个50K的多圈电位器,M48用8位AD,最大值255V,AD转换每次取得的值与上次值比较如果比上次 值大就保存为上次值,直到AD值比上次值小就说明上次值是最大值,比如AD值是100,用万用表测电压为220V,调电位器就可以将100调成220了.数字会上下跳一点,但对我是够用了. mark mark mark mark mark 好贴呀!!正在学习中!! 顶 这个速度能达到多少? 用真有效值芯片行不?看过这方面的文献,甚至可以测量畸变波形。。。。 MARK 回复【69楼】ppa8086xp
唉,真是要无语了。交流电,就是要交流采样。为什么都喜欢弄些整流的变成直流来呢,如果不是做玩具或者实验室自己玩的话,测交流电请不要用直流采样。
-----------------------------------------------------------------------
请问能不能解释一下,为什么不推荐直流采样呢? mark 回复【69楼】ppa8086xp
唉,真是要无语了。交流电,就是要交流采样。为什么都喜欢弄些整流的变成直流来呢,如果不是做玩具或者实验室自己玩的话,测交流电请不要用直流采样。
-----------------------------------------------------------------------
这位老大能否提供一个不整流,测交流电不是直流采样的方法,多谢 mark! 标记一下 如果把交流电叠加到稳定直流电上给单片机测量也行,我还是喜欢使用单个二极管整流方式测量 mark 这里真热闹,不错不错,围观并学习。 mark 那么交流电的电流如何检测 学习了 学习 mark 学习 记号 万用表上的交流挡是咋弄的 ? mark mark
页:
[1]
2