Ⅰ、 Prinsip pengukuran suhu PT100 tiga kabel

Tujuan utama metode koneksi tiga kabel adalah untuk menghilangkan pengaruh resistansi kabel pada akurasi pengukuran. Nilai resistansi PT100 sangat kecil (100Ω @ 0 ℃), dan resistansi kabel penghubung (Beberapa sepersepuluh ohm hingga beberapa ohm, ditulis sebagai R6, R7, R15, lihat skema pengujian RTD tiga kabel) dapat menimbulkan kesalahan yang tidak dapat diabaikan. Sistem tiga kabel memecahkan masalah ini melalui desain sirkuit yang cerdas, di mana ketiga kabel RTD tiga kabel biasanya memiliki panjang yang sama, jadi dengan asumsi bahwa resistansi ketiga kabel sama (RL1 = RL2 = RL3, yaitu, R6 = R7 = R15 dalam skematik), sumber arus ganda internal (IDAC) SSP1220 digunakan untuk menetralkan efek resistansi kabel ini.

Penjelasan rinci tentang prinsip pengukuran:

  1. Dengan menggunakan dua sumber arus yang dapat diprogram yang cocok (IDAC1 dan IDAC2) di dalam SSP1220 dan mengeluarkan arus yang sama:, disarankan agar pemilihan sumber arus kurang dari 1mA, dan nilai pemilihan sumber arus untuk pengujian ini adalah 500uA.
  2. Tiga resistor utama PT100 diasumsikan sama: R6 = R7 = R15 = Rl
  3. SSP1220 mengukur tegangan pada PT100 melalui pasangan input diferensial (AIN0, AIN1): VMASUK = VAIN1 - VAIN0

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

Sejak: IIDAC1 = IIDAC2 = IIDAC DAN RL1 = RL2 = RL3 = RL

