Ⅰ、 3線式PT100温度測定原理
3線式接続法の中心的な目的は、リード線の抵抗値が測定精度に与える影響を排除することです。PT100の抵抗値は非常に小さく(100Ω @ 0℃)、接続線の抵抗値(R6、R7、R15と表記される10分の数Ω~数Ω、3線式RTDテストの回路図を参照)によって無視できない誤差が生じる可能性があります。3線式システムは、巧妙な回路設計によってこの問題を解決します。3線式RTDの3本のリード線はすべて通常同じ長さなので、3本のリード線の抵抗が等しいと仮定すると(RL1 = RL2 = RL3、つまり回路図ではR6=R7=R15)、SSP1220の内部デュアル電流源(IDAC)は、これらのリード線抵抗の影響を打ち消すために使用されます。
測定原理を詳しく解説:
- SSP1220の内部で2つの適合するプログラマブル電流源(IDAC1とIDAC2)を使用し、同じ電流を出力する:電流源の選択は1mA未満であることが推奨され、このテストの電流源の選択値は500uAである。
- PT100の3つのリード抵抗は等しいと仮定する:R6 = R7 = R15 = Rl
- SSP1220は差動入力ペア(AIN0、AIN1)を通してPT100の電圧を測定します: Vイン = VAIN1 - VAIN0
どこでVAIN1 = IIDAC1 x (RL1+Rピーティーヒャク)+ (IIDAC1 + Iアイダックツー) x RL3, VAIN0 = Iアイダックツー x RL2 + (IIDAC1 + Iアイダックツー) x RL3
以来:私はIDAC1 = Iアイダックツー = Iアイダック AND RL1 = RL2 = RL3 = RL
に代入する:VIN = [Iアイダック x (RL + Rピーティーヒャク)+ 2Iアイダック x RL]- IIDAC x RL + 2IIDAC x RL] = Iアイダック x RL + Iアイダック x Rピーティーヒャク + 2Iアイダック x RL - 2Iアイダック x RL = Iアイダック x Rピーティーヒャク
巧みな回路構成により、差動入力電圧VINからリード抵抗の影響を完全に排除し、PT100抵抗の電圧降下のみを含ませている。
- SSP1220の基準電圧Vrefは、高精度の外部基準抵抗Rref (R5)を介して2つのIDAC電流をマージすることにより生成される。
- 比率測定では、最終 ADC 出力コードは IDAC 電流の絶対値、精度、ドリフトに関係なく (Rpt100) / (Rref) に比例し、同時にリード抵抗 Rl1 と Rl2 の影響も打ち消します:
24ビットのSSP1220の場合、出力される数値コードは次のようになる:
コード = (223 - 1) x (Vイン/Vリファレンス) = (223 - 1) x [Rピーティーヒャク/(2 x Rリファレンス) ]
ADC コードによる PT100 抵抗値の逆数:
Rピーティーヒャク = [コード/(2)23-1)] x 2 x Rリファレンス
最後に、PT100の抵抗-温度特性に従って(通常、カレンダ-ヴァン・デューセン式またはテーブル・ルックアップ法を使用)、Rpt100を温度値に変換します:T = f (Rpt100)。PT100の場合、0℃、R0 = 100.00Ωで、抵抗温度係数は約α≈0.00385Ω/Ω/℃となります。
ハードウェア回路設計
データシートの典型的なアプリケーションによると、典型的な3線式PT100の接続回路は以下の通りです:

- 回路の接続方法
- PT100の接続:PT100(3線式)は回路図のように接続します。
- 電圧リファレンス生成:IDAC1出力はAIN2(内部ソフトウェア構成が必要)に接続され、IDAC2出力はAIN3(内部ソフトウェア構成が必要)に接続され、2つのIDAC電流はノードで合流し、外部基準抵抗Rref(R5)を介して一緒に流れる。REF のもう一方の端はアナログ・グラウンド AVSS に接続される。SSP1220の正基準入力REFP0はRREF(R5)の上端(IDACマージポイント)に接続される。SSP1220の負基準入力REFN0はAVSSに接続する。したがって、基準電圧VREF=(IIDAC1 + IIDAC2) * RREFとなる。
- 信号測定:SSP1220のAIN1は差動正入力AINPとして構成され、SSP1220のAIN0は差動負入力AINNとして構成されるため、測定される電圧はAIN1とAIN0の電位差となる。
- フィルター回路:アンチエイリアシングとノイズ抑制のため、アナログ入力(AIN0、AIN1、AIN2)と基準入力(REFP0)の両方にRCローパスフィルターを追加する必要がある。入力フィルター:R1、R2、C1、C6、C5で構成。基準フィルター:R3、R4、C2、C3、C4で構成。スケール測定の精度を維持するため、基準フィルターのカットオフ周波数は入力フィルターと一致させる必要がある。
Ⅲ、デバイスの選択とパラメータ計算
仮想的な設計目標は以下の通りである:PT100タイプ:3線式、温度測定範囲:-200℃~+850℃、電源電圧AVDD:3.3V(AVSS=0V)、DAC電流:500μA(各チャンネル)、データレート:20SPS(最適なノイズ性能のため)。
- 基準抵抗(Rref)の選択と計算
Rrefはシステム全体の精度の中核をなす。機能です:ADC の基準電圧 Vref を生成し、その精度と安定性が測定結果を直接決定します。
抵抗の計算:
ADC のレンジを最大にし、PGA のコモンモード電圧要件を満たすために、Vref は通常電源電圧の約半分に設定される。この設計では、AVDD = 3.3V、ターゲット VREF は約 1.65V である。
Iアイダック = I_IDAC1 + I_IDAC2 = 500uA + 500uA = 1mA
Rリファレンス = Vリファレンス /(IIDAC1 + Iアイダックツー) = 1.65V/1mA = 1.65kΩ
公称値1.65kΩの抵抗を選択することができる。見つからなければ、1.62kΩ または 1.69kΩ も許容できる近似値である。
選考条件
精度:少なくとも±0.1%、高精度用途には±0.05%以上を推奨。
温度ブリーティング:非常に低くなければならず、±5ppm/℃または±10ppm/℃の精密フィルム抵抗を推奨。
長期安定性:高い
通常の1%、100ppm/℃のチップ抵抗は絶対に使用しないでください。
- IDAC電流およびPGAゲイン・オプション
IDAC電流:500μAを選択。この値は、消費電力、自己発熱効果、および信号振幅のバランスがうまく取れています。電流が小さすぎると、信号が弱くノイズの影響を受けやすくなります。電流が大きすぎると、PT100が自己発熱したり、IDAC準拠電圧を超えたりする可能性があります。
PGAゲインの選択:PT100は電圧が小さい(例えば500μA×100Ω=50mV)が、比率測定(基準電圧もIDACのもの)を使用するため、飽和を避けるために増幅する必要がなく、ゲイン選択は1Xとなる。
- フィルター回路の部品選択
フィルター抵抗(R1、R2、R3、R4):通常1kΩが選択される。この値は、効果的にフィルタリングするのに十分大きく、(入力バイアス電流による)入力での大きなオフセット電圧を避けるのに十分小さい。また、電流制限保護としても機能する。
差動フィルタ・コンデンサ(C1、C2):抵抗とともにカットオフ周波数を設定する。例えば、データレート20SPSの場合、カットオフ周波数は数十Hzに設定できる。 fc = 1 / (2π * (R1+R2) * C1)。R1+R2=2kΩでfc≈16Hzと予想される場合、C1≈1 / (2* 2000 * 16) ≈ 4.7μF。実際のアプリケーションでは、より広いノイズ除去帯域幅を得るために100nF(0.1μF)がよく使われる。タイプC0G(NPO)セラミック・コンデンサは、誘電率が安定し、電圧係数が低く、微小音響効果が低いため推奨される。
コモンモードフィルター付きコンデンサ(C5、C6、C3、C4):差動コンデンサのミスマッチが過度のコモンモード・ノイズを差動ノイズに変換しないようにするため。
Ⅳ、ソフトウェア設定
- マスター・ロジック:
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
- プログラムの主な構成と説明
- レジスタ0の設定:MUXとゲイン
Write_REGTab[0] = SSP1x20_MUX_AIN0_AIN1 | SSP1x20_GAIN_1 | SSP1x20_PGA_BYPASS_ON;
| ビット | 構成 | 機能 | 説明 |
| BIT7〜BIT4 | MUX_AIN0_AIN1 | 差動入力チャンネル選択 | AIN0 - AIN1 → PT100電圧測定用 |
| BIT3~BIT1 | GAIN_1(1倍ゲイン) | ゲイン設定 | 1×(Vin≒1Vなので増幅の必要なし) |
| ビット0 | PGA_BYPASS_ON | PGAバイパス | 信号の歪みを防ぐため、プログラマブル・ゲイン・アンプをオフにする |
- コンフィギュレーション・レジスタ1:サンプル・レートとモード
Write_REGTab[1] = SSP1x20_DR_20SPS | SSP1x20_MODE_NORMAL | SSP1x20_SC | SSP1x20_TS_OFF | SSP1x20_BCS_OFF;
| ビット | 構成 | 機能 | 説明 |
| BIT7〜BIT5 | DR_20SPS | データレート | 20回/秒 → 低速の温度変化に最適 |
| BIT4~BIT3 | MODE_NORMAL | 通常の作業モード | シングルでも連続でもない |
| ビトー | SC | セルフキャリブレーションが可能 | 精度の向上(推奨) |
| BIT1 | TS_OFF | 内部温度センサーを無効にする | TS_ON 内部温度センサーをオンにし、外部温度を測定する設定は機能しない(この設定が最も優先される) |
- コンフィギュレーション・レジスタ2:IDACによる基準電圧
Write_REGTab[2] = SSP1x20_VREF_2048 | SSP1x20_REJECT_OFF | SSP1x20_PSW_OFF | SSP1x20_IDAC_500uA;
| ビット | 構成 | 機能 | 説明 |
| BIT7〜BIT6 | VREF_2048 | 外部基準電圧 | 外部R_REFR_REFを使用して基準電圧を生成する(例えば1.65kΩ)。 |
| BIT5〜BIT4 | REJECT_OFF | ノッチフィルターなし | 電源周波数干渉耐性は不要 |
| ビット3 | PSW_OFF | 電源スイッチを有効にしない | 通常の電力供給を維持する |
| BIT2〜BIT0 | IDAC_500uA | 励磁電流 | 3.9kΩ×1mA=3.9V>3.3Vの過電圧を避けるため500μAに設定 |
| ビット | 構成 | 機能 | 説明 |
| BIT7〜BIT5 | IDAC1_AIN2 | IDAC1出力→AIN2 | 励磁電流はPT100の上端を流れる。 |
| BIT4~BIT2 | IDAC2_AIN3 | IDAC2出力をAIN3へ | リード抵抗を打ち消すためにパスに戻る |
| BIT1 | DRDYM_DRDY | DRDYモード | DRDY信号で変換完了を知らせる |
(4) レジスタ3:IDACルート・チャネルをDRDYで構成する
- 3線式PT100コア:
現在の進路
- IDAC1 → ain2 → PT100 → ain1
- IDAC2 → AIN3 → AIN1(リターン)
- 2つの電流が等しい → R_LEAD2R_LEAD2の電圧降下を相殺する
uint32_t raw_u24 = SSP1x20_read_data_drdy();
SSP1220出力 24ビットデータしかし、MCUは通常32ビットで読み取る(SPIは一度に4バイトを読み取る)。
もし (raw < 0) raw = -raw;
PT100 電圧 は常に正 (AIN0からAIN1に電流が流れる)。
raw < 0なら AIN0とAIN1のソフトウェア・コンフィギュレーションは逆になる。
printf("Raw: %ld, R=%.3f Ω, Temp=%.2f °Cr}n",raw, R_pt100, temperature);
プリント 元のコード値から抵抗値を計算し、最終的な温度を算出する。 デバッグしやすいように
Rawがマイナスの場合→構成が逆になる
R>1400Ωの場合→IDACまたはRrefの設定が正しくないことを示す
Temp = -999 → R値が妥当な範囲外であることを示す。
Ⅴ、測定手順と結果
- 両端のPT100電圧測定プログラム:
void SSP1x20_ADC_MeasurePt100(void)
{
float V_ref = 2.048; // 内部基準電圧 2.048V
//多点単一電圧測定;
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\rn", Write_REGTab[0]);
printf("Write_REGTab[1]=%x\rn", Write_REGTab[1]);
printf("Write_REGTab[2]=%x\rn", Write_REGTab[2]);
printf("Write_REGTab[3]=%x\rn", Write_REGTab[3]);
一方
{
SSP1x20_SendCommand(SSP1x20_CMD_START); // 連続測定が有効な場合、このコマンドは 1 回のみ送信されます。
HAL_Delay(100);
spi_adc_cs_low();
}
SSP1220テスト結果

- SSP1220内部温度測定
内部温度テスト機能
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
内部温度テストの構成詳細:
Write_REGTab[1] = SSP1x20_DR_20SPS | SSP1x20_MODE_NORMAL | SSP1x20_SC | SSP1x20_TS_ON | SSP1x20_BCS_OFF;
- SSP1x20_TS_ON: 内部温度センサーを有効にする (クリティカル)の場合、このコンフィギュレーションが最も優先されます。
- SSP1x20_SC:セルフキャリブレーションを行う(推奨)
- 20SPS:低速・高精度、温度測定に最適
Write_REGTab[2] = SSP1x20_VREF_2048 | SSP1x20_REJECT_OFF | SSP1x20_PSW_OFF | SSP1x20_IDAC_1000uA;
- SSP1x20_VREF_2048:使用する 内部2.048V基準電圧 (外部REF0ではない)
- 内部温度センサーは 絶対電圧出力, a 固定基準電圧 を使用して温度を変換しなければならない。
- IDAC_1000uA:IDACは有効だが、 TS_ONモードのIDACは内部温度測定に影響しない (無視できる)。
Write_REGTab[3] = SSP1x20_IDAC1_AIN2 | SSP1x20_IDAC2_AIN3 | SSP1x20_DRDYM_DRDY;
- IDACピンとDRDYを構成する。 内部温度の測定に影響はない (レジはそのままで)。
- 2 変換を開始し、DRDYを待つ
SSP1x20_SendCommand(SSP1x20_CMD_START); SPI_ADC_CS_LOW();同時に (adc_ddy_gain == 1); // 等待 drdy 变低
- STARTコマンドを送信し、連続トランジションを開始する。
- 待つ DRDYピンがLowになるデータの準備ができたことを示す
室内室温の測定結果を下図に示す:

3.外部温度測定(方法1、簡易係数0.385計算)
外部温度テスト関連コード:
uint32_t ADC_gain_value = 0; // 読み出しデータ
uint32_t ADC_value = 0; // データ値を測定する
float tmpPt100=0;
float RTD=0;
void SSP1x20_ADC_Measure(void)
{
printf("¦多点単一電圧測定¦");
Write_REGTab[0] = SSP1x20_MUX_AIN1_AIN0 | SSP1x20_GAIN_1 | SSP1x20_PGA_BYPASS_OFF; SSP1x20_MUX_AIN1_AIN0 インターフェース AIN1 AIN0 は実際の回路図に基づいて選択してください。
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\rn", Write_REGTab[0]);
printf("Write_REGTab[1]=%x\rn", Write_REGTab[1]);
printf("Write_REGTab[2]=%x\rn", Write_REGTab[2]);
printf("Write_REGTab[3]=%x\rn", Write_REGTab[3]);
一方
{
SSP1x20_SendCommand(SSP1x20_CMD_START); 連続測定が有効な場合、このコマンドは 1 回のみ送信されます。
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));//基準抵抗1650オーム
tmpPt100 = (RTD-100)/0.38;
__NOP();
printf("R=%.3f Ω, Temp=%.2f °Crrn",RTD, tmpPt100 );
}
氷水混合物の温度を3線式RTDで測定した結果を下図に示す:

外部温度測定(方法2、カレンダー・ヴァン・デューセンの式で計算)はより正確である。
マスターコード
//高精度RTD→温度
static float rtd_to_temperature_iec60751(float rtd)
{
if (rtd < 0.0f) return -999.0f; // 不正な値
float t = (rtd - R0_PT100) / 0.385f; // 初期推測値
if (rtd <= R0_PT100) {。
//T < = 0℃:完全な式を使用する
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 error = rt_calc - rtd;
t -= error / dr_dt;
if (fabsf(error) < 0.001f) break;
}
} else {
// T >= 0°C:: 簡略化した式を使用する。
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;
}
}
tを返す;
}
/**
* アナログチャンネルADC測定(外部温度測定)
* @param None
* なし
*/
uint32_t ADC_gain_value = 0; // 読み出しデータ
uint32_t ADC_value = 0; // データ値を測定する
float tmpPt100=0;
float RTD=0;
void SSP1x20_ADC_Measure(void)
{
printf("¦多点単一電圧測定¦");
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\rn", Write_REGTab[0]);
printf("Write_REGTab[1]=%x\rn", Write_REGTab[1]);
printf("Write_REGTab[2]=%x\rn", Write_REGTab[2]);
printf("Write_REGTab[3]=%x\rn", Write_REGTab[3]);
一方
{
SSP1x20_SendCommand(SSP1x20_CMD_START); 連続測定が有効な場合、このコマンドは 1 回のみ送信されます。
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 // キャリブレーションデータによる
RTD = 1650.0f * ((float)ADC_gain_value / CALIBRATED_FULL_SCALE);
tmpPt100 = rtd_to_temperature_iec60751(RTD);
__NOP();
printf("R=%.3f Ω, Temp=%.2f °Crrn",RTD, tmpPt100 );
}
}
テスト結果を図に示す:
温水温度テスト:

氷水混合テスト:

4.外部温度試験構成の詳細:
| 登録 | 値を設定する(あなたのコード) | 機能の説明 | なぜこれを選んだのですか? |
| REG0 ライト_REGTab[0] | SSP1x20_MUX_AIN1_AIN0 | SSP1x20_GAIN_1 |SSP1x20_PGA_BYPASS_OFF | チャンネル選択+ゲイン設定に入る | |
| SSP1x20_MUX_AIN1_AIN0 | 差動入力: AIN1が正でAIN0が負 | PT100は両端がAIN0とAIN1に接続され、差動電圧測定が必要です。⚠️ 極性に注意もし設定が逆であれば、ADC は負の値(例えば 0x800000)を出力し、その結果温度は負になります。 | |
| SSP1x20_GAIN_1 | ゲイン = 1 | PT100は電圧は小さいが(例えば500μA×100Ω=50mV)、比率測定を使用する(基準電圧もIDACのものである)。 増幅なし は飽和を避けるために必要である。 | |
| SSP1x20_PGA_BYPASS_OFF | バイパスPGAなし | 信号経路が正常であることを確認するために、PGA 機能を保持する(ゲイン=1 であっても)。 | |
| REG1 ライト_REGTab[1] | SSP1x20_DR_20SPS | SSP1x20_MODE_NORMAL | SSP1x20_SC | SSP1x20_TS_OFF | SSP1x20_BCS_OFF | データ・レート+動作モード | |
| SSP1x20_DR_20SPS | サンプルレート 20サンプルポイント/秒 | 低速は精度を向上させ、ノイズを抑制し、温度測定(ゆっくりとした変化)に適している。 | |
| SSP1x20_MODE_NORMAL | 通常の連続変換モード | リアルタイムモニタリングのための連続データ出力。 | |
| SSP1x20_SC | 自己校正の実行 | 各コンフィギュレーション後にキャリブレーションを行うことで、オフセット/ゲインエラーを排除し、精度を向上。 | |
| SSP1x20_TS_OFF | 内部温度センサーをオフにする | 我々は外部のPT100を測定しており、内部温度は必要ない。 | |
| SSP1x20_BCS_OFF | バーンオフ電流源の無効化 | いや、そんなことはない。 | |
| レグ2 ライト_REGTab[2] | SSP1x20_VREF_REF0 | SSP1x20_REJECT_OFF | SSP1x20_PSW_OFF SSP1x20_IDAC_500uA | 基準電圧+IDAC設定 | |
| SSP1x20_VREF_REF0 | 用途 外部参照 電圧(REF0 = AIN2/AIN3間電圧)。 | 実施 比率に基づく測定:ADC 結果 = (Vpt100 / Vref) × 224、 IDAC電流の絶対値に依存しない電源変動に強い。 | |
| SSP1x20_REJECT_OFF | 50/60Hzサプレッションが有効になっていない | 環境干渉が小さい場合はオフにすることができますが、電力周波数環境であれば、REJECT_50をオンにすることをお勧めします。 | |
| SSP1x20_PSW_OFF | センサーの電源スイッチを切る | PT100はIDACから電源を供給され、追加のPSWは必要ありません。 | |
| SSP1x20_IDAC_500uA | 定電流源電流の設定 500 μA | 共通の電流値、消費電力と信号振幅のバランス(100Ω→50mV)。 | |
| レグ3 ライト_REGTab[3] | SSP1x20_IDAC1_AIN2 | SSP1x20_IDAC2_AIN3 | SSP1x20_DRDYM_DRDY | IDAC出力端子+DRDYコンフィギュレーション | |
| SSP1x20_IDAC1_AIN2 | IDAC1出力→AIN2 | AIN2~PT100(励磁) | |
| SSP1x20_IDAC2_AIN3 | IDAC2出力をAIN3へ | AIN3はR_refの一端で基準抵抗に接続される(ループを形成する) →実現する 3線式補償 (ワイヤー抵抗を相殺する)。 | |
| SSP1x20_DRDYM_DRDY | 有効にする DRDYピン (データレディ信号)。 | MCUはGPIOを通じてDRDYのロー・レベルを検出し、データがいつ読み込まれているかを把握してポーリングを回避する。 |
----------------------------------
キー・パーツ・コードの計算式:
RTD = 1650*( (float)ADC_gain_value /(0x3fffff)); //基準抵抗1650オーム tmpPt100 = (RTD-100)/0.385;
基準抵抗1650オーム、
1行目のコード RTD = 1650 * (ADC / 0x3FFFFF)
元のADC値をPT100の抵抗値に変換するように設計(比率測定)
- VIN = I × RPT100(PT100を横切る電圧)
- VREF = I × RREF(基準抵抗にかかる電圧)
両端に同じ定電流源I adcを使用する。
だから Vin/Vref = Rpt100/Rref
ADCの出力は、この比率をデジタル化したものである。
ADC_Code = Vin/Vref x 224
だから押し戻された
Rpt100= Rref x ADC_Code /224
---------------------------------------
2行目のコード:tmpPt100 = (RTD - 100) / 0.385;
直線近似式で温度を見積もる
0℃の場合、Rpt100 = 100 Ω
温度が1℃上昇するごとに、抵抗値は約0.385Ω増加する。
だから
T ≈ (R-100)/0.385
Ⅵ、よくある問題のデバッグガイド
| アノーマル | 考えられる原因 | トラブルシューティングの手順 |
| ADC(生)の元の値は負である | AIN0はAIN1の逆の構成です。 | 1.ソフトウェアの設定とハードウェアの接続が一致していることを確認する。 |
| r_pt100 > 1400ω | 1.IDAC 電流設定が正しくない。 | 1.REG2 の IDAC コンフィギュレーションをチェックする(500μA であることを確認する)。 |
| 温度値は - 999°C | PT100は18Ω〜330Ωの範囲を超える | 1.PT100 が断線していないか確認する(PT100 の抵抗値を測定する); 2. SPI 通信を確認する(レジスタ構成値を読み込む)。 |
| 温度変動 > 0.1°C | 1.電源のリップルが大きい。 | 1.SSP1220 の VDD リップルを測定する(10mV 以下必要); 2.干渉を避けるためにシールド線のアースをチェックする。 |
Ⅶ、 SSP1220 コア・レジスタ構成表
| 登録 | アイテムの設定 | 値(外部温度測定) | 機能の説明 |
| REG0 | 差動チャンネル | AIN1-AIN0 | PT100の配線を合わせ、負の生を避ける。 |
| ゲイン | 1× | 信号の飽和を避け、比率測定に適応する | |
| PGAバイパス | 無効にする | 信号経路の完全性を保つ | |
| REG1 | サンプリング・レート | 20SPS | 低速で精度が向上し、低速の温度信号にも対応 |
| 作業モード | ノーマルモード | 温度データの連続変換とリアルタイム出力 | |
| セルフ・キャリブレーション | イネーブル | オフセット/ゲインエラーを排除し、精度を向上 | |
| 内部TS | 無効にする | 内部センサーを必要としない外部温度測定 | |
| レグ2 | 基準電圧 | 外部 REF0 | IDAC電流変動に対抗する比率ベースの測定 |
| IDAC電流 | 500μA | 平衡消費電力と信号振幅(50mV 100Ω) | |
| レグ3 | IDAC1ルート | AIN2 | 励磁電流入力 PT100 |
| IDAC2ルート | AIN3 | リード抵抗R7に対抗する |
Ⅷ、カレンダー・ヴァン・デューセン方程式係数表
| 係数 | 数値 | 単位 | 適用範囲 |
| R0 | 100.0 | Ω | 0℃基準抵抗 |
| A | 3.9083×10-3 | ℃-1 | -200℃~600℃ |
| B | -5.775×10-7 | ℃-2 | -200℃~600℃ |
| C | -4.183×10-12 | ℃-4 | -200℃~0℃ |
完全なコードは、当社のテクニカルサポートにお問い合わせください。連絡先18014203727