历史上的今天
返回首页

历史上的今天

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

正在发生

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

2021-09-18 来源:eefocus

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


硬件连接示意图

交流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左右。


结论:

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


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

推荐阅读

史海拾趣

屹晶微(EG)公司的发展小趣事

随着业务的不断拓展和市场的不断扩大,屹晶微逐渐意识到与合作伙伴建立长期战略合作关系的重要性。于是,在2023年,他们与电子产业一站式服务平台华秋电子达成了授权代理合作。这一合作不仅为屹晶微提供了更广阔的市场渠道和客户资源,也为其未来的发展奠定了坚实的基础。

在合作过程中,华秋电子为屹晶微提供了全方位的支持和服务。他们共同推广屹晶微的芯片产品,为客户提供更优质的解决方案和服务。同时,华秋电子还利用自身的技术优势和渠道优势,帮助屹晶微拓展海外市场,提升品牌知名度和影响力。

以上两个故事只是屹晶微在电子行业中发展起来的一部分。他们的发展历程充满了挑战和机遇,但黄米龙和他的团队始终保持着坚定的信念和不懈的努力,为中国的芯片产业做出了积极的贡献。

amcc [applied micro circuits corp]公司的发展小趣事

屹晶微的创始人黄米龙,原本在发电厂从事电气运营工作长达八年。这段经历让他对电子领域有了深入的了解和浓厚的兴趣。然而,他并没有满足于现状,而是看到了中国芯片产业的巨大潜力和发展空间。于是,在2007年,他毅然决定从发电厂辞职,利用自己的积蓄和借来的资金,在台州创立了屹晶微电子有限公司。

在创立初期,屹晶微面临着资金短缺、技术落后和市场竞争激烈的困境。但黄米龙凭借对电子行业的深刻理解和坚定的信念,带领团队克服了种种困难。他们不断引进先进技术和设备,加强研发力量,提升产品质量。经过几年的努力,屹晶微逐渐在芯片设计领域崭露头角,并成功推出了多款具有自主知识产权的芯片产品。

Forge Europa Ltd公司的发展小趣事

Forge Europa Ltd公司自成立以来,始终将技术创新视为企业发展的核心驱动力。早期,公司便投入大量资源研发高效能LED灯带技术,成功推出了具有行业领先地位的5050型号LED灯带。这款产品在市场上迅速获得认可,不仅因为其出色的光效和节能性能,更在于其独特的散热设计,有效延长了产品的使用寿命。Forge Europa的这一技术创新不仅为公司赢得了市场份额,也奠定了其在LED灯带领域的领先地位。

敦泰(FOCALTECH)公司的发展小趣事
调节冰箱温度时,应根据季节和存放食物的需求进行调整。一般来说,冷藏室的温度应设置在2-8℃之间,冷冻室的温度应设置在-18℃以下。可以通过冰箱上的温度调节按钮或触摸屏进行设置。同时,注意避免将温度设置过低或过高,以免影响食物的保鲜效果和冰箱的能耗。
ET Enterprises Ltd公司的发展小趣事

进入1940年代后期,ET Enterprises Ltd公司将业务重心转向光电倍增管的开发和制造。通过不断的技术创新和市场拓展,公司逐渐在光电倍增管领域建立起领先地位,成为国际知名的光电倍增管供应商。

Datakey Electronics公司的发展小趣事

随着全球化进程的加速,Datakey Electronics意识到单靠国内市场已经无法满足公司的长远发展需求。于是,公司积极寻求国际合作机会,与国际知名企业建立战略合作伙伴关系,共同开发新产品、开拓新市场。通过国际合作,Datakey Electronics不仅提高了自身的技术水平和产品竞争力,还成功将产品推向了国际市场。

问答坊 | AI 解惑

寻求视频管理IC方案

本帖最后由 jameswangsynnex 于 2015-3-3 19:56 编辑 最近我们公司正在开发一个视频监控项目.该产品要有视频摄象功能(30-100万像素),且视频信号要能够保存在Micro SD(2GB)卡中(其实功能和DV差不多).产品是面向欧美市场的,有没有该方面的专家,提供 ...…

查看全部问答>

如何将3G移动商务应用于直销行业

直销作为一种新型的营销方式,主要具有目标市场层面的选择性、沟通对象的个别性、沟通过程的连续性、沟通效果的可测试性等优点。随着现代社会的发展和市场竞争的加剧,直销手段已经逐步显现出巨大的市场营销潜力。 如何将3G移动商务运用于直销行业 ...…

查看全部问答>

请问各位大侠关于wince5.0系统的中英转换问题

我想问问,我现在的WINCE5。0系统加载了中文字体后,好像设置不到英文界面了,在PB中,默认语言是中文,在wince的控制面板-》区域设置中,区域射中选项卡的选中英文美国(其中还有一个是中文中华人民共和国),用户界面语言选项卡中,是阴影,选择 ...…

查看全部问答>

OpenStore的用法

hFlash = OpenStore(L\"MSFlash\"); hFlash = OpenStore(L\"DSK0:\"); 这两句话有什么区别,为什么我在multi-bin的情况下,只能用第一句;而在非multi-bin的情况下只能用第二句?? 请教高手~~ …

查看全部问答>

求助用MMU映射方式启动bootrom或vxworks的BSP

有谁成功用MMU映射方式启动bootrom或vxworks的BSP,小弟那一份自己刚刚完成的at91rm9200bsp换. 也可以详细说明一下思路,高分相送,谢谢了.…

查看全部问答>

(高分请教)有了解“广东亿迅,普信科技有限公司”的朋友请进

想了解一下“广东亿迅,普信科技有限公司”      1、该公司的总体情况如何;      2、与“广东电信研究院”的关系      谢谢    …

查看全部问答>

关于嵌入式软件开发,驱动开发的思考?请前辈指教~

关于嵌入式软件开发,驱动开发,到底需要哪些知识才算的上是称职的工程师,请前辈们指教!…

查看全部问答>

我弄的CC2500,基本是拷贝TI的那款学习板

基本就是把CC2500部分挪过来,呵呵 射频部分没经验  …

查看全部问答>

LM3S系列固化Bootloader的问题~~急~~

我用的是DK-LM3S9B96.。。里面固化了Bootloader,研究了Bootloader的启动方式,想上电强制从固化的bootloader启动,不检测flash是否为空,大概知道要修改BOOTCFG这个寄存器的值,可是不知道怎么修改。。。修改后也不知道上电复位后还是否会变化。。 ...…

查看全部问答>

求mplab-ide教程

我是新手,找了很久找不到mplab-ide的教程,望哪位好心的大哥大姐给我发一个,什么都好。 先谢了 …

查看全部问答>