热敏电阻的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了热敏电阻的问题相关的知识,希望对你有一定的参考价值。

参考技术A

如果您打算在整个温度范围内均使用热敏电阻温度传感器件,那么该器件的设计工作会颇具挑战性。热敏电阻通常为一款高阻抗、电阻性器件,因此当您需要将热敏电阻的阻值转换为电压值时,该器件可以简化其中的一个接口问题。然而更具挑战性的接口问题是,如何利用线性 ADC 以数字形式捕获热敏电阻的非线性行为。
“热敏电阻”一词源于对“热度敏感的电阻”这一描述的概括。热敏电阻包括两种基本的类型,分别为正温度系数热敏电阻和负温度系数热敏电阻。负温度系数热敏电阻非常适用于高精度温度测量。要确定热敏电阻周围的温度,您可以借助Steinhart-Hart公式:T=1/(A0+A1(lnRT)+A3(lnRT3))来实现。其中,T为开氏温度;RT为热敏电阻在温度T时的阻值;而 A0、A1和A3则是由热敏电阻生产厂商提供的常数。
热敏电阻的阻值会随着温度的改变而改变,而这种改变是非线性的,Steinhart-Hart公式表明了这一点。在进行温度测量时,需要驱动一个通过热敏电阻的参考电流,以创建一个等效电压,该等效电压具有非线性的响应。您可以使用配备在微控制器上的参照表,尝试对热敏电阻的非线性响应进行补偿。即使您可以在微控制器固件上运行此类算法,但您还是需要一个高精度转换器用于在出现极端值温度时进行数据捕获。
另一种方法是,您可以在数字化之前使用“硬件线性化”技术和一个较低精度的 ADC。(Figure 1)其中一种技术是将一个电阻RSER与热敏电阻RTHERM以及参考电压或电源进行串联(见图1)。将 PGA(可编程增益放大器)设置为1V/V,但在这样的电路中,一个10位精度的ADC只能感应很有限的温度范围(大约±25°C)。

Figure 1,请注意,在图1中对高温区没能解析。但如果在这些温度值下增加 PGA 的增益,就可以将 PGA 的输出信号控制在一定范围内,在此范围内 ADC 能够提供可靠地转换,从而对热敏电阻的温度进行识别。
微控制器固件的温度传感算法可读取 10 位精度的 ADC 数字值,并将其传送到PGA 滞后软件程序。PGA 滞后程序会校验 PGA 增益设置,并将 ADC 数字值与图1显示的电压节点的值进行比较。如果 ADC 输出超过了电压节点的值,则微控制器会将 PGA 增益设置到下一个较高或较低的增益设定值上。如果有必要,微控制器会再次获取一个新的 ADC 值。然后 PGA 增益和 ADC 值会被传送到一个微控制器分段线性内插程序。
从非线性的热敏电阻上获取数据有时候会被看作是一项“不可能实现的任务”。您可以将一个串联电阻、一个微控制器、一个 10 位 ADC 以及一个 PGA 合理的配合使用,以解决非线性热敏电阻在超过±25°C温度以后所带来的测量难题 。

最小电阻数算法

【中文标题】最小电阻数算法【英文标题】:Minimum # of resistors algorithm 【发布时间】:2015-04-17 21:35:51 【问题描述】:

我正在尝试设计一个简单的算法,该算法采用标准电阻值的向量以及所需电阻值的输入,然后通过串联和并联组合来确定实现该目标所需的最小标准电阻数等效电阻通过串联和并联电阻的任意组合来实现,以最小者为准。

有人有什么想法吗?如果我只想要并联或串联,那会容易得多,但不确定如何将两者结合起来以减少电阻器的总数。

仅供参考,如果您不知道总系列 R = S1 + S2 + ...+ SN 和总并联 R = (1/S1 + 1/S2 + ... + 1/SN)^-1

【问题讨论】:

我忘了补充说我正在 matlab 中尝试这样做,以便可以对代码进行矢量化。我还计划不考虑公差,只使用 5% 电阻的输入列表。 以所有串联和并联方式连接的 n 个电阻器的不同电阻数由oeis.org/A005840 给出。该数对 n 渐近! * (1-log(2)) / (log(2))^(n+1) -> 指数增长。如果有一种明智的方法可以减少这种情况,我会感到惊讶,特别是如果输入值没有太多模式 “标准电阻值”连同它们的容差旨在覆盖整个正实线。换句话说,任何电阻都已经在标准电阻值的容差范围内,因此您可以使用 n=1 电阻解决您的问题。 :-) 那么代码的另一部分将是一个变量输入,您可以在其中列出实验室缺货的电阻值,并将它们从向量列表中删除。跨度> 如果是这样,那么我们几乎可以将其视为一个改变问题。我认为我在回答中建议的方法会奏效。您可能需要考虑的另一个问题:有一些方法可以组合不会分解为串联和并联的电阻器,例如,沿着立方体边缘的电阻器。要真正减少电阻器的数量,您也应该考虑这些网络。 【参考方案1】:

也许遗传算法是最好的?我不知道这个大 O 符号的计算,但它看起来是指数的:O(cⁿ)。

我在另一个网站的post 上发现了这条评论,它是不同值的电阻器可以实现的变化数量(即蛮力): 具有 1 个电阻的网络:1 具有 2 个电阻的网络:2 具有 3 个电阻的网络:10 具有 4 个电阻的网络:68 具有 5 个电阻的网络:558 带 6 个电阻的网络:5186 带 7 个电阻的网络:53805

遗传算法可以避免暴力破解,可能让您更快地得出答案。不幸的是,它不能保证用最少的电阻器就能得到答案。它可能会以更少的工作找到接近的等效电阻值,并且它可以是重量,因此它有利于尽可能少的电阻。

我会继续研究这个并发布我发现的任何其他内容。

【讨论】:

不是指数 O,因为您受算法中“迄今为止的最佳结果”的约束。一旦您知道可以通过 3 个步骤从 A 到 B,您就不需要再检查了。这实际上有点像寻路算法。 哦,太好了,如果一个正态指数 O 方程可以一步求解,那你怎么称呼它? 可能是指数级的? :)【参考方案2】:

创建一个对象来保存一个电阻值,加上它来自的两个电阻,再加上用于从前两个值(串联或并联)中获取值的操作。

使用一些集合数据结构,如 Set 或 ArrayList 来保存电阻对象。您的设置 S1 最初仅包含您拥有的电阻器(1 个电阻器的网络)。现在创建一个集合 S2,它是 S1 的一个元素与 S1 的一个元素的所有组合(串联或并联)。 S3 是 S1 和 S2 的组合。 S4是S1和S3的组合,是S2和S2的组合。继续,直到您的 Sk 成员在您的目标值的容差范围内(例如 1%、5% 或 10%)。生成的阻力对象可以一次一步展开,以找到它的构建方式。

您需要考虑的另一件事是公差如何组合。错误会传播,因此您可能需要 1% 的电阻器才能启动,以便在最后达到您想要的 5% 容差的电阻。

【讨论】:

这个算法是超指数的。即使您的电阻器组相对较小(例如 100 个),您甚至无法在合理的时间或内存量内访问现代计算机上的 5 个电阻器网络(S5 将具有 ~10^12 个元素) . 如果两个不同的组合给出相同的结果(例如R1 + R2 + R3 = R2 + R3 + R1),第二个将不会被存储。这样,它就是一种动态规划算法。如果有办法将对特定问题有用的阻力大小设置为最大值,则更容易获得运行时间和空间估计。

以上是关于热敏电阻的问题的主要内容,如果未能解决你的问题,请参考以下文章

大学物理实验:一个关于负温度系数热敏电阻实验的问题

电路中串连和并连电阻的作用是什麽??电阻越大会是怎麽样

热敏电阻温度传感器时恒工作范围是多少?

采样电阻是怎么进行电流采样的啊?

单片机 热敏电阻测温

单片机 热敏电阻怎么检测他的温度的