历史上的今天

今天是:2024年09月18日(星期三)

正在发生

2021年09月18日 | STM8学习笔记---ADC平均值采样和有效值采样算法分析

发布者:leader5 来源: eefocus关键字:STM  ADC 手机看文章 扫描二维码
随时随地手机看文章

在开关电源中,电流采样是非常重要的。常用的电流采样计算方法有平均值采样法和有效值采样法。现将这两种电流采样算法进行分析比较。


硬件连接示意图

交流220V通过全桥整流滤波后变为直流310V,直流310V给后端负载供电,采样电阻Rs串联在直流回路的地线中。


当设备工作时,电流从整流桥正极流出经过负载,然后经过采样电阻Rs回到整流桥负极。由于采样电阻Rs的阻值很小,采样电阻上的压降只有零点几伏,所以采样电阻不会对负载造成影响。由于采样电阻上的压降很小,MCU不能直接使用,所以通过放大电路,将采样电阻上的电压放大到MCU能直接识别的范围内,然后通过MCU上的ADC口直接读取放大电路出来的电压信号,就能计算出输入电流值的大小。这样只需通过一个采样电阻同时结合软件的算法,就能计算出电源输入电流大小,简化了硬件电路,节约了开发成本,同时又缩短了开发周期。


平均值采样:

通过MCU的ADC输入口,直接读取采样到的电压值。将采样到N个数据直接求算数平均值。


软件流程如下:

图2


程序开始采样后,每采样一次就累加一次采样个数,当采样个数小于N时,继续采样,当采样个数大于N时,计算N个采样值的累加和,再求出N个采样数据的算术平均值。然后复位采样个数计数器,继续进行下一次采样。这个平均值就可以用来计算当前电源输入电流值。


采样个数N的值根据不同的波形选择不同的大小,选取原则是,要保证采样的值至少要包含输入电流波形的一个周期。这样才能保证将波形中的最大值和最小值都能采样到,计算出来的平均值才能更准确。


软件核心代码如下:


u16 get_ave( void )

{

    static  u8  cnt = 0;

    static u32 sum = 0;

    static u16 ave = 0;

 

    if( cnt < N)

    {

        sum += ReadVol_CH4();                 //采样值累加和

        cnt++;

    }

    if( cnt >= N)

    {

        ave = sum / N;                                //计算算术平均值

        cnt = 0;

        sum = 0;

    }

    return ave;

}

采样数据分析:

通过函数发生器产生一个幅度为0.2V--2V,频率为100Hz的正弦波。用来模拟电源输入电流波形,将函数发生器产生的正弦波直接送入MCU的ADC采样端口。


用示波器观察输入波形入下图所示:

图3


由于MCU采样的数据不好观察,所以将ADC口采样的数据通过串口发送出来,然后将数据绘制成曲线,通过观察曲线的波动来判断采样值的稳定性。


MCU采样数据及曲线如下图所示:

图4


MCU采样的数据最大值为472,最小值为467。MCU的ADC分辨率为10位,可以计算出ADC的最大采样值为2^10=1024。MCU为5V供电,可以计算出采样值的电压为


472/1024*5=2.3046875       467/1024*5=2.2802734375


通过计算可知ADC采样值在2.28V到2.3V之间波动。


由图3示波器上所测Vavg=2.22V可知,送入ADC口的波形平均值是2.22V,MCU通过平均值采样计算出来的值在2.28V到2.3V之间。说明MCU计算的值基本准确。通过图4中绿色的数据采样波形也可以看出,MCU计算的平均值有轻微的波动。


将输入波形幅度降低到0.5V--1.5V测试,输入波形如下图所示:

图5


MCU采样数据及曲线如下图所示:

图6


MCU采样最大值为425,最小值为421,换算为电压值为


425/1024*5=2.0751953125         421/1024*5=2.0556640625


