本帖最后由 any012 于 2016-4-12 17:40 编辑
现在用的外置ADC的方案。
电路原理基本如下,运放产生恒流源,加到PT100热电阻和一个4.02K的电阻上。ADC采样4.02K电阻两端的电压作为基准电压,然后ADC采集PT100电阻两端电压,由于流过两电阻的电流(近似)一致,所以有如下公式:
Rpt = 4.02k*Value/8/2^24;
式中的8是由于ADC内部将AD值放大了8倍,最后运算时需要除8,2^24指的是24位adc的最大值,对应的是4.02k电阻的电压值;Value对应的就是PT100电阻上对应的电压值;
如果按上式计算的话,有一定误差。80欧时,就有2欧的误差,估计是引线电阻引起的,用的30cm左右长度的双头夹子线。
外接精密阻值 | 两线测量阻值 | 误差 | 0 | 0.027 | 0.027 | 80 | 82.033 | 2.033 | 100 | 102.17 | 2.17 | 120 | 122.385 | 2.385 | 150 | 152.512 | 2.512 | 180 | 182.652 | 2.652 | 200 | 202.895 | 2.895 | 300 | 304.041 | 4.041 |
于是修改了下程序,改成三线制测量,理论上可消除引线带来的误差,结果还是有不小的误差。
外接精密阻值 | 两线测量阻值 | 误差 | 三线测试阻值 | 误差 | 0 | 0.027 | 0.027 | 0.017 | 0.017 | 80 | 82.033 | 2.033 | 80.53 | 0.53 | 100 | 102.17 | 2.17 | 100.669 | 0.669 | 120 | 122.385 | 2.385 | 120.912 | 0.912 | 150 | 152.512 | 2.512 | 151.05 | 1.05 | 180 | 182.652 | 2.652 | 181.211 | 1.211 | 200 | 202.895 | 2.895 | 201.407 | 1.407 | 300 | 304.041 | 4.041 | 302.545 | 2.545 |
有考虑了另一种方法,既然被测电阻值和读取的adc数据是一次函数关系,那么设阻值为y,读取值为x,则有y = a*x + b;通过多项式计算a, b值即可。
于是计算后下表。
y = a*x + b |
|
| 外接电阻 | AD_Value | a | b | 0 | 50647 |
|
| 80 | 2738187 | 33.59425 | -1507.609189 | 100 | 3411476 | 33.60829 | -1509.979379 | 120 | 4086779 | 33.634433 | -1505.808036 | 150 | 5091897 | 33.608333 | -1506.977436 | 180 | 6098723 | 33.600422 | -1507.332249 | 200 | 6775847 | 33.626 | -1506.18569 | 300 | 10150651 | 33.66668 | -1504.365741 |
|
| 33.619773 | -1506.89396 |
这是用两线制情况下测到的值计算出来的,最后把a, b的平均值带到计算公式里,然后运行程序,得到的值,是略小于精密电阻的实际阻值。
但,这是包含两根引出线的情况,感觉这样算也不对,你不知道客户那里会用多长的线,引出线的电阻肯定不一样。
y = a*x + b |
|
|
|
| 外接电阻 | AD_Value | a | b |
| 代入ab后得到的阻值 | 0 | 50647 |
|
|
| 1.481 | 80 | 2738187 | 33.59425 | -1507.609189 |
| 79.993 | 100 | 3411476 | 33.60829 | -1509.979379 |
| 100.011 | 120 | 4086779 | 33.634433 | -1505.808036 |
| 120.119 | 150 | 5091897 | 33.608333 | -1506.977436 |
| 150.02 | 180 | 6098723 | 33.600422 | -1507.332249 |
| 180.214 | 200 | 6775847 | 33.626 | -1506.18569 |
| 200.064 | 300 | 10150651 | 33.66668 | -1504.365741 |
| 300.477 |
|
| 33.619773 | -1506.89396 |
|
|
|