stm32之adc采样部分的电路图讲解

采样部分的电路图

在这里插入图片描述

结构

主要的功能包含下面三个
1、滤波
因为我采样的都是期望的是直流的信号,因此,此处进行将高频的噪声进行一定的滤波
2、 电压调理
由于stm32的电压输入范围是0-2v。 而输入的电压的范围都是在10v,因此首先进行发反向的电压调理,随后,加入一个反向器进行再将电压反相回来。
3、电压调整
选择的是一个可调的电阻,以防止输入电压的变化范围改变。

具体的参数

输入电压的范围分别是5V,10V,10V, 因此进行一定的降压即可。

选择的运放是UA741CD

关于内部AD采样内部的一些查询

采用的是片上的AD

(1)stm32 共有3路AD通道
(2)12位的sars(逐次逼近) 最大转换速率为1MHz,ADC的时钟,一般不超过14Hz,所以,对于72M的总线时钟,我们选择6分频达到12M的工作时钟。
(3)基准电压是3.3V(100pin以下,由内部自己进行短接了)

采用的是片上的DMA+ADC的方案

请参考之前开发的时候写的文档:
之前采用的非DMA 的模式:https://blog.csdn.net/weixin_42066185/article/details/89283572

后来为了方便,将其全都修改成了DMA的模式
参考如下:

https://blog.csdn.net/weixin_42066185/article/details/98095821

最后实现的AD采样的精度

在这里插入图片描述

### AD采样电路设计原理与实现方法 AD采样电路是一种将模拟信号转换为数字信号的技术,广泛应用于各种电子设备中。其核心目标是通过精确的采样过程获取输入信号的关键特征并将其数字化以便后续处理。 #### 1. 原理概述 AD采样的基本工作流程可以分为以下几个部分:信号调理、量化和编码。其中,信号调理阶段通常涉及放大、滤波等操作,目的是使待测信号适应模数转换器(ADC)的工作范围[^1]。例如,在某些应用中,需要将大动态范围的电流或电压信号缩小至适合ADC输入的范围内(如0~3.3V)。这一步骤可以通过分压网络或者运算放大器来完成。 对于具体的电流采样场景,采用高精度运放配合差动放大结构是一个常见做法。比如在双极性跟踪可调精密直流电源的设计案例里提到使用INA282芯片搭配低温度系数的康铜丝作为采样元件,构建了一个稳定的电流检测回路[^3]。该方案不仅考虑到了器件选型的重要性——即选用具有优良特性的材料降低误差源影响;同时也强调了外围电路设计细节,像加入RC滤波环节减少高频干扰成分对最终结果造成不良后果的可能性。 #### 2. 实现方法详解 ##### (1)硬件构成要素分析 - **采样电阻选取** 在实际项目开发过程中,合理选择合适的取样阻抗至关重要。一方面它决定了整个系统的灵敏度水平;另一方面还关系到功率损耗等问题。因此需综合考量各方面因素做出最佳决策。例如当面对不同按键状态切换产生的微弱变化时,则应调整关联参数使得即使处于极限条件下也能被有效识别出来[^2]。 - **前端缓冲级联配置** 考虑到来自外部环境可能引入的各种噪声干扰项,往往会在靠近传感器位置处增加一级或多级隔离屏障措施。这些额外增设的部分有助于提升整体性能表现指标的同时也增加了复杂程度。典型例子就是在上述提及的文章当中所描述的那种形式—由专用集成电路(INA系列)承担起初步转化任务之后再交给通用型MCU单元继续深入解析下去[^4]。 ##### (2)软件算法支持框架说明 除了依赖高质量物理层组件之外还需要借助先进的数据处理手段才能充分发挥这套架构的优势所在。主要包括但不限于以下几方面内容: - 数据平滑化处理策略制定; - 非线性补偿机制建立完善; - 动态阈值判断逻辑设定等等。 以上各项都需要紧密结合特定应用场景需求来进行定制化开发调试直至达到预期效果为止。 ```python import numpy as np def ad_sampling(voltage_signal, adc_range=(0, 3.3), resolution_bits=12): """ Simulate the process of converting an analog voltage signal to a digital value using ADC. Parameters: voltage_signal (float): Input voltage level that needs conversion. adc_range (tuple): Range supported by the ADC input pin. resolution_bits (int): Number of bits used for quantization. Returns: int: Digital representation corresponding to given voltage. """ min_volt, max_volt = adc_range step_size = (max_volt - min_volt) / (2 ** resolution_bits) if not(min_volt <= voltage_signal <= max_volt): raise ValueError(f"Voltage {voltage_signal} out of range [{min_volt}, {max_volt}]") digitized_value = round((voltage_signal - min_volt) / step_size) return digitized_value example_voltage = 2.5 converted_digital_val = ad_sampling(example_voltage) print(converted_digital_val) ``` 此代码片段展示了如何简单地模仿从模拟电平映射到离散数值的过程,这对于理解基础概念非常有用。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有水杯和雨伞的工科男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值