Ⅰ、 Üç telli PT100 sıcaklık ölçüm prensibi

Üç telli bağlantı yönteminin temel amacı, uç direncinin ölçüm doğruluğu üzerindeki etkisini ortadan kaldırmaktır. PT100'ün direnç değeri çok küçüktür (100Ω @ 0℃) ve bağlantı kablolarının direnci (R6, R7, R15 olarak yazılan bir ohm'un birkaç onda biri ila birkaç ohm, üç telli RTD test şemasına bakın) ihmal edilemeyecek hatalara neden olabilir. Üç telli sistem bu sorunu akıllı devre tasarımıyla çözer; burada üç telli RTD'nin üç ucu da tipik olarak aynı uzunluktadır, bu nedenle üç ucun direncinin eşit olduğu varsayılır (RL1 = RL2 = RL3, yani şemada R6=R7=R15), SSP1220'nin dahili çift akım kaynağı (IDAC) bu uç dirençlerinin etkilerini gidermek için kullanılır.

Ölçüm prensibinin detaylı açıklaması:

  1. SSP1220 içinde iki eşleşen programlanabilir akım kaynağı (IDAC1 ve IDAC2) kullanarak ve aynı akım çıkışını vererek: , akım kaynağı seçiminin 1mA'den az olması önerilir ve bu test için akım kaynağı seçim değeri 500uA'dir.
  2. PT100'ün üç uç direncinin eşit olduğu varsayılır: R6 = R7 = R15 = Rl
  3. SSP1220, PT100 üzerindeki gerilimi bir diferansiyel giriş çifti (AIN0, AIN1) aracılığıyla ölçer: VİÇİNDE = VAIN1 - VAIN0

Oysa: VAIN1 = IIDAC1 x (RL1+RPT100) + (IIDAC1 + IIDAC2) x RL3, VAIN0 = IIDAC2 x RL2 + (IIDAC1 + IIDAC2) x RL3

Beri: BenIDAC1 = IIDAC2 = IIDAC VE RL1 = RL2 = RL3 = RL

yerine koyarak: VIN = [IIDAC x (RL + RPT100) + 2IIDAC x RL] - [IIDAC x RL + 2IIDAC x RL] = IIDAC x RL + IIDAC x RPT100 + 2IIDAC x RL - 2IIDAC x RL = IIDAC x RPT100

Akıllı devre yapılandırması sayesinde, uç direncinin etkisi diferansiyel giriş gerilimi VIN'den tamamen ortadan kaldırılır ve yalnızca PT100 direnci üzerindeki gerilim düşüşü dahil edilir.

  1. SSP1220 referans voltajı Vref, iki IDAC akımının yüksek hassasiyetli bir harici referans direnci olan Rref (R5) aracılığıyla birleştirilmesiyle üretilir, yani Vref = (Iidac1 + Iidac2) * R
  2. Oran ölçümlerinde, nihai ADC çıkış kodu IDAC akımının mutlak değerine, doğruluğuna ve sapmasına bakılmaksızın (Rpt100) / (Rref) ile orantılıdır ve aynı zamanda Rl1 ve Rl2 uç dirençlerinin etkisine karşı koyar:

24 bit SSP1220 için çıkış sayısal kodu şöyledir:

Kod = (223 - 1) x (VİÇİNDE/VREF) = (223 - 1) x [RPT100/(2 x RREF) ]

PT100 direnç değerini ADC kodu ile ters çevirin:

RPT100 = [Kod/(223-1)] x 2 x RREF

Son olarak, PT100'ün direnç-sıcaklık özelliklerine göre (genellikle Callendar-Van Dusen denklemi veya tablo arama yöntemi kullanılarak), Rpt100 bir sıcaklık değerine dönüştürülür: T = f (Rpt100). PT100 için, at0℃, R0 = 100.00Ω, direnç sıcaklık katsayısı yaklaşık α≈ 0.00385 Ω/Ω/℃

Ⅱ、 Donanım devre tasarımı

