目录

平均值采样:

采样数据分析:

采样时间分析:

有效值采样:

采样数据分析:

采样时间分析:

结论:


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

硬件连接示意图

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

结论:

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

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

STM8学习笔记---ADC平均值采样和有效值采样算法分析相关推荐

  1. STM8学习笔记---ADC多通道采样

    STM8S003单片机ADC采样通道总共有5个,从AIN2---AIN6,多通道采样时需要将ADC转换设置为单次转换模式,每次切换采样通道后,需要重新初始化 ADC,采样结果在中断中读取. IO口初始 ...

  2. 嵌入式学习笔记——ADC模数转换器

    ADC模数转换器 前言 ADC介绍 ADC概述 ADC的数量 ADC的特性 ADC框图 芯片外部框图 芯片内部框图 转换部分框图 状态输出部分 条件触发框图 寄存器介绍 编程思路 模式选择 规则通道的 ...

  3. 新唐芯片学习笔记——ADC

    新唐芯片学习笔记--ADC 概述 NuMicro®NUC029xAN 包含一个12位逐次逼近型模数转换器(SAR A/D转换器) ,包含8个输入通道:NuMicro®NUC029FAE 包含一个10位 ...

  4. STM8学习笔记----普通IO口模拟串口功能

    串口在产品应用中很常见,但是单片机的默认带的串口往往比较少,有时候就会出现串口不够用,所以就想着能不能用普通IO口模拟串口来实现串口的功能. 要模拟串口首先要清楚串口数据传输过程中的原理. 常用的串口 ...

  5. 单片机ADC采样算法----有效值采样法

    在使用单片机ADC功能采样数据时,通常情况下用平均值计算就够了,但是在计算功率时就需要用有效值来计算真正做功的情况.如果是标准的正弦波的话,正弦波的峰值是有效值得1.414倍,可以通过峰值来计算有效值 ...

  6. STM8学习笔记---NTC热敏电阻的使用

    温度采集是产品开发过程中必不可少的,读取温度的方法有很多种,有专用温度采集芯片,温度传感器,热敏电阻等,各种方法来获取温度.今天总结一下使用热敏电阻来采集温度. 先看看热敏电阻的概念 也就是将温度变化 ...

  7. stm32学习笔记---ADC电压采集

    1.  ①电压输入范围 ADC 输入范围为:VREF- ≤ VIN ≤ VREF+.由 VREF-.VREF+ .VDDA .VSSA.这四个外部 引脚决定. 我们在设计原理图的时候一般把 VSSA ...

  8. 电机学习笔记 ADC dma 电流电压采集

    分析 在电机驱动电路中串入一个 0.02Ω.2W 的采样电阻,将电流信号 转换成电压信号,再经过隔离运放放大 8 倍后差分输出,使用普通运放将差分输出转换成单端输 出给 STM32 的 ADC 采样通 ...

  9. STM8学习笔记3 STM8简介

    概述 STM8单片机的开发商是意法半导体(ST),于2009年推出.它具有3级流水线架构.性价比高.开发方便的等优点.根据应用场合的不同,分为三个系列:STM8S,STM8L和STM8A. 个人认为, ...

最新文章

  1. access汇总含义_2020最新大厂内部 PHP 高级工程师面试题汇总(二)
  2. 文巾解题 70. 爬楼梯
  3. 开源数据库Neo4j获8000万美元E轮融资,One Peak Partners、摩根士丹利领投
  4. 如何处理Docker错误消息:please add——insecure-registry 1
  5. (剑指Offer)面试题4:替换空格
  6. ipython vim_python 之ubuntu开发环境vim 和 ipython
  7. ZOJ 1111 Poker Hands
  8. GOF设计模式(概念、原则、场景、优点、缺点、应用)
  9. 移动营销必备:App自动绑定的五大场景赋能
  10. 数据分析工具与参照【持续更新中......】
  11. nodeJS之repl
  12. golang的ping检测网络实现
  13. 韩顺平Linux教程学习笔记
  14. 存储过程报错:Error converting data type varchar to bigint.
  15. 反汇编和二进制分析工具清单
  16. LTE-物理信道及映射关系
  17. Android的adb指令单刷boot、apk的方法
  18. 【点云3D目标检测】IA-SSD报错:Expected isFloatingType(grads[i].scalar_type()) to be true, but got false.
  19. 网络学习day04_子网划分
  20. java生成函数excel_如何通过Java代码实现创建和读取Excel公式

热门文章

  1. 心理咨询APP开发-心理咨询平台-心理咨询系统源码
  2. 【JS】超简单轮播图,轻松get京东首页同款轮播图效果
  3. UP9601台湾力智UPI首颗QC2.0+DC/DC+识别快充三合一车充芯片方案
  4. Design Patten 的原则
  5. 一图让你秒懂——中国数据库的40年江湖 ​​​​
  6. 企业如何快速安全盘点混乱IT固定资产信息加固桌面终端安全-原始固定资产系统模式
  7. HTML5 SVG画在直线中间的箭头
  8. Android实习——09
  9. 华为文稿演示服务器操作异常修复,服务器日志怎么修复
  10. Linux命令之修改文件所有者chown