历史上的今天
今天是:2025年04月01日(星期二)
2020年04月01日 | 单片机ADC采样算法----有效值采样法
2020-04-01 来源:eefocus
在使用单片机ADC功能采样数据时,通常情况下用平均值计算就够了,但是在计算功率时就需要用有效值来计算真正做功的情况。如果是标准的正弦波的话,正弦波的峰值是有效值得1.414倍,可以通过峰值来计算有效值。但是实际应用中波形往往会发生畸变,如果按照1.414这个比例计算的话,误差往往会比较大。所以必须通过计算正弦波的面积来求有效值。
有效值又叫均方根值,对数据的平方和取平均再开方所计算出来的值。所以通常情况下采用的计算方法是:将所有值平方求和,求其均值,再开平方,就得到均方根值。用公式表达的话就是这样。

下面就通过C代码来实现这个公式:
//取均方根值
u16 get_rms1( void )
{
static u16 cnt = 0;
static u32 value = 0, sum = 0;
static u16 rms = 0;
if( cnt < 128 )
{
value = ReadVol_CH3(); //读取采样值
sum += value * value; //计算平方和
cnt++;
}
if( cnt == 128 )
{
rms = ( u16 )sqrt( sum / 128 ); //平方和取平均,再开方
cnt = 0;
sum = 0;
}
return rms;
}
每采样一个数据后,先对这个数据取平方,然后计算累加和,采样一定数量数据之后,对累加的平方和求平均值,然后再开方。
下来通过函数发生器产生一个50HZ的标准正弦波,最大值为4V,最小值为0V。通过单片机采样并计算此正弦波的有效值,将计算的结果通过串口发送出来,并在串口波形软件上显示采样的值。

这是示波器测的波形。

这是串口波形软件显示的单片机实时采样正弦波的有效值,通过蓝色的数据曲线可以看到,采样的有效值还是比较稳定的,计算出的有效值是520,单片机的ADC是10位分辨率,2^10=1024,单片机为5V供电,所以有效值为 520/1024*5=2.5390625V,示波器测出的有效值为2.50V,单片机通过ADC采样计算的有效值与示波器测试的有效值误差为0.039V。
看来通过这种算法采样出来的有效值还是比较准确的。
史海拾趣
|
一个LED的N种玩法(三)----General Timer 一个LED的N种玩法 (三)---General Timer Author: chenzhufly Email: chenzhufly@126.com 2010-4-29 写完两篇终于等到timer上场了,前面已经有网友提议可以用timer来玩LED,那好吧,在这里我来感受一下timer是怎么操作LED的。Come on… ...… 查看全部问答> |
|
10MBd Digital Optocoupler for High Insulation Voltage Applications Avago Technologies announced the release of a 10MBd Digital Optocoupler with high Insulation Voltage ratings for power supply and high-power motor control applic ...… 查看全部问答> |
|
6440/6443 SD controller DMA传输异常 自己写了个简单的SD Driver,从SD外设以DMA方式读取数据时,碰到个奇怪的问题。 block size是512字节,传输的block是1024个block,DMA buffer boundary 是512KB。 对于所使用的DMA buffer,如果使用config.bib中Reserve的RAM,则可以正常进行DMA传 ...… 查看全部问答> |
|
LCD12864 带字库的。 在我对液晶屏初始化时,设置到“进入设定点”这一步,发送命令字0x06,然后给使能端E一个下降沿,就花屏了!这是为什么?… 查看全部问答> |
|
我在使用STM32是用了6路AD,我用DMA方式,直接将6个转化值映射到6个变量上,连续不间断的采样。定时读这6个变量。用这种方法采样计算正弦波的均方值总体效果不错,但是偶尔小数点的最后一位还是有跳动。 同事认为AD切换后的 ...… 查看全部问答> |
|
作为一个新的技术,不同的人对他有不同的看法。有人说这种开发效率相当快,但是很难应用到汽车上,我希望下有经验的人讲一下,也希望喜欢这个技术的同行们互相交流看法… 查看全部问答> |




