Ⅰ、 Principe de la mesure de température PT100 à trois fils

L'objectif principal de la méthode de connexion à trois fils est d'éliminer l'influence de la résistance du fil sur la précision de la mesure. La valeur de résistance du PT100 est très faible (100Ω @ 0℃), et la résistance des fils de connexion (quelques dixièmes d'ohm à quelques ohms, notés R6, R7, R15, voir le schéma du test RTD à trois fils) peut introduire des erreurs non négligeables. Le système à trois fils résout ce problème grâce à une conception intelligente du circuit, où les trois fils d'un RTD à trois fils sont typiquement de la même longueur, donc en supposant que la résistance des trois fils est égale (RL1 = RL2 = RL3, c'est-à-dire R6=R7=R15 dans le schéma), la double source de courant interne (IDAC) du SSP1220 est utilisée pour contrecarrer les effets de ces résistances de fils.

Explication détaillée du principe de mesure :

  1. En utilisant deux sources de courant programmables adaptées (IDAC1 et IDAC2) à l'intérieur du SSP1220 et en émettant le même courant : , il est recommandé que la sélection de la source de courant soit inférieure à 1mA, et la valeur de la sélection de la source de courant pour ce test est de 500uA.
  2. Les trois résistances du PT100 sont supposées égales : R6 = R7 = R15 = Rl
  3. Le SSP1220 mesure la tension sur la PT100 à travers une paire d'entrées différentielles (AIN0, AIN1) : VIN = VAIN1 - VAIN0

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

Depuis : IIDAC1 = IIDAC2 = IIDAC ET RL1 = RL2 = RL3 = RL

en le remplaçant par : 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

Grâce à une configuration astucieuse du circuit, l'influence de la résistance du fil est complètement éliminée de la tension différentielle d'entrée VIN, et seule la chute de tension à travers la résistance PT100 est incluse.

  1. La tension de référence Vref du SSP1220 est générée par la fusion de deux courants IDAC à travers une résistance de référence externe de haute précision, Rref (R5), c'est-à-dire Vref = (Iidac1 + Iidac2) * R
  2. Avec les mesures de rapport, le code de sortie final du CAN est proportionnel à (Rpt100) / (Rref) indépendamment de la valeur absolue, de la précision et de la dérive du courant IDAC, tout en contrecarrant également l'effet des résistances de plomb Rl1 et Rl2 :

Pour le SSP1220 à 24 bits, le code numérique de sortie est le suivant :

Code = (223 - 1) x (VIN/VREF) = (223 - 1) x [RPT100/(2 x RREF) ]

Inverse la valeur de la résistance de la PT100 par le code ADC :

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

