Ⅰ、 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:
- 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.
- Tiga resistor utama PT100 diasumsikan sama: R6 = R7 = R15 = Rl
- 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.
- Tegangan referensi SSP1220 Vref dihasilkan oleh penggabungan dua arus IDAC melalui resistor referensi eksternal presisi tinggi, Rref (R5), yaitu Vref = (Iidac1 + Iidac2) * R
- 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:

- 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).
- 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.
- 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.
- 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
- 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
- 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;
| Bit | Konfigurasi | Fungsi | Deskripsi |
| BIT7 ~ BIT4 | MUX_AIN0_AIN1 | Pemilihan saluran input diferensial | AIN0 - AIN1 → untuk pengukuran tegangan PT100 |
| BIT3 ~ BIT1 | GAIN_1 (keuntungan 1x) | Pengaturan penguatan | 1× (tidak perlu diperkuat karena Vin ≈ 1V) |
| BIT0 | PGA_BYPASS_ON | Bypass PGA | Matikan 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;
| Bit | Konfigurasi | Fungsi | Deskripsi |
| BIT7 ~ BIT5 | DR_20SPS | Kecepatan data | 20 kali/detik → cocok untuk perubahan suhu yang lambat |
| BIT4 ~ BIT3 | MODE_NORMAL | Mode kerja normal | Tidak tunggal atau berurutan |
| BITO | SC | Kalibrasi mandiri diaktifkan | Akurasi yang lebih baik (direkomendasikan pada) |
| BIT1 | TS_OFF | Menonaktifkan sensor suhu internal | TS_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;
| Bit | Konfigurasi | Fungsi | Deskripsi |
| BIT7 ~ BIT6 | VREF_2048 | Tegangan referensi eksternal | Gunakan R_REFR_REF eksternal untuk menghasilkan tegangan referensi (misalnya, 1,65kΩ). |
| BIT5 ~ BIT4 | TOLAK_OFF | Tidak ada pemfilteran takik | Tidak diperlukan kekebalan terhadap interferensi frekuensi daya |
| BIT3 | PSW_OFF | Jangan aktifkan sakelar daya | Mempertahankan catu daya normal |
| BIT2 ~ BIT0 | IDAC_500uA | Arus eksitasi | Atur ke 500 μA untuk menghindari tegangan berlebih 3,9kΩ × 1mA = 3,9V > 3,3V |
| Bit | Konfigurasi | Fungsi | Deskripsi |
| BIT7 ~ BIT5 | IDAC1_AIN2 | Output IDAC1 ke AIN2 | Arus eksitasi mengalir melalui ujung atas PT100 |
| BIT4 ~ BIT2 | IDAC2_AIN3 | Output IDAC2 ke AIN3 | Kembali ke jalur untuk membatalkan resistensi timbal |
| BIT1 | DRDYM_DRDY | Mode DRDY | Gunakan sinyal DRDY untuk memberi tahu Anda bahwa konversi telah selesai |
(4) Konfigurasikan register 3: saluran rute IDAC dengan DRDY
- 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
- 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

- 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:
| Daftar | Mengonfigurasi 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_AIN0 | Input diferensial: AIN1 positif dan AIN0 negatif | PT100 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_1 | Keuntungan = 1 | PT100 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_OFF | Tidak ada PGA bypass | Pertahankan 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_20SPS | Tingkat sampel = 20 titik sampel/detik | Kecepatan rendah meningkatkan akurasi, menekan kebisingan, dan cocok untuk pengukuran suhu (perubahan lambat). | |
| SSP1x20_MODE_NORMAL | Mode konversi kontinu normal | Keluaran data berkelanjutan untuk pemantauan waktu nyata. | |
| SSP1x20_SC | Melakukan kalibrasi mandiri | Kalibrasi setelah setiap konfigurasi, menghilangkan kesalahan offset/gain dan meningkatkan akurasi. | |
| SSP1x20_TS_OFF | Matikan sensor suhu internal | Kami mengukur PT100 eksternal dan tidak memerlukan suhu internal. | |
| SSP1x20_BCS_OFF | Menonaktifkan sumber arus yang terbakar | Tidak, 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_REF0 | Gunakan 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_OFF | Penekanan 50/60Hz tidak diaktifkan | Jika interferensi lingkungan kecil, maka dapat dimatikan; Jika berada di lingkungan frekuensi daya, disarankan untuk menghidupkan REJECT_50. | |
| SSP1x20_PSW_OFF | Matikan sakelar catu daya sensor | PT100 didukung oleh IDAC dan tidak memerlukan PSW tambahan. | |
| SSP1x20_IDAC_500uA | Tetapkan arus sumber arus konstan = arus sumber konstan 500 μA | Nilai 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_AIN2 | Output IDAC1 ke AIN2 | AIN2 ke PT100 (eksitasi) | |
| SSP1x20_IDAC2_AIN3 | Output IDAC2 ke AIN3 | AIN3 terhubung ke resistor referensi di salah satu ujung R_ref (membentuk loop) → menyadari kompensasi tiga kabel (mengimbangi resistansi kabel). | |
| SSP1x20_DRDYM_DRDY | Aktifkan 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
| Anomali | Kemungkinan penyebab | Langkah-langkah pemecahan masalah |
| Nilai asli ADC (mentah) adalah negatif | AIN0 adalah kebalikan dari konfigurasi AIN1 | 1. Periksa apakah konfigurasi perangkat lunak konsisten dengan koneksi ke perangkat keras |
| R_PT100> 1400Ω | 1. 1. Konfigurasi IDAC saat ini salah; 2. Rref terbuka | 1. 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°C | PT100 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°C | 1. Riak besar pada catu daya; 2. Gangguan elektromagnetik | 1. Ukur riak VDD SSP1220 (diperlukan ≤ 10mV); 2. Periksa pentanahan kabel pelindung untuk menghindari gangguan |
Ⅶ、 Tabel konfigurasi register inti SSP1220
| Daftar | Mengkonfigurasi item | Nilai (pengukuran suhu eksternal) | Deskripsi fungsi: |
| REG0 | Saluran diferensial | AIN1-AIN0 | Cocokkan kabel PT100 untuk menghindari mentah negatif |
| keuntungan | 1× | Hindari kejenuhan sinyal dan sesuaikan dengan pengukuran rasio | |
| Bypass PGA | menonaktifkan | Menjaga integritas jalur sinyal | |
| REG1 | Tingkat pengambilan sampel | 20SPS | Kecepatan rendah meningkatkan akurasi dan beradaptasi dengan sinyal suhu yang lambat |
| Mode kerja | Mode normal | Konversi berkelanjutan dan keluaran data suhu secara real-time | |
| Kalibrasi mandiri | aktifkan | Menghilangkan kesalahan offset/gain dan meningkatkan akurasi | |
| TS internal | menonaktifkan | Pengukuran suhu eksternal tidak memerlukan sensor internal | |
| REG2 | Tegangan referensi | REF0 Eksternal | Pengukuran berbasis rasio untuk mengatasi fluktuasi arus IDAC |
| Arus IDAC | 500μA | Konsumsi Daya dan Amplitudo Sinyal yang Seimbang (50mV 100Ω) | |
| REG3 | Rute IDAC1 | AIN2 | Input arus eksitasi PT100 |
| Rute IDAC2 | AIN3 | Melawan resistor utama R7 |
Ⅷ、Tabel koefisien persamaan Callendar-Van Dusen
| Koefisien | Nilai numerik | Unit | Lingkup aplikasi |
| R0 | 100.0 | Ω | Resistensi referensi 0°C |
| A | 3.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