单片机笔记——ADC

 

用到一款 ADC 芯片(MCP3421),查资料看见一篇文章写得很好:

MCP3421高精度ADC转换器 - CSDN博客​blog.csdn.net图标

 

一个项目的需求,使用的单片机型号为stm32f030f4,虽然单片机自带了12位ADC转换器,分辨率可以达到805.66uV (此型号没有内部参考电压,所以使用工作电压作为参考电压,所以精度值计算:3.3V除以2的12次方)。

但这个项目需要检测很小的电流,最起码要能检测到1mA电流,最大电流可以达到3A,所以检测电阻不能太大。大就会超出量程,也会产生大的功耗。这个电阻选择了2512封装0.012欧,1mA电流产生的电压为12uV,这个电压单片机无法检测到,所以必须重新找个分辨率高的ADC转换器。

 

深入理解参考电压与分辨率的关系,以及如何根据项目实际情况,选择合适的 ADC 方案和分辨率;

片内可编程增益放大器(PGA)——可以是采集方案更加灵活;

### STM32 ADC 学习教程和笔记 #### 一、STM32 ADC 基本概念 STM32F103ZET6 单片机配备有三个12位精度的模拟数字转换器(ADC),总共提供18个通道,能够处理来自外部的16个信号源以及两个内部信号源。这些通道支持多种工作模式,包括但不限于单次转换、连续转换、扫描模式和间断模式。值得注意的是,为了确保正常运作,ADC模块所需的输入时钟频率不应超过14MHz,该时钟是从APB2总线上的PCLK2经过预分频得到的[^3]。 #### 二、ADC 软件启动机制分析 对于通过软件指令来发起一次新的转换操作而言,在某些情况下可能会涉及到查询`ADC_GetSoftwareStartConvStatus()`函数的状态返回值;然而实际上此方法并不常用,因为其功能较为有限,并未被广泛应用于实际项目开发当中[^2]。 #### 三、触发方式的选择 除了上述提到的纯软件控制之外,还可以利用硬件事件作为触发条件来进行自动化的数据采集过程。这类触发源通常来源于定时器产生的中断请求或者其他外设发出的相关脉冲信号。此外,整个AD转换流程依赖于由RCC配置好的专用时钟源——即所谓的ADC_CLK,它是驱动逐次逼近型A/D变换的核心动力源泉[^4]。 #### 四、性能参数考量 假设当前使用的ADC时钟频率设定为最大允许值14MHz,则完成一轮完整的采样加量化所需时间大约等于1微秒左右。具体计算公式如下所示: \[T_{conv}=(SMPR+12.5)\times\frac{1}{f_{adc}} \] 其中\( SMPR \)代表样本保持阶段所占用的时间长度,默认设置下取值为1.5个周期数[^5]。 ```python # Python代码片段用于验证理论计算结果 def calculate_conversion_time(f_adc, smpr=1.5): """Calculate the conversion time based on given parameters.""" t_conv = (smpr + 12.5) * (1 / f_adc) return round(t_conv, ndigits=9) print(calculate_conversion_time(14e6)) # Output should be close to 1 us ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值