MCU采样值在2.05V到2.07V之间。由图5示波器所测Vavg=2.02V可知送入ADC口的波形平均值是2.02V。可以看出,MCU采样的值已经比较接近实际值了。通过图6中绿色的数据波形可以看出,平均值波动比较小。


通过上面两组测试对比可以发现,当ADC口输入波形的幅值降低,MCU计算出来的平均值就比较接近输入波形真实的平均值。


采样时间分析:

MCU采样一是要求准确性,二是要求实时性。也就是说不仅要采样准确,而且要采样速度快,能及时反应输入电流变化。上面已经验证了采样的准确性,下来开始验证采样的实时性。由于MCU采样的速度比较快,很难直接观测到采样一次需要多长时间,这里采用LED指示灯的亮灭来间接观测ADC采样一次需要的时间。LED亮--->采样一次数据--->LED灭--->采样一次数据--->LED亮--->采样一次数据,这样一直循环。每次采样前让LED指示灯的状态变化一次,这样LED灯从亮到灭,从灭到亮的过程中都是采样了一次数据。然后用示波器观察LED灯高低电平的时间,就可以间接的看出,采样一次数据花费的时间了。相关代码如下:


While(1)

{

    LED3 = 1;                    //LED 亮

    val = get_ave();               //采样    

    LED3 = 0;                    //LED 灭

    val = get_ave();               //采样

}


示波器测试LED波形如下图所示:

图7


通过示波器测量值可以看到 +wid=60us    -wid=59us 说明LED高电平时长为60us,低电平时长为59us。通过LED电平可以间接的看出,采样一次数据MCU所耗费的时间为60us左右。


有效值采样:

通过MCU的ADC输入口,直接读取采样到的电压值。将采样到一个周期的数据求平方累加和,然后累加和求平均值,最后在开方。所求的结果就是均方根值,也就是有效值。


软件流程如下:

图8


程序开始采样后,计时器开始计时,当计时时间小于T,就继续采样。当计时时间大于T时,结束采样。然后将采样值取平方,再求累加和,然后再将累加和进行开方运算。所求的值就是在采样T时间内电流波形的均方根值,也就是有效值。这个有效值值就可以用来计算当前电源输入电流值的有效值。


采样时间T的值根据不同的波形选择不同的大小,选取原则是,要保证采样的值为输入电流波形的一个周期。这样计算出来的值就是周期均方根值,最接近输入波形真实有效值。


软件核心代码如下:


u16 get_rms( void )

{

    static u16 ave_value = 0;

    u16 tem_time = 0;

    u8 cnt = 0, num = 0;

    u32 sum = 0, value = 0;

    u16 rms = 0;

 

    while( cnt <= T)                            //采样一个周期

    {

        if( tem_time != time_cnt )

        {

            tem_time = time_cnt;

            cnt++;

        }

        value = ReadVol_CH4();

        sum += value * value;

        num++;

    }

    rms = (u16)sqrt( sum / num );                 //求均方根值

    ave_value = rms;

    return ave_value;

}


采样数据分析:

通过函数发生器产生一个幅度为0.2V--2V,频率为100Hz的正弦波。用来模拟电源输入电流波形,将函数发生器产生的正弦波直接送入MCU的ADC采样端口。


用示波器观察输入波形入下图所示:

图9


MCU采样数据及曲线如下图所示:

图10


MCU采样最大值为536,最小值为504。计算采样电压值为


536/1024*5=2.6171875               504/1024*5=2.4609375


通过计算可以看出,MCU采样值在2.62V和2.46V之间波动。


由图9示波器波形可以看出,输入波形有效值Vrms=2.56V,MCU采样计算出的有效值在真实的有效值上下波动,由图10中绿色波形可以看出采样值波动情况。


将输入波形幅度降低到0.5V--1.5V测试,输入波形如下图所示:


图11


MCU采样数据曲线如下图所示:

图12


MCU采样最大值为447,最小值为428。计算采样电压值为