menggantikannya menjadi: NIK = [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

Melalui konfigurasi rangkaian yang cerdas, pengaruh resistansi timbal sepenuhnya dihilangkan dari tegangan input diferensial VIN, dan hanya penurunan tegangan pada resistor PT100 yang disertakan.

  1. Tegangan referensi SSP1220 Vref dihasilkan oleh penggabungan dua arus IDAC melalui resistor referensi eksternal presisi tinggi, Rref (R5), yaitu Vref = (Iidac1 + Iidac2) * R
  2. Dengan pengukuran rasio, kode output ADC akhir sebanding dengan (Rpt100) / (Rref) tanpa memperhatikan nilai absolut, akurasi, dan penyimpangan arus IDAC, sekaligus menangkal efek resistor utama Rl1 dan Rl2:

Untuk SSP1220 24-bit, kode numerik output adalah:

Kode = (223 - 1) x (VMASUK/VREF) = (223 - 1) x [RPT100/ (2 x RREF) ]

Membalikkan nilai resistansi PT100 dengan kode ADC:

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

Terakhir, menurut karakteristik resistansi-suhu PT100 (biasanya menggunakan persamaan Callendar-Van Dusen atau metode pencarian tabel), Rpt100 dikonversi ke nilai suhu: T = f (Rpt100). Untuk PT100, pada suhu 0℃, R0 = 100,00Ω, koefisien suhu resistansi adalah sekitar α≈ 0,00385 Ω/Ω/℃

Ⅱ 、 Desain sirkuit perangkat keras

Menurut aplikasi tipikal dalam lembar data, rangkaian koneksi PT100 tiga kabel adalah sebagai berikut:

  1. Petunjuk koneksi sirkuit
  • Koneksi PT100: PT100 (sistem tiga kabel) dihubungkan seperti yang ditunjukkan dalam skema.
  • Pembuatan referensi tegangan: Output IDAC1 terhubung ke AIN2 (diperlukan konfigurasi perangkat lunak internal), output IDAC2 terhubung ke AIN3 (diperlukan konfigurasi perangkat lunak internal), dan dua arus IDAC bergabung di node dan mengalir bersama melalui resistor referensi eksternal Rref (R5). Ujung lain dari REF terhubung ke AVSS arde analog. Input referensi positif SSP1220, REFP0, terhubung ke ujung atas RREF (R5) (titik penggabungan IDAC). Input referensi negatif SSP1220, REFN0, terhubung ke AVSS. Oleh karena itu, tegangan referensi, VREF = (IIDAC1 + IIDAC2) * RREF.
  • Pengukuran sinyal: AIN1 untuk SSP1220 dikonfigurasikan sebagai AINP input positif diferensial dan AIN0 SSP1220 dikonfigurasikan sebagai AINN input negatif diferensial, sehingga tegangan yang diukur adalah perbedaan potensial antara AIN1 dan AIN0.
  • Sirkuit pemfilteran: Filter low-pass RC perlu ditambahkan pada input analog (AIN0, AIN1, AIN2) dan input referensi (REFP0) untuk antialiasing dan peredam bising. Filter input: terdiri dari R1, R2, C1 dan C6, C5. Filter referensi: terdiri dari R3, R4, C2 dan C3, C4. Untuk mempertahankan akurasi pengukuran skala, frekuensi cut-off filter referensi harus sesuai dengan filter input.

Ⅲ、Pemilihan perangkat dan penghitungan parameter

Tujuan desain hipotetis adalah sebagai berikut: Tipe PT100: tiga kabel; Rentang pengukuran suhu: -200°C ~ +850°C; Tegangan suplai AVDD: 3,3V (AVSS = 0V); Arus DAC: 500μA (per saluran); Laju data: 20 SPS (untuk performa noise yang optimal).

  1. Pemilihan dan penghitungan resistansi referensi (Rref)

Rref adalah jantung dari akurasi seluruh sistem. Fungsi: Menghasilkan tegangan referensi V ref dari ADC, dan keakuratan serta kestabilannya secara langsung menentukan hasil pengukuran.

Perhitungan Resistensi:

Untuk memaksimalkan jangkauan ADC dan memenuhi persyaratan tegangan mode umum PGA, Vref biasanya ditetapkan sekitar setengah dari tegangan suplai. Dalam desain ini, AVDD = 3.3V dan target VREF sekitar 1.65V.

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

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

Resistor dengan nilai nominal 1,65 kΩ bisa dipilih. Jika tidak ditemukan, 1,62 kΩ atau 1,69 kΩ juga merupakan perkiraan yang dapat diterima.

Persyaratan seleksi:

Akurasi: Setidaknya ± 0,1%, direkomendasikan ± 0,05% atau lebih tinggi untuk aplikasi presisi tinggi.

Temperatur Mengembang: Harus sangat rendah, dengan ketahanan film yang presisi, direkomendasikan ±5 ppm/°C atau ±10 ppm/°C.

Stabilitas jangka panjang: tinggi.

Jangan pernah menggunakan resistor chip 1%, 100ppm/°C yang normal.

  1. Opsi arus IDAC dan penguatan PGA

Arus IDAC: dipilih 500μA. Nilai ini memberikan keseimbangan yang baik antara konsumsi daya, efek pemanasan sendiri, dan amplitudo sinyal. Jika arus terlalu kecil, sinyal menjadi lemah dan mudah terpengaruh oleh noise; Terlalu banyak arus dapat menyebabkan PT100 memanas sendiri atau melebihi tegangan yang sesuai dengan IDAC.

Pemilihan Penguatan PGA: PT100 memiliki tegangan yang lebih kecil (mis. 500μA × 100Ω = 50mV), tetapi menggunakan pengukuran rasio (tegangan referensi juga dari IDAC), sehingga tidak perlu menguatkan untuk menghindari kejenuhan, dan pemilihan penguatan adalah 1X.

  1. Pemilihan komponen sirkuit filter

Resistor Filter (R1, R2, R3, R4): Biasanya dipilih 1kΩ. Nilai ini cukup besar untuk menyaring secara efektif dan cukup kecil untuk menghindari tegangan offset yang signifikan pada input (karena arus bias input). Mereka juga bertindak sebagai proteksi pembatas arus.

Kapasitor filter diferensial (C1, C2): Mengatur frekuensi cut-off bersama dengan resistor. Misalnya, untuk kecepatan data 20SPS, frekuensi cut-off dapat ditetapkan dalam puluhan Hz. fc = 1 / (2π * (R1+R2) * C1)。 Jika R1+R2 = 2kΩ dan mengharapkan fc ≈ 16Hz, C1 = 1 / (2 * 2000 * 16) ≈ 4,7μF. Dalam aplikasi dunia nyata, 100nF (0,1μF) sering digunakan untuk mendapatkan bandwidth penolakan derau yang lebih luas. Jenis: Kapasitor keramik C0G (NPO) direkomendasikan karena konstanta dielektriknya yang stabil, koefisien tegangan rendah, dan efek mikroakustik yang rendah.

Kapasitor yang difilter mode umum (C5, C6, C3, C4): Biasanya dipilih dengan urutan besaran yang lebih kecil dari kapasitor diferensial, seperti 10nF, untuk memastikan bahwa ketidakcocokan kapasitor diferensial tidak mengakibatkan noise mode umum yang berlebihan diubah menjadi noise diferensial.

Ⅳ、Konfigurasi perangkat lunak

  1. Master Logic:

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. Konfigurasi utama dan deskripsi program
  • Konfigurasikan register 0: MUX dan penguatan

Write_REGTab[0] = SSP1x20_MUX_AIN0_AIN1 | SSP1x20_GAIN_1 | SSP1x20_PGA_BYPASS_ON;

BitKonfigurasiFungsiDeskripsi
BIT7 ~ BIT4MUX_AIN0_AIN1Pemilihan saluran input diferensialAIN0 - AIN1 → untuk pengukuran tegangan PT100
BIT3 ~ BIT1GAIN_1 (keuntungan 1x)Pengaturan penguatan1× (tidak perlu diperkuat karena Vin ≈ 1V)
BIT0PGA_BYPASS_ONBypass PGAMatikan penguat penguatan yang dapat diprogram untuk mencegah distorsi sinyal
  • Register konfigurasi 1: Laju dan mode sampel

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

BitKonfigurasiFungsiDeskripsi
BIT7 ~ BIT5DR_20SPSKecepatan data20 kali/detik → cocok untuk perubahan suhu yang lambat
BIT4 ~ BIT3MODE_NORMALMode kerja normalTidak tunggal atau berurutan
BITOSCKalibrasi mandiri diaktifkanAkurasi yang lebih baik (direkomendasikan pada)
BIT1TS_OFFMenonaktifkan sensor suhu internalTS_ON menghidupkan sensor suhu internal, konfigurasi untuk mengukur suhu eksternal tidak berfungsi (konfigurasi ini memiliki prioritas tertinggi)

 

  • Konfigurasikan register 2: Tegangan referensi dengan IDAC

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

BitKonfigurasiFungsiDeskripsi
BIT7 ~ BIT6VREF_2048Tegangan referensi eksternalGunakan R_REFR_REF eksternal untuk menghasilkan tegangan referensi (misalnya, 1,65kΩ).
BIT5 ~ BIT4TOLAK_OFFTidak ada pemfilteran takikTidak diperlukan kekebalan terhadap interferensi frekuensi daya
BIT3PSW_OFFJangan aktifkan sakelar dayaMempertahankan catu daya normal
BIT2 ~ BIT0IDAC_500uAArus eksitasiAtur ke 500 μA untuk menghindari tegangan berlebih 3,9kΩ × 1mA = 3,9V > 3,3V

  

BitKonfigurasiFungsiDeskripsi
BIT7 ~ BIT5IDAC1_AIN2Output IDAC1 ke AIN2Arus eksitasi mengalir melalui ujung atas PT100
BIT4 ~ BIT2IDAC2_AIN3Output IDAC2 ke AIN3Kembali ke jalur untuk membatalkan resistensi timbal
BIT1DRDYM_DRDYMode DRDYGunakan sinyal DRDY untuk memberi tahu Anda bahwa konversi telah selesai

 

(4) Konfigurasikan register 3: saluran rute IDAC dengan DRDY

  1. Inti PT100 tiga kawat:

Jalur saat ini:

  • IDAC1 → AIN2 → PT100 → AIN1
  • IDAC2 → AIN3 → AIN1 (Kembali)
  • Dua arus sama → mengimbangi penurunan tegangan pada R_LEAD2R_LEAD2

uint32_t raw_u24 = SSP1x20_read_data_drdy();

 

Keluaran SSP1220 Data 24-bittetapi MCU biasanya membaca dalam 32-bit (SPI membaca 4 byte sekaligus).

 

jika (mentah < 0) mentah = -raw;

Tegangan PT100 selalu positif (arus mengalir dari AIN0 ke AIN1).

Jika mentah < 0, nilai Konfigurasi perangkat lunak AIN0 dan AIN1 dibalik.

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

Mencetak nilai kode asli, menghitung resistansi, dan suhu akhir untuk debugging yang mudah

Jika Raw negatif→ konfigurasi dibalik

Jika R > 1400Ω → menunjukkan bahwa IDAC atau Rref tidak disetel dengan benar

Jika Temp = -999 → menunjukkan bahwa nilai R berada di luar kisaran yang wajar

 

Ⅴ、Prosedur dan hasil pengukuran

  1. Program pengukuran tegangan PT100 di kedua ujungnya:

void SSP1x20_ADC_MeasurePt100(void)

{

float V_ref = 2.048; // Tegangan referensi internal 2.048V

//printf("\r\n Pengukuran tegangan tunggal multi-titik \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]);

sementara (1)

{

SSP1x20_SendCommand(SSP1x20_CMD_START); // Ketika pengukuran kontinu diaktifkan, perintah ini dikirim hanya sekali

HAL_Delay (100);

SPI_ADC_CS_LOW();

}

 

Hasil pengujian SSP1220

  1. Pengukuran suhu internal SSP1220

Fungsi uji suhu internal

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

 

Detail konfigurasi uji suhu internal:

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

  • SSP1x20_TS_ON: Mengaktifkan sensor suhu internal (kritis), konfigurasi ini memiliki prioritas tertinggi
  • SSP1x20_SC: Melakukan kalibrasi mandiri (disarankan)
  • 20SPS: Kecepatan rendah dan akurasi tinggi, cocok untuk pengukuran suhu

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

  • SSP1x20_VREF_2048: Gunakan tegangan referensi internal 2,048V (bukan REF0 eksternal!))
    • Karena sensor suhu internal adalah keluaran tegangan absolut, a tegangan referensi tetap harus digunakan untuk mengonversi suhu.
  • IDAC_1000uA: Meskipun IDAC diaktifkan, IDAC dalam mode TS_ON tidak mempengaruhi pengukuran suhu internal (dapat diabaikan).

Write_REGTab[3] = SSP1x20_IDAC1_AIN2 | SSP1x20_IDAC2_AIN3 | SSP1x20_DRDYM_DRDY;

  • Konfigurasikan pin IDAC dan DRDY, tetapi tidak berpengaruh pada pengukuran suhu internal (hanya menjaga agar register tetap utuh).
  • 2 Mulai konversi dan tunggu DRDY

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

  • Kirim perintah START untuk memulai transisi berkelanjutan
  • Tunggu. pin DRDY menjadi rendahyang menunjukkan bahwa data sudah siap

Pengukuran suhu ruangan dalam ruangan ditunjukkan pada gambar di bawah ini:

3. Pengukuran suhu eksternal (metode 1, perhitungan faktor yang disederhanakan 0,385)

Kode terkait uji suhu eksternal:

uint32_t ADC_gain_value = 0; // Pembacaan data

uint32_t ADC_value = 0; // Mengukur nilai data

float tmpPt100 = 0;

mengambang RTD = 0;

void SSP1x20_ADC_Measure(void)

{

 

printf("\r\n Pengukuran tegangan tunggal multi-titik \r\n");

Write_REGTab[0] = SSP1x20_MUX_AIN1_AIN0 | SSP1x20_GAIN_1 | SSP1x20_PGA_BYPASS_OFF; SSP1x20_MUX_AIN1_AIN0 Antarmuka AIN1 AIN0 harus dipilih berdasarkan diagram sirkuit yang sebenarnya

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]);

