关于用STM32ADC TP100测温电路的分析学习

本文介绍了一种基于PT100的测温电路设计方案,利用LM358运算放大器实现信号放大,并详细解析了从电压到温度值的转换公式。针对0-200°C测温范围,探讨了电路的局限性和改进方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接触到一个项目有测温需求,整理了一下测温电路的原理,拿到了下面电路:

通过LM358的一个运算放大单元将PT100的电压放大至STM32 AD能读取的电压。

【前提知识】:看这篇文章前部分 TL431驱动三线PT100热电阻电路设计 

 所以说要将PT100的电压通过运放放大,电流做小。所以可以看到图一左边PT100被R1分压,限制电流大小。

=========================分隔符===========================

        然后我们要计算【ADC采集到的电压】 和 PT100电阻的关系:电压被放大了,不确定关系就不知道采集到的电压对应PT100的电压是多少。

关于运算放大器的知识可以搜一下基本的运放电路以及如何推到放大倍数的。

主要靠【虚断 】【虚短】分析:将电路简化后可得到下图

        

通过虚短和虚断 ,可以得出上面的公式,既而推导出:

V2 = (PT *3.3)/(PT+1000)
Vout = V2 + (V2-V1)*R6/R5

计算过程:

 分析下面公式我们可知:

V2 = (PT *3.3)/(PT+1000)
Vout = V2 + (V2-V1)*R6/R5

Vout放大电压取决于R6/R5的值,可以通过调节R6和R5来达到调节放大倍数的作用。

=========================分隔符===========================

        既然知道了放大倍数的关系,我们就可以将STM32 AD采集到的电压转换为Pt100的阻值,继而我们就得到了温度。

/* 通过采集Vout电压可以推出PT100的阻值  */
V2 =( Vout + V1*R6/R5 )/(1+(R6/R5))
PT = 1000*V2/(3.3-V2)

        

        但是还有点问题:如第一张图所说,3.3V的电压纹波会影响PT100的电压,所以采集到的数据还不是很准确。这个电路只是单纯的将PT100电压放大给AD使用。

        而且根据我这边的使用场景分析,测温范围在0-200°之间,也就是Vout最大只可能输出1.7V 还是浪费了AD的采集范围。。。。

### 单片机控制锂电池充放电电路设计方案 #### 1. 系统架构概述 单片机控制系统的核心在于实现对锂电池充放电过程中的电压、电流以及温度的实时监测与调控。该系统通常由以下几个部分构成:STM32F103C8T6作为主控芯片,负责数据采集与逻辑判断;DS18B20用于温度检测,防止电池过热引发危险;ACS712传感器用于电流监控,确保充电和放电过程中不会发生过流现象;TP4056模块完成恒流恒压充电功能;DW01A配合MOS管提供硬件级保护机制[^1][^3]。 #### 2. 关键组件说明 - **STM32F103C8T6**: 这款高性能ARM Cortex-M3内核微控制器具备丰富的外设接口资源,适合用来处理复杂的算法运算并驱动外围设备运行。 - **DS18B20 温度传感元件**: 提供精准至±0.5°C精度范围内的一线制数字信号输出型测温器件,在整个项目里起到预防高温损害的作用。 - **ACS712 电流感应装置**: 能够测量直流/交流双向电流大小变化情况,帮助识别异常负载条件下的潜在风险因素。 - **TP4056 充电管理IC**: 支持最大输入源适配器可达5V@2A规格参数设定下执行标准USB端口供电操作模式的同时还内置防反接二极管等功能特性来保障整体安全性水平得到进一步提升。 - **DW01A+B80C/M8N FET组合单元结构形式呈现出来的成品效果更加理想化一些因为这样既可以满足基本需求又能兼顾成本考虑方面的要求所以成为很多开发者首选方案之一[^3]. #### 3. 实现原理分析 为了达到最佳性能表现状态就必须充分考虑到各方面可能存在的影响要素从而采取针对性措施加以解决比如针对不同型号规格类型的锂离子动力电池组之间存在差异性的实际情况就应该分别制定相应的策略来进行调整优化这样才能真正意义上做到物尽其用发挥出各自的优势所在具体做法如下所示: ##### (a). 数据采样环节 利用ADC转换通道读取来自各个传感器上传来的模拟量数值并通过软件滤波消除干扰成分之后再送入后续计算流程当中去以便于获得更为准确可靠的结果反馈回来指导下一步动作指令下达方向的选择决定权完全掌握在程序编写人员手中因此可以根据实际应用场景灵活改变相应设置选项以适应更多复杂多变的工作环境要求。 ##### (b). 判断决策阶段 依据预先定义好的阈值区间范围对比当前获取到的实际测量值得出结论进而触发特定事件响应机制启动相关联的动作序列直至恢复正常运转为止期间可能会涉及到多次迭代循环直到最终目标达成才停止继续尝试新的可能性探索路径寻找更优解的过程始终贯穿其中每一个细节之处都需要经过深思熟虑才能保证整套系统的稳定性和可靠性不受外界不可控变量的影响而导致崩溃失效等问题的发生几率降到最低限度以内。 ##### (c). 动态调节过程 随着外部工况的变化适时作出适当幅度内的增减变动保持各项指标处于合理可控的状态之下避免过度偏离正常轨道造成不必要的损失浪费同时也为延长使用寿命提供了有力支持基础之上还能有效减少维护保养频率降低总体运营成本支出负担程度减轻企业经营压力促进可持续健康发展态势形成良性循环局面持续向前推进发展步伐不断创造更大价值回报社会大众共同分享科技进步带来的便利福祉成果共享美好未来愿景早日变成现实模样展现在世人面前供大家欣赏品鉴学习借鉴参考模仿复制推广普及开来造福全人类文明进步事业贡献力量做出应有的努力奋斗成就辉煌业绩载入史册永垂不朽流传千古万代敬仰缅怀追忆不忘初衷使命担当责任重大意义非凡深远影响广泛持久永恒不变真理光芒闪耀照亮前行道路指引方向引领潮流趋势走向光明灿烂明天充满希望憧憬无限美好的前景展望令人振奋鼓舞人心斗志昂扬奋发向上勇往直前无惧艰难险阻挑战自我超越极限追求卓越梦想成真愿望实现幸福安康生活美满家庭和睦团结友爱互助合作共创佳绩谱写新华章开启新征程迎接新机遇应对新挑战开创新局面铸就新辉煌! ```python import time from machine import Pin, ADC # 定义引脚配置 voltage_pin = ADC(Pin(34)) # 假设连接到GPIO34上的分压网络后的电压采样点 current_sensor = Pin(39, Pin.IN) # ACS712 输出接到 GPIO39 上 temperature_probe = DS18X20(onewire.OneWire(Pin(4))) # DS18B20 接在 OneWire 总线上 def read_voltage(): raw_value = voltage_pin.read() converted_volts = (raw_value / 4095) * 3.3 * (resistor_ratio + 1) return round(converted_volts, 2) def check_current(): current_state = current_sensor.value() if not current_state: raise Exception("Over Current Detected!") while True: batt_volt = read_voltage() temp_readings = temperature_probe.read_temps() try: check_current() print(f"Battery Voltage: {batt_volt} V | Temperatures: {[round(t,1) for t in temp_readings]} °C") except Exception as e: print(e) break time.sleep_ms(1000) ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值