找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4021|回復(fù): 26
打印 上一主題 下一主題
收起左側(cè)

求問PT100如何用32單片機(jī)內(nèi)部ADC直接讀取溫度的公式

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
求問PT100如何用32單片機(jī)內(nèi)部ADC直接讀取溫度的公式,我們老大畫的電路圖,我黔驢技窮了,求問各位大佬!

1.png (7.42 KB, 下載次數(shù): 62)

電路圖是這樣設(shè)計(jì)的

電路圖是這樣設(shè)計(jì)的
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:883242 發(fā)表于 2022-12-8 18:25 | 只看該作者
PT100溫度與電阻的關(guān)系公式:
RT = R0(1 + AT + BT2 + C(T-100)T3)   
其中:
A = 3.9083 E-3
B = -5.775 E-7
C = -4.183 E-12 (低于0°C時)或0 (高于0°C時)。
回復(fù)

使用道具 舉報(bào)

板凳
ID:190832 發(fā)表于 2022-12-8 20:46 | 只看該作者
畫了個腿啊,找個專業(yè)點(diǎn)的老大吧
回復(fù)

使用道具 舉報(bào)

地板
ID:756400 發(fā)表于 2022-12-8 21:51 | 只看該作者
hange_v 發(fā)表于 2022-12-8 20:46
畫了個腿啊,找個專業(yè)點(diǎn)的老大吧

PT100當(dāng)NTC電阻用了
回復(fù)

使用道具 舉報(bào)

5#
ID:1008030 發(fā)表于 2022-12-9 08:09 | 只看該作者
hange_v 發(fā)表于 2022-12-8 20:46
畫了個腿啊,找個專業(yè)點(diǎn)的老大吧

我也看不懂,但是,哎
回復(fù)

使用道具 舉報(bào)

6#
ID:1008030 發(fā)表于 2022-12-9 08:10 | 只看該作者
Hephaestus 發(fā)表于 2022-12-8 18:25
PT100溫度與電阻的關(guān)系公式:
RT = R0(1 + AT + BT2 + C(T-100)T3)   
其中:

但是他得讓我用采集到的電壓算
回復(fù)

使用道具 舉報(bào)

7#
ID:123289 發(fā)表于 2022-12-9 09:01 | 只看該作者
先弄清楚測溫原理,問題就解決了。與用什么單片機(jī),一點(diǎn)關(guān)系也沒有!
提示:溫度-->電阻-->電壓-->AD-->數(shù)字。其中的關(guān)系。
回復(fù)

使用道具 舉報(bào)

8#
ID:1008030 發(fā)表于 2022-12-9 10:56 | 只看該作者
yzwzfyz 發(fā)表于 2022-12-9 09:01
先弄清楚測溫原理,問題就解決了。與用什么單片機(jī),一點(diǎn)關(guān)系也沒有!
提示:溫度-->電阻-->電壓-->AD-->數(shù) ...

我,,明白,我就是縷不順這個關(guān)系
回復(fù)

使用道具 舉報(bào)

9#
ID:883242 發(fā)表于 2022-12-9 11:32 | 只看該作者
宇智波油頭 發(fā)表于 2022-12-9 08:10
但是他得讓我用采集到的電壓算

Pt100的阻值都告訴你了,你不會用采集到的電壓推算出溫度?這里面涉及到的物理數(shù)學(xué)知識都是初中的。
回復(fù)

使用道具 舉報(bào)

10#
ID:236035 發(fā)表于 2022-12-9 12:14 | 只看該作者
溫度到電阻,查PT100的對照表。電阻到電壓到AD,不會就看模電書。AD到數(shù)字,不會看單片機(jī)教材。都不會,那就真沒法子。
回復(fù)

使用道具 舉報(bào)

11#
ID:1008030 發(fā)表于 2022-12-9 13:12 | 只看該作者
Hephaestus 發(fā)表于 2022-12-9 11:32
Pt100的阻值都告訴你了,你不會用采集到的電壓推算出溫度?這里面涉及到的物理數(shù)學(xué)知識都是初中的。

emmm,我真的,不是很順,自己寫了一個,感覺沒辦法直接用采集的電壓值出溫度
回復(fù)

使用道具 舉報(bào)

12#
ID:401564 發(fā)表于 2022-12-9 14:10 | 只看該作者
論壇里有程序呀,自己下載來看一下,應(yīng)該是可以的
回復(fù)

使用道具 舉報(bào)

13#
ID:883242 發(fā)表于 2022-12-9 14:41 | 只看該作者
宇智波油頭 發(fā)表于 2022-12-9 13:12
emmm,我真的,不是很順,自己寫了一個,感覺沒辦法直接用采集的電壓值出溫度