sementara (1)

{

 

SSP1x20_SendCommand(SSP1x20_CMD_START); Ketika pengukuran kontinu diaktifkan, perintah ini dikirim hanya sekali

HAL_Delay (100);

SPI_ADC_CS_LOW();

Nilai 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)); //Resistansi referensi 1650 ohm

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

__NOP();

 

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

}

Hasil pengukuran RTD tiga baris dari suhu campuran air es ditunjukkan pada gambar di bawah ini:

Pengukuran suhu eksternal (metode dua, dihitung dengan persamaan Callendar-Van Dusen) lebih akurat

 

Kode Master:

// RTD akurasi tinggi -> suhu

static float rtd_to_temperature_iec60751(float rtd)

{

if (rtd < 0.0f) return -999.0f; // nilai ilegal

 

float t = (rtd - R0_PT100) / 0.385f; // tebakan awal

 

if (rtd <= R0_PT100) {

//T < = 0°C: Gunakan persamaan lengkap

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*t - 300.0f*t*t));

float error = rt_calc - rtd;

t -= error / dr_dt;

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

}

} else {

// T >= 0°C:: Gunakan persamaan yang disederhanakan

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 error = rt_calc - rtd;

t -= error / dr_dt;

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

}

}

kembali t;

}

/**

* @pengukuran ADC saluran analog singkat (pengukuran suhu eksternal)

* @param Tidak ada

* @retval Tidak ada

*/

uint32_t ADC_gain_value = 0; // Pembacaan data

uint32_t ADC_value = 0; // Mengukur nilai data

float tmpPt100 = 0;

mengambang RTD = 0;

void SSP1x20_ADC_Measure(void)

{

 

printf("\r\n Pengukuran tegangan tunggal multi-titik \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]);

sementara (1)

{

SSP1x20_SendCommand(SSP1x20_CMD_START); Ketika pengukuran kontinu diaktifkan, perintah ini dikirim hanya sekali

HAL_Delay (100);

SPI_ADC_CS_LOW();

 

Nilai 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 // menurut data kalibrasi

 

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 );

}

}

 

Hasil pengujian ditunjukkan dalam gambar:

 

Uji Suhu Air Panas:

Uji Campuran Air Es:

4. Detail konfigurasi uji suhu eksternal:

DaftarMengonfigurasi nilai (kode Anda)Deskripsi fungsi:Mengapa Anda memilih ini?
REG0
Write_REGTab [0]
SSP1x20_MUX_AIN1_AIN0
| SSP1x20_GAIN_1
|SSP1x20_PGA_BYPASS_OFF
Masuk ke Pemilihan Saluran + Pengaturan Penguatan 
SSP1x20_MUX_AIN1_AIN0Input diferensial: AIN1 positif dan AIN0 negatifPT100 terhubung ke AIN0 dan AIN1 pada kedua ujungnya dan memerlukan pengukuran tegangan diferensial. ⚠️ Perhatikan polaritasnyajika konfigurasi dibalik, ADC mengeluarkan nilai negatif (mis., 0x800000), menghasilkan suhu negatif.
SSP1x20_GAIN_1Keuntungan = 1PT100 memiliki tegangan yang lebih kecil (mis. 500μA × 100Ω = 50mV), tetapi menggunakan pengukuran rasio (tegangan referensi juga dari IDAC), jadi tidak ada amplifikasi diperlukan untuk menghindari kejenuhan.
SSP1x20_PGA_BYPASS_OFFTidak ada PGA bypassPertahankan fungsi PGA (meskipun penguatan = 1) untuk memastikan jalur sinyal normal.
REG1
Write_REGTab [1]
SSP1x20_DR_20SPS
| SSP1x20_MODE_NORMAL
| SSP1x20_SC
| SSP1x20_TS_OFF
| SSP1x20_BCS_OFF
Kecepatan data + mode operasi 
SSP1x20_DR_20SPSTingkat sampel = 20 titik sampel/detikKecepatan rendah meningkatkan akurasi, menekan kebisingan, dan cocok untuk pengukuran suhu (perubahan lambat).
SSP1x20_MODE_NORMALMode konversi kontinu normalKeluaran data berkelanjutan untuk pemantauan waktu nyata.
SSP1x20_SCMelakukan kalibrasi mandiriKalibrasi setelah setiap konfigurasi, menghilangkan kesalahan offset/gain dan meningkatkan akurasi.
SSP1x20_TS_OFFMatikan sensor suhu internalKami mengukur PT100 eksternal dan tidak memerlukan suhu internal.
SSP1x20_BCS_OFFMenonaktifkan sumber arus yang terbakarTidak, Anda tidak perlu.
REG2
Write_REGTab[2]
SSP1x20_VREF_REF0
| SSP1x20_REJECT_OFF
| SSP1x20_PSW_OFF
SSP1x20_IDAC_500uA
Pengaturan Tegangan Referensi + IDAC 
 SSP1x20_VREF_REF0Gunakan referensi eksternal tegangan (REF0 = tegangan antara AIN2/AIN3).Menerapkan pengukuran berbasis rasio: Hasil ADC = (Vpt100 / Vref) × 224, tidak tergantung pada arus absolut IDAC saat inihanya terkait dengan Rref, tahan terhadap fluktuasi catu daya.
 SSP1x20_REJECT_OFFPenekanan 50/60Hz tidak diaktifkanJika interferensi lingkungan kecil, maka dapat dimatikan; Jika berada di lingkungan frekuensi daya, disarankan untuk menghidupkan REJECT_50.
 SSP1x20_PSW_OFFMatikan sakelar catu daya sensorPT100 didukung oleh IDAC dan tidak memerlukan PSW tambahan.
 SSP1x20_IDAC_500uATetapkan arus sumber arus konstan = arus sumber konstan 500 μANilai arus umum, menyeimbangkan konsumsi daya dan amplitudo sinyal (100Ω → 50mV).