447/1024*5=2.1826171875    428/1024*5=2.08984375


通过计算可以看出,MCU采样值在2.18V和2.08V之间波动。


由图9示波器波形可以看出,输入波形有效值Vrms=2.15V,MCU采样计算出的有效值在真实的有效值上下波动,由图11中绿色波形可以看出采样值波动情况。


通过上面两组测试对比可以发现,当ADC口输入波形的幅值降低,MCU计算出来的有效值精度无明显变化,计算的有效值都在真实的有效值上下波动。说明有效值的计算不受波形幅值的影响。


采样时间分析:

由于MCU采样的速度比较快,很难直接观测到采样一次需要多长时间,这里同样采用LED指示灯的亮灭来间接观测ADC采样一次需要的时间。LED亮--->采样一次数据--->LED灭--->采样一次数据--->LED亮--->采样一次数据。每次采样前让LED指示灯的状态变化一次,这样LED灯从亮到灭,从灭到亮的过程中都是采样了一次数据。然后用示波器观察LED灯高低电平的时间,就可以间接的看出,采样一次数据花费的时间了。相关代码如下:


while( 1 )

{

    LED3 = 1;                    //LED 亮

    val = get_rms();                   //采样  

    LED3 = 0;                    //LED 灭

    val = get_rms();                   //采样

}


示波器测试LED波形如下图所示:

通过示波器观测可以看到 +wid=10.4ms    -wid=10ms  说明LED高电平时长为10.4ms,低电平时长为10ms。通过LED电平可以间接的看出,采样一次数据MCU所耗费的时间为10ms左右。


结论:

通过上面平均值采样和有效值采样的分析对比可以看出。平均值采样耗时比较短,采样速度快,但是和输入波形关系比较大,输入波形幅度越小,采样值与实际值误差越小。有效值采样耗时比较长,采样速度慢,但是不受输入波形幅度影响。


结合在实际项目中的应用经验来看,若采样的波形为直流或者畸变很小的交流,同时对系统的实时性要求比较高的情况下,可以考虑用平均值采样法。若设备的运行环境比较复杂,输入波形在不同的环境下会发生不同畸变,同时对系统的实时性要求不高的话,可以考虑用有效值采样法。有效值采样相当于计算的是输入波形的面积,所以不论现场环境多复杂,输入波形发生多严重的畸变。通过有效值采样法计算出来的电流值,最接近真实值。所以在开关电源电路中用有效值采样法计算的电流值比平均值采样法计算的电流值稳定性要好。

关键字:STM  ADC 引用地址:STM8学习笔记---ADC平均值采样和有效值采样算法分析

上一篇:STM8 ADC转换模式-------单次模式
下一篇:STM8单片机产生随机数

推荐阅读

