打印

交流电压的有效值

[复制链接]
16258|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hufa123|  楼主 | 2011-10-8 15:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
以上是交流采样电路,用AD采样一周期40个点,后求40个点平方和后开方的办法,求有效值为10V精确度还好,在0.5飘动,200V是在飘动范围为10V,这样电路能精确到0.5吗?飘动这么厉害是软件问题吗?芯片PIC16F747,帮小弟想想办法
沙发
兰天白云| | 2011-10-8 16:07 | 只看该作者
是不是数据不稳,时大时小?
1:首先保证待测的信号稳定才能判断你仪表测量是否稳定
2:软件还要有滤波功能

使用特权

评论回复
板凳
NE5532| | 2011-10-8 17:10 | 只看该作者
想想你到底想检测啥东西,你做的是个四不像的东西。

使用特权

评论回复
地板
yewuyi| | 2011-10-8 20:04 | 只看该作者
不谈电路,只谈软件:
1、40点的采集稍微少了点,最好至少最到128点以上
2、要有过零判断,否则采集的波形不是一个周期内的。
3、如果用747的内部ADC的话,ADC的分辨率和精度都远远不够

使用特权

评论回复
5
hufa123|  楼主 | 2011-10-8 20:23 | 只看该作者
我用校正源输出的波形是很稳定的,数据时大是小,在一定的范围内波动,楼上说AD的精度不够,哪些型号的AD能满足我现在的需求?10位AD精度还不行吗?:)

使用特权

评论回复
6
hufa123|  楼主 | 2011-10-8 20:26 | 只看该作者
2、要有过零判断,否则采集的波形不是一个周期内的。
过零判断? 我是一个周期20MS内测40个点的,电路上我也采用了上抬了2.5V,输入的电压0-200V交流,送进AD的波形应该是过零的

使用特权

评论回复
7
e掾木| | 2011-10-8 21:34 | 只看该作者
仅仅需要有效值的话是不需要过0检测的,直接取N个点计算啊。

使用特权

评论回复
8
ljm041128| | 2011-10-9 09:19 | 只看该作者
如果不需要计算相位,频率,。。。其他一些交流参数,过零点就不重要了。AD至少要12Bit的,220V,要精确到0.1,至少要1/1000的精度,所以要12Bit的AD.

使用特权

评论回复
9
yewuyi| | 2011-10-9 12:19 | 只看该作者
如果不需要计算相位,频率,。。。其他一些交流参数,过零点就不重要了。AD至少要12Bit的,220V,要精确到0.1,至少要1/1000的精度,所以要12Bit的AD.
ljm041128 发表于 2011-10-9 09:19


假设AD取样了64个点数值,请给出你有效值计算的公式!


;P

使用特权

评论回复
10
virtualtryon| | 2011-10-9 13:04 | 只看该作者
本帖最后由 virtualtryon 于 2011-10-9 13:07 编辑

不用过零判断,而是要同步采样,采样率与信号频率要同步.
如果周期变化大的话,要检测信号周期,假设采样率为N,应当严格控制ADC时间间隔为T/N,否则会因为不同步引入误差.
采样个数应当取2^N个,PIC16没有硬件乘除法,做乘除法运算太慢了.LZ的程序应该没办法做到连续几个周期平均,MCU忙不过来.
另外要减去直流分量.
如果第i个AD采样值为ADi,则算法为
m=sqrt(ΣADi^2-N*(ΣADi)^2)/N
u=m*k+b
k,b为标定系数.

使用特权

评论回复
11
yewuyi| | 2011-10-9 14:13 | 只看该作者
不用过零判断,而是要同步采样,采样率与信号频率要同步.
如果周期变化大的话,要检测信号周期,假设采样率为N,应当严格控制ADC时间间隔为T/N,否则会因为不同步引入误差.
采样个数应当取2^N个,PIC16没有硬件乘除法,做乘 ...
virtualtryon 发表于 2011-10-9 13:04


公式给出就说明问题了。
PIC16没有乘除法器,靠MCU用累加实现,速度太慢,而且只有一个中断入口,没有中断优先级,用定时触发ADC的方式,因为中断响应的问题,会给T/N带来一定的误差,这个误差很可能就超过0.5了。

使用特权

评论回复
12
hufa123|  楼主 | 2011-10-9 19:17 | 只看该作者
如果第i个AD采样值为ADi,则算法为
m=sqrt(ΣADi^2-N*(ΣADi)^2)/N
i个AD值平方和-N*(i个AD值的和的平方),后在开平方/N?
公式对吗?
m=sqrt(Σ(ADi-Ubase)²)/N
Ubase为直流分量