我想了下,用初中知識確實(shí)無法用公式算出來,要用到牛頓迭代法。
回復(fù)

使用道具 舉報(bào)

14#
ID:883242 發(fā)表于 2022-12-9 15:05 | 只看該作者
  1.         #include<stdio.h>
  2.         #include<math.h>
  3.         double resistance;
  4.         double func(double x) //original function
  5.         {
  6.             return -5.775e-7*x*x+3.9083e-3*x+1-resistance/100.0;
  7.         }
  8.         double func1(double x) //derivative function
  9.         {
  10.             return -5.775e-7*2.0*x+3.9083e-3;
  11.         }
  12.         int Newton(double *x,double precision,int maxcyc)
  13.         {
  14.             double x1,x0;
  15.             int k;
  16.             x0=*x;
  17.             for(k=0;k<maxcyc;k++)
  18.             {
  19.                 if(func1(x0)==0.0)
  20.                 {
  21.                     printf("derivative =0! on iterative process.\n");
  22.                     return 0;
  23.                 }
  24.                 x1=x0-func(x0)/func1(x0);
  25.                 if(fabs(x1-x0)<precision || fabs(func(x1))<precision)
  26.                 {
  27.                     *x=x1;
  28.                                 printf("root near the value.%lf\n",*x);
  29.          
  30.                     return 1;
  31.                 }
  32.                 else
  33.                 {
  34.                     x0=x1;
  35.                 }
  36.             }
  37.             printf("iterative repetition overflow.\n");
  38.             return 0;
  39.         }
  40.          
  41.         int main(int argc, char** argv)
  42.         {
  43.             double x,precision;
  44.             int maxcyc;
  45.             printf("resistance of Pt100(85~200):");
  46.             scanf("%lf",&resistance);
  47.             printf("initial iterative value x0:");
  48.             scanf("%lf",&x);
  49.             printf("max iterative repetition:");
  50.             scanf("%d",&maxcyc);
  51.             printf("iterative precision:");
  52.             scanf("%lf",&precision);
  53.             if(Newton(&x,precision,maxcyc)==1)
  54.             {
  55.             }
  56.             else
  57.             {
  58.                 printf("iteration failed!\n");
  59.             }
  60.             return 0;
  61. }
復(fù)制代碼


我給你寫了個牛頓迭代代碼,不要害怕這么長的代碼,主要目的還是展示牛頓迭代的原理和所需要的參數(shù),核心代碼就這么幾行,其他的都可以在移植到單片機(jī)的時候刪掉。
  1.             for(k=0;k<maxcyc;k++)
  2.             {
  3.                 x1=x0-func(x0)/func1(x0);
  4.                 if(fabs(x1-x0)<precision || fabs(func(x1))<precision)
  5.                 {
  6.                     *x=x1;
  7.                     return 1;
  8.                 }
  9.                 else x0=x1;
  10.             }
復(fù)制代碼


至于如何從AD讀數(shù)來推導(dǎo)出電阻值,我算了下,確實(shí)是初中數(shù)學(xué)問題,就不貼了。
回復(fù)

使用道具 舉報(bào)

15#
ID:195496 發(fā)表于 2022-12-9 18:21 | 只看該作者
這個要深入查資料研究一下,體會嘛,肯定是很深刻的
回復(fù)

使用道具 舉報(bào)

16#
ID:1008030 發(fā)表于 2022-12-10 08:16 | 只看該作者
Hephaestus 發(fā)表于 2022-12-9 15:05
我給你寫了個牛頓迭代代碼,不要害怕這么長的代碼,主要目的還是展示牛頓迭代的原理和所需要的參數(shù),核 ...

好的,謝謝您
回復(fù)

使用道具 舉報(bào)

17#
ID:1008030 發(fā)表于 2022-12-10 08:20 | 只看該作者
Hephaestus 發(fā)表于 2022-12-9 15:05
我給你寫了個牛頓迭代代碼,不要害怕這么長的代碼,主要目的還是展示牛頓迭代的原理和所需要的參數(shù),核 ...

Current_Temperature = ((V25-ADC_ConvertedValue[4])/AVG_SLOPE)-179;
我寫的是這種
回復(fù)

使用道具 舉報(bào)

18#
ID:883242 發(fā)表于 2022-12-10 12:25 | 只看該作者
宇智波油頭 發(fā)表于 2022-12-10 08:20
Current_Temperature = ((V25-ADC_ConvertedValue[4])/AVG_SLOPE)-179;
我寫的是這種

牛頓迭代比查表法占用flash空間小得多,而且精度高得多,唯一缺點(diǎn)是運(yùn)行時間比查表法長,為什么不試試?
回復(fù)

使用道具 舉報(bào)

19#
ID:123289 發(fā)表于 2022-12-12 08:18 | 只看該作者
認(rèn)真研讀“PT100”手冊,記住永遠(yuǎn)的法則:要控制什么,就必須先了解什么。。
你用10K與之分壓,能得到多少的變化分量呢?
回復(fù)

使用道具 舉報(bào)

20#
ID:996773 發(fā)表于 2022-12-12 09:11 | 只看該作者
雖然我沒自己做過溫度計(jì),但腦袋還是能想的出來的,這是模電干的事,pt100是鉑電阻,變化量比較小,這事得交給運(yùn)放來干,運(yùn)放放大后的溫度上下電壓值,然后再由ad單片機(jī)處理讀取顯示,在這里單片機(jī)屬于配角,單片機(jī)再怎么神通廣大是無法替代高精度運(yùn)放的,除非它能集成運(yùn)放
回復(fù)

使用道具 舉報(bào)

21#
ID:996773 發(fā)表于 2022-12-12 09:15 | 只看該作者
另外補(bǔ)充一句,不要看老大畫的圖了,是個笑話,別當(dāng)真
回復(fù)

使用道具 舉報(bào)

22#
ID:388550 發(fā)表于 2022-12-12 11:50 | 只看該作者
加運(yùn)放比較妥當(dāng),有做過類似項(xiàng)目
回復(fù)

使用道具 舉報(bào)

23#
ID:1034262 發(fā)表于 2022-12-12 11:55 | 只看該作者
PT100我都是直接進(jìn)入ADC,參考AD7705里的電路。
回復(fù)

使用道具 舉報(bào)

24#
ID:883242 發(fā)表于 2022-12-12 12:41 | 只看該作者
coody_sz 發(fā)表于 2022-12-12 11:55
PT100我都是直接進(jìn)入ADC,參考AD7705里的電路。

只有你說的是靠譜的,說加什么運(yùn)放的都是不懂裝懂的貨。性能靠譜的運(yùn)放不貴,但是配套的電阻貴上天了,1ppm的電阻要幾百塊,用普通電阻加運(yùn)放,電路不知道飄到哪里去了,根本沒法用。
回復(fù)

使用道具 舉報(bào)

25#
ID:1008030 發(fā)表于 2022-12-12 13:20 | 只看該作者
Hephaestus 發(fā)表于 2022-12-10 12:25
牛頓迭代比查表法占用flash空間小得多,而且精度高得多,唯一缺點(diǎn)是運(yùn)行時間比查表法長,為什么不試試?

可以了可以了!太感謝了!
回復(fù)

使用道具 舉報(bào)

26#
ID:1034262 發(fā)表于 2022-12-12 21:34 | 只看該作者
Hephaestus 發(fā)表于 2022-12-12 12:41
只有你說的是靠譜的,說加什么運(yùn)放的都是不懂裝懂的貨。性能靠譜的運(yùn)放不貴,但是配套的電阻貴上天了,1p ...

以前(90年代以前)沒有好的ADC可以用,所以就使用精密運(yùn)放來做電阻-電壓轉(zhuǎn)換,消除引線影響,還要有高精度的恒流源,調(diào)整困難,成本非常高。運(yùn)放精度、溫漂(因?yàn)橐绷鞣糯螅,電阻精度、溫漂,都影響長期精度。
后來,ADC差分輸入、參考電壓差分輸入的芯片,比如AD7705,國產(chǎn)的TM7705,都可以直接連接測量,我連恒流源都不用,只需要一個高精度的標(biāo)準(zhǔn)電阻(0.01%~0.1%)。
回復(fù)

使用道具 舉報(bào)

27#
ID:883242 發(fā)表于 2022-12-12 21:52 | 只看該作者
coody_sz 發(fā)表于 2022-12-12 21:34
以前(90年代以前)沒有好的ADC可以用,所以就使用精密運(yùn)放來做電阻-電壓轉(zhuǎn)換,消除引線影響,還要有高精 ...

現(xiàn)代單片機(jī)這么便宜,電阻的初始精度并不重要,誤差再大用軟件標(biāo)定可以輕松消除。這樣溫漂才是影響精度的至關(guān)重要的因素。

舉例來說:


國家級電壓基準(zhǔn)是兩個約瑟夫森結(jié),量子電壓標(biāo)準(zhǔn)。省一級的電壓基準(zhǔn)是靠基于LTZ1000的萬用表來傳遞的。

LTZ1000的電壓是7.0~7.5V,初始誤差高達(dá)±3.6%!但是LTZ1000非常穩(wěn)定。〕跏季扔脴(biāo)定就可以輕松消除,但是不穩(wěn)定就毫無辦法了。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表