REG3
Write_REGTab[3]
SSP1x20_IDAC1_AIN2
| SSP1x20_IDAC2_AIN3
| SSP1x20_DRDYM_DRDY
Pin keluaran IDAC + konfigurasi DRDY 
SSP1x20_IDAC1_AIN2Output IDAC1 ke AIN2AIN2 ke PT100 (eksitasi)
SSP1x20_IDAC2_AIN3Output IDAC2 ke AIN3AIN3 terhubung ke resistor referensi di salah satu ujung R_ref (membentuk loop)
→ menyadari kompensasi tiga kabel (mengimbangi resistansi kabel).
SSP1x20_DRDYM_DRDYAktifkan pin DRDY (Sinyal Siap Data).MCU mendeteksi level rendah DRDY melalui GPIO untuk mengetahui kapan data sedang dibaca dan menghindari polling.

 

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

Perhitungan Rumus Kode Bagian Utama:

RTD = 1650*((float)ADC_gain_value /(0x3fffff)); //resistansi referensi 1650 ohm tmpPt100 = (RTD-100)/0.385;

Resistansi referensi 1650 ohm,

Kode baris pertama RTD = 1650 * (ADC / 0x3FFFFF)

Dirancang untuk mengonversi nilai ADC asli ke nilai resistansi PT100 (pengukuran rasio)

  • VIN = I × RPT100 (tegangan pada PT100)
  • VREF = I × RREF (tegangan pada resistor referensi)

Sumber arus konstan I adc yang sama digunakan pada kedua ujungnya

 

Jadi:     Vin/Vref = Rpt100/Rref

 

Output ADC adalah hasil digital dari rasio ini

Kode ADC = Vin/Vref x 224

 

Jadi didorong kembali

Rpt100= Rref x ADC_Code / 224

 

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

Kode baris kedua: tmpPt100 = (RTD - 100) / 0,385;

Memperkirakan suhu dengan rumus perkiraan linier

Pada suhu 0°C, Rpt100 = 100 Ω

Untuk setiap kenaikan suhu 1°C, resistansi meningkat sekitar 0,385 Ω

Jadi

 

T (R-100)/0.385

 

 

Ⅵ、 Panduan Debugging Masalah Umum

AnomaliKemungkinan penyebabLangkah-langkah pemecahan masalah
Nilai asli ADC (mentah) adalah negatifAIN0 adalah kebalikan dari konfigurasi AIN11. Periksa apakah konfigurasi perangkat lunak konsisten dengan koneksi ke perangkat keras
R_PT100> 1400Ω1. 1. Konfigurasi IDAC saat ini salah; 2. Rref terbuka1. 1. Periksa konfigurasi IDAC dari REG2 (pastikan nilainya 500μA); 2. Ukur nilai resistansi R ref dengan multimeter untuk mengonfirmasi bahwa rangkaian tidak terbuka
Nilai suhunya adalah - 999°CPT100 melebihi kisaran 18Ω ~ 330Ω1. 1. Periksa apakah PT100 terputus (ukur resistansi PT100); 2. Verifikasi Komunikasi SPI (Baca Nilai Konfigurasi Register)
Fluktuasi suhu > 0,1°C1. Riak besar pada catu daya; 2. Gangguan elektromagnetik1. Ukur riak VDD SSP1220 (diperlukan ≤ 10mV); 2. Periksa pentanahan kabel pelindung untuk menghindari gangguan

Ⅶ、 Tabel konfigurasi register inti SSP1220

DaftarMengkonfigurasi itemNilai (pengukuran suhu eksternal)Deskripsi fungsi:
REG0Saluran diferensialAIN1-AIN0Cocokkan kabel PT100 untuk menghindari mentah negatif
keuntunganHindari kejenuhan sinyal dan sesuaikan dengan pengukuran rasio
Bypass PGAmenonaktifkanMenjaga integritas jalur sinyal
REG1Tingkat pengambilan sampel20SPSKecepatan rendah meningkatkan akurasi dan beradaptasi dengan sinyal suhu yang lambat
Mode kerjaMode normalKonversi berkelanjutan dan keluaran data suhu secara real-time
Kalibrasi mandiriaktifkanMenghilangkan kesalahan offset/gain dan meningkatkan akurasi
TS internalmenonaktifkanPengukuran suhu eksternal tidak memerlukan sensor internal
 REG2Tegangan referensiREF0 EksternalPengukuran berbasis rasio untuk mengatasi fluktuasi arus IDAC
Arus IDAC500μAKonsumsi Daya dan Amplitudo Sinyal yang Seimbang (50mV 100Ω)
REG3Rute IDAC1AIN2Input arus eksitasi PT100
Rute IDAC2AIN3Melawan resistor utama R7

Ⅷ、Tabel koefisien persamaan Callendar-Van Dusen

KoefisienNilai numerikUnitLingkup aplikasi
R0100.0ΩResistensi referensi 0°C
A3.9083×10-3-1-200℃~600℃
B-5.775×10-7-2-200℃~600℃
C-4.183×10-12-4-200℃~0℃

Kode lengkap dapat diperoleh dengan menghubungi dukungan teknis kami. Kontak 18014203727