这两个哪个对?

楼上说的T/N误差,是不是说AD的没处理完,下个中断就来了?我中间的间隔时间有500US

使用特权

评论回复
13
hufa123|  楼主 | 2011-10-9 19:19 | 只看该作者
m=sqrt((Σ(ADi-Ubase)²)/N)是这样的 最后开平方根

使用特权

评论回复
14
virtualtryon| | 2011-10-9 21:13 | 只看该作者
本帖最后由 virtualtryon 于 2011-10-9 21:15 编辑

m=sqrt(Σ(ADi-Ubase)²)/N
m=sqrt(ΣADi^2-N*(ΣADi)^2)/N
上面两个公式结果是一样的,原因在于int(Asinwt)0-T为0,
即ΣADi*Ubase=0
用下面式子的好处在于,可以取当前周期的平均值而不必用上一个周期的平均值.

使用特权

评论回复
15
hufa123|  楼主 | 2011-10-10 15:32 | 只看该作者
用下面式子的好处在于,可以取当前周期的平均值而不必用上一个周期的平均值. ...
virtualtryon 发表于 2011-10-9 21:13

不是一个周期算一次平均值吗?为什么用前一周期的平均值? 第一个式算的时候也没用前一个周期的平均值吗?
楼上的请您耐心的讲解下,谢谢大师!

使用特权

评论回复
16
virtualtryon| | 2011-10-10 16:12 | 只看该作者
本帖最后由 virtualtryon 于 2011-10-10 16:19 编辑

一般是在A/D中断里面计算的,在一个周期计算之前先把AD^2的和以及AD的和清零,在每个中断程序里面,
把AD^2以及AD加入到和中去,一个周期完成以后直接用上面的公式去计算。
这样不用把AD值缓存下来,而且这么大的运算量分解到每一个中断的时间片中去了,可以做到每个周期都计算到。但是如果用第一个公式,必须用到上一个周期的平均值,而第二个公式就不用了。
你的算法可能是先把AD值缓存下来,一个周期结束以后,再计算。这样计算的时间非常长而且要很大的缓存。
不过用PIC16系统的计算时间会非常长,必定错过一些周期,而且在中断中算也来不及。应该要先缓存。
可以用当前周期的平均值。
中断中计算,第一个公式: 上一个周期的平均值,不需要大的缓存空间。
中断中计算,第二个公式:当前周期的平均值,不需要大的缓存空间。
中断缓存,主程序计算,第一个公式:需要大的缓存空间,当前周期的平均值,两个循环,一个循环先计算平均值
中断缓存,主程序计算,第二个公式:需要大的缓存空间,当前周期的平均值,一个循环,AD的和以及平方在同一个循环计算。

使用特权

评论回复
17
兰天白云| | 2011-10-10 16:46 | 只看该作者
楼主既没给出速度要求也没给出精度要求

正弦波的有效值与平均值有固定的关系,只要得到平均值就可算出有效值
正弦波的有效值与最大值也有固定的关系,只要得到最大值就可算出有效值

平均值和最大值都比有效值好测,为什么舍近求远?

使用特权

评论回复
18
virtualtryon| | 2011-10-11 08:57 | 只看该作者
本帖最后由 virtualtryon 于 2011-10-11 08:59 编辑

TO 17 楼:
只有没有高次谐波的信号,也就是单一频率的正弦信号,有效值和平均值才有固定的关系。关系为pi/sqrt(2)
而引入有效值的目的就是为了测量各种复杂波形所产生的功率。
如果电路中有变频器或者可控硅等非线性器件,那么平均值和有效值的关系肯定不固定了.再用平均值去转换误码就非常大了.

使用特权

评论回复
19
hufa123|  楼主 | 2011-10-13 16:40 | 只看该作者
TO 楼上的老师
我的程序思路如下,大家给我拍拍
计算50HZ的交流电压,每个周期取40个点,间隔时间为500US,中断后进行AD采样,并且把AD的值进行减去直流分量后平方,并且与前次结果累加,直到累加了40个点,进行一次有效值运算。
程序的大概思路就这样,计算出来的值就是时大时小,范围在10V。不知是电路上的问题还是软件的算法有问题?

使用特权

评论回复
20
virtualtryon| | 2011-10-13 22:35 | 只看该作者
你用PIC单片机吗?哪一个系列的,时钟频率多少,你的计算是在每一次中断中进行的,还是在中断缓存AD值,在一个周期完成后进行平方和,求平均开方运算?
如果是在中断进行的计算,PIC16系统的单片机因为没有硬件乘法,可能在500us内完不能平方和的运算。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

186

主题

393

帖子

2

粉丝