stm32f103 adc 跳
更多
STM32F103 的 ADC 采样值出现跳动(不稳定)的常见原因及解决方法如下:
1. 硬件问题
(1) 电源噪声
- 原因:模拟电源(VDDA)或参考电压(VREF)不稳定,导致 ADC 基准波动。
- 解决方法:
- 确保 VDDA 和 VSSA 引脚接高质量滤波电容(如 1µF + 100nF 并联)。
- 若使用外部参考电压(如 VREF+),需确保其干净稳定(可用低噪声 LDO 供电)。
(2) 信号源问题
- 原因:被测信号本身存在噪声(如传感器输出波动)。
- 解决方法:
- 在 ADC 输入引脚前添加 RC 低通滤波器(如 1kΩ + 100nF),滤除高频噪声。
- 若信号阻抗较高,需增加电压跟随器(运放缓冲)。
(3) PCB 布局问题
- 原因:模拟信号走线与数字信号(如 PWM、GPIO)耦合,引入干扰。
- 解决方法:
- 模拟信号走线尽量短,远离高频数字信号。
- 使用独立的地平面(AGND 和 DGND 单点连接)。
2. 软件配置
(1) ADC 时钟配置
- 原因:ADC 时钟频率过高,导致采样精度下降。
- 解决方法:
- 设置 ADC 时钟 ≤ 14 MHz(STM32F103 的最大允许值)。
- 通过
RCC_ADCCLKConfig()调整分频系数(如 PCLK2 分频为 6)。
(2) 采样时间不足
- 原因:ADC 采样时间过短,导致内部电容未充满。
- 解决方法:
- 增加采样周期(如
ADC_SampleTime_239Cycles5)。 - 通过
ADC_RegularChannelConfig()设置更长的采样时间。
- 增加采样周期(如
(3) 软件滤波
- 原因:单次采样易受噪声影响。
- 解决方法:
- 多次采样取平均值(如 16 次采样后取均值)。
- 使用滑动平均滤波或中值滤波算法。
3. 其他注意事项
- 校准 ADC:上电后执行一次 ADC 校准(
ADC_Calibration())。 - 禁用其他外设:在 ADC 采样期间,关闭可能产生干扰的外设(如 PWM、定时器)。
- 输入阻抗匹配:若信号源阻抗 >10kΩ,需增加外部缓冲电路。
代码示例(基础配置)
// 初始化 ADC1 通道 0(PA0)
void ADC_Init() {
GPIO_InitTypeDef GPIO_InitStruct;
ADC_InitTypeDef ADC_InitStruct;
// 使能时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE);
// 配置 PA0 为模拟输入
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStruct);
// ADC 基础配置
ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;
ADC_InitStruct.ADC_ScanConvMode = DISABLE; // 单通道模式
ADC_InitStruct.ADC_ContinuousConvMode = DISABLE; // 单次转换
ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStruct.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStruct);
// 设置采样时间(239.5 周期)
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5);
// 校准 ADC
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while (ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while (ADC_GetCalibrationStatus(ADC1));
}
// 读取 ADC 值(多次采样取平均)
uint16_t ADC_Read() {
uint16_t sum = 0;
for (int i = 0; i < 16; i++) {
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
sum += ADC_GetConversionValue(ADC1);
}
return sum >> 4; // 16 次平均
}
通过以上方法,可显著改善 ADC 采样值的稳定性。若问题仍未解决,建议用示波器检查信号和电源波形,定位干扰源。
STM32F103VET6
1970-01-01 08:00:00 至 1970-01-01 08:00: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是什么意思?
- EDA是什么?有什么作用?
- dtmb信号覆盖城市查询
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机