Veri sayfasındaki tipik uygulamaya göre, tipik bir üç telli PT100 bağlantı devresi aşağıdaki gibidir:

  1. Devre bağlantı talimatları
  • PT100 bağlantısı: PT100 (üç telli sistem) şematikte gösterildiği gibi bağlanır.
  • Gerilim referansı üretimi: IDAC1 çıkışı AIN2'ye (dahili yazılım yapılandırması gereklidir), IDAC2 çıkışı AIN3'e (dahili yazılım yapılandırması gereklidir) bağlanır ve iki IDAC akımı düğümde birleşir ve harici referans direnci Rref (R5) üzerinden birlikte akar. REF'in diğer ucu analog toprak AVSS'ye bağlanır. SSP1220'nin pozitif referans girişi REFP0, RREF'in (R5) üst ucuna (IDAC birleşme noktası) bağlanır. SSP1220'nin negatif referans girişi REFN0, AVSS'ye bağlanır. Bu nedenle, referans voltajı, VREF= (IIDAC1 + IIDAC2) * RREF.
  • Sinyal ölçümü: SSP1220 için AIN1, diferansiyel pozitif giriş AINP olarak yapılandırılmıştır ve SSP1220'nin AIN0'ı diferansiyel negatif giriş AINN olarak yapılandırılmıştır, böylece ölçülen voltaj AIN1 ve AIN0 arasındaki potansiyel farktır.
  • Filtreleme devresi: RC alçak geçiren filtrelerin hem analog girişlere (AIN0, AIN1, AIN2) hem de referans girişlerine (REFP0) kenar yumuşatma ve gürültü bastırma için eklenmesi gerekir. Giriş filtreleri: R1, R2, C1 ve C6, C5'ten oluşur. Referans filtresi: R3, R4, C2 ve C3, C4'ten oluşur. Ölçek ölçümlerinin doğruluğunu korumak için referans filtresinin kesme frekansı giriş filtresiyle eşleşmelidir.

Ⅲ、Cihaz seçimi ve parametre hesaplama

Varsayımsal tasarım hedefleri aşağıdaki gibidir: PT100 tipi: üç telli; Sıcaklık ölçüm aralığı: -200°C ~ +850°C; Besleme gerilimi AVDD: 3.3V (AVSS = 0V); DAC Akımı: 500μA (kanal başına); Veri hızı: 20 SPS (optimum gürültü performansı için).

  1. Referans direnç (Rref) seçimi ve hesaplanması

Rref, tüm sistemin doğruluğunun merkezinde yer alır. İşlevi: ADC'nin referans voltajı V ref'yi üretir ve doğruluğu ve kararlılığı ölçüm sonuçlarını doğrudan belirler.

Direnç Hesaplama:

ADC'nin aralığını en üst düzeye çıkarmak ve PGA'nın ortak mod voltajı gereksinimlerini karşılamak için Vref tipik olarak besleme voltajının yaklaşık yarısına ayarlanır. Bu tasarımda AVDD = 3,3V ve hedef VREF yaklaşık 1,65V'tur.

IIDAC = I_IDAC1 + I_IDAC2 = 500uA + 500uA = 1mA

RREF = VREF /(IIDAC1 + IIDAC2) = 1,65V/1mA = 1,65kΩ

Nominal değeri 1,65 kΩ olan bir direnç seçilebilir. Bulunamazsa, 1,62kΩ veya 1,69kΩ da kabul edilebilir bir yaklaşımdır.

Seçim şartları:

Doğruluk: En az ±0,1%, yüksek hassasiyetli uygulamalar için ±0,05% veya üzeri önerilir.

Sıcaklık Dalgalanması: Çok düşük olmalıdır, ±5 ppm/°C veya ±10 ppm/°C'lik hassas film direnci önerilir.

Uzun vadeli istikrar: yüksek.

Asla normal bir 1%, 100ppm/°C çip direnci kullanmayın.

  1. IDAC akım ve PGA kazanç seçenekleri

IDAC Akımı: 500μA seçilmiştir. Bu değer güç tüketimi, kendi kendine ısınma etkisi ve sinyal genliği arasında iyi bir denge kurar. Akım çok küçükse, sinyal zayıftır ve gürültüden kolayca etkilenir; Çok fazla akım PT100'ün kendi kendine ısınmasına veya IDAC uyumlu voltajları aşmasına neden olabilir.

PGA Kazanç Seçimi: PT100 daha küçük bir gerilime sahiptir (örn. 500μA × 100Ω = 50mV), ancak bir oran ölçümü kullanır (referans gerilimi de IDAC'dendir), bu nedenle doygunluğu önlemek için yükseltmeye gerek yoktur ve kazanç seçimi 1X'tir.

  1. Filtre devresi bileşen seçimi

Filtre Dirençleri (R1, R2, R3, R4): Genellikle 1kΩ seçilir. Bu değer etkili bir şekilde filtreleme yapmak için yeterince büyük ve girişte önemli ofset gerilimlerinden kaçınmak için yeterince küçüktür (giriş öngerilim akımı nedeniyle). Ayrıca akım sınırlayıcı koruma görevi de görürler.

Diferansiyel filtre kapasitörleri (C1, C2): Kesme frekansını dirençle birlikte ayarlayın. Örneğin, 20SPS veri hızı için kesme frekansı onlarca Hz olarak ayarlanabilir. fc = 1 / (2π * (R1+R2) * C1)。 R1+R2=2kΩ ve fc ≈ 16Hz beklenirse, C1 ≈ 1 / (2* 2000 * 16) ≈ 4,7μF. Gerçek dünya uygulamalarında, daha geniş bir gürültü reddetme bant genişliği elde etmek için genellikle 100nF (0,1μF) kullanılır. Tip: C0G (NPO) seramik kapasitörler, kararlı dielektrik sabiti, düşük voltaj katsayısı ve düşük mikroakustik etkisi nedeniyle tavsiye edilir.

Ortak mod filtreli kapasitörler (C5, C6, C3, C4): Diferansiyel kapasitörlerin uyumsuzluklarının aşırı ortak mod gürültüsünün diferansiyel gürültüye dönüşmesine neden olmamasını sağlamak için tipik olarak 10nF gibi diferansiyel kapasitörlerden daha küçük bir büyüklük sırası seçilir.

Ⅳ、Yazılım yapılandırması

  1. Ana Mantık:

float SSP1x20_read_temperature(void)

{

uint32_t ADC_data;

uint32_t ADC_temp1;

//SSP1x20_read_register(SSP1x20_REG0, 4, &Read_REGTab[0]);

Write_REGTab[0] = SSP1x20_MUX_AIN0_AIN1 | SSP1x20_GAIN_1 | SSP1x20_PGA_BYPASS_ON;

Write_REGTab[1]=SSP1x20_DR_20SPS|SSP1x20_MODE_NORMAL|SSP1x20_SC|SSP1x20_TS_ON| SSP1x20_BCS_OFF;

Write_REGTab[2]=SSP1x20_VREF_2048|SSP1x20_REJECT_OFF|SSP1x20_PSW_OFF | SSP1x20_IDAC_1000uA;

Write_REGTab[3] = SSP1x20_IDAC1_AIN2 | SSP1x20_IDAC2_AIN3 | SSP1x20_DRDYM_DRDY;

SSP1x20_WriteRegister(SSP1x20_REG0, 4, &Write_REGTab[0]);

SSP1x20_SendCommand(SSP1x20_CMD_START);

SPI_ADC_CS_LOW();

while (ADC_DRDY_GAIN == 1);//SSP1x20_DRDYM_DRDY

  1. Programın ana yapılandırması ve açıklaması
  • Kayıt 0'ı yapılandırın: MUX ve kazanç

Write_REGTab[0] = SSP1x20_MUX_AIN0_AIN1 | SSP1x20_GAIN_1 | SSP1x20_PGA_BYPASS_ON;

BitKonfigürasyonFonksiyonAçıklama
BIT7~BIT4MUX_AIN0_AIN1Diferansiyel giriş kanalı seçimiAIN0 - AIN1 → PT100 gerilim ölçümü için
BIT3~BIT1GAIN_1(1x kazanç )Kazanç ayarları1× (Vin ≈ 1V olduğundan yükseltmeye gerek yoktur)
BIT0PGA_BYPASS_ONPGA baypasSinyal bozulmasını önlemek için programlanabilir kazanç amplifikatörünü kapatın
  • Konfigürasyon kaydı 1: Örnekleme hızı ve modu

Write_REGTab[1] = SSP1x20_DR_20SPS | SSP1x20_MODE_NORMAL | SSP1x20_SC | SSP1x20_TS_OFF | SSP1x20_BCS_OFF;

BitKonfigürasyonFonksiyonAçıklama
BIT7~BIT5DR_20SPSVeri hızı20 kez/sn → yavaş sıcaklık değişimleri için uygundur
BIT4~BIT3MODE_NORMALNormal çalışma moduTek veya ardışık değil
BITOSCKendi kendine kalibrasyon etkinGeliştirilmiş doğruluk (tavsiye edilir)
BIT1TS_OFFDahili sıcaklık sensörünü devre dışı bırakmaTS_ON dahili sıcaklık sensörünü açar, harici sıcaklığı ölçmek için yapılandırma çalışmaz (bu yapılandırma en yüksek önceliğe sahiptir)

 

  • Kayıt 2'yi yapılandırın: IDAC ile referans voltajı

Write_REGTab[2] = SSP1x20_VREF_2048 | SSP1x20_REJECT_OFF | SSP1x20_PSW_OFF | SSP1x20_IDAC_500uA;

BitKonfigürasyonFonksiyonAçıklama
BIT7~BIT6VREF_2048Harici referans gerilimiReferans voltajı oluşturmak için harici bir R_REFR_REF kullanın (örneğin, 1,65kΩ).
BIT5~BIT4REJECT_OFFÇentik filtreleme yokGüç frekansı paraziti bağışıklığı gerekmez
BIT3PSW_OFFGüç anahtarını etkinleştirmeyinNormal güç kaynağını koruyun
BIT2~BIT0IDAC_500uAUyarma akımı3,9kΩ × 1mA = 3,9V > 3,3V aşırı gerilimi önlemek için 500 μA olarak ayarlayın

  

BitKonfigürasyonFonksiyonAçıklama
BIT7~BIT5IDAC1_AIN2IDAC1 çıkışından AIN2'yeUyarma akımı PT100'ün üst ucundan akar
BIT4~BIT2IDAC2_AIN3IDAC2 çıkışından AIN3'eKurşun direncini iptal etmek için yola geri dönün
BIT1DRDYM_DRDYDRDY moduDönüşümün tamamlandığını bildirmek için DRDY sinyalini kullanın

 

(4) Kayıt 3'ü yapılandırın: DRDY ile IDAC rota kanalı

  1. Üç telli PT100 çekirdek:

Şu anki yol:

  • IDAC1 → AIN2 → PT100 → AIN1
  • IDAC2 → AIN3 → AIN1(Dönüş)
  • İki akım eşittir → R_LEAD2R_LEAD2 üzerindeki gerilim düşüşünü dengeleyin

uint32_t raw_u24 = SSP1x20_read_data_drdy();

 

SSP1220 çıkışları 24 bit veriancak MCU'lar tipik olarak 32 bit olarak okur (SPI bir seferde 4 bayt okur).

 

Eğer (raw < 0) raw = -raw;

PT100 voltajı her zaman pozitiftir (akım AIN0'dan AIN1'e akar).

raw < 0 ise AIN0 ve AIN1 yazılım konfigürasyonları tersine çevrilmiştir.

printf("Raw: %ld, R=%.3f Ω, Temp=%.2f °C\r\n", raw, R_pt100, temperature);

Yazdır orijinal kod değerini, direnci ve nihai sıcaklığı hesaplayın kolay hata ayıklama için

Raw negatifse→ konfigürasyon tersine çevrilir

R > 1400Ω ise → IDAC veya Rref'in yanlış ayarlandığını gösterir

Sıcaklık = -999 → ise R-değerinin makul aralığın dışında olduğunu gösterir

 

Ⅴ、Ölçüm prosedürü ve sonuçları

  1. Her iki uçta PT100 gerilim ölçüm programı:

void SSP1x20_ADC_MeasurePt100(void)

{

float V_ref = 2.048; // Dahili referans gerilimi 2.048V

//printf("\r\n Çok noktalı tek voltaj ölçümü \r\n");

Write_REGTab[0] = SSP1x20_MUX_AIN1_AIN0 | SSP1x20_GAIN_1 | SSP1x20_PGA_BYPASS_OFF;

Write_REGTab[1] = SSP1x20_DR_20SPS | SSP1x20_MODE_NORMAL | SSP1x20_SC | SSP1x20_TS_OFF | SSP1x20_BCS_OFF;

Write_REGTab[2] = SSP1x20_VREF_REF0 | SSP1x20_REJECT_OFF | SSP1x20_PSW_OFF | SSP1x20_IDAC_500uA;

Write_REGTab[3] = SSP1x20_IDAC1_AIN2 | SSP1x20_IDAC2_AIN3 | SSP1x20_DRDYM_DRDY;

SSP1x20_WriteRegister(SSP1x20_REG0, 4, &Write_REGTab[0]);

 

printf("Write_REGTab[0]=%x\r\n", Write_REGTab[0]);

printf("Write_REGTab[1]=%x\r\n", Write_REGTab[1]);

printf("Write_REGTab[2]=%x\r\n", Write_REGTab[2]);

printf("Write_REGTab[3]=%x\r\n", Write_REGTab[3]);

while (1)

{

SSP1x20_SendCommand(SSP1x20_CMD_START); // Sürekli ölçüm etkinleştirildiğinde, bu komut yalnızca bir kez gönderilir

HAL_Delay(100);

SPI_ADC_CS_LOW();

}

 

SSP1220 test sonuçları

  1. SSP1220 dahili sıcaklık ölçümü

Dahili sıcaklık test fonksiyonu

float SSP1x20_read_temperature(void)

{

uint32_t ADC_data;

uint32_t ADC_temp1;

 

//SSP1x20_read_register(SSP1x20_REG0, 4, &Read_REGTab[0]);

Write_REGTab[0] = SSP1x20_MUX_AIN0_AIN1 | SSP1x20_GAIN_1 | SSP1x20_PGA_BYPASS_ON;

Write_REGTab[1] = SSP1x20_DR_20SPS | SSP1x20_MODE_NORMAL | SSP1x20_SC | SSP1x20_TS_ON | SSP1x20_BCS_OFF;

Write_REGTab[2] = SSP1x20_VREF_2048 | SSP1x20_REJECT_OFF | SSP1x20_PSW_OFF | SSP1x20_IDAC_1000uA;

Write_REGTab[3] = SSP1x20_IDAC1_AIN2 | SSP1x20_IDAC2_AIN3 | SSP1x20_DRDYM_DRDY;

SSP1x20_WriteRegister(SSP1x20_REG0, 4, &Write_REGTab[0]);

 

SSP1x20_SendCommand(SSP1x20_CMD_START);

SPI_ADC_CS_LOW();

 

while (ADC_DRDY_GAIN == 1);//SSP1x20_DRDYM_DRDY

 

İç sıcaklık testi yapılandırma ayrıntıları:

 Write_REGTab[1] = SSP1x20_DR_20SPS | SSP1x20_MODE_NORMAL | SSP1x20_SC | SSP1x20_TS_ON | SSP1x20_BCS_OFF;

  • SSP1x20_TS_ON: Dahili sıcaklık sensörünü etkinleştirin (kritik), bu yapılandırma en yüksek önceliğe sahiptir
  • SSP1x20_SC: Kendi kendine kalibrasyon gerçekleştirin (önerilir)
  • 20SPS: Düşük hız ve yüksek doğruluk, sıcaklık ölçümü için uygun

Write_REGTab[2] = SSP1x20_VREF_2048 | SSP1x20_REJECT_OFF | SSP1x20_PSW_OFF | SSP1x20_IDAC_1000uA;

  • SSP1x20_VREF_2048: Kullanım dahili bir 2.048V referans voltajı (harici REF0 değil!) )
    • Çünkü dahili sıcaklık sensörü mutlak bir voltaj çıkışı, a sabit referans gerilimi sıcaklığı dönüştürmek için kullanılmalıdır.
  • IDAC_1000uA: IDAC etkin olmasına rağmen, TS_ON modundaki IDAC dahili sıcaklık ölçümlerini etkilemez (ihmal edilebilir).

Write_REGTab[3] = SSP1x20_IDAC1_AIN2 | SSP1x20_IDAC2_AIN3 | SSP1x20_DRDYM_DRDY;

  • IDAC pimini ve DRDY'yi yapılandırın, ancak iç sıcaklık ölçümü üzerinde hiçbir etkisi yoktur (sadece kayıtları sağlam tutun).
  • 2 Dönüştürmeyi başlatın ve DRDY için bekleyin

SSP1x20_SendCommand(SSP1x20_CMD_START); SPI_ADC_CS_LOW();ise (ADC_DRDY_GAIN == 1); // 等待 DRDY 变低

  • Sürekli geçişi başlatmak için BAŞLAT komutunu gönderin
  • Bekle DRDY piminin düşük seviyeye inmesi, verilerin hazır olduğunu gösterir

İç mekan oda sıcaklığının ölçümü aşağıdaki şekilde gösterilmiştir:

3. Harici sıcaklık ölçümü (yöntem 1, basitleştirilmiş faktör 0,385 hesaplaması)

Harici sıcaklık testi ile ilgili kod:

uint32_t ADC_gain_value = 0; // Okuma verileri

uint32_t ADC_value = 0; // Veri değerini ölçün

float tmpPt100=0;

float RTD=0;

void SSP1x20_ADC_Measure(void)

{

 

printf("\r\n Çok noktalı tek voltaj ölçümü \r\n");

Write_REGTab[0] = SSP1x20_MUX_AIN1_AIN0 | SSP1x20_GAIN_1 | SSP1x20_PGA_BYPASS_OFF; SSP1x20_MUX_AIN1_AIN0 Arayüz AIN1 AIN0 gerçek devre şemasına göre seçilmelidir

Write_REGTab[1] = SSP1x20_DR_20SPS | SSP1x20_MODE_NORMAL | SSP1x20_SC | SSP1x20_TS_OFF | SSP1x20_BCS_OFF;

Write_REGTab[2] = SSP1x20_VREF_REF0 | SSP1x20_REJECT_OFF | SSP1x20_PSW_OFF | SSP1x20_IDAC_500uA;

Write_REGTab[3] = SSP1x20_IDAC1_AIN2 | SSP1x20_IDAC2_AIN3 | SSP1x20_DRDYM_DRDY;

SSP1x20_WriteRegister(SSP1x20_REG0, 4, &Write_REGTab[0]);

printf("Write_REGTab[0]=%x\r\n", Write_REGTab[0]);

printf("Write_REGTab[1]=%x\r\n", Write_REGTab[1]);

printf("Write_REGTab[2]=%x\r\n", Write_REGTab[2]);

printf("Write_REGTab[3]=%x\r\n", Write_REGTab[3]);

while (1)

{

 

SSP1x20_SendCommand(SSP1x20_CMD_START); Sürekli ölçüm etkinleştirildiğinde, bu komut yalnızca bir kez gönderilir

HAL_Delay(100);

SPI_ADC_CS_LOW();

ADC_gain_value =0;

 

ADC_gain_value = SPI_ADC_ReadByte();

ADC_gain_value = (ADC_gain_value << 8) | SPI_ADC_ReadByte();

ADC_gain_value = (ADC_gain_value << 8) | SPI_ADC_ReadByte();

 

SPI_ADC_CS_HIGH();

 

RTD = 1650*( (float)ADC_gain_value /(0x3fffff));//Referans direnci 1650 ohm

tmpPt100 = (RTD-100)/0,38;

__NOP();

 

printf("R=%.3f Ω, Temp=%.2f °C\r\n",RTD, tmpPt100);

}

Buzlu su karışımının sıcaklığının üç hatlı RTD ölçümünün sonuçları aşağıdaki şekilde gösterilmektedir:

Dış sıcaklık ölçümleri (Callendar-Van Dusen denklemiyle hesaplanan ikinci yöntem) daha doğrudur

 

Ana Kod:

//Yüksek hassasiyetli RTD -> sıcaklık

static float rtd_to_temperature_iec60751(float rtd)

{

if (rtd < 0.0f) return -999.0f; // yasadışı değer

 

float t = (rtd - R0_PT100) / 0.385f; // ilk tahmin

 

if (rtd <= R0_PT100) {

//T < = 0°C: Tam denklemi kullanın

for (int i = 0; i < 10; i++) {

float rt_calc = R0_PT100 * (1.0f + A_COEFF*t + B_COEFF*t*t + C_COEFF*(t - 100.0f)*t*t*t);

float dr_dt = R0_PT100 * (A_COEFF + 2.0f*B_COEFF*t + C_COEFF*(4.0f*t*t - 300.0f*t*t));

float hata = rt_calc - rtd;

t -= hata / dr_dt;

if (fabsf(hata) < 0.001f) break;

}

} else {

// T >= 0°C:: Basitleştirilmiş denklemi kullanın

for (int i = 0; i < 10; i++) {

float rt_calc = R0_PT100 * (1.0f + A_COEFF*t + B_COEFF*t*t);

float dr_dt = R0_PT100 * (A_COEFF + 2.0f*B_COEFF*t);

float hata = rt_calc - rtd;

t -= hata / dr_dt;

if (fabsf(hata) < 0.001f) break;

}

}

t'yi döndür;

}

/**

* @brief Analog kanal ADC ölçümü (harici sıcaklık ölçümü)

* @param Yok

* @retval Yok

*/

uint32_t ADC_gain_value = 0; // Okuma verileri

uint32_t ADC_value = 0; // Veri değerini ölçün

float tmpPt100=0;

float RTD=0;

void SSP1x20_ADC_Measure(void)

{

 

printf("\r\n Çok noktalı tek voltaj ölçümü \r\n");

Write_REGTab[0] = SSP1x20_MUX_AIN1_AIN0 | SSP1x20_GAIN_1 | SSP1x20_PGA_BYPASS_OFF;

Write_REGTab[1] = SSP1x20_DR_20SPS | SSP1x20_MODE_NORMAL | SSP1x20_SC | SSP1x20_TS_OFF | SSP1x20_BCS_OFF;

Write_REGTab[2] = SSP1x20_VREF_REF0 | SSP1x20_REJECT_OFF | SSP1x20_PSW_OFF | SSP1x20_IDAC_500uA;

Write_REGTab[3] = SSP1x20_IDAC1_AIN2 | SSP1x20_IDAC2_AIN3 | SSP1x20_DRDYM_DRDY;

// Write_REGTab[3] = SSP1x20_IDAC1_AIN3 | SSP1x20_IDAC2_AIN2 | SSP1x20_DRDYM_DRDY;

SSP1x20_WriteRegister(SSP1x20_REG0, 4, &Write_REGTab[0]);

printf("Write_REGTab[0]=%x\r\n", Write_REGTab[0]);

printf("Write_REGTab[1]=%x\r\n", Write_REGTab[1]);

printf("Write_REGTab[2]=%x\r\n", Write_REGTab[2]);

printf("Write_REGTab[3]=%x\r\n", Write_REGTab[3]);

while (1)

{

SSP1x20_SendCommand(SSP1x20_CMD_START); Sürekli ölçüm etkinleştirildiğinde, bu komut yalnızca bir kez gönderilir

HAL_Delay(100);

SPI_ADC_CS_LOW();

 

ADC_gain_value =0;

ADC_gain_value = SPI_ADC_ReadByte();

ADC_gain_value = (ADC_gain_value << 8) | SPI_ADC_ReadByte();

ADC_gain_value = (ADC_gain_value << 8) | SPI_ADC_ReadByte();

 

SPI_ADC_CS_HIGH();

 

#define CALIBRATED_FULL_SCALE 4210300.0f // kalibrasyon verilerine göre

 

RTD = 1650.0f * ((float)ADC_gain_value / CALIBRATED_FULL_SCALE);

tmpPt100 = rtd_to_temperature_iec60751(RTD);

__NOP();

 

printf("R=%.3f Ω, Temp=%.2f °C\r\n",RTD, tmpPt100);

}

}

 

Test sonuçları şekilde gösterilmiştir:

 

Sıcak Su Sıcaklık Testi:

Buzlu Su Karışım Testi:

4. Harici sıcaklık testi yapılandırma ayrıntıları:

Kayıt OlunDeğerleri yapılandırın (kodunuz)İşlev açıklaması:Neden bunu seçtiniz?
REG0
Write_REGTab[0]
SSP1x20_MUX_AIN1_AIN0
| SSP1x20_GAIN_1
|SSP1x20_PGA_BYPASS_OFF
Kanal Seçimi + Kazanç Ayarlarına Girin 
SSP1x20_MUX_AIN1_AIN0Diferansiyel girişler: AIN1 pozitif ve AIN0 negatiftirPT100, her iki uçta AIN0 ve AIN1'e bağlanır ve diferansiyel voltaj ölçümü gerektirir. ⚠️ Polariteye dikkat edin: yapılandırma tersine çevrilirse, ADC negatif bir değer (örneğin, 0x800000) verir ve bu da negatif bir sıcaklıkla sonuçlanır.
SSP1x20_GAIN_1Kazanç = 1PT100 daha küçük bir voltaja sahiptir (örneğin 500μA × 100Ω = 50mV), ancak bir oran ölçümü kullanır (referans voltajı da IDAC'dandır), bu nedenle amplifikasyon yok doygunluğu önlemek için gereklidir.
SSP1x20_PGA_BYPASS_OFFBaypas yok PGASinyal yolunun normal olduğundan emin olmak için PGA işlevini koruyun (kazanç=1 olsa bile).
REG1
Write_REGTab[1]
SSP1x20_DR_20SPS
| SSP1x20_MODE_NORMAL
| SSP1x20_SC
| SSP1x20_TS_OFF
| SSP1x20_BCS_OFF
Veri hızı + çalışma modu 
SSP1x20_DR_20SPSÖrnek oranı = 20 örnek noktası/saniyeDüşük hız doğruluğu artırır, gürültüyü bastırır ve sıcaklık ölçümü için uygundur (yavaş değişim).
SSP1x20_MODE_NORMALNormal sürekli dönüştürme moduGerçek zamanlı izleme için sürekli veri çıkışı.
SSP1x20_SCKendi kendine kalibrasyon gerçekleştirinHer yapılandırmadan sonra kalibrasyon, ofset / kazanç hatalarını ortadan kaldırır ve doğruluğu artırır.
SSP1x20_TS_OFFDahili sıcaklık sensörünü kapatınHarici PT100'ü ölçüyoruz ve iç sıcaklığa ihtiyacımız yok.
SSP1x20_BCS_OFFYanma akımı kaynaklarını devre dışı bırakmaHayır, yok.
REG2
Write_REGTab[2]
SSP1x20_VREF_REF0
| SSP1x20_REJECT_OFF
| SSP1x20_PSW_OFF
SSP1x20_IDAC_500uA
Referans Gerilimi + IDAC Ayarları 
 SSP1x20_VREF_REF0Kullanım harici bir referans gerilimi (REF0 = AIN2/AIN3 arasındaki gerilim).Uygulamak oran bazlı ölçümler: ADC sonucu = (Vpt100 / Vref) × 224, IDAC akımından bağımsız mutlaksadece Rref ile ilgilidir, güç kaynağı dalgalanmalarına karşı dayanıklıdır.
 SSP1x20_REJECT_OFF50/60Hz bastırma etkin değilÇevresel parazit küçükse kapatılabilir; güç frekanslı bir ortamdaysa REJECT_50'nin açılması önerilir.
 SSP1x20_PSW_OFFSensör güç kaynağı anahtarını kapatınPT100, IDAC tarafından beslenir ve ek PSW gerektirmez.
 SSP1x20_IDAC_500uASabit akım kaynağı akımını ayarlayın = 500 μAOrtak akım değerleri, dengeleme güç tüketimi ve sinyal genliği (100Ω → 50mV).
REG3
Write_REGTab[3]
SSP1x20_IDAC1_AIN2
| SSP1x20_IDAC2_AIN3
| SSP1x20_DRDYM_DRDY
IDAC çıkış pimi + DRDY yapılandırması 
SSP1x20_IDAC1_AIN2IDAC1 çıkışından AIN2'yeAIN2 - PT100 (uyarma)
SSP1x20_IDAC2_AIN3IDAC2 çıkışından AIN3'eAIN3, R_ref'in bir ucundaki referans direncine bağlanır (döngüyü oluşturur)
→ gerçekleştirir üç telli kompanzasyon (tel direncini dengeleyerek).
SSP1x20_DRDYM_DRDYEtkinleştir DRDY pini (Veri Hazır Sinyali).MCU, verilerin ne zaman okunduğunu bilmek ve yoklamayı önlemek için GPIO aracılığıyla DRDY düşük seviyelerini algılar.

 

----------------------------------

Anahtar Parça Kodu Formül Hesaplaması:

RTD = 1650*( (float)ADC_gain_value /(0x3fffff)); //referans direnci 1650 ohm tmpPt100 = (RTD-100)/0,385;

Referans direnci 1650 ohm,

İlk satır kodu RTD = 1650 * (ADC / 0x3FFFFF)

Orijinal ADC değerini PT100'ün direnç değerine dönüştürmek için tasarlanmıştır (oran ölçümü)

  • VIN = I × RPT100 (PT100 üzerindeki gerilim)
  • VREF = I × RREF (referans direnci üzerindeki gerilim)

Her iki uçta da aynı sabit akım kaynağı I adc kullanılır

 

Evet:     Vin/Vref = Rpt100/Rref

 

ADC'nin çıkışı bu oranın sayısallaştırılmış sonucudur

ADC_Code = Vin/Vref x 224

 

Bu yüzden geri itildi

Rpt100= Rref x ADC_Code /224

 

---------------------------------------

İkinci satır kodu: tmpPt100 = (RTD - 100) / 0,385;

Doğrusal bir yaklaşım formülü ile sıcaklığı tahmin edin

0°C'de, Rpt100 = 100 Ω

Sıcaklıktaki her 1°C'lik artış için direnç yaklaşık 0,385 Ω artar.

Bu yüzden

 

T (R-100)/0.385

 

 

Ⅵ、 Yaygın Sorun Hata Ayıklama Kılavuzu

AnomalOlası nedenlerSorun giderme adımları
ADC'nin orijinal değeri (ham) negatiftirAIN0, AIN1 yapılandırmasının tersidir1. Yazılım yapılandırmasının donanım bağlantısıyla tutarlı olup olmadığını kontrol edin
R_PT100 > 1400Ω1. Yanlış IDAC akım yapılandırması; 2. Rref açılır1. REG2'nin IDAC yapılandırmasını kontrol edin (500μA olduğundan emin olun); 2. Devrenin açık olmadığını doğrulamak için R ref direnç değerini bir multimetre ile ölçün
Sıcaklık değeri - 999°C'dirPT100 18Ω~330Ω aralığını aşıyor1. PT100 bağlantısının kesilip kesilmediğini kontrol edin (PT100 direncini ölçün); 2. SPI İletişimini Doğrulayın (Kayıt Yapılandırma Değerlerini Okuyun)
Sıcaklık dalgalanmaları > 0,1°C1. Güç kaynağında büyük dalgalanma; 2. Elektromanyetik parazit1. SSP1220 VDD dalgalanmasını ölçün (≤ 10mV gereklidir); 2. Paraziti önlemek için ekran telinin topraklamasını kontrol edin

Ⅶ、 SSP1220 Çekirdek kayıt yapılandırma tablosu

Kayıt OlunÖğeleri yapılandırmaDeğer (harici sıcaklık ölçümü)İşlev açıklaması:
REG0Diferansiyel kanallarAIN1-AIN0Negatif ham maddeyi önlemek için PT100 kablolarını eşleştirin
kazançSinyal doygunluğundan kaçının ve oran ölçümüne uyum sağlayın
PGA baypasdevre dışı bırakSinyal yolu bütünlüğünü koruyun
REG1Örnekleme oranı20SPSDüşük hız doğruluğu artırır ve yavaş sıcaklık sinyallerine uyum sağlar
Çalışma moduNormal modSıcaklık verilerinin sürekli dönüştürülmesi ve gerçek zamanlı çıkışı
Kendi kendine kalibrasyonetkinleştirOfset/kazanç hatalarını ortadan kaldırın ve doğruluğu artırın
Dahili TSdevre dışı bırakHarici sıcaklık ölçümü dahili sensör gerektirmez
 REG2Referans gerilimiHarici REF0IDAC akım dalgalanmalarını önlemek için oran tabanlı ölçüm
IDAC akımı500μADengeli Güç Tüketimi ve Sinyal Genliği (50mV 100Ω)
REG3IDAC1 rotalarıAIN2Uyarma akımı girişi PT100
IDAC2 rotalarıAIN3Kurşun direnci R7'yi etkisiz hale getirin

Ⅷ、Callendar-Van Dusen denklemi katsayı tablosu

KatsayıSayısal değerBirimUygulama kapsamı
R0100.0Ω0°C referans direnci
A3.9083×10-3-1-200℃~600℃
B-5.775×10-7-2-200℃~600℃
C-4.183×10-12-4-200℃~0℃

Tam kod, teknik desteğimizle iletişime geçerek elde edilebilir. İletişim 18014203727