微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32 ADC结合DMA数据采样与软件滤波处理

STM32 ADC结合DMA数据采样与软件滤波处理

时间:11-17 来源:互联网 点击:
sensor;
s32 Current_Temp;

// ADC转换结束以后,读取ADC_DR寄存器中的结果,转换温度值计算公式如下:
// V25 - VSENSE
//T(℃) = ------------+ 25
// Avg_Slope
// V25:温度传感器在25℃时 的输出电压,典型值1.43 V。
//VSENSE:温度传感器的当前输出电压,与ADC_DR 寄存器中的结果ADC_ConvertedValue之间的转换关系为:
// ADC_ConvertedValue * Vdd
//VSENSE = --------------------------
// Vdd_convert_value(0xFFF)
//Avg_Slope:温度传感器输出电压和温度的关联参数,典型值4.3 mV/℃。

Vtemp_sensor = advalue * 330 / 4096;
Current_Temp = (s32)(143 - Vtemp_sensor)*10000/43 + 2500;
return (s16)Current_Temp;
}

u16 GetVolt(u16 advalue)
{

return (u16)(advalue * 330 / 4096);
}
滤波部分思路为:ADC正常连续采样三个通道,由DMA进行搬运,一次搬运90个数据,即为1-2-3-1-2-3循环,每个通道各30次,存在 AD_Value[30][3]中,30为每通道30个数据,3为三个通道,根据二维数组存储方式此过程自动完成。而每当一次DMA过程结束后,触发 DMA完成中断,进入滤波函数将30个数据均值成一个, 存入After_filter[3]。整个过程滤波计算需要CPU参与,而在程序中采样结果值随时均为最新,尽力解决程序复杂性和CPU负载。 x=GetVolt(After_filter[0]);即可得到即时电压值。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top