stm32f103滤波adc
更多
在STM32F103中实现ADC滤波可以通过硬件和软件两种方式优化采样数据的稳定性。以下是具体方法和示例:
一、硬件滤波
-
RC低通滤波
- 在ADC输入引脚与信号源之间添加RC电路(如1kΩ电阻 + 100nF电容),截止频率计算公式:( f_c = \frac{1}{2\pi RC} )
- 适用于高频噪声抑制,注意避免影响信号响应速度。
-
参考电压稳定
- 使用独立的低噪声LDO(如AMS1117)为VDDA和VSSA供电,确保模拟电源与数字电源隔离。
- 添加10μF和100nF电容并联到地,滤除电源纹波。
二、软件滤波
-
滑动平均滤波(实时性强)
#define SAMPLE_SIZE 16 uint16_t adc_buffer[SAMPLE_SIZE]; uint8_t index = 0; uint32_t sum = 0; uint16_t sliding_average_filter(uint16_t new_sample) { sum -= adc_buffer[index]; // 移除旧样本 sum += new_sample; // 添加新样本 adc_buffer[index] = new_sample; // 更新缓冲区 index = (index + 1) % SAMPLE_SIZE; return (uint16_t)(sum / SAMPLE_SIZE); } -
中值滤波(抗脉冲噪声)
int compare(const void *a, const void *b) { return (*(uint16_t*)a - *(uint16_t*)b); } uint16_t median_filter(uint16_t *samples, uint8_t size) { uint16_t temp[size]; memcpy(temp, samples, size*sizeof(uint16_t)); qsort(temp, size, sizeof(uint16_t), compare); return temp[size/2]; // 取中间值 } -
混合滤波策略
uint16_t hybrid_filter() { uint16_t raw_samples[5]; for(uint8_t i=0; i<5; i++){ raw_samples[i] = ADC_GetValue(); // 连续采集5次 } uint16_t median = median_filter(raw_samples, 5); // 先中值滤波 return sliding_average_filter(median); // 再滑动平均 }
三、ADC配置优化
-
校准与配置
void ADC_Config(void) { RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; // 使能ADC时钟 ADC1->CR2 = ADC_CR2_ADON; // 开启ADC delay_ms(1); // 等待电源稳定 ADC1->CR2 |= ADC_CR2_RSTCAL; // 启动校准 while(ADC1->CR2 & ADC_CR2_RSTCAL); // 等待校准完成 ADC1->CR2 |= ADC_CR2_CAL; while(ADC1->CR2 & ADC_CR2_CAL); // 等待校准结束 ADC1->SQR1 = 0; // 单次转换模式 ADC1->SMPR2 = ADC_SMPR2_SMP0_1 | ADC_SMPR2_SMP0_0; // 通道0采样时间71.5周期 } -
采样时间调整
- 根据信号源阻抗调整SMPx[2:0]位(在ADC_SMPR寄存器),阻抗较高时选择更长采样时间:
- 示例:1.5kΩ阻抗建议使用239.5周期采样(SMPx=111)
四、注意事项
-
噪声抑制
- 避免在ADC转换期间切换GPIO状态,特别是高电流引脚(如PWM输出)
- 使用独立的模拟地平面,与数字地单点连接
-
动态性能优化
- 在连续采样模式下,适当降低ADC时钟(PCLK2分频),建议保持时钟≤14MHz
- 使用DMA传输减少CPU中断开销,提高采样效率
-
数据后处理
- 对于缓慢变化的信号(如温度),可结合软件低通滤波:
float alpha = 0.2; // 滤波系数(0.1~0.3) float adc_lowpass(float new_val, float old_val) { return old_val + alpha * (new_val - old_val); }
- 对于缓慢变化的信号(如温度),可结合软件低通滤波:
通过组合硬件滤波和软件算法,可显著提升STM32F103的ADC测量精度。建议先通过示波器观察原始信号特征,再针对性选择滤波方案。对于50Hz工频干扰,可考虑同步采样或软件数字陷波器实现。
请问adxrs620输出范围怎么调理到适合stm32f103的adc量程?
adxrs620输出范围怎么调理到适合stm32f103的adc量程了?stm32f103是3.3v供电的。620输出我想加一级rc的
2024-01-02 07:23:00
学习STM32F103的ADC功能
三勺最近在学习STM32F103的ADC功能,居然连最简单的独立模式的单通道的电压采集都不能实现,这就不能忍了,这是对智商的侮辱。
2023-10-24 16:06:03
GD32F103与STM32F103的区别 2021.6.2
GD32F103和STM32F103区别介绍关键词Key words:GD32F103、
资料下载
李杰
2021-12-08 11:06:03
采用STM32F103硬件ADC功能进行光照强度采集
光照强度采集ADC方式采集,STM32F103本身自带有硬件ADC功能。将采集到的数据实时刷新到屏幕上即可完成波形显示。
2022-05-31 11:32:52
7天热门专题
换一换
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- amoled屏幕和oled区别
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览