全球最大的汽车电子及人工智能物联网芯片公司恩智浦半导体(纳斯达克代码:NXPI,以下简称“恩智浦”)将出席9月19日至22日召开的2018杭州·云栖大会,并集中展示包括智能网联汽车、移动支付、人脸识别、边缘计算和智能家居等方面的前沿应用和解决方案。 此次大会上,恩智浦将着重展示基于阿里巴巴AliOS操作系统和恩智浦新一代i. MX8处理器的智能驾驶舱。...
“现实扭曲力场”(Reality Distortion Field)这个说法出自科幻电影《星际迷航》:据说外星人可以用精神力量建造新世界。后来这词成了苹果公司前任CEO乔布斯所具备的一种特殊能力:人们总说他能通过极富渲染力的谈话和表情,让外界认同他的想法。 乔布斯去世后,大概苹果公司的继任者们也继承了这种超能力,不然怎么会每代都能让人们从嘲笑到“真香”,...
9月15日这天还是来了,美国政府对华为芯片禁令正式实施,面对制裁,华为做了哪些努力?“断芯”后的华为将何去何从?至暗时刻降临 断供危机传导至手机渠道商去年5月15日,美国总统签署行政令,美国商务部以“国家安全”为由,将华为及其68个关联企业列入出口管制的“实体清单”,禁止华为在未经美国政府批准的情况下从美国企业获得元器件和相关技术。华为...
广告摘要声明广告撰文 | 歌者1995年,通用汽车试图找到一种方法使得机器人能够变得足够安全以便和人协同工作;基于此,美国西北大学的两位教授J.Edward Colgate和MichaelPeshkin首次提出协作机器人概念,并申请了专利。2005年,协作机器人厂商Universal Robots在丹麦成立;2008年,Rodney Brooks创立了Heartland Robotics(2012年更名为Rethink Ro...

史海拾趣

问答坊 | AI 解惑

怎样使用运算放大器

给大家提供出来,不知能否有帮助 [ 本帖最后由 zzz-0909 于 2009-3-9 12:11 编辑 ]…

查看全部问答∨

【藏书阁】一级物理实验

目录: 第一章  误差与数据处理的基础知识   第一节  物理实验的目的与基本要求   第二节  测量与误差   第三节  测量不确定度   第四节  有效 ...…

查看全部问答∨

【转】不起眼的设计失误一

今天写两个电路设计失误,第一个是由于电流增益不够引起的,该电路是参考别的设计者引发的,看了之后可以了解一些知识。 第一个失误的主要原因是,设计者错误估算了R1的大小。其设计的值太大,导致Ib太小。 这里把等效的模型转换成如下: 以上的 ...…

查看全部问答∨

英国发明“面包碗” 饭后不用刷碗

对于那些既想品尝美味又不愿刷碗的懒汉们来说,一项新发明的面包碗一定会使他们欣喜过望,这种新餐具不但可以避免刷碗的烦恼,其本身还是一道美味佳肴。 据英国《每日电讯报》报道,这种面制碗是英国伯明翰的一家食品公司发明的,他们希望食客们可 ...…

查看全部问答∨

“添加BSP”新手求救

我今天下载了PB4.0要求在ARM平台下开发。但我新建平台添加BSP的时候为什么只有如下图的一个可选项,而没有ARM的呢? C:\\Documents and Settings\\yemanyu\\桌面…

查看全部问答∨

求Zigbee的中文资料

JN5121模组,谢谢~~~…

查看全部问答∨

有人对SmsReceiveAllMessagesFromSIM了解的吗?

我去网上搜了一下,结果出来的东东都是MOBILE安全方面的东西. 有没有对这了函数了解的人啊,能不能讲解一下,帮忙里个头出来. 其实就是想知道,这个函数是不是把SIM卡上的SMS移到MOBILE设备上,如果是的话MOBILE会在什么时候调用这个函数. 谢谢!…

查看全部问答∨

MSP430 G2553定时器问题,小白求教!!!

刚到手一块G2553芯片,datasheet中,显示定时器有Timer0_A3,Timer1_A3,在用户手册上只有TA,TB做了说明,想问下,2553中的两个定时器和TA,TB的区别是一样的吗?可以选定不同的时钟源嘛,比如一个是SMCLK,一个选择ACKL?小白求教大神,跪拜………

查看全部问答∨

第12届中国光伏大会暨国际光伏展览会见闻

      2012年9月5日到7日,第12届中国光伏大会暨国际光伏展览会(CPVC12)在中国国际展览中心新馆举行。阿牛哥9月6日赶往中国国际展览中心新馆参观国际光伏展会,看看有哪些太阳能电池,太阳能逆变器厂商参展,看看有哪些 ...…

查看全部问答∨

关于调光模块

各位大侠,求指导,最近在做调光模块,发现驱动光耦分为过零和不过零的。那过零触发是不是就不能调光,只能作为开关用? 因为过零触发它最小导通时间10ms,如果用多个周期关断、打开来调光的话,是不是人眼已经能看到闪烁了? 下图是一个调光图: ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved