打印

想得到AD结果平均值

[复制链接]
1193|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangpe|  楼主 | 2018-4-10 10:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的是电阻分压,和1个电容的滤波。在设置AD的时候,AD的转换时间为50us。我想得到AD结果平均值。220V的交流电的周期是20ms,那我要是得到平均值,我不是要得到20ms/50us=400个数据。
沙发
langgq| | 2018-4-10 11:02 | 只看该作者

是啊,单片机怎么能一样处理这么多的数据?

使用特权

评论回复
板凳
wangpe|  楼主 | 2018-4-10 11:04 | 只看该作者
采集一组数据,例如16个,然后取平均...

使用特权

评论回复
地板
wangzsa| | 2018-4-10 11:07 | 只看该作者


16个数据是连续采集的吗???如果是连续采集,那时间太短了,不能覆盖一个周期,取平均值有问题。。

使用特权

评论回复
5
wangpe|  楼主 | 2018-4-10 11:11 | 只看该作者
要是不用连续采集,那用定时器,设置时间。像是交流电压,周期是20ms,我要是采集20次,就是1ms产生中断,获取AD的值吗????

使用特权

评论回复
6
zhanglli| | 2018-4-10 11:14 | 只看该作者
这样就多用了一个定时器啊

使用特权

评论回复
7
lium| | 2018-4-10 11:17 | 只看该作者
嗯,还有我在程序中用到了3个中断源,感觉AD中断时间太短了,会对其他中断有影响。。。

使用特权

评论回复
8
guoyt| | 2018-4-10 11:21 | 只看该作者

难道一个定时器就只能定时一个时间吗??

使用特权

评论回复
9
yufe| | 2018-4-10 11:24 | 只看该作者

首先如果你需要很多地方用定时器,那就把定时器的值设定一个基值,例如100us进入一次定时器溢出中断,然后累计10次后触发另一个不用的中断用于AD采集
关于中断会打扰程序主体的实时性的问题,需要LZ自己分配好了,不同情况不同对待吧

使用特权

评论回复
10
hanwe| | 2018-4-10 11:27 | 只看该作者

AD转换速率没必要设那么高
根据采样定理,50Hz的信号采样率达到100Hz以上就可以了

使用特权

评论回复
11
langgq| | 2018-4-10 11:29 | 只看该作者
AD转换时间为50us,但是采样间隔应该是可以控制的吧

使用特权

评论回复
12
zhuww| | 2018-4-10 16:32 | 只看该作者

每一个周期只测量一次,但是每一次测量的位置不通,然后通过换算就可以把这个周期的波形测量完
其实这样测量精度可以做高一些

使用特权

评论回复
13
zhanglli| | 2018-4-10 16:34 | 只看该作者
就算是采样400个信号,也可以处理啊,采样一次处理一次。
...,
UI_SampleCount = 0;
while (1)
{

UI_Sample = ADconvert(...);  //ADConvert(...)是AD转换函数
if(UI_SampleCount==0)
UI_Ave = UI_Sample;
UI _Ave = UI_Sample + UI_Ave;
UI_Ave = UI_Ave >> 1;
if(UI_SampleCount==400)
{
   UI_SampleCount = 0;   //UI_表示无符号整形 即:unsigned int
   现在的UI_Ave 是你采样400次的平均值;
}
。。。
}
上面忘了一个“UI_SampleCount++”;放在“UI_Ave = UI_Ave >> 1;”之后

使用特权

评论回复
14
wangpe|  楼主 | 2018-4-10 16:36 | 只看该作者
你的思路是,定义采样次数变量UI_SampleCount,然后采样第2次,和第1次相加,取平均值,再与第3次采样相加,取平均值,依次下去。。。这样算法也挺好,当的权数占50%。。。。。谢谢你,我会考虑你的算法的。。。。

使用特权

评论回复
15
lium| | 2018-4-10 16:39 | 只看该作者

交流电测平均值1、用电容作为充放电取平均值 2、用采用保持器取瞬间值平均

使用特权

评论回复
16
hanwe| | 2018-4-10 16:42 | 只看该作者

是做产品吗,如果是本人建议采用炬力或者锐能威的采样芯片,比你自己这样搭一个电路便宜多了

使用特权

评论回复
17
yufe| | 2018-4-10 16:45 | 只看该作者

正半周期和负半周期的波形是一样的。
1,首先找到0点位置。
2,设置2MS的定时中断

使用特权

评论回复
18
zhanglli| | 2018-4-10 16:48 | 只看该作者
// 自动连续平均算法采集电压
unsigned long bat_v()
{
   static unsigned long v = 0;
   unsigned long v1 = 单次采集的AD
   v = v - (v>>3) + v1;
   return v>>3;  // 返回最后8个数值的平均
}

把v>>3改为v>>8就变成256次的平均值,这个算法在本坛有介绍,每次采集都可以得到一个最新的平均值,不需要保存大量数据

使用特权

评论回复
19
wangpe|  楼主 | 2018-4-10 16:50 | 只看该作者

嗯,预料中的结果,先结贴吧,多谢大家啦

使用特权

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

本版积分规则

938

主题

9837

帖子

2

粉丝