打印

用STM32 ADC1多个通道测同一个电压取平均这样配置对吗?

[复制链接]
4669|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Itachi80|  楼主 | 2011-7-24 10:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Itachi80 于 2011-7-24 10:23 编辑

读取平均值的程序如下:

       ADC_SoftwareStartConvCmd(ADC1, ENABLE);

AD_value1 = ADC_GetConversionValue(ADC1);


ADC_SoftwareStartConvCmd(ADC1, ENABLE);

AD_value2 = ADC_GetConversionValue(ADC1);


ADC_SoftwareStartConvCmd(ADC1, ENABLE);

AD_value3 = ADC_GetConversionValue(ADC1);


Value=(AD_value1+AD_value2+AD_value3)/3


配置如下
void ADC_Configuration(void)
{



ADC_InitTypeDef
ADC_InitStructure;


ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
//ADC 工作模式 ADC1 ADC2 单独工作


ADC_InitStructure.ADC_ScanConvMode = DISABLE;
//关闭多通道扫描模式


ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //不启用启用连续转换模式


ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
//触发方式为软件触发


ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
//数据右对齐


ADC_InitStructure.ADC_NbrOfChannel = 3;
//ADC规则转换通道数量


ADC_Init(ADC1, &ADC_InitStructure);


/*ADC1 regular channel10 configuration */ //配置转换规则


ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 1,ADC_SampleTime_1Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 2, ADC_SampleTime_1Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 3,ADC_SampleTime_1Cycles5);




/*Enable ADC1 */

ADC_Cmd(ADC1, ENABLE);


/*Enable ADC1 reset calibaration register */

ADC_ResetCalibration(ADC1);
//复位ADC1 校准


/*Check the end of ADC1 reset calibration register */

while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位完成



/*Start ADC1 calibaration */

ADC_StartCalibration(ADC1);
//开始ADC1 校准转换


/*Check the end of ADC1 calibration */

while(ADC_GetCalibrationStatus(ADC1));
//等待转换完成
}
沙发
Chaos_zc| | 2011-8-6 01:30 | 只看该作者
配置部分没问题,不过为什么要多通道转换取平均值呢?如果为了得到的值更可靠的话,貌似单通道连续转换再做平均值滤波更好一些。建议ADC和DMA配合使用可以节约CPU资源。呵呵,一点个人见解。

使用特权

评论回复
板凳
Itachi80|  楼主 | 2011-8-6 08:19 | 只看该作者
2# Chaos_zc
单通道连续转换停不下来。。。

使用特权

评论回复
地板
Chaos_zc| | 2011-8-6 09:54 | 只看该作者
2# Chaos_zc
单通道连续转换停不下来。。。
Itachi80 发表于 2011-8-6 08:19

ADC其实不用停下来,一直转换着就行,求平均值方法:
方法一:利用ADC采样完成中断,在中断中累加采样值求平均;
方法二:利用DMA将采样值传输到一个数组,比如说ADC_ConvertValue[6],循环将采样值送到该数组的各个数中。然后在DMA传输完成中断中求ADC_ConvertValue[0]~ADC_ConvertValue[5]的平均即可。
当然还有其它的办法,其实办法很多,就看怎么想了

使用特权

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

本版积分规则

0

主题

42

帖子

0

粉丝