Enfin, selon les caractéristiques résistance-température de la PT100 (généralement en utilisant l'équation de Callendar-Van Dusen ou la méthode de consultation des tableaux), Rpt100 est convertie en une valeur de température : T = f (Rpt100). Pour le PT100, at0℃, R0 = 100,00Ω, le coefficient de température de la résistance est approximativement α≈ 0,00385 Ω/Ω/℃.

Ⅱ、Conception de circuits matériels

Selon l'application type indiquée dans la fiche technique, un circuit de connexion typique à trois fils de la PT100 est le suivant :

  1. Instructions pour le raccordement des circuits
  • Connexion de la PT100 : La PT100 (système à trois fils) est connectée comme indiqué dans le schéma.
  • Génération d'une référence de tension : La sortie IDAC1 est connectée à AIN2 (configuration logicielle interne requise), la sortie IDAC2 est connectée à AIN3 (configuration logicielle interne requise), et les deux courants IDAC fusionnent au niveau du nœud et circulent ensemble à travers la résistance de référence externe Rref(R5). L'autre extrémité de REF est connectée à la masse analogique AVSS. L'entrée de référence positive du SSP1220, REFP0, est connectée à l'extrémité supérieure de RREF (R5) (le point de fusion IDAC). L'entrée de référence négative du SSP1220, REFN0, est connectée à AVSS. Par conséquent, la tension de référence, VREF= (IIDAC1 + IIDAC2) * RREF.
  • Mesure du signal : L'entrée AIN1 du SSP1220 est configurée comme une entrée positive différentielle AINP et l'entrée AIN0 du SSP1220 est configurée comme une entrée négative différentielle AINN, de sorte que la tension mesurée est la différence de potentiel entre AIN1 et AIN0.
  • Circuit de filtrage : Des filtres passe-bas RC doivent être ajoutés aux entrées analogiques (AIN0, AIN1, AIN2) et aux entrées de référence (REFP0) pour l'anticrénelage et la suppression du bruit. Filtres d'entrée : composés de R1, R2, C1 et C6, C5. Filtre de référence : composé de R3, R4, C2 et C3, C4. Pour maintenir la précision des mesures d'échelle, la fréquence de coupure du filtre de référence doit correspondre à celle du filtre d'entrée.

Ⅲ、Sélection des appareils et calcul des paramètres

Les objectifs de conception hypothétiques sont les suivants : Type de PT100 : trois fils ; Plage de mesure de la température : -200°C ~ +850°C ; Tension d'alimentation AVDD : 3,3V (AVSS = 0V) ; Courant DAC : 500μA (par canal) ; Taux de données : 20 SPS (pour des performances optimales en matière de bruit).

  1. Sélection et calcul de la résistance de référence (Rref)

Rref est au cœur de la précision de l'ensemble du système. Sa fonction est de générer la tension de référence V ref de l'ADC : Génère la tension de référence V ref de l'ADC, et sa précision et sa stabilité déterminent directement les résultats de la mesure.

Calcul de la résistance :

Pour maximiser la plage de l'ADC et répondre aux exigences de tension de mode commun du PGA, le Vref est généralement fixé à environ la moitié de la tension d'alimentation. Dans cette conception, AVDD = 3.3V et le VREF cible est d'environ 1.65V.

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

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

Une résistance d'une valeur nominale de 1,65 kΩ peut être sélectionnée. Si elle n'est pas trouvée, 1,62kΩ ou 1,69kΩ est également une approximation acceptable.

Conditions de sélection :

Précision : Au moins ±0,1%, recommandé ±0,05% ou plus pour les applications de haute précision.

Saillie de température : Doit être très faible, avec une résistance de film de précision de ±5 ppm/°C ou ±10 ppm/°C recommandée.

Stabilité à long terme : élevée.

N'utilisez jamais une résistance de puce normale 1%, 100ppm/°C.

  1. Options de courant IDAC et de gain PGA

Courant IDAC : 500μA sélectionné. Cette valeur constitue un bon équilibre entre la consommation d'énergie, l'effet d'auto-échauffement et l'amplitude du signal. Si le courant est trop faible, le signal est faible et facilement affecté par le bruit ; un courant trop important peut entraîner un auto-échauffement de la PT100 ou un dépassement des tensions conformes à l'IDAC.

Sélection du gain PGA : Le PT100 a une tension plus petite (par exemple 500μA × 100Ω = 50mV), mais utilise une mesure de rapport (la tension de référence provient également de l'IDAC), il n'est donc pas nécessaire d'amplifier pour éviter la saturation, et la sélection du gain est de 1X.

  1. Sélection des composants du circuit de filtrage

Résistances de filtrage (R1, R2, R3, R4) : 1kΩ est généralement choisi. Cette valeur est suffisamment grande pour filtrer efficacement et suffisamment petite pour éviter des tensions de décalage significatives à l'entrée (dues au courant de polarisation d'entrée). Ils agissent également comme une protection de limitation de courant.

Condensateurs de filtrage différentiel (C1, C2) : Régler la fréquence de coupure avec la résistance. Par exemple, pour un débit de données de 20SPS, la fréquence de coupure peut être réglée en dizaines de Hz. fc = 1 / (2π * (R1+R2) * C1)。 Si R1+R2=2kΩ et attend fc ≈ 16Hz, C1 ≈ 1 / (2* 2000 * 16) ≈ 4,7μF. Dans les applications réelles, 100nF (0,1μF) est souvent utilisé pour obtenir une bande passante de rejet du bruit plus large. Type : Les condensateurs céramiques C0G (NPO) sont recommandés pour leur constante diélectrique stable, leur faible coefficient de tension et leur faible effet microacoustique.

Condensateurs filtrés en mode commun (C5, C6, C3, C4) : Généralement choisis d'un ordre de grandeur plus petit que les condensateurs différentiels, par exemple 10nF, pour garantir que les déséquilibres des condensateurs différentiels n'entraînent pas la conversion d'un bruit de mode commun excessif en bruit différentiel.

Ⅳ、Configuration du logiciel

  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. Configuration principale et description du programme
  • Configuration du registre 0 : MUX et gain

Write_REGTab[0] = SSP1x20_MUX_AIN0_AIN1 | SSP1x20_GAIN_1 | SSP1x20_PGA_BYPASS_ON ;

BitConfigurationFonctionDescription
BIT7~BIT4MUX_AIN0_AIN1Sélection du canal d'entrée différentielleAIN0 - AIN1 → pour la mesure de la tension PT100
BIT3~BIT1GAIN_1(1x gain )Réglages du gain1× (pas besoin d'amplifier car Vin ≈ 1V)
BIT0PGA_BYPASS_ONPGA bypassDésactiver l'amplificateur de gain programmable pour éviter la distorsion du signal
  • Registre de configuration 1 : taux d'échantillonnage et mode

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

BitConfigurationFonctionDescription
BIT7~BIT5DR_20SPSDébit de données20 fois/sec → convient aux changements de température lents
BIT4~BIT3MODE_NORMALMode de travail normalNon unique ou consécutif
BITOSCAuto-étalonnage activéAmélioration de la précision (recommandée)
BIT1TS_OFFDésactiver le capteur de température interneTS_ON active le capteur de température interne, la configuration pour la mesure de la température externe ne fonctionne pas (cette configuration a la priorité la plus élevée).

 

  • Configurer le registre 2 : Tension de référence avec IDAC

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

BitConfigurationFonctionDescription
BIT7~BIT6VREF_2048Tension de référence externeUtiliser un R_REFR_REF externe pour générer une tension de référence (par exemple, 1,65kΩ).
BIT5~BIT4REJECT_OFFPas de filtre coupe-bandeAucune immunité aux interférences des fréquences électriques n'est requise
BIT3PSW_OFFNe pas activer l'interrupteur d'alimentationMaintien d'une alimentation électrique normale
BIT2~BIT0IDAC_500uACourant d'excitationRégler à 500 μA pour éviter une surtension de 3,9kΩ × 1mA = 3,9V > 3,3V.

  

BitConfigurationFonctionDescription
BIT7~BIT5IDAC1_AIN2Sortie IDAC1 vers AIN2Le courant d'excitation passe par l'extrémité supérieure de la PT100
BIT4~BIT2IDAC2_AIN3Sortie IDAC2 vers AIN3Retourner sur le chemin pour annuler la résistance du plomb
BIT1DRDYM_DRDYMode DRDYUtilisez le signal DRDY pour vous informer que la conversion est terminée.

 

(4) Configuration du registre 3 : canal de routage IDAC avec DRDY

  1. Noyau PT100 à trois fils :

Voie actuelle :

  • IDAC1 → AIN2 → PT100 → AIN1
  • IDAC2 → AIN3 → AIN1(Retour)
  • Deux courants sont égaux → compenser la chute de tension sur le R_LEAD2R_LEAD2

uint32_t raw_u24 = SSP1x20_read_data_drdy() ;

 

Sorties SSP1220 Données de 24 bitsmais les MCUs lisent généralement en 32 bits (SPI lit 4 octets à la fois).

 

si (raw < 0) raw = -raw ;

La tension de la PT100 est toujours positive (le courant passe de AIN0 à AIN1).

Si raw < 0, le Les configurations logicielles AIN0 et AIN1 sont inversées.

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

Imprimer la valeur du code d'origine, calculer la résistance et la température finale pour faciliter le débogage

Si Raw est négatif→ la configuration est inversée

Si R > 1400Ω → indique que l'IDAC ou Rref est mal réglé

Si Temp = -999 → indique que la valeur R est en dehors de la plage raisonnable

 

Ⅴ、Procédure de mesure et résultats

  1. Programme de mesure de tension PT100 aux deux extrémités :

void SSP1x20_ADC_MeasurePt100(void)

{

float V_ref = 2.048 ; // Tension de référence interne 2.048V

//printf("\r\nMesure de la tension unique multipoint \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]) ;

pendant (1)

{

SSP1x20_SendCommand(SSP1x20_CMD_START) ; // Lorsque la mesure continue est activée, cette commande n'est envoyée qu'une seule fois.

HAL_Delay(100) ;

SPI_ADC_CS_LOW() ;

}

 

Résultats du test SSP1220

  1. Mesure de la température interne du SSP1220

Fonction de test de la température interne

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

 

Détails de la configuration du test de température interne :

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

  • SSP1x20_TS_ON : Activer le capteur de température interne (critique), cette configuration a la priorité la plus élevée
  • SSP1x20_SC : Effectuer un auto-calibrage (recommandé)
  • 20SPS: Faible vitesse et haute précision, adapté à la mesure de la température

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

  • SSP1x20_VREF_2048 : Utiliser une tension de référence interne de 2,048 V (pas REF0 externe !) )
    • Parce que le capteur de température interne est une sortie de tension absolue, a tension de référence fixe doit être utilisé pour convertir la température.
  • IDAC_1000uA: Bien que l'IDAC soit activé, L'IDAC en mode TS_ON n'affecte pas les mesures de température interne. (négligeable).

Write_REGTab[3] = SSP1x20_IDAC1_AIN2 | SSP1x20_IDAC2_AIN3 | SSP1x20_DRDYM_DRDY ;

  • Configurer la broche IDAC et DRDY, mais n'ont pas d'effet sur la mesure de la température interne (il suffit de garder les registres intacts).
  • 2 Démarrer la conversion et attendre DRDY

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

  • Envoyer la commande START pour démarrer une transition continue
  • Attendre la broche DRDY passe à un niveau basindiquant que les données sont prêtes

La mesure de la température intérieure de la pièce est illustrée dans la figure ci-dessous :

3. Mesure de la température externe (méthode 1, calcul simplifié du facteur 0,385)

Code lié à l'essai de température externe :

uint32_t ADC_gain_value = 0 ; // Données de lecture

uint32_t ADC_value = 0 ; // Mesure la valeur des données

float tmpPt100=0 ;

float RTD=0 ;

void SSP1x20_ADC_Measure(void)

{

 

printf("\r\nMesure de la tension simple multipoint \r\n") ;

Write_REGTab[0] = SSP1x20_MUX_AIN1_AIN0 | SSP1x20_GAIN_1 | SSP1x20_PGA_BYPASS_OFF ; SSP1x20_MUX_AIN1_AIN0 Interface AIN1 AIN0 doit être sélectionné en fonction du schéma de circuit réel.

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

pendant (1)

{

 

SSP1x20_SendCommand(SSP1x20_CMD_START) ; Lorsque la mesure continue est activée, cette commande n'est envoyée qu'une seule fois.

HAL_Delay(100) ;

SPI_ADC_CS_LOW() ;

Valeur du gain ADC =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));//Résistance de référence 1650 ohms

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

__NOP() ;

 

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

}

Les résultats de la mesure par RTD à trois lignes de la température du mélange glace-eau sont présentés dans la figure ci-dessous :

Les mesures de la température externe (méthode 2, calculée par l'équation de Callendar-Van Dusen) sont plus précises.

 

Code maître :

//RTD de haute précision -> température

static float rtd_to_temperature_iec60751(float rtd)

{

if (rtd < 0.0f) return -999.0f ; // valeur illégale

 

float t = (rtd - R0_PT100) / 0.385f ; // estimation initiale

 

if (rtd <= R0_PT100) {

//T < = 0°C : Utiliser l'équation complète

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 -= erreur / dr_dt ;

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

}

} else {

// T >= 0°C : : Utiliser l'équation simplifiée

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 -= erreur / dr_dt ;

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

}

}

retourner t ;

}

/**

* @brief Mesure du canal analogique ADC (mesure de la température externe)

* @param None

* @retval None

*/

uint32_t ADC_gain_value = 0 ; // Données de lecture

uint32_t ADC_value = 0 ; // Mesure la valeur des données

float tmpPt100=0 ;

float RTD=0 ;

void SSP1x20_ADC_Measure(void)

{

 

printf("\r\nMesure de la tension simple multipoint \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]) ;

pendant (1)

{

SSP1x20_SendCommand(SSP1x20_CMD_START) ; Lorsque la mesure continue est activée, cette commande n'est envoyée qu'une seule fois.

HAL_Delay(100) ;

SPI_ADC_CS_LOW() ;

 

Valeur du gain ADC =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 // selon les données d'étalonnage

 

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

}

}

 

Les résultats du test sont présentés dans la figure :

 

Test de température de l'eau chaude :

Test de mélange d'eau et de glace :

4. Détails de la configuration de l'essai de température externe :

RegistreConfigurer les valeurs (votre code)Description de la fonction :Pourquoi ce choix ?
REG0
Write_REGTab[0]
SSP1x20_MUX_AIN1_AIN0
| SSP1x20_GAIN_1
|SSP1x20_PGA_BYPASS_OFF
Entrer la sélection des canaux + les réglages de gain 
SSP1x20_MUX_AIN1_AIN0Entrées différentielles : AIN1 est positif et AIN0 est négatifLa PT100 est connectée à AIN0 et AIN1 aux deux extrémités et nécessite une mesure de tension différentielle. ⚠️ Respecter la polaritéSi la configuration est inversée, l'ADC émet une valeur négative (par exemple, 0x800000), ce qui se traduit par une température négative.
SSP1x20_GAIN_1Gain = 1La PT100 a une tension plus faible (par exemple 500μA × 100Ω = 50mV), mais utilise une mesure de rapport (la tension de référence provient également de l'IDAC), donc pas d'amplification est nécessaire pour éviter la saturation.
SSP1x20_PGA_BYPASS_OFFPas de dérivation PGAMaintenir la fonction PGA (même si le gain est égal à 1) pour s'assurer que le trajet du signal est normal.
REG1
Write_REGTab[1]
SSP1x20_DR_20SPS
| SSP1x20_MODE_NORMAL
| SSP1x20_SC
| SSP1x20_TS_OFF
| SSP1x20_BCS_OFF
Débit de données + mode de fonctionnement 
SSP1x20_DR_20SPSTaux d'échantillonnage = 20 points d'échantillonnage/secondeLa faible vitesse améliore la précision, supprime le bruit et convient à la mesure de la température (changement lent).
SSP1x20_MODE_NORMALMode normal de conversion continueSortie de données en continu pour une surveillance en temps réel.
SSP1x20_SCEffectuer un auto-calibrageL'étalonnage après chaque configuration élimine les erreurs d'offset/gain et améliore la précision.
SSP1x20_TS_OFFDésactiver le capteur de température interneNous mesurons la PT100 externe et n'avons pas besoin de la température interne.
SSP1x20_BCS_OFFDésactiver les sources de courant de déverminageNon, ce n'est pas le cas.
REG2
Write_REGTab[2]
SSP1x20_VREF_REF0
| SSP1x20_REJECT_OFF
| SSP1x20_PSW_OFF
SSP1x20_IDAC_500uA
Tension de référence + réglages IDAC 
 SSP1x20_VREF_REF0Utilisation une référence externe (REF0 = tension entre AIN2/AIN3).Mettre en œuvre les mesures basées sur les ratios: Résultat ADC = (Vpt100 / Vref) × 224, indépendant du courant absolu de l'IDACLe système de gestion de l'énergie, uniquement lié à Rref, résiste aux fluctuations de l'alimentation électrique.
 SSP1x20_REJECT_OFFLa suppression de 50/60Hz n'est pas activéeSi l'interférence environnementale est faible, il peut être désactivé ; s'il se trouve dans un environnement à haute fréquence, il est recommandé d'activer le REJECT_50.
 SSP1x20_PSW_OFFDésactiver l'interrupteur d'alimentation du capteurLe PT100 est alimenté par l'IDAC et ne nécessite pas de PSW supplémentaire.
 SSP1x20_IDAC_500uARégler le courant de la source de courant constant = 500 μAValeurs de courant communes, équilibrant la consommation d'énergie et l'amplitude du signal (100Ω → 50mV).
REG3
Write_REGTab[3]
SSP1x20_IDAC1_AIN2
| SSP1x20_IDAC2_AIN3
| SSP1x20_DRDYM_DRDY
Broche de sortie IDAC + configuration DRDY 
SSP1x20_IDAC1_AIN2Sortie IDAC1 vers AIN2AIN2 à PT100 (excitation)
SSP1x20_IDAC2_AIN3Sortie IDAC2 vers AIN3AIN3 est connecté à la résistance de référence à l'une des extrémités de R_ref (formant la boucle).
→ réalise compensation à trois fils (compensant la résistance du fil).
SSP1x20_DRDYM_DRDYActiver la broche DRDY (signal de données prêtes).L'unité MCU détecte les niveaux bas de DRDY par l'intermédiaire du GPIO afin de savoir quand les données sont lues et d'éviter l'interrogation.

 

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

Code de la pièce clé Formule de calcul :

RTD = 1650*( (float)ADC_gain_value /(0x3fffff)) ; //résistance de référence 1650 ohms tmpPt100 = (RTD-100)/0.385 ;

Résistance de référence 1650 ohms,

Code de la première ligne RTD = 1650 * (ADC / 0x3FFFFF)

Conçu pour convertir la valeur originale de l'ADC en valeur de résistance de la PT100 (mesure de rapport).

  • VIN = I × RPT100 (tension aux bornes de la PT100)
  • VREF = I × RREF (tension dans la résistance de référence)

La même source de courant constant I adc est utilisée aux deux extrémités

 

Ainsi :     Vin/Vref = Rpt100/Rref

 

La sortie de l'ADC est le résultat numérisé de ce rapport.

Code ADC = Vin/Vref x 224

 

Donc repoussé

Rpt100= Rref x ADC_Code /224

 

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

Code de la deuxième ligne : tmpPt100 = (RTD - 100) / 0,385 ;

Estimer la température à l'aide d'une formule d'approximation linéaire

A 0°C, Rpt100 = 100 Ω

Pour chaque augmentation de température de 1°C, la résistance augmente d'environ 0,385 Ω

Donc

 

T (R-100)/0.385

 

 

Ⅵ、 Guide de débogage des problèmes courants

AnomalCauses possiblesÉtapes de dépannage
La valeur originale de l'ADC (brute) est négative.AIN0 est l'opposé de la configuration AIN11. Vérifier que la configuration du logiciel est cohérente avec la connexion au matériel
R_PT100 > 1400Ω1. Mauvaise configuration du courant IDAC ; 2. Rref s'ouvre1. Vérifier la configuration IDAC de REG2 (s'assurer qu'elle est de 500μA) ; 2. Mesurer la valeur de la résistance R ref avec un multimètre pour confirmer que le circuit n'est pas ouvert.
La valeur de la température est de - 999°CPT100 dépasse la plage 18Ω~330Ω1. Vérifier si la PT100 est déconnectée (mesurer la résistance de la PT100) ; 2. vérifier la communication SPI (lire les valeurs de configuration du registre).
Fluctuations de température > 0,1°C1. Ondulation importante de l'alimentation électrique ; 2. Interférences électromagnétiques1. Mesurer l'ondulation du SSP1220 VDD (≤ 10mV requis) ; 2. Vérifier la mise à la terre du fil de blindage pour éviter les interférences.

Ⅶ、 Tableau de configuration des registres du noyau SSP1220

RegistreConfigurer les élémentsValeur (mesure de la température externe)Description de la fonction :
REG0Canaux différentielsAIN1-AIN0Faire correspondre le câblage de la PT100 afin d'éviter une crudité négative.
gainÉviter la saturation du signal et s'adapter à la mesure du rapport
PGA bypassdésactiverPréserver l'intégrité du trajet du signal
REG1Taux d'échantillonnage20SPSLa faible vitesse améliore la précision et s'adapte aux signaux de température lents
Mode de travailMode normalConversion continue et sortie en temps réel des données de température
Auto-étalonnagepermettreÉlimination des erreurs de décalage/gain et amélioration de la précision
TS internedésactiverLa mesure externe de la température ne nécessite pas de capteurs internes
 REG2Tension de référenceREF0 externeMesure basée sur un ratio pour contrer les fluctuations du courant IDAC
Courant IDAC500μAConsommation électrique et amplitude du signal équilibrés (50mV 100Ω)
REG3Itinéraires IDAC1AIN2L'entrée du courant d'excitation PT100
Itinéraires IDAC2AIN3Contrebalancer la résistance de plomb R7

Ⅷ、Callendar-Van Dusen équation coefficient tableau

CoefficientValeur numériqueUnitéChamp d'application
R0100.0Ω0°C résistance de référence
A3.9083×10-3-1-200℃~600℃
B-5.775×10-7-2-200℃~600℃
C-4.183×10-12-4-200℃~0℃

Le code complet peut être obtenu en contactant notre support technique. Contact